墨禾
/*等值连接:两张表存在相同的列属性*/
SELECT player_id, player.team_id, player_name, height, team_name FROM player, team WHERE player.team_id = team.team_id;
/*非等值连接*/
SELECT p.player_name, p.height...
极客时间版权所有: https://time.geekbang.org/column/article/104637
/*外连接:包括左连接、右连接、全连接*/
-- 左外连接:左边的表为主表
select count(*) from team t left outer join player p on t.team_id = p.team_id;
/*
1001 底特律活塞 10001 1001 韦恩-艾灵顿 1.93
1001 底特律活塞 10002 1001 雷吉-杰克逊 1.91
1002 印第安纳步行者 10037 1002 Ike Anigbogu 2.08
1003 亚特兰大老鹰
*/
-- 右外连接:右边的表为主表
select count(*) from team t RIGHT outer join player p on t.team_id = p.team_id;
/*
1001 底特律活塞 10001 1001 韦恩-艾灵顿 1.93
1001 底特律活塞 10002 1001 雷吉-杰克逊 1.91
1002 印第安纳步行者 10037 1002 Ike Anigbogu 2.08
1003 亚特兰大老鹰
*/
-- 全连接:两张表做笛卡尔积
select count(*) from team t outer join player p on t.team_id = p.team_id;
/*
1001 底特律活塞 10001 1001 韦恩-艾灵顿 1.93
1001 底特律活塞 10002 1001 雷吉-杰克逊 1.91
1002 印第安纳步行者 10037 1002 Ike Anigbogu 2.08
1003 亚特兰大老鹰
*/
select count(*) from team t inner join player p on t.team_id = p.team_id;
-- 自连接:可对单表或多表进行操作
SELECT b.player_name, b.height FROM player as a , player as b WHERE a.player_name = '布雷克 - 格里芬' and a.height < b.height
/*请用一条 SQL 语句显示出所有可能的比赛组合*/
SELECT * FROM team t1 , team t2 WHERE t1.team_id<> t2.team_id
-- 或
SELECT * FROM team t1 , team t2 WHERE t1.team_id !=t2.team_id