|
|
@ -512,6 +512,266 @@ SELECT * FROM student_score WHERE score NOT BETWEEN 60 AND 80; |
|
|
|
|
|
|
|
|
|
|
|
## 8.2 匹配列表中的元素 IN |
|
|
|
## 8.2 匹配列表中的元素 IN |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 运算符 | 示例 | 描述 | |
|
|
|
|
|
|
|
|--------|-------------------|----------------| |
|
|
|
|
|
|
|
| IN | a IN (b1, b2) | a是b1和b2中的某一个 | |
|
|
|
|
|
|
|
| NOT IN | a NOT IN (a1, a2) | a不是a1和a2中的任何一个 | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- 匹配查询 |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE major IN ('软件工程', '飞行器设计'); |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE major NOT IN ('软件工程', '飞行器设计'); |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
## 8.3 匹配NULL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- NULL代表未确认,查找NULL不能简单用= NULL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 运算符 | 示例 | 描述 | |
|
|
|
|
|
|
|
|-------------|---------------|-----------| |
|
|
|
|
|
|
|
| IS NULL | a IS NULL | a的值是NULL | |
|
|
|
|
|
|
|
| IS NOT NULL | a IS NOT NULL | a的值不为NULL | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- NULL |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE name IS NULL; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE name IS NOT NULL; |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 8.4 多个搜索条件 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 8.4.1 AND运算符 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- AND |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE sex = '男' AND department = '计算机学院'; |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 8.4.2 OR运算符 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- OR |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE sex = '男' OR department = '计算机学院'; |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 8.4.3 更复杂的搜索条件组合 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- AND优先级高于OR |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- 复杂条件搜索 |
|
|
|
|
|
|
|
-- sorce < 60 + subject = 'MySQL是怎样运行的' |
|
|
|
|
|
|
|
-- source > 90 |
|
|
|
|
|
|
|
SELECT * FROM student_score WHERE score > 90 OR score < 60 AND student_score.subject = 'MySQL是怎样运行的'; |
|
|
|
|
|
|
|
-- source > 90 + sorce < 60 |
|
|
|
|
|
|
|
-- subject = 'MySQL是怎样运行的' |
|
|
|
|
|
|
|
SELECT * FROM student_score WHERE (score > 90 OR score < 60) AND student_score.subject = 'MySQL是怎样运行的'; |
|
|
|
|
|
|
|
SELECT * FROM student_score WHERE (score > 90 || score < 60) && student_score.subject = 'MySQL是怎样运行的'; |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 8.5 通配符 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 支持模糊查询的两个运算符 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 运算符 | 示例 | 描述 | |
|
|
|
|
|
|
|
|----------|--------------|-------| |
|
|
|
|
|
|
|
| LIKE | a LIKE b | a匹配b | |
|
|
|
|
|
|
|
| NOT LIKE | a NOT LIKE b | a不匹配b | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- `%`代表任意个字符 |
|
|
|
|
|
|
|
- `_`代表一个字符 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- 通配符 |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE name LIKE '狗%'; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE name LIKE '%甘%'; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE name LIKE '狗__'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 8.5.1 转义通配符 \反斜杠 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 内容中包含`%`和`_`用`\%`和`\_`代替 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- 转义通配符 |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE name LIKE '狗\__'; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE name LIKE '狗\%_'; |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 第九章 表达式和函数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 9.1 表达式 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 9.1.1 操作数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 9.1.2 运算符 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- `/` 是除法 |
|
|
|
|
|
|
|
- `DIV` 是除法取整 |
|
|
|
|
|
|
|
- `%` 是除法取余 |
|
|
|
|
|
|
|
- `AND` 同 `&&` |
|
|
|
|
|
|
|
- `OR` 同 `||` |
|
|
|
|
|
|
|
- **`XOR`异或**,有且只有一个为真 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 9.1.3 表达式的使用 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. 作为计算字段放在SELECT语句中 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 查成绩并且在原有基础上+100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- 放在SELECT中 |
|
|
|
|
|
|
|
SELECT number, subject, score + 100 FROM student_score; |
|
|
|
|
|
|
|
SELECT number, subject, score + 100 AS `score` FROM student_score; |
|
|
|
|
|
|
|
-- ``用来装列名,''用来装普通字符串 |
|
|
|
|
|
|
|
SELECT name, '我是一个装饰', `sex`, 'sex' FROM student_info; |
|
|
|
|
|
|
|
-- 不能用``将不是列明的内容装起来 |
|
|
|
|
|
|
|
SELECT name, `我是一个装饰` FROM student_info; |
|
|
|
|
|
|
|
-- 计算器 |
|
|
|
|
|
|
|
SELECT 5 * 6 +128 -32; |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. 作为搜索条件放在WHERE子句中 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WHERE子句可以不包含列,只要结果为真就可以查出所有数据,不能为NULL和0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- 放在WHERE中 |
|
|
|
|
|
|
|
-- 假 查不出来数据 |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE 0; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE NULL; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE 2 - 2; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE 2 < 1; |
|
|
|
|
|
|
|
-- 真 查出所有数据 |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE 2 > 1; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE 2 + 2; |
|
|
|
|
|
|
|
SELECT * FROM student_info WHERE 2; |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 9.1.4 表达式中的NULL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 操作`NULL`时,所有结果都为`NULL` |
|
|
|
|
|
|
|
- 除了 `<=>`, `IS NULL`, `IS NOT NULL`外的比较结果都为 `NULL` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- 查出一行数据 结果全是NULL |
|
|
|
|
|
|
|
SELECT 1>NULL, 2-NULL, NULL IS NULL; |
|
|
|
|
|
|
|
-- 查处结果是一行1 |
|
|
|
|
|
|
|
SELECT NULL IS NULL; |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 9.2 函数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 9.2.1 文本处理函数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 名称 | 调用示例 | 示例结果 | 描述 | |
|
|
|
|
|
|
|
|-----------|-----------------------------|-------------|----------------------| |
|
|
|
|
|
|
|
| LEFT | LEFT('abc123', 3) | abc | 给定字符串从左边取指定长度的子串 | |
|
|
|
|
|
|
|
| RIGHT | RIGHT('abc123', 3) | 123 | 给定字符串从右边取指定长度的子串 | |
|
|
|
|
|
|
|
| LENGTH | LENGTH('abc') | 3 | 给定字符串的长度 | |
|
|
|
|
|
|
|
| LOWER | LOWER('ABC') | abc | 给定字符串的小写格式 | |
|
|
|
|
|
|
|
| UPPER | UPPER('abc') | ABC | 给定字符串的大写格式 | |
|
|
|
|
|
|
|
| LTRIM | LTRIM(' abc') | abc | 给定字符串左边空格去除后的格式 | |
|
|
|
|
|
|
|
| RTRIM | RTRIM('abc ') | abc | 给定字符串右边空格去除后的格式 | |
|
|
|
|
|
|
|
| SUBSTRING | SUBSTRING('abc123', 2, 3) | bc1 | 给定字符串从指定位置截取指定长度的子串 | |
|
|
|
|
|
|
|
| CONCAT | CONCAT('abc', '123', 'xyz') | abc123xyz | 将给定的各个字符串拼接成一个新字符串 | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql |
|
|
|
|
|
|
|
-- 字符处理函数 |
|
|
|
|
|
|
|
-- LEFT |
|
|
|
|
|
|
|
SELECT LEFT('abc123', 4); -- abc1 |
|
|
|
|
|
|
|
-- RIGHT |
|
|
|
|
|
|
|
SELECT RIGHT('abc123',2); -- 23 |
|
|
|
|
|
|
|
-- LENGTH |
|
|
|
|
|
|
|
SELECT LENGTH('何先生'); -- 9 |
|
|
|
|
|
|
|
-- LOWER |
|
|
|
|
|
|
|
SELECT LOWER('ABCDEF'); -- abcdef |
|
|
|
|
|
|
|
-- UPPER |
|
|
|
|
|
|
|
SELECT UPPER('abcdef'); -- ABCDEF |
|
|
|
|
|
|
|
-- LTRIM |
|
|
|
|
|
|
|
SELECT LTRIM(' ABC'); -- 'ABC' |
|
|
|
|
|
|
|
SELECT ' ABC'; -- ' ABC' |
|
|
|
|
|
|
|
-- RTRIM |
|
|
|
|
|
|
|
SELECT RTRIM(' ABC '); -- ' ABC' |
|
|
|
|
|
|
|
-- TRIM |
|
|
|
|
|
|
|
SELECT TRIM(' A B C '); -- 'A B C' |
|
|
|
|
|
|
|
-- SUBSTRING |
|
|
|
|
|
|
|
SELECT SUBSTRING('何先生abcdefg何先生', 2, 5); -- '先生abc' |
|
|
|
|
|
|
|
-- CONCAT |
|
|
|
|
|
|
|
SELECT CONCAT('a_', 'b', 'CD21', 'AA'); -- 'a_bCD21AA' |
|
|
|
|
|
|
|
-- CHAR_LENGTH |
|
|
|
|
|
|
|
SELECT CHAR_LENGTH('何先生abcdefg何先生'); -- 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 和数据库结合使用 |
|
|
|
|
|
|
|
SELECT CONCAT('学号为', number, '的同学在《', subject, '》课程上的成绩是:', score) AS '成绩描述' FROM student_score; |
|
|
|
|
|
|
|
-- 学号为20210101的同学在《MySQL是怎样运行的》课程上的成绩是:88 |
|
|
|
|
|
|
|
-- 学号为20210101的同学在《计算机是怎样运行的》课程上的成绩是:78 |
|
|
|
|
|
|
|
-- 学号为20210102的同学在《MySQL是怎样运行的》课程上的成绩是:98 |
|
|
|
|
|
|
|
-- 学号为20210102的同学在《计算机是怎样运行的》课程上的成绩是:100 |
|
|
|
|
|
|
|
-- 学号为20210103的同学在《MySQL是怎样运行的》课程上的成绩是:61 |
|
|
|
|
|
|
|
-- 学号为20210103的同学在《计算机是怎样运行的》课程上的成绩是:59 |
|
|
|
|
|
|
|
-- 学号为20210104的同学在《MySQL是怎样运行的》课程上的成绩是:46 |
|
|
|
|
|
|
|
-- 学号为20210104的同学在《计算机是怎样运行的》课程上的成绩是:55 |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 9.2.2 日期处理函数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 常见日期处理函数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 名称 | 调用示例 | 示例结果 | 描述 | |
|
|
|
|
|
|
|
|--------------|--------------------------------------------------|---------------------|--------------------------------| |
|
|
|
|
|
|
|
| NOW | NOW() | 2019-08-16 17:10:43 | 返回当前日期和时间 | |
|
|
|
|
|
|
|
| CURDATE | CURDATE() | 2019-08-16 | 返回当前日期 | |
|
|
|
|
|
|
|
| CURTIME | CURTIME() | 17:10:43 | 返回当前时间 | |
|
|
|
|
|
|
|
| DATE | DATE('2019-08-16 17:10:43') | 2019-08-16 | 将给定日期和时间值的日期提取出来 | |
|
|
|
|
|
|
|
| DATE_ADD | DATE_ADD('2019-08-16 17:10:43', INTERVAL 2 DAY) | 2019-08-18 17:10:43 | 将给定的日期和时间值添加指定的时间间隔 | |
|
|
|
|
|
|
|
| DATE_SUB | DATE_SUB('2019-08-16 17:10:43', INTERVAL 2 DAY) | 2019-08-14 17:10:43 | 将给定的日期和时间值减去指定的时间间隔 | |
|
|
|
|
|
|
|
| DATEDIFF | DATEDIFF('2019-08-16', '2019-08-17'); | -1 | 返回两个日期之间的天数(负数代表前一个参数代表的日期比较小) | |
|
|
|
|
|
|
|
| DATE_FORMAT | DATE_FORMAT(NOW(),'%m-%d-%Y') | 08-16-2019 | 用给定的格式显示日期和时间 | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- MYSQL支持的时间单位 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 时间单位 | 描述 | |
|
|
|
|
|
|
|
|-------------|------| |
|
|
|
|
|
|
|
| MICROSECOND | 毫秒 | |
|
|
|
|
|
|
|
| SECOND | 秒 | |
|
|
|
|
|
|
|
| MINUTE | 分钟 | |
|
|
|
|
|
|
|
| HOUR | 小时 | |
|
|
|
|
|
|
|
| DAY | 天 | |
|
|
|
|
|
|
|
| WEEK | 星期 | |
|
|
|
|
|
|
|
| MONTH | 月 | |
|
|
|
|
|
|
|
| QUARTER | 季度 | |
|
|
|
|
|
|
|
| YEAR | 年 | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- MYSQL常见日期时间通配符 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 格式符 | 描述 | |
|
|
|
|
|
|
|
|-----|----------------------------------------| |
|
|
|
|
|
|
|
| %b | 简写的月份名称(Jan、Feb、...、Dec) | |
|
|
|
|
|
|
|
| %D | 带有英文后缀的月份中的日期(0th、1st、2nd、...、31st)) | |
|
|
|
|
|
|
|
| %d | 数字格式的月份中的日期(00、01、02、...、31) | |
|
|
|
|
|
|
|
| %f | 微秒(000000-999999) | |
|
|
|
|
|
|
|
| %H | 二十四小时制的小时 (00-23) | |
|
|
|
|
|
|
|
| %h | 十二小时制的小时 (01-12) | |
|
|
|
|
|
|
|
| %i | 数值格式的分钟(00-59) | |
|
|
|
|
|
|
|
| %M | 月份名(January、February、...、December) | |
|
|
|
|
|
|
|
| %m | 数值形式的月份(00-12) | |
|
|
|
|
|
|
|
| %p | 上午或下午(AM代表上午、PM代表下午) | |
|
|
|
|
|
|
|
| %S | 秒(00-59) | |
|
|
|
|
|
|
|
| %s | 秒(00-59) | |
|
|
|
|
|
|
|
| %W | 星期名(Sunday、Monday、...、Saturday) | |
|
|
|
|
|
|
|
| %w | 周内第几天 (0=星期日、1=星期一、 6=星期六) | |
|
|
|
|
|
|
|
| %Y | 4位数字形式的年(例如2019) | |
|
|
|
|
|
|
|
| %y | 2位数字形式的年(例如19) | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -523,3 +783,4 @@ SELECT * FROM student_score WHERE score NOT BETWEEN 60 AND 80; |
|
|
|
|
|
|
|
|
|
|
|
-- |
|
|
|
-- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|