一、多表查询
在我们查询从表中查询数据的时候,有时候需要用到多个表的数据,此时需要使用到 JOIN 关键字。
以两个表为例:SELECT <select...list> FROM TableA A LEFT | INNER | RIGHT JOIN TableB B ON A.Key=B.Key;
二、JOIN 的7种 sql 语法
PS:举例使用是数据库官网官网的 sakila 示例数据库
1.内连接:SELECT <select...list> FROM TableA A INNER JOIN TableB B ON A.Key=B.Key;
2.左连接(全A):SELECT <select...list>FROM TableA A LEFT JOIN TableB B ON A.Key=B.Key;
3.右连接(全B): SELECT <select...list>FROM TableA A RIGHT JOIN TableB B ON A.Key=B.Key;
4.左连接(只A):SELECT <select…list>FROM TableA a LEFT JOIN TableB b ON A.Key=B.Key WHERE B.Key IS null;
5.右连接(只B): SELECT <select…list>FROM TableA a RIGHT JOIN TableB b ON A.Key=B.Key WHERE A.Key IS null;
6.全外连接:SELECT <select…list>FROM TableA a FULL OUTER JOIN TableB b ON A.Key=B.Key
由于MySQL不支持 FULL JOIN 这种语法(在 orcale 可行),所以使用 union 关键字拼接左连接(全A)和右连接(全B)结 果并去重来达到效果。
SELECT <select...list>FROM TableA A LEFT JOIN TableB B ON A.Key=B.Key;
UNION
SELECT <select...list>FROM TableA A RIGHT JOIN TableB B ON A.Key=B.Key;
7.交叉外连接:
同理,使用 union 关键字拼接左连接(只A)和右连接(只B)达到效果。
SELECT <select…list>FROM TableA a LEFT JOIN TableB b ON A.Key=B.Key WHERE B.Key IS null;
UNION
SELECT <select…list>FROM TableA a RIGHT JOIN TableB b ON A.Key=B.Key WHERE A.Key IS null;