Skip to content

Query

sql
SELECT 字段
FROM 表名
WHERE 条件
GROUP BY 分组字段
HAVING 分组条件
ORDER BY 排序字段
LIMIT 分页;

基本查询

查询所有

sql
SELECT * FROM user;

查询指定字段

sql
SELECT id, name, age FROM user;

字段别名

sql
SELECT name AS username, age AS user_age
FROM user;

计算字段

sql
SELECT name, salary * 12 AS year_salary
FROM employee;

条件查询

sql
SELECT * FROM user WHERE age = 18;
SELECT * FROM user WHERE age > 18;
SELECT * FROM user WHERE age != 18;

AND / OR连接多个条件

sql
SELECT * FROM user
WHERE age > 18
AND status = 1;

IN

sql
SELECT * FROM user
WHERE id IN (1,2,3);

聚合函数

对一组数据进行“汇总计算”,返回一个结果值。

函数作用
COUNT()数量
SUM()求和
AVG()平均
MAX()最大
MIN()最小
sql
SELECT 
COUNT(*) AS total,
SUM(money) AS total_money,
AVG(money) AS avg_money
FROM orders;

COUNT(*)统计查询结果的行数(记录条数)

分页LIMIT

sql
SELECT * FROM user
LIMIT 0, 10;   -- 第1页

公式:

sql
LIMIT (page - 1) * size, size

排序

sql
SELECT * FROM user
ORDER BY create_time DESC;

多个字段排序:

sql
ORDER BY status ASC, create_time DESC;

分组

把某个字段值相同的数据放到一组,然后对每组做统计计算。

sql
SELECT 分组字段, 聚合函数
FROM 表名
GROUP BY 分组字段;
idnamestatus
1张三1
2李四1
3王五0
4赵六0
5小明1
sql
SELECT status, COUNT(*) AS total
FROM user
GROUP BY status;
statustotal
02
13

多表查询

连接类型包含的内容结果说明
INNER JOIN仅交集必须两边都有才显示
LEFT JOIN左全集 + 交集左边一定有,右边没匹配则补 NULL
RIGHT JOIN右全集 + 交集右边一定有,左边没匹配则补 NULL
  • user表
idname
1张三
2李四
3王五
4赵六
  • orders 表
iduser_idamount
11100
21200
32300
45400

INNER JOIN

它只返回两个表中完全匹配的行。

sql
SELECT u.name, o.amount
FROM user u
INNER JOIN orders o
ON u.id = o.user_id;
nameamount
张三100
张三200
李四300

LEFT JOIN

返回左表全部,匹配不到则为NULL

sql
SELECT u.name, o.amount
FROM user u
LEFT JOIN orders o
ON u.id = o.user_id;
idnameamount
1张三100
1张三200
2李四300
3王五NULL
4赵六NULL

RIGHT JOIN

返回右表全部,匹配不到则为NULL

SQL
SELECT u.id, u.name, o.amount
FROM user u
RIGHT JOIN orders o
ON u.id = o.user_id;
idnameamount
1张三100
1张三200
2李四300
NULLNULL400