SQL
这是一篇复习和总结篇
DQL-基础语法
语法的编写顺序
以下是语法编写顺序 | 解析 |
---|---|
SELECT | 字段列表 |
FROM | 表名列表 |
WHERE | 条件列表 |
GROUP BY | 分组字段列表 |
HAVING | 分组后条件列表 |
ORDER BY | 排序字段列表 |
LIMIT | 分页参数 |
语法的执行顺序
以下是语法执行时的顺序 | 解析 |
---|---|
FROM | 表名列表 |
WHERE | 条件列表 |
GROUP BY | 分组字段列表 |
HAVING | 分组后条件列表 |
SELECT | 字段列表 |
ORDER BY | 排序字段列表 |
LIMIT | 分页参数 |
验证执行顺序: 可以用到别名
– 查询年龄大于15的员工的姓名、年龄,并根据年龄进行升序排序
1 | select e.name ename, e.age eage from emp e where e.age > 15 order by eage asc |
理解 order by
后面 可以用别名 eage
,但是 where
后面 却不能用 eage
就能明白。
原因:语句执行时,select
语句在更改age
的别名为eage
时,where
早就在select
语句前执行完了,如果在where
中就使用eage
对于 where
来说 eage
是未知的 无法解析;同理 select
在 order by
之前执行完,所以 order by
可以使用 age
的别名 eage
。
去除重复记录
DISTINCT 语法
1 | SELECT DISTINCT 字段列表 FROM 表名; |
DQL-条件查询
WHERE语法:
1 | SELECT 字段列表 FROM 表名 WHERE 条件列表; |
DQL-聚合函数
介绍
将一列数据作为一个整体,进行纵向计算
常见的聚合函数
函数 | 功能描述 |
---|---|
COUNT() |
统计符合条件的记录数 |
SUM() |
计算某一列的总和(适用于数值类型字段) |
AVG() |
计算某一列的平均值(适用于数值类型字段) |
MAX() |
返回某一列中的最大值(适用于数值、日期、字符等) |
MIN() |
返回某一列中的最小值(适用于数值、日期、字符等) |
语法
1
SELECT 聚合函数(字段列表) FROM 表名;
注意:null不参与所有 聚合函数 运算
DQL-排序查询
- ORDER BY 语法
1 | SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 ,字段2 排序方式2; |
排序方式
- ASC:升序(默认值)
- DESC:降序
例题:根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
答:
1 | select * from emp order by age asc,entrydate DESC; |
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
DQL-分页查询
语法
1
SELECT 字段列表 FROM 表名 LIMT 起始索引,查询记录数;
总结试炼:
– 查询年龄为26,27,35 岁的女性员工信息
1 | select * from emp where gender = '女' and age in(26,27,35); |
– 查询 性别为 男 , 年龄在 20-27岁 以内 的姓名为三个字的员工
1 | select * from emp where gender ='男' and age between 20 and 40 and name like '__'; |
– 统计员工表,年龄小于27岁的,男和女的人数
1 | select gender, count(*) from emp where age < 27 GROUP BY gender; |
– 查询所有年龄小于30的员工姓名和年龄,年龄升序,相同则按日期降序。
1 | select name,age,entrydate from emp where age < 30 order by age asc ,entrydate desc; |
– 查询性别为男,年龄在20-30岁以内的前5个员工信息,年龄升序,相同则按日期升序。
1 | select * from emp where gender = '男' and age between 20 and 40 order by age asc , entrydate desc limit 5; |