SQL基础
1.数据的筛选
(1)数据筛选的比较
数据筛选的比较符号 |
---|
> |
< |
>= |
<= |
= |
<>(!=) |
(2)条件的组合
关键字 | 描述 |
---|---|
AND | m AND n 同时满足m和n |
OR | m OR n 满足m或n其一 |
AND的组合优先级要高于OR
-- 查询在10号部门工作或20号部门工作且薪水高于10000的员工
SELECT * FROM emp
WHERE (deptno = 10 OR deptno = 20) AND sal > 10000;
(3)特殊的筛选关键字
关键字 | 描述 |
---|---|
BETWEEN | a AND b 在[a,b]之间 时间,数值 |
IN(a1,a2…an) | 在{a1,a2…an}之中 相当于a1 or =a2 or … =an |
LIKE | 模糊匹配 |
下面是一些例子啦
BETWEEN
-- 查询薪水在10000-20000之间的员工数据
SELECT *
FROM emp
WHERE sal BETWEEN 10000 AND 20000;
IN
-- 查询在20或30号部门工作的员工数据
SELECT *
FROM emp
WHERE deptno IN(20, 30);
LIKE
-- 查询名字中包含字母d的员工数据
SELECT *
FROM emp
WHERE BINARY ename LIKE '%d%';
接下来就是一些通配符了
通配符 | 描述 |
---|---|
% | 此处有任意数量的字符 |
_ | 此处有一个字符 |
IS NULL | 对于Null数据的筛选,任意两个null值不相等 |
NOT | 取反,通常与这些特殊的关键字组合 NOT BETWEEN a AND b 不在[a,b]之间的数据 NOT IN(a1,a2…an) 不在{a1,a2…an}之中 NOT LIKE ‘文本’ 不像…一样 IS NOT NULL 不是null的数据 |
当然,例子同样是少不的😊
% 处表示有任意数量 [ 0 , + ∞ ] [0,+\infty] [0,+∞]的字符
-- 查询名字中包含字母d的员工数据
SELECT *
FROM emp
WHERE BINARY ename LIKE '%d%';
_ 处有 [ 1 , 1 ] [1,1] [1,1]个字符
-- 查询名字倒数第二个字符是t的员工
SELECT *
FROM emp
WHERE BINARY ename LIKE '%t_';
IS NULL
判断该字段是否为Null,任意两个null值不相等
-- 查询没有设置部门的员工
SELECT *
FROM emp
WHERE deptno IS NULL
2.查询结果的排序
直达MySQL文档👉ORDER BY
而ORDER BY又有2个关键字来控制升降序,分别为ASC和DESC关键字
关键字 | 描述 |
---|---|
ASC | 升序 |
DESC | 降序 |
-- 查询30号部门全体员工的数据,按照薪水由高到低显示
-- ORDER BY 列 | 算式 | 别名 | 结果列序号 ASC | DESC
-- 默认 ASC 升序 DESC 降序
SELECT * FROM emp WHERE deptno = 30 ORDER BY sal DESC;
3.分组查询
(1) 分组函数/组函数/聚合函数
函数 | 描述 |
---|---|
AVG() | 平均 |
MAX() | 求和 |
MIN() | 最小 |
COUNT() | 计数 |
SUM() | 求和 |
(2) 分组句式
直达MySQL文档👉GROUP BY Optimization
-- 查询各个部门员工的平均薪水
-- GROUP BY 列L
-- 以”列L“的数据进行分组,再进行统计
-- GROUP BY deptno
SELECT deptno,AVG(sal) -- 只有分组列才可以进行查询
FROM emp WHERE deptno IS NOT NULL
GROUP BY deptno; -- 对deptno列的数据进行分组
(3) 分组函数的筛选
HAVING用于对分组函数结果进行筛选
在下面这个例子中因为需要筛选出平均薪水==>15000==的部门,而平均薪水需要调用AVG()函数,根据运行顺序是没有办法直接在WHERE中使用AVG(sal) > 15000
的,所以使用HAVING。
-- 对分组函数查询结果的筛选
-- 查询平均薪水高于15000的部门ID和平均薪水
SELECT deptno, AVG(sal) FROM emp
WHERE deptno IS NOT NULL
GROUP BY deptno
HAVING AVG(sal) > 15000;
4.查询语句的执行顺序
执行的优先级逐行递减
关键字 | 描述 |
---|---|
FROM | |
JOIN | |
ON | |
WHERE | |
GROUP BY | 开始使用select中的别名,后面的语句中都可以使用 |
AVG() SUM() MAX() MIN() COUNT() | 组函数 用于数据统计:平均,求和,最大,最小, 计数 |
HAVING | |
SELECT | |
DISTINCT | |
ORDER BY | |
LIMIT |