目录
一、CURD简介
二、新增(create)
1.语法
2.示例
(1)单行数据全列插入
(2)单行数据指定列插入
(3)多行数据指定列插入
三、检索(Retrieve)
1.语法
2.示例
(1)全列查询
(2)指定列查询
(3)查询字段为表达式
3.1、常量
3.2、在math的基础上减10分
3.3、计算所有成绩的总分
(4)为查询结果指定别名
4.1、语法
4.2、示例
(5)结果去重查询
3.WHERE条件查询
3.1、语法
3.2、比较运算符
3.3、逻辑运算符
3.4、示例
(1)基本查询
(2)AND和OR
(3)范围查询
(4)模糊查询
(5)NULL的查询
4.ORDER BY排序
4.1、语法
4.2、示例
5.分页查询
5.1、语法
5.2、示例
一、CURD简介
增删改查操作,又称为CURD,是对数据库中的记录进行基本的增删改查操作。
• Create(创建)
• Retrieve(读取)
• Update(更新)
• Delete(删除)
二、新增(create)
1.语法
INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...;
其中各个单词意义如下图所示:
2.示例
首先创建一个表:
create table students(id varchar(20) comment '学号',name varchar(20) comment '姓名',age int comment '年龄'
);
(1)单行数据全列插入
插入第一条数据:
insert into students values ('1001','李星云',20);
插入第二条数据:
insert into students values ('1002','姬如雪',19);
对其进行查询:
select * from students;
运行结果如下:
(2)单行数据指定列插入
insert into students (id,name,age) values ('1003','张子凡',20);
其查询运行结果如下:
注意: value_list中值的数量必须和指定列数量及顺序⼀致
(3)多行数据指定列插入
insert into students values
('1004','陆林轩',18),
('1005','蚩梦',18);
其查询运行结果如下:
注意:在⼀条INSERT语句中也可以指定多个value_list,实现⼀次插入多行数据
三、检索(Retrieve)
1.语法
SELECT[DISTINCT]select_expr [, select_expr] ...[FROM table_references][WHERE where_condition][GROUP BY {col_name | expr}, ...][HAVING where_condition][ORDER BY {col_name | expr } [ASC | DESC], ... ][LIMIT {[offset,] row_count | row_count OFFSET offset}];
2.示例
create table exam(id bigint comment '学号',name varchar(30) comment '学生姓名',chinese float comment '语文成绩',math float comment '数学成绩',english float comment '英语成绩'
);insert into exam (id,name,chinese,math,english) values
(1,'侯卿',90,85,79),
(2,'莹勾',88,70,66),
(3,'降臣',93,86,73),
(4,'旱魃',81,90,77);
(1)全列查询
select * from exam;
其运行结果如下:
(2)指定列查询
select id,name,math from exam;
其运行结果如下:
(3)查询字段为表达式
3.1、常量
select id,name,10 from exam;
其运行结果如下:
3.2、在math的基础上减10分
select id,name,math-10 from exam;
其运行结果如下:
3.3、计算所有成绩的总分
select id,name,math+chinese+english from exam;
其运行结果如下:
(4)为查询结果指定别名
4.1、语法
SELECT column [AS] alias_name [, ...] FROM table_name;
4.2、示例
将总成绩指定为total:
select id,name,math+chinese+english as total from exam;
其运行结果如下:
(5)结果去重查询
由于现在所有的数学成绩并没有重复,所以我们再新增一列:
insert into exam (id,name,chinese,math,english) values (5,'上官云阙',70,86,90);
然后我们可以用DISTINCT进行去重操作:
select distinct math from exam;
其运行结果如下:
根据我们之前的新增操作,可知数学成绩为86的有两位同学,但是我们使用distinct后只查一个86,说明我们去重成功
注意:使⽤DISTINCT去重时,只有查询列表中所有列的值都相同才会判定为重复
3.WHERE条件查询
3.1、语法
SELECT select_expr [, select_expr] ... [FROM table_references] WHERE where_condition
where_condition: 查询时所限制的条件
3.2、比较运算符
3.3、逻辑运算符
3.4、示例
(1)基本查询
查询英语成绩小于75的同学的姓名和英语成绩:
select name,english from exam where english<75;
其运行结果如下:
(2)AND和OR
查询语文成绩大于85且数学成绩大于80的学生的姓名、语文和数学成绩:
select name,chinese,math from exam where chinese>85 and math>80;
其运行结果如下:
查询语文成绩大于90或英语成绩小于70的学生的姓名、语文成绩和英语成绩:
select name,chinese,english from exam where chinese>90 or english<70;
其运行结果如下:
(3)范围查询
语文成绩在[80,90]分的同学及语文成绩 :
方法一:使用BETWEEN AND
select name,chinese from exam where chinese between 80 and 90;
注意:between and 不是左开右闭,它的左右都是封闭的
方法二:使用AND
select name, chinese from exam where chinese >= 80 and chinese <= 90;
运行结果如下:
数学成绩是70或者85或者90分的同学及数学成绩 :
方法一:使用IN
select name,math from exam where math in (70,85,90);
方法二:使用OR
select name,math from exam where math = 70 or math = 85 or math = 90;
运行结果如下:
(4)模糊查询
由于数据量不够,所以我们再增加三行数据:
insert into exam (id,name,chinese,math,english) values (6,'李旱魃',69,89,96);
insert into exam (id,name,chinese,math,english) values (7,'李星云',69,89,96);
insert into exam (id,name,chinese,math,english) values (8,'李治',95,78,84);
查询所有姓李的同学:
select * from exam where name like '李%';
其运行结果如下:
查询所有姓李的两个字的同学:
select * from exam where name like '李_';
其运行结果如下:
(5)NULL的查询
写入一条数据,数学成绩为NULL:
insert into exam (id,name,chinese,math,english) values (9,'李茂贞',90,NULL,77);
查询数学成绩为NULL的结果:
select * from exam where math is NULL;
结果如下:
NULL 与其它值进行运算结果为NULL:
select name,chinese+math+english as 总分 from exam;
结果如下:
注意
• WHERE条件中可以使⽤表达式,但不能使⽤别名
• AND的优先级高于OR,在同时使⽤时,建议使⽤小括号()包裹优先执行的部分
• 过滤NULL时不要使⽤等于号(=)与不等于号(!=,<>)
• NULL与任何值运算结果都为NULL
4.ORDER BY排序
4.1、语法
SELECT ... FROM table_name [WHERE ...] ORDER BY {col_name | expr } [ASC |
DESC], ... ;
注意:ASC为升序,DESC为降序
4.2、示例
按数学成绩从高到低排序(降序):
select name,math from exam order by math desc;
其运行结果如图:
按语文成绩从低到高排序(升序):
select name,chinese from exam order by chinese asc;
其运行结果如图:
查询同学各门成绩,依次按语文升序,数学降序,英语升序的方式显示:
select name,chinese,math,english from exam order by chinese asc,math desc,english asc;
其运行结果如图:
注意:
NULL进行排序时,视为比任何值都小,升序出现在最上面,降序出现在最下面
可以使用列的别名进行排序
5.分页查询
5.1、语法
-- 起始下标为 0
-- 从 0 开始,筛选 num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num;
-- 从 start 开始,筛选 num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT start, num;
-- 从 start 开始,筛选 num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num OFFSET start;
5.2、示例
从第3条数据开始,显示6条数据(0为起始数据):
select * from exam order by id asc limit 3,6;
其运行结果如下:
以上便是本篇文章的全部内容,因为增删查改的内容过多,所以我将它分为上下两篇,觉得本篇内容有用的佬们可以一键三连支持一波,感谢各位佬的支持,下篇将在不久后更新哦