这是我参与「第五届青训营 」笔记创作活动的第7天
一、SELECT基础
-
去重:DISTINCT
SELECT DISTINCT id
FROM employee;
-
别名:AS
- 只能在ORDER BY中使用
SELECT id AS "编号" # AS可省略
FROM employee;
-
着重号:``
名与保留字重复时使用
-
查询常数
SELECT 123, id
FROM employee;
-
显示表结构
DESCRIBE employee;
DESC employee;;
-
过滤数据: WHERE
SELECT *
FROM employees
#过滤条件 声明在FROM结构的后面
where department=90
AND department=100;
二、运算符
只要有null参与结果均为null
-
算术运算符
-
加:+
无链接作用,仅表示加法运算。会将字符串转化为数值(隐式转换),不是数会看作0处理
SELECT 100 + '1' #101
FROM DUAL
SELECT 100 + 'a' #100
FROM DUAL
-
除:/ 或 DIV
分母如果为0,结果为null
-
比较运算符
-
安全等于:<=>
可以对NULL进行判断。两个操作数均为NULL时返回1;当一个操作数为NULL时返回0
-
非符号型运算符t
| IS NULL/IS NOT NULL | | ``` SELECT * FROM employees WHERE commission_pct IS NULL; #WHERE commission_pct IS NOT NULL;
| -------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| LEAST | | ```
SELECT LEASY('g', 'b', 't') FROM DUAL
``` |
| GREATEST | | ```
SELECT GREATEST('g', 'b', 't') FROM DUAL
``` |
| BETWEEN...AND.... | 包含边界 | ```
SELECT * FROM employees WHERE salary BETWEEN 6000 AND 8000;
``` |
| IN(set)/ NOT IN(set) | | ```
SELECT * FROM employees WHERE department_id IN (10, 20, 30);
``` |
| LIKE | 模糊查询%代表不确定个数字符(0,1或多个)_代表一个不确定的字符\:转义 | ```
SELECT * FROM employees WHERE last_name LIKE '%a%';
``` |
| REGEXP\RLIKE | 正则表达式 | |
3. ## 逻辑运算符:
and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true
XOR:异或,非同时成立结果为true
# 三、排序
1. ## **默认顺序:数据添加的顺序**
1. ## **排序:ORDER BY**
- 顺序
- 升序:ASC (ascend) 默认
- 降序:DESC (descend)
SELECT *
FROM employees
ORDER BY salary DESC;
- 可以使用列的别名进行排序
SELECT salary * 12 AS "annual_sal"
FROM employees
ORDER BY annual_sal DESC;
- 要放在WHERE后面
# 四、分页
1. ## **格式:LIMIT 位置偏移量, 条目数**
- 好处:减少数据表网络传输量,提升查询效率
- 每页显示pageSize条记录,此时显示第pageNo页
LIMIT (pageNo-1) * pageSize, pageSize;
LIMIT 0, 条目数 等价于 LIMIT 条目数
#每页显示20条记录,此时显示第1页
SELECT *
FROM employees
LIMIT 0,20;
#每页显示20条记录,此时显示第2页
SELECT *
FROM employees
LIMIT 20,20;
2. ## **WHERE...ORDER BY...LIMIT声明顺序**
#每页显示20条记录,此时显示第1页
SELECT *
FROM employees
WHERE department=90
ORDER BY salary DESC
LIMIT 0,20;
3. ## **Mysql 8.0新特性LIMIT...OFFSET...**
LIMIT pageSize OFFSET 位置偏移量