Skip to content

Commit a169e9b

Browse files
committed
join优化
1 parent 441ceb2 commit a169e9b

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

mysql开发技巧一/join优化

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,37 @@ SELECT select_sxpressions FROM TABLE A RIGHT JOIN TABLE B ON A.key=B.key WHERE
4040
SELECT select_sxpressions FROM TABLE A RIGHT JOIN TABLE B ON A.key=B.key WHERE A.key IS NOT NULL;
4141
表A与表B的交集,相当于INNER JOIN。
4242

43+
********************************************************************************
44+
全连接
45+
46+
FULL JOIN:是LEFT OUTER JOIN和RIGHT OUTER JOIN的合集。显示出两张表中的所有数据,
47+
当一张表的连接谓词无法满足时,则另一张表的字段在该表中为NULL。
48+
49+
MySQL不支持FULL JOIN
50+
解决方法:
51+
通过UNION将左连接和右连接的结果合并
52+
SELECT select_expressions
53+
FROM TABLE A LEFT JOIN TABLE B ON A.key=B.key
54+
UNION ALL
55+
SELECT select_expressions
56+
FROM TABLE A RIGHT JOIN TABLE B ON A.key=B.key;
57+
58+
UNION会自动删除重复项,刷选出部分字段的时候要注意了,如果刷选出来的两个字段的值完全相同就会剩下一个。
59+
UNION ALL 和 UNION 不同之处在于 UNION ALL 会将左右两个查询的结果的所有的资料都列出来,无论资料值有无重复。
60+
61+
********************************************************************************
62+
63+
CROSS JOIN:笛卡尔连接,如果A和B是两个集合,它们的交叉连接就记为A X B。
64+
一个表的每个记录与另一个表的所有记录进行连接,形成A.length*B.length个数据项的表。(无需提供ON)
65+
66+
SELECT select_expressions FROM TABLE A CROSS JOIN TABLE B;
67+
68+
69+
70+
71+
72+
73+
4374

4475

4576

0 commit comments

Comments
 (0)