Mysql连表查询(内连接、外连接)

创建用于测试的表格并插入数据

-- 创建两张表格并分别插入数据
CREATE TABLE IF NOT EXISTS left_table
(
id INT auto_increment,
age INT,
NAME VARCHAR(20),
PRIMARY KEY(id)
)
ENGINE=INNODB DEFAULT CHARSET=utf8 auto_increment=1;

INSERT INTO left_table(`age`,`NAME`)
VALUES(25,'小明');
INSERT INTO left_table(`age`,`NAME`)
VALUES(15,'小红');
INSERT INTO left_table(`age`,`NAME`)
VALUES(35,'小吕');
INSERT INTO left_table(`age`,`NAME`)
VALUES(45,'大绿');

CREATE TABLE IF NOT EXISTS right_table
(
id INT PRIMARY KEY auto_increment,
age INT,
name VARCHAR(20)
)
ENGINE=INNODB default charset=utf8 auto_increment=1;

INSERT INTO right_table(`age`,`NAME`)
VALUES(29,'高兴');
INSERT INTO right_table(`age`,`NAME`)
VALUES(25,'快乐');
INSERT INTO right_table(`age`,`NAME`)
VALUES(39,'开心');
INSERT INTO right_table(`age`,`NAME`)
VALUES(45,'喜悦');

left_table
right_table

左连接(左外连接)

左连接也叫左外连接
语法如下

SELECT L.*,R.*
FROM LEFT_TABLE L
(WHERE ...)
LEFT (OUTER) JOIN
RIGHT_TABLE R
(WHERE ...)
ON ...

对示例量表进行操作

SELECT L.*,r.*
FROM left_table L
LEFT OUTER JOIN
right_table r
on L.age=r.age;

结果这里写图片描述
可知:

  • 左连接以左边的表格为基准
  • 当右边的表格满足on条件时,加入;不满足的补空值null。

右连接(右外连接)

语法如下

SELECT L.*,R.*
FROM LEFT_TABLE L
(WHERE ...)
RIGHT (OUTER) JOIN
RIGHT_TABLE R
(WHERE ...)
ON ...

示例

SELECT L.*,r.*
FROM left_table L
RIGHT JOIN
right_table r
on L.age=r.age;

结果
这里写图片描述

  • 右连接以右边的表格为基准
  • 当左边的表格满足on条件时,加入;不满足的补空值null。

内连接

语法如下

SELECT L.*,R.*
FROM LEFT_TABLE L
(WHERE ...)
[INNER] JOIN
RIGHT_TABLE R
(WHERE ...)
ON ...

示例

SELECT L.*,r.*
FROM left_table L 
JOIN
right_table r
on L.age=r.age;

结果
这里写图片描述

  • 去两者相同的结果
    从结果看来和 where 语句完全一样
SELECT L.*,r.*
FROM left_table L ,right_table r
WHERE L.age=r.age;

MySQL没有全连接

如果想要实现全连接的功能,可采用
左连接 union 右连接
此处是union,关于union与union all的区别,参考:http://blog.csdn.net/qq_36743482/article/details/75021848

SELECT L.*,r.*
FROM left_table L 
left JOIN
right_table r
on L.age=r.age
UNION
SELECT L.*,r.*
FROM left_table L 
RIGHT JOIN
right_table r
on L.age=r.age

这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值