From 63d6ce6470f934bc4e4dd1e4b890cdb142153ab3 Mon Sep 17 00:00:00 2001 From: expressgy Date: Sat, 30 Mar 2024 14:04:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=A6=E4=B9=A0mysql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/MySQL/mysql是怎样使用的.md | 261 ++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) diff --git a/docs/MySQL/mysql是怎样使用的.md b/docs/MySQL/mysql是怎样使用的.md index 36dd63e..f08c822 100644 --- a/docs/MySQL/mysql是怎样使用的.md +++ b/docs/MySQL/mysql是怎样使用的.md @@ -512,6 +512,266 @@ SELECT * FROM student_score WHERE score NOT BETWEEN 60 AND 80; ## 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; -- +