- 最基本的SELECT语句:
SELECT 字段1,字段2,字段3,... FROM 表名
SELECT 1+1, 2*3;
SELECT 1+1, 2*3
FROM DULE; #DULE 伪表
*
代表表中的所有字段;
- 列的别名,可以省略
AS
,可以用一对 " " 引用。SELECT 字段1 别名1,字段2 AS 别名2,字段3 "别名 3" FROM 表名
- 去重,
SELECT DISTINKT 字段1 FROM 表名
; - 空值参与运算,其结果也一定是空值,
NULL
不等同于''或0,在语句中替换为IFNULL(字段名,默认值)
解决; - 着重号 `` ,当变量名为关键字时,用``以区分;
SELECT *
FROM `ORDER`;
- 查询常数,给每一行数据增加一个常数作为一列;
SELECT '中国人', id, name
FROM `staffs`;
- 查询表中所有关键字信息,使用
DESCRIBE | DESC 表名
查询; - 使用
WHERE
关键字进行条件判断,WHERE
需要跟在FROM
后面。语法:SELECT FROM 表名 WHERE 条件
。
SELECT *
FROM staffs
WHERE department = 'frontend';
- 运算符
运算符内容较多,跳转查看详情 - 排序
SELECT staff_id, salary * 12 annual_salary
FROM staffs
ORDER BY annual_salary DESC;
- 没有查询条件的情况下,默认按照添加数据的顺序排序;
- 使用
ORDER BY 字段名 排序方式
进行排序; - 排序方式有升序
ASC
、降序DESC
两种,默认为升序,可以省略,NULL
值作为最小的参与排序; - 排序依赖的字段可以是别名,但
WHERE
条件判断的字段不能用别名。因为语句执行的顺序是: 执行FROM table
找到表 => 执行WHERE
语句找到满足该条件的全部数据 => 执行SELECT
语句过滤出需要的字段 => 执行ORDER BY
语句进行排序。由此可见,条件判断时还未定义字段别名,而排序时别名已定义好。由此可见,ORDER BY
语句一定排在SELECT
语句后。 - 多列排序:需要有多个字段作为排序依据。
SELECT *
FROM staffs
ORDER BY department_id, salary DESC;
- 分页
# 从第40条开始,每页显示10条
SELECT *
FROM staffs
LIMIT 40,10
-
LIMIT offset位置偏移量,pageSize每页条数
,关系为:offset = pageSize * (当前第几页 - 1); - 当从0开始时,0可省略;
- 在MySQL8.0中,可以使用语法
LIMIT 每页条数OFFSET 位置偏移量
实现。 -
LIMIT
语句必须放在整个SELECT
语句的最后,因为这样可以减少输出,提升效率。
- 多表联查
- 等值连接 vs 非等值连接
- 自连接 vs 非自连接
- 内连接 vs 外连接