目录
一、查询(Retrieve)
1.1条件查询:where
1.1.1基本查询
1.1.2and与or
1.1.3范围查询
1.1.4模糊查询
1.1.5null的查询
1.2分页查询 limit
二、修改(Update)
三、删除(Delete)
四、重点内容总结
比较运算符:
运算符 | 说明 |
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,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) |
-- 查询英语不及格的同学及英语成绩 ( < 60 )
select name, english from exam_result where english < 60;
-- 查询语文成绩好于英语成绩的同学
select name, chinese, english from exam_result
where chinese > english;
-- 查询总分在 200 分以下的同学
select name, chinese + math + chinese as total from exam_result
where chinese + math + chinese < 200;
注:where条件可以使用表达式,但不能使用别名。
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
select name, chinese, english from exam_result
where chinese > 80 and english > 80;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
select name, chinese, english from exam_result
where chinese > 80 or english > 80;
1. between ... and
--查询语文成绩在 [80, 90] 分的同学及语文成绩
select name, chinese from exam_result
where chinese between 80 and 90;
-- 使用 and 也可以实现
select name, chinese from exam_result
where chinese > 80 and chinese < 90;
2.in
-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
select name, math from exam_result
where math in (58,59,98,99);
-- 使用 or 也可以实现
select name, math from exam_result
where math = 58 or math = 59 or math = 98 or math = 99;
-- % 匹配任意多个(包括 0 个)字符
select name from exam_result where name like '孙%'; --表示的查询否有孙某某
select name from exam_result where name like '%孙';--查询的是某某孙,可看到我的表中并没有数据,为了验证时候合理,添加一条数据
再次进行查询可以发现某某孙已经被查询出来了
select name from exam_result where name like '%孙%';--查询的是带有孙字的
-- _ 匹配严格的一个任意字符
select name from exam_result where name like '孙_'; --_一个下划线就只能匹配一个字符--__两个下划线表示两个字符
-- 查询语文成绩已知的同学姓名
select name, chinese from exam_result where chinese is not null;
-- 查询语文成绩未知的同学姓名
select name, chinese from exam_result where chinese is null;
语法:
-- 起始下标为 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;
案例:按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页
--第 1 页
select * from exam_result order by id limit 3 offset 0;
-- 第 2 页
select * from exam_result order by id limit 3 offset 3;
-- 第 3 页,如果结果不足 3 个,不会有影响
select * from exam_result order by id limit 3 offset 6;
语法:
update table_name set column = expr [, column = expr ...]
[where ...] [order by ...] [limit...]
案例:
为了观察表中数据是否有变化先记录一下当前表中数据
-- 将孙悟空同学的数学成绩变更为 80 分
update exam_result set math = 80 where name = '孙悟空';
-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
update exam_result set math = 60 ,chinese = 70 where name = '曹孟德';
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 10 分
update exam_result set math = math + 10
order by chinese + math + english
limit 3;
为了观察数据是否有变化先将总成绩倒数前三的数据查询出来
修改操作完毕,因为修改了分数就不能确保排名了,所以查询需要全列查询
-- 将所有同学的语文成绩更新为原来的一半
update exam_result set chinese = 0.5*chinese;
通过上述操作我们知道了修改操作其实是很危险的,在日后的工作中一定要谨慎使用!!!
语法:
delete from table_name [where...] [order by ...] [limit...]
案例:
-- 删除孙悟空同学的考试成绩
同时这里也发现删除操作也是相当危险的操作,一定要谨慎使用!!!
--单行插入
insert into 表(字段1, ..., 字段N) values (value1, ..., value N);
-- 多行插入
insert into 表(字段1, ..., 字段N) values
(value1, ...),
(value2, ...),
(value3, ...);
-- 全列查询
select * from 表
-- 指定列查询
select 字段1,字段2... from 表
-- 查询表达式字段
select 字段1+100,字段2+字段3 from 表
-- 别名
select 字段1 as 别名1, 字段2 as 别名2 from 表
-- 去重DISTINCT
select distinct 字段 from 表
-- 排序ORDER BY
select * from 表 order by 排序字段
-- 条件查询WHERE:
-- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR
(8)NOT
select * from 表 where 条件
update 表 set 字段1=value1, 字段2=value2... where 条件
delete from 表 where 条件