SQL学习之增删改查

news/2024/6/18 4:30:23 标签: sql, oracle, 数据库, 增删改查

文章目录

  • 数据库
  • 数据类型
  • 建表create table
  • 插入数据insert into
  • 查询数据select from
  • 修改数据update set
  • 删除数据delete from
  • 备份ctas
  • 结果插入iis
  • 截断表 truncate table
  • 修改表结构alter table
  • 添加注释

注:本文的SQL语法是基于Oracle数据库操作的,但是基本的SQL语法在数据库中应该都是通用的


数据库

什么是数据库?什么是表?
数据库可以理解为图书馆,图书馆里面的书就是数据库中的数据,数据库表就是书架,每个架子都有自己名字(编号),不同的架子放的是不同类型的书,数据库表也一样。

针对表的操作有很多,可以分为对表本身的操作,包括创建表、删除表、修改表,这类操作称为DDL;还有操作表中的数据,包括插入数据、修改数据、删除数据,这类操作称为DML;还有一类是对前面操作的授权,称为DCL;最重要的是查询表中数据的操作,称为DQL。

  • DDL(data definition language)操作包括:create table、alter table、drop table;
  • DML(data manipulation language)操作包括:insert into、update set、delete from、truncate table;
  • DCL(data control language)操作包括:grant、revoke;
  • TCL(transaction control language)操作包括:commit、rollback;
  • DQL(data query language)操作包括:select;

数据类型

Oracle数据库中常用的数据类型大致如下:

类 型描 述
char(n)保存固定长度的字符串,n在1-2000之间。
varchar2(n)保存数字、字母等变长字符串,n在1-4000之间。
number(m,n)保存数字,是整数或小数。n表示小数长度,整数长度是m-n。
date保存日期时间类型,不含毫秒。
timestamp保存日期时间类型,含毫秒。
clob存放海量文字。
blob存放海量二进制文件,如图片、电影、音乐等。

还有其他类型,如long、float、int、rowid(伪列)等。
注:

  1. oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。
  2. char是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar2是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。

在SQL中没有bool类型,在plsql中有bool类型。

建表create table

sql">create  table  表名  (列名1  类型, 列名2  类型....)

说明:

  1. “create table 表名(列名 类型)”是固定写法。表名是自己起的,英文开头,可以包含数字,可以包含下划线,表名中不能有空格,不要使用中文做表名。
  2. 表名后面必须跟小括号,里面是列的定义,列名后面是一个类型,中间用空格区分;多个列定义之间使用逗号分割。列名定义规则跟表名一样。
  3. 创建表时,只能执行一次,多次执行会报错“00955 名称已由现有对象使用”。

eg:创建学生表stu
在这里插入图片描述

sql">create table stu(sno number, sname varchar2(32), sage int, sdate date, sincome number(8,2));

插入数据insert into

语法如下:

sql">insert into 表名(1,列2......)values(1,值2......);

说明:

  1. “insert into (…) values (…)”是固定结构,小括号是必须有的。
  2. 第一个小括号中是需要插入的列名,第二个小括号中是需要插入的值。一定要注意的是列名跟值是一一对应的。不仅个数一致,位置也要一致。
  3. 插入的值,必须跟数据类型保持一致:number/int类型就是纯数字,varchar2类型是用单引号引起来;date类型是字符串前面加date;
  4. 被插入的表必须存在,如果不存在,需要create table创建。
  5. 同一条插入语句,重复执行,会插入多条相同的数据。

eg:向表中插入下述内容
在这里插入图片描述

sql">insert into stu(sno, sname, sage, sdate, sincome)values(1,'张三',23,date'1990-02-23', 3000.32);
insert into stu(sno, sname, sage, sdate, sincome)values(2,'李四',24,date'1989-10-12', 4300.46);
insert into stu(sno, sname, sage, sdate, sincome)values(3,'王五',25,date'1987-07-03', 4977.58);

查询数据select from

语法如下:

sql">select * from 表名;
select 列名1, 列名2... from 表名;

说明:

  1. “select … from …”是固定结构,先写select,再写from;
  2. select后面跟着是星号,表示显示所有列;
  3. select后面可以跟具体的列名,多个列名之间使用逗号分割;
  4. from后面跟的是表名;

修改数据update set

语法如下:

sql">update 表名 set 列名1=新值1,列名2=新值2  [where 列名=某值];

说明:

  1. “update … set …”是固定结构。
  2. set后面的等号表示把新值1赋给某一列,让该列的值变成新的值;有多个列的值要修改,就写多个等式,中间用逗号分割。
  3. where是可选的,如果没有where条件,意味着对所有行都修改;有where条件,只对满足条件的行做修改。

eg:按下面要求,修改stu中的数据
在这里插入图片描述

sql">update stu set sincome=4000;
update stu set sincome=4000 where sno=1;
update stu set sincome=4000 where sno<3;
update stu set sincome=sincome+1000;

删除数据delete from

语法如下:

sql">delete  from  表名  [where条件];

说明:

  1. 如果不带where条件,则删除表中所有记录;带where条件,则删除符合条件的行。

eg:按如下要求删除stu表中数据
在这里插入图片描述

sql">-- 删除张三
delete from stu where sno=1;
-- 删除所有
delete from stu;

备份ctas

