交叉连接
采用CROSS JOIN
SQL: SELECT * FROM t1 CROSS JOIN t2 CROSS JOIN t3
ON连接
SELECT player_id, player.team_id, player_name, height, team_name FROM player JOIN team ON player.team_id = team.team_id
USING 连接
可以用 USING 指定数据表里的同名字段进行等值连接
SELECT player_id, team_id, player_name, height, team_name FROM player JOIN team USING(team_id)
同上面ON语句是相同的效果
外连接
- 左外连接:LEFT JOIN 或 LEFT OUTER JOIN
- 右外连接:RIGHT JOIN 或 RIGHT OUTER JOIN
- 全外连接:FULL JOIN 或 FULL OUTER JOIN
全外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。
全外连接不仅 MySQL 不支持,Access、SQLite、MariaDB 等数据库软件也不支持。不过在 Oracle、DB2、SQL Server 中是支持的。
自连接
其实就是自己join自己
SELECT b.player_name, b.height FROM player as a JOIN player as b ON a.player_name = '布雷克-格里芬' and a.height < b.height
使用自连接而不是子查询
子查询实际上是通过未知表进行查询后的条件判断,而自连接是通过已知的自身数据表进行条件判断,因此在大部分 DBMS 中都对自连接处理进行了优化。
此文章为4月Day5学习笔记,内容来源于极客时间《SQL必知必会》