MySQL数据库所有的表连接方式

表连接介绍

1、内连接(Inner Join):

内连接返回两个表中满足连接条件的匹配行。只有在连接条件成立的情况下,才会返回结果。

隐式使用: SELECT 字段列表 FROM 表1 , 表2 where 条件 ... ;

显式使用: SELECT 字段列表 FROM 表1 [ inner] join 表2 on 连接条件 ... ;(括号表示可有可无)

案例:

-- 查询学生及其所在班级信息
SELECT students.name, classes.name AS class_name
FROM students
INNER JOIN classes ON students.class_id = classes.id;

2、外连接

左连接(Left Join):左连接返回左表中所有的行,以及与右表匹配的行。如果右表中没有匹配的行,则返回NULL值。

语法:SELECT * FROM table1 left join table2 on table1.column = table2.column

右连接(Right Join):右连接返回右表中所有的行,以及与左表匹配的行。如果左表中没有匹配的行,则返回NULL值。

语法:SELECT * FROM table1 right join table2 on table1.column = table2.column

案例:

-- 查询班级及其学生数量
SELECT classes.name, COUNT(students.id) AS 学生数量
FROM classes
LEFT JOIN students ON classes.id = students.class_id
GROUP BY classes.name;

-- 查询科目及其对应的老师信息
SELECT s.name, t.name AS 老师名字
FROM subjects s
RIGHT JOIN teachers t ON s.teacher_id = t.id;

3、全连接(full join)

全连接返回左右表中所有的行,无论是否匹配。如果没有匹配的行,则返回NULL值。

MySQL不直接支持全连接,可以通过 左连接+右连接 的组合来实现并使用 union 连接两个查询)。

案例:

-- 查询科目及其对应的老师信息
SELECT s.name, t.name AS 老师名字
FROM subjects s
left join teachers t on s.teacher_id = t.id;

UNION

-- 查询科目及其对应的老师信息
SELECT s.name, t.name AS 老师名字
FROM subjects s
RIGHT JOIN teachers t ON s.teacher_id = t.id;

4、交叉连接(cross join)

是一种无条件的连接方式,它返回左表和右表的所有可能组合。这种连接方式会生成两个表的笛卡尔积。例如,如果左表有 m 行,右表有 n 行,CROSS JOIN 将返回 m * n 行。

语法:select * from table1 cross join table2;

案例:

-- 查询学生对应的所有科目的成绩
SELECT students.name, subjects.name AS subject_name
FROM students
CROSS JOIN subjects;

5、自连接 (self join):

将表与自身进行连接。它在表中存在对自身的关联关系时很有用。通过为表指定不同的别名并使用别名进行连接,可以在表中创建自引用关系。

语法:SELECT a.column, b.column FROM table AS a JOIN table AS b ON a.key = b.key;

案例     [as] 表示取别名,可有可无:

-- 查询同班学生里面的朋友关系
SELECT a.name AS 学生名, b.name AS 朋友名字
FROM students AS a
INNER JOIN students AS b ON a.id <> b.id
WHERE a.class_id = b.class_id;

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值