如果对一个表进行备份,或者对表中一部分数据,一部分列备份,就可以使用ctas。
相当于“文件的另存为”功能。

语法如下:

sql">create table 新表名 as select语句

eg:
对stu表备份,新的表名是stu1

sql">create table stu1 as select * from stu;

把stu表的sno、sname、sage三列数据备份到新的表stu2中。

sql">create table stu2 as select sno, sname, sage from stu;

创建一个表stu3,结构跟stu表完全相同,但是没有数据。

sql">create table stu3 as select * from stu where 1=2;

结果插入iis

查询一个表的内容,把查询结果插入到另一个表中。
语法如下:

sql">insert into 表名 select语句;

例 :演示iis插入数据。

sql">insert into stu3 select * from stu;

截断表 truncate table

对于删除整个表的所有数据,delete并不会释放表所占用的空间。
如果用户确定是删除整表的所有数据,那么使用 truncate table 速度更快。

一个表可以看做是一张纸,上面有很多数据,使用delete删除相当于使用橡皮擦擦除数据,使用truncate删除相当于换了一张新的纸,非常干净,而且速度快。

使用delete删除,可以回滚数据;使用truncate删除,不能回滚数据。

例 :对stu1表进行截断操作。

sql">truncate table stu2;

修改表结构alter table

主要操作包括增加列、删除列、修改列名、修改列的数据类型。

  • 添加字段
    语法如下:
sql">alter table 表名 add(列名1 列类型, 列名2 列类型)

说明:

  1. 添加列,add后面有小括号,里面是列名和类型;添加多个列,使用逗号分隔;

例 :在stu表中增加一列sphone,类型是varchar2(11)。

sql">alter table stu add (sphone varchar2(11));
  • 删除字段
sql">alter table 表名 drop column 列名 

例 :删除stu表中刚刚添加的sphone列。

sql">alter table stu drop column sphone;
  • 修改字段
sql">-- 列的名字重新命名
alter table 表名 rename column 旧的列名 to 新的列名
-- 修改列的类型
alter table 表名 modify 列名 新的列类型

例 :把stu表中的列sincome改为salary。

sql">alter table stu rename column sincome to salary;

添加注释

sql">comment on table 表名 is '注释内容';
comment on column 表名.字段名 is '注释内容';

例 :给stu表添加表注释和字段注释,并在plsql developer中点击右键“描述”查看注释。

sql">comment on table stu is '学生表';
comment on column stu.sno is '学号';
comment on column stu.sname is '学生姓名';

http://www.niftyadmin.cn/n/5178497.html

相关文章

【C/PTA——8.数组2(课内实践)】

C/PTA——8.数组2&#xff08;课内实践&#xff09; 7-1 求矩阵的局部极大值7-2 求矩阵各行元素之和7-3 判断上三角矩阵7-4 点赞 7-1 求矩阵的局部极大值 #include<stdio.h> int main() {int m, n, i, j;int arr[100][100];scanf("%d %d", &m, &n);for…

Python机器学习算法入门教程(第五部分)

接着Python机器学习算法入门教程&#xff08;第四部分&#xff09;&#xff0c;继续展开描述。 二十五、Python Sklearn库SVM算法应用 SVM 是一种有监督学习分类算法&#xff0c;输入值为样本特征值向量和其对应的类别标签&#xff0c;输出具有预测分类功能的模型&#xff0c…

Maven 插件统一修改聚合工程项目版本号

目录 引言直接修改 pom.xml 的版本号的问题Maven 插件修改版本号开源项目微服务商城项目前后端分离项目 引言 在Maven项目中&#xff0c;我们通常有两种常见的方式来修改版本号&#xff1a;直接在pom.xml文件中手动编辑和利用Maven插件进行版本号调整。 本文将比较这两种修改…

SpringBoot 是否必传参数之集合校验(4)

文章目录 前言嵌套校验方式一方式二请求示例前言 本文基于SpringBoot 3.1.2,使用集合校验来优雅的处理参数是否必传校验。 嵌套校验 在某些场景下,我们需要使用集合接收前端传递的参数,并对集合中的每个对象都进行参数校验。但是这时我们的参数校验并不会生效!如下写法:…

springboot容器

1.主要指的是servlet容器 servlet组件由sevlet Filter Listener等 2.自动配置原理 通过ServletWebServerFactoryAutoConfiguration 配置这些内容 (自动配置类开始分析功能) conditionalOnclass开启条件 ServletRequest类 import导入嵌入式的tomcat Jetty等 这些是配置类&…

UWB应用于金属工具管理

超宽带&#xff08;Ultra-Wideband&#xff0c;UWB&#xff09;技术在金属工具管理方面有许多应用案例&#xff0c;它可以帮助提高工具管理的效率、安全性和精确度。以下是一些UWB在金属工具管理中的应用案例&#xff1a; 工具定位和跟踪&#xff1a;UWB技术可以用于实时定位和…

算法笔记-其他高效的技巧与算法(未处理完)

算法笔记-其他高效的技巧与算法 前缀和 前缀和 #include <cstdio> #include <vector> using namespace std; const int MAXN 10000; int n, a[MAXN]; int sum[MAXN] { 0 };int main() {scanf("%d", &n);for (int i 0; i < n; i) {scanf("…