MySQL连接查询

1.分类

MySQL连接可以分为:
1)内连接

2)外连接

  • 左外连接
  • 右外连接
  • 全外连接

3)自然连接

  • 自然内连接(NATURAL JOIN)
  • 自然左外连接(NATURAL LEFT JOIN)
  • 自然右外连接(NATURAL RIGHT JOIN)

4)交叉连接

2.语法

SELECT 列名1,...列名n 
FROM 表名1
[连接类型] JOIN 表名2
[连接关键词] WHERE 检索条件;

连接类型四选一:

  • INNER
  • LEFT OUTER
  • RIGHT OUTER
  • FULL OUTER

连接关键词二选一:
- ON 连接条件
- USING(cloumn_name)

3.示例

表1 test1:
这里写图片描述

表2 student:
这里写图片描述
1)内连接

SELECT * FROM test1 INNER JOIN student ON test1.id = student.id;

这里写图片描述
内连接生成的新的关系的属性个数(即列数)是原来两个表的属性个数相加;其结果可以这么得出:第一先进行两个表的笛卡尔积(用左表的所有行依次去匹配右表的每一行);第二步根据on后边的条件筛选,符合条件的显示;
注:这里只是为了理解方便,数据库会对连接操作进行优化而不必进行笛卡尔积操作,其实on条件的过滤是在两个表连接之前;而在两个表连接之后,才会再根据where的条件进行筛选;

2)左连接示例:

SELECT * FROM test1 LEFT JOIN student ON test1.id = student.id;

执行结果:
这里写图片描述
左连接生成的新的关系的属性个数(即列数)是原来两个表的属性个数相加;其结果可以这么得出:第一先进行两个表的笛卡尔积(用左表的所有行依次去匹配右表的每一行);第二步根据on后边的条件筛选,符合条件的显示(第1、3、4行),而对于左表中有右表却没有找到匹配的项,则右表对应的列以null填充(第2行);

右连接和左连接类似,只不过 这次是以右表中的所有行去匹配左表,如果匹配的则显示,不匹配的右表对应的列正常显示,而左表对应的列则以null填充(总之,右表中的所有列都要显示)。
全连接是两个表中如果相匹配的数据,则显示对应的数据,否则以null进行匹配(两个表中的所有行都要显示)。

4.自然连接natural

要求进行自然连接的两个表必须有相同的属性组B(至少包含一个属性),如该实例中,表test1和表student有相同的属性组id和password,则可以进行自然连接。自然连接自带判断条件,即id和password都相等时才算匹配成功。

附:自然连接参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值