4. 六种关联查询
• 交叉连接(CROSS JOIN)
• 内连接(INNER JOIN)
• 外连接(LEFT JOIN/RIGHT JOIN)
• 联合查询(UNION与UNION ALL)
• 全连接(FULL JOIN)
• 交叉连接(CROSS JOIN)
SELECT * FROM A,B(,C)或者SELECT * FROM A CROSS JOIN B (CROSS JOIN C)#没有任何关联条件,结果是笛卡尔积,结果集会很大,没有意义,很少使用内连接(INNER JOIN)SELECT * FROM A,B WHERE A.id=B.id或者SELECT * FROM A INNER JOIN B ON A.id=B.id多表中同时符合某种条件的数据记录的集合,INNER JOIN可以缩写为JOIN
内连接分为三类
• 等值连接:ON A.id=B.id
• 不等值连接:ON A.id > B.id
• 自连接:SELECT * FROM A T1 INNER JOIN A T2 ON T1.id=T2.pid
外连接(LEFT JOIN/RIGHT JOIN)
• 左外连接:LEFT OUTER JOIN, 以左表为主,先查询出左表,按照ON后的关联条件匹配右表,没有匹配到的用NULL填充,可以简写成LEFT JOIN
• 右外连接:RIGHT OUTER JOIN, 以右表为主,先查询出右表,按照ON后的关联条件匹配左表,没有匹配到的用NULL填充,可以简写成RIGHT JOIN
联合查询(UNION与UNION ALL)
SELECT * FROM A UNION SELECT * FROM B UNION ...
• 就是把多个结果集集中在一起,UNION前的结果为基准,需要注意的是联合查询的列数要相等,相同的记录行会合并
• 如果使用UNION ALL,不会合并重复的记录行
• 效率 UNION 高于 UNION ALL
全连接(FULL JOIN)
• MySQL不支持全连接
• 可以使用LEFT JOIN 和UNION和RIGHT JOIN联合使用
SELECT * FROM A LEFT JOIN B ON A.id=B.id UNIONSELECT * FROM A RIGHT JOIN B ON A.id=B.
小编分类整理了许多java进阶学习材料和BAT面试题,需要资料的请加QQ群:731611386 就能领取2019年java进阶学习资料和BAT面试题以及《Effective Java》(第3版)电子版书籍。