MySQL内连接、外连接 7种JOIN操作

SQL JOIN 所有操作

一、SQL92 实现 =

多表查询  查询每个球员的主场所在地(等值连接---非等值连接)

SELECT player, location
FROM players, teams
WHERE players.teamID = teams.teamID;

 自连接 (查询表中员工号对应领导号,自己连接自己)
-- (TABLE employee) id  name  managerID

SELECT t1.`name`, t2.`name`,
FROM employee t1, employee t2
WHERE t1.managerID = t2.id

 二、SQL99 实现 多表查询 JOIN...ON...

1、内连接:合并具有同一列的两个以上的表,结果集不包含两个表不匹配的行
 查询每个球员的主场所在地(等值连接---非等值连接)

SELECT p.player, t.location
FROM players p INNER JOIN teams t
ON p.teamID = t.teamID;

2、外连接:合并具有同一列的两个以上的表,结果集中除了两个表匹配的行,还包含左表或右表中不匹配的行(表中有null也显示)
-- 外连接分类:左外连接,右外连接,满外连接
-- 左外连接:结果集中除了满足连接条件的行,还包含左表中不满足条件的行

SELECT p.player, t.location
FROM players p LEFT JOIN teams t
ON p.teamID = t.teamID;

 -- 左外连接中去除两表重复部分(去除内连接部分)

SELECT p.player, t.location
FROM players p LEFT JOIN teams t
ON p.teamID = t.teamID
WHERE p.teamID IS NULL;

-- 右外连接:结果集中除了满足连接条件的行,还包含右表中不满足条件的行

SELECT p.player, t.location
FROM players p RIGHT JOIN teams t
ON p.teamID = t.teamID;

-- 右外连接中去除两表重复部分(去除内连接部分)

SELECT p.player, t.location
FROM players p RIGHT JOIN teams t
ON p.teamID = t.teamID
WHERE t.teamID IS NULL;

-- 满外连接:结果集中除了满足连接条件的行,还包含左表和右表中不满足条件的行
-- UNION 和 UNION ALL 中,尽量使用UNION ALL,效率高(但是并集不去重复部分)!
-- 实现方式1:左外连接 UNION ALL 右外连接中去除两表重复部分(去除内连接部分)

SELECT p.player, t.location
FROM players p LEFT JOIN teams t
ON p.teamID = t.teamID
UNION ALL
SELECT p.player, t.location
FROM players p RIGHT JOIN teams t
ON p.teamID = t.teamID
WHERE t.teamID IS NULL;

-- 实现方式2:右外连接 UNION ALL 左外连接中去除两表重复部分(去除内连接部分)

SELECT p.player, t.location
FROM players p RIGHT JOIN teams t
ON p.teamID = t.teamID
UNION ALL
SELECT p.player, t.location
FROM players p LEFT JOIN teams t
ON p.teamID = t.teamID
WHERE p.teamID IS NULL;

 

  TABLE players:

 TABLE teams:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值