序号 连接 含义
0 INNER JOIN 链接
1 LEFT JOIN 左连接
2 RIGHT JOIN 右连接
3 OUTER JOIN 外连接
4 LEFT JOIN EXCLUDING INNER JOIN 左连接排除内连接结果
5 RIGHT JOIN EXCLUDING INNER JOIN 右连接排除内连接结果
6 OUTER JOIN EXCLUDING INNER JOIN 外连接排除内连接结果

内连接

内连接查询返回表A和表B中所有匹配行的结果

SELECT FROM Table_A A INNER JOIN Table_B B ON A.Key = B.Key

左连接

LFET JOIN查询返回所有表A中的记录, 不管是否有匹配记录在表B中。它会返回所有表B中的匹配记录 (没有匹配的当然会标记成null了)。

SELECT FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key

右连接






// todo *
SELECT
FROM A WHERE cc IN (SELECT cc FROM B)

SELECT * FROM A WHERE EXIST (SELECT cc FROM B WHERE B.cc=A.cc)

实际上在查询过程中,在我们对 cc 列建立索引的情况下,我们还需要判断表 A 和表 B 的大小。在这里例子当中,表 A 指的是 player 表,表 B 指的是 player_score 表。如果表 A 比表 B 大,那么 IN 子查询的效率要比 EXIST 子查询效率高,因为这时 B 表中如果对 cc 列进行了索引,那么 IN 子查询的效率就会比较高。

同样,如果表 A 比表 B 小,那么使用 EXISTS 子查询效率会更高,因为我们可以使用到 A 表中对 cc 列的索引,而不用从 B 中进行 cc 列的查询。