学习mysql

main
expressgy 6 months ago
parent 7da994583e
commit ecbe5c9ec5
  1. 57
      docs/MySQL/mysql是怎样使用的.md

@ -993,15 +993,72 @@ SELECT CONCAT('学科:', subject), COUNT(student_score.number) AS 人数 FROM st
## 11.2 标量子查询
- 标量子查询代表的仅仅是一个值
- 子查询必须用括号括起来
```sql
-- 标量子查询 查名字叫狗哥的人的所有学科成绩
SELECT * FROM student_score WHERE number = (SELECT number FROM student_info WHERE name = '狗哥');
-- 查比狗哥学号大的所有人的信息
SELECT * FROM student_info WHERE number > (SELECT number FROM student_info WHERE name = '狗哥');
```
## 11.3 列子查询
```sql
-- 列子查询 查计算机科学与工程的学生的成绩
SELECT * FROM student_score WHERE number IN (SELECT number FROM student_info WHERE major = '计算机科学与工程');
```
## 11.4 行子查询
- 加入不知道子查询会出现几条记录,加上`LIMIT 1`吧
- 两边均要用括号
```sql
SELECT * FROM student_score WHERE (number, subject) = (SELECT number, 'MySQL是怎样运行的' FROM student_info LIMIT 1);
```
## 11.5 表子查询 (多行多列)
```sql
-- 此版本的MySQL还不支持“LIMIT&IN/ALL/AANY/SOME子查询” MYSQL8.3
SELECT * FROM student_score WHERE (number, subject) IN (SELECT number, 'MySQL是怎样运行的' FROM student_info WHERE major = '计算机科学与工程');
```
## 11.6 `EXISTS``NOT EXISTS`子查询
```sql
-- 如果存在记录就查
SELECT * FROM student_info WHERE EXISTS(SELECT * FROM student_info WHERE number = 10086);
-- 如果不存在记录就查
SELECT * FROM student_info WHERE NOT EXISTS(SELECT * FROM student_info WHERE number = 10086);
-- 相等
SELECT * FROM student_info WHERE (SELECT COUNT(*) FROM student_info WHERE number != 10086) > 1;
```
## 11.7 不相关子查询和相关子查询
- 像上面的,外层查询和子查询不想管,独立运行叫做不相关查询
- 相关查询是,外层查询的值需要被子查询应用,外层查询每查到一行,再拿行数据和子查询进行匹配
```sql
-- 相关子查询 查存在成绩的学生信息
SELECT * FROM student_info a WHERE EXISTS(SELECT number FROM student_score b WHERE a.number = b.number);
-- 显然这个效率很低
SELECT * FROM student_info a WHERE number = IF((SELECT COUNT(number) FROM student_score b WHERE a.number = b.number) > 0, a.number, NULL);
```
## 11.8 对同一个表的子查询
```sql
-- 查大于平均分的成绩
SELECT * FROM student_score WHERE score > (SELECT AVG(score) FROM student_score);
-- 查和狗哥一个学院的人
SELECT * FROM student_info WHERE department = (SELECT department FROM student_info WHERE name = '狗哥');
```
# 第十二章 连接查询

Loading…
Cancel
Save