序号 | 连接 | 含义 |
---|---|---|
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
左连接
LFET JOIN查询返回所有表A中的记录, 不管是否有匹配记录在表B中。它会返回所有表B中的匹配记录 (没有匹配的当然会标记成null了)。
SELECT
右连接
// 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 列的查询。