【数据库】Mysql的连接详解

本文详细介绍了SQL中的四种连接类型:内连接(包括等值连接和自然连接)、外连接(左外连接、右外连接和全外连接)、交叉连接以及自连接。通过具体的例子帮助读者理解每种连接类型的用法及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关系表中的一行称为元组,元组可表示一个实体或实体之间的联系。

一、内连接

就是将表1的某属性与表2的相应属性进行逐行匹配,找出匹配的组合,并按照输出需求合并成一行。即只连接匹配的行。
内连接有两种:等值连接和自然连接。

1、等值连接(最常用)

SELECT [column1],[column2] FROM [t1] INNER JOIN [t2] ON ]t1.column]=[t2.column] GROUP BY [column];

//例子
SELECT course_id,building FROM course INNER JOIN department ON course.dept_name=department.dept_name GROUP BY course_id;

course表
这里写图片描述
department表
这里写图片描述

建立连接得出的结果为
这里写图片描述

2、自然连接

自然连接只考虑那些在关系模式中都出现的属性上取值相同的元组对。得出的结果表中两表中名称相同的列只出现一次。

Mysql不支持natural join 但也可以通过多表查询实现。

SELECT xxx,xxx FROM t1,t2 WHERE t1.xxx=t2.xxx ORDER BY xxx;

//例子 
SELECT course_id,department.dept_name,building,title FROM course,department WHERE course.dept_name=department.dept_name ORDER BY course_id;

结果
这里写图片描述

二、外连接

外连接通过在结果中创建包含空值元组的方式,保留了在内连接中丢失的元组。

1、左外连接

只保留出现在左外连接运算之前(左边表)的关系中的元组。

SELECT student.ID,name,takes.couse_id,dept_name FROM student LEFT JOIN takes ON student.ID= takes.ID ORDER BY student.ID;

结果
这里写图片描述

图中ID=70557的学生没有课程id但还是被保留。

2、右外连接

只保留出现在右外连接运算之后(右边表)的关系中的元组。
代码格式与左外连接格式类似(只是将LEFT改成RIGHT),就不一一赘述。

3、全外连接

保留出现在两个关系中的元组。 MySQL不支持全连接,Null值不能参加运算。
若要实现全连接,可以使用UNION。即将左连接表和右连接表合并。

SELECT student.ID,name,takes.couse_id,dept_name 
FROM student LEFT JOIN takes 
ON student.ID= takes.ID 
UNION
SELECT student.ID,name,takes.couse_id,dept_name 
FROM student RIGHT JOIN takes 
ON student.ID= takes.ID 

WHERE student.ID is NULL OR takes.ID is NULL;

结果
这里写图片描述

三、交叉连接

将两个表的所有行进行组合,连接后的行数为两个表的乘积数。(笛卡尔积)

SELECT * FROM course CROSS JOIN department;

结果
这里写图片描述
这里写图片描述
这里写图片描述

四、自连接

详解请看链接http://blog.youkuaiyun.com/cheryl_l/article/details/53523657#t8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值