Loading ...
第六篇:MySQL 多表查询与子查询

内连接(INNER JOIN)

只获取两张表中匹配条件的记录,即 “交集” 部分。

语法

SELECT 字段 FROM 表A 
INNER JOIN 表B 
ON 表A.关联字段 = 表B.关联字段;

示例

查询学生姓名和对应的课程名(只显示有课程的学生):

SELECT students.name, courses.course_name 
FROM students 
INNER JOIN courses 
ON students.course_id = courses.course_id;

外连接(保留一张表的全部数据)

左外连接(LEFT JOIN)

左表所有记录均显示,右表只显示匹配记录,不匹配部分用NULL填充(即 “左表全部 + 交集”)。

SELECT s.name, c.course_name 
FROM students AS s  -- 左表:students(别名s)
LEFT JOIN courses AS c  -- 右表:courses(别名c)
ON s.course_id = c.course_id;

右外连接(RIGHT JOIN)

右表所有记录均显示,左表只显示匹配记录,不匹配部分用NULL填充(即 “右表全部 + 交集”)。

SELECT s.name, c.course_name 
FROM students AS s  -- 左表:students
RIGHT JOIN courses AS c  -- 右表:courses
ON s.course_id = c.course_id;

完全外连接(FULL JOIN)

MySQL 不直接支持,但可通过UNION合并左外连接和右外连接的结果(即 “左表全部 + 右表全部”):

(SELECT s.name, c.course_name 
 FROM students AS s 
 LEFT JOIN courses AS c 
 ON s.course_id = c.course_id)
UNION  -- 合并结果,自动去重
(SELECT s.name, c.course_name 
 FROM students AS s 
 RIGHT JOIN courses AS c 
 ON s.course_id = c.course_id);

多表关联查询(JOIN 多次)

当需要关联 3 张及以上表时,可多次使用JOIN,逐步建立关联关系。

示例

查询学生姓名、课程名及授课教师:

SELECT st.name AS 学生姓名, 
       c.course_name AS 课程名, 
       t.teacher_name AS 教师名 
FROM students AS st
-- 关联课程表
INNER JOIN courses AS c 
ON c.course_id = st.course_id
-- 关联注册表(中间表)
INNER JOIN regs AS re 
ON re.student_id = st.student_id
-- 关联课程-教师关联表
INNER JOIN course_teachers AS ct 
ON ct.course_id = st.course_id
-- 关联教师表
INNER JOIN teachers AS t 
ON t.teacher_id = ct.teacher_id;

子查询(嵌套在其他查询中的查询)

子查询可理解为 “查询中的查询”,用于简化复杂逻辑,常见用法:

1. 作为条件值(比较运算符)

-- 查询年龄最小的学生姓名
SELECT name FROM students 
WHERE age = (SELECT MIN(age) FROM students);  -- 子查询:获取最小年龄

2. 作为集合(IN / NOT IN)

-- 查询已注册的学生姓名
SELECT name FROM students 
WHERE student_id IN (SELECT student_id FROM regs);  -- 子查询:获取已注册的student_id

3. 存在性判断(EXISTS / NOT EXISTS)

判断子查询是否返回结果(不关心具体数据,只关心 “有 / 无”):

-- 若存在ID为1的课程,则查询所有学生
SELECT * FROM students 
WHERE EXISTS (SELECT * FROM courses WHERE course_id = 1);
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