DISTINCT 用于对查询的记录去重
分组函数:
COUNT(*) 用于获取查询的记录总数
COUNT(DISTINCT xxx) 用于获取查询的记录中不重复内容的总数
MAX(xxx) 用于获取查询记录中的最大值
MIN(xxx) 用于获取查询记录中的最小值
AVG(xxx) 用于获取查询记录中的平均值
SUM(xxx) 对于查询记录中的数据求和
GROUP BY xxx 把数据按照指定列进行分组
分组后只能:
1. 查询分组条件字段
2. 使用分组函数对每一组内的数据进行计算
对 GROUP BY 的结果进行过滤,使用 HAVING
ORDER BY xxx 把查询结果按照指定列进行排序
多个排序条件使用 , 分隔
ASC:默认,升序
DESC:降序
按照学号降序排列,学号相同按照成绩升序排列
SELECT * FROM score ORDER BY stu_id DESC, grade;
LIMIT x,y 获取查询结果中的一部分记录
从 x 开始取 y 条,如果不足 y 条,就取所有剩余记录
LIMIT 0, 4 从 0 开始取 4 条
LIMIT 4, 4 从 4 开始取 4 条
SELECT 字段列表
FROM 表名
WHERE 过滤条件
GROUP BY 分组条件
HAVING 过滤分组计算结果
ORDER BY 排序条件
LIMIT x,y 分页
前两个必须写,后五个可选,顺序不能错乱
对于数字类的查询结果,可以进行四则运算
但是一旦 NULL 参与了运算,得到的结果比为 NULL
IFNULL(subsidy, 0) 如果 subsidy 值为 NULL,使用 0 代替
WHERE subsidy IS NULL 为 NULL 的判断
WHERE subsidy IS NOT NULL 不为 NULL 的判断
SELECT MAX() MIN() … post FROM xxx GROUP BY post
SELECT MAX(salary) FROM xxx
id post salary
| 1003 | Coder | 6000 |
| 1005 | Coder | 7000 |
| 1000 | Coder | 12000 |
| 1001 | Coder | 3480 |
| 1004 | Programmer | 9400 |
| 1006 | DBA | 10030 |
| 1007 | DBA | 5000 |
**子查询:**使用另外一个 SQL 作为查询的 字段,表,条件等等
用于合并需要多步完成的查询操作
**连接:**用于从多张表中查询数据
表连接必须为表起一个别名,方便使用
两张表的笛卡儿积:(会导致拼接结果暴增,效率低,不常用)
SELECT a.name, b.name
FROM employee as a, dept as b
WHERE a.dept_id = b.id;
1000 1000
1001 1001
1000 1000
1000 1001
1001 1000
1001 1001
内连接(INNER JOIN):(只拼接关联的部分)
SELECT a., b.
FROM employee as a INNER JOIN dept as b
ON a.dept_id = b.id;
1000 1000
1001 1001
1002 1003
1000 1000
1001 1001
左外连接(LEFT JOIN):
SELECT a., b.
FROM employee as a LEFT JOIN dept as b
ON a.dept_id = b.id;
1000 1000
1001 1001
1002 1003
1000 1000
1001 1001
1002 NULL
右外连接(RIGHT JOIN):
SELECT a., b.
FROM employee as a RIGHT JOIN dept as b
ON a.dept_id = b.id;
1000 1000
1001 1001
1002 1003
1000 1000
1001 1001
NULL 1003
1000 1000
1001 1001 左
1002 NULL
1000 1000
1001 1001 1000 1000 内
1002 1003 1001 1001
1000 1000
1001 1001 右
NULL 1003