mysql学习 | 青训营笔记

82 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第7天

一、SELECT基础

  1. 去重:DISTINCT

SELECT DISTINCT id

FROM employee;
  1. 别名:AS

  • 只能在ORDER BY中使用
SELECT id AS "编号" # AS可省略

FROM employee;
  1. 着重号:``

名与保留字重复时使用

  1. 查询常数

SELECT 123, id

FROM employee;
  1. 显示表结构

DESCRIBE employee;

DESC employee;;
  1. 过滤数据: WHERE

SELECT * 

FROM employees

#过滤条件 声明在FROM结构的后面

where department=90

AND department=100;

二、运算符

只要有null参与结果均为null

  1. 算术运算符

  1. 加:+

无链接作用,仅表示加法运算。会将字符串转化为数值(隐式转换),不是数会看作0处理

SELECT 100 + '1' #101

FROM DUAL



SELECT 100 + 'a' #100

FROM DUAL
  1. 除:/ 或 DIV

分母如果为0,结果为null

  1. 比较运算符

  1. 安全等于:<=>

可以对NULL进行判断。两个操作数均为NULL时返回1;当一个操作数为NULL时返回0

  1. 非符号型运算符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 位置偏移量