1,交叉连接(CROSS JOIN)
2,内连接(INNER JOIN)
3,外连接(LEFT JOIN/RIGHT JOIN)
4,联合查询(UNION 与 UNION ALL)
5,全连接(FULL JOIN)
6,交叉连接(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
内连接分为三类
1、 等值连接:ON A.id=B.id
2、 不等值连接:ON A.id > B.id
3、 自连接:SELECT * FROM A T1 INNER JOIN A T2 ON Tl.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 …
1、 就是把多个结果集集中在一起,UNION前的结果为基准,需要注意的是联合查询的列数要相等,相同的记录行会合并
2、 如果使用UNION ALL,不会合并重复的记录行
3、 效率 UNION 高于 UNION ALL
全连接(FULL JOIN)
SELECT * FROM A LEFT JOIN B ON A.id=B.id UNION SELECT * FROM A RIGHT JOIN B ON A.id=B.id
MySQL不支持全连接
可以使用LEFT JOIN和UNION和RIGHT JOIN联合使用
Was this helpful?
0 / 0