1.新增(create)
语法:
insert into 表名 values (值,值);
案例:
创建学生表进行插入:
create table student(id int ,name varchar(50)); insert into student values (1,'李四');
最下一行“1 row affected in 5 ms”表示有一行发生了改变。
指定列插入:
insert into student (name) values('张三');
多行插入:
insert into student values (3,'王五'),(4,'赵六');
一次插入N条记录要比一次插入一条分N次插入快很多。
插入时间
比如字段类型为时间类型,标准插入方式为:
‘YYYY-MM-DD HH:mm:ss’
‘2022-07-03 12:00:00’
比较时间,按照> = < 即可。
2.查询(retrieve)
查询语句是SQL语句中最核心也是最复杂的操作,下边我们先简单介绍初阶查询语句(查询select子句无论怎样进行,都不会对数据库原有的数据发生改动)。
案例:
-- 创建考试成绩表 drop table if exists exam_result; create table exam_result ( id int, name varchar(20), chinese decimal(3,1), math decimal(3,1), english decimal(3,1) ); -- 插入测试数据 insert into exam_result (id,name, chinese, math, english) values (1,'唐三藏', 67, 98, 56), (2,'孙悟空', 87.5, 78, 77), (3,'猪悟能', 88, 98.5, 90), (4,'曹孟德', 82, 84, 67), (5,'刘玄德', 55.5, 85, 45), (6,'孙权', 70, 73, 78.5), (7,'宋公明', 75, 65, 30);
2.1 全列查询
最基础的操作,但在实际开发中也很危险,如果数据量较大,进行全列查询将会大量消耗系统资源,有可能导致宕机。
select*from 表名;
2.2 指定列查询
这种相对于全列查询要高效很多,在查询时会显示告诉数据库要查询哪些列,数据库就会有针对性的返回数据了。
select 列名,列名...... from 表名;
2.3 查询字段为表达式
在查询的同时进行一些运算操作(列和列之间)
例如,期望查询结果中的语文成绩比真实成绩高十分:
查询每个同学的总分:
2.4 查询字段指定别名
通过指定别名的方式防止得到的临时表列名太乱。
2.5 针对查询结果去重
针对查询结果,把重复的记录抹去。
如果是针对多个列进行去重,只有这多个列的值都相同时才会被视为重复
2.6 针对查询结果排序
select 列名..... from 表明 order by 列名 asc/desc;
针对数学成绩进行升序排序 asc为升序(默认为升序可以不写),desc为降序
注意:
1.数据库记录中带NULL值的将被视为最小(在排序中会被视为最小值)
2.排序也可依据别名或表达式来进行排序。
3.指定多个列排序时,先根据第一个列进行排序,如果第一个列的值相同再按第二个列的结果排序,如下先按照数学排序,数学相同再按语文排序。
2.7 条件查询
在select子句后面加上where筛选条件,查询结果会把满足条件的保留,不满足的过滤掉。
select 列名 from 表名 where 条件;
比较运算符:
运算符 | 说明 |
>, >=, <, <= |
大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, …) | 如果是 option 中的任意一个,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 |
逻辑运算符:
运算符 | 说明 |
AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0) |
注:
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
案例:
- 基本查询:
- 1.查询英语不及格同学的英语成绩
- 2.查询语文成绩好于英语成绩的同学
- 3.查询总分在200分以下的同学
此处注意不能使用别名
- AND与OR:
- 1.查询语文成绩大于80分,且英语成绩大于80分的同学
- 2.查询语文成绩大于80分,或英语成绩大于80分的同学
- 3.观察AND 和 OR 的优先级
- and的优先级高于or,如果想打破优先级需要使用小括号()
- 范围查询
- 1.between …and…
- 在编程领域里,大部分区间都是左闭右开,注意在SQL中是左右都闭合的区间
- 查询语文成绩在 [80, 90] 分的同学及语文成绩
- 使用and也可以实现
- 2.in
- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
- 使用or也可以实现类似效果
- 模糊查询:LIKE
- % 匹配任意多个(包括 0 个)字符
- _ 匹配严格的一个任意字符
- NULL 的查询:IS [NOT] NULL
- 与null的相关操作结果还是努力了,所以要查找语文成绩为空的学生信息,按如下方式无法查询到结果
- 有<=>、is null这两种方式来判别是否为null
2.8 分页查询
如果查询到的结果数较多,我们就需要按照上图的方式来进行分页展示。
在sql中利用limit来进行分页查询,
语法:
-- 起始下标为 0 -- 从 0 开始,筛选 n 条结果 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n; -- 从 s 开始,筛选 n 条结果 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n; -- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用 SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
如下显示查询结果的前三条
从下标为3开始,往后查三条
‘
在之前我们提到select*from 是危险操作,所以我们可以通过加where条件或者limit来更稳妥的限制。
3.修改(update)
语法:
update 表名 set 列名=值(或表达式),列名=值(或表达式)..... where 条件;
此处的where限制符合条件的进行修改。
案例:将孙悟空同学的数学成绩变更为 80 分
update exam_result set math =80 where name='孙悟空';
4.删除(delete)
语法:
delete from 表名 where 条件 [ORDER BY ...] [LIMIT ...];
删除孙悟空同学的考试成绩
delete from exam_result where name='孙悟空';
注意,如果不加where条件,就会把整个表的数据给删除。
5.导图总结