SQL中的JOIN
最近在学习JavaWeb的时候,对之前学过的数据库的知识又进行了一次学习。这次总结了SQL中利用JOIN进行多表查询的几种方式。JOIN主要有三种类型:内联接,外连接,交叉连接。在这三种分类中一共又拥有以下七种情况:
内连接 inner join
仅列出两表能按照join条件连接起来的信息,其他的信息不显示。不以某一个表为基础,仅取出匹配的内容。使用SQL语句操作如下:SELECT <select_list> FROM Table A INNER JOIN Table B ON A.key = B.key。
外连接 outer join
(1)左外连接 left out join = left join
情况一显示左表的所有记录,右表符合join条件的信息显示,不符合的置空。以A表作为基础,首先取出A表中所有的数据,B表值取出与A表有关的数据。使用SQL语句操作如下:SELECT <select_list> FROM Table A LEFT JOIN Table B ON A.key = B.key。
情况二显示左表中符合join条件的数据(A中存在,B中不存在)。使用SQL语句操作如下:SELECT <seclect_list> FROM Table A LEFT JOIN Table B ON A.key = B.key WHERE B.key IS NULL。
(2)右外连接 right out join = right join
情况一显示右表的所有记录,左表符合join条件的信息显示,不符合的置空。以B表作为基础,首先取出B表中所有的数据,A表值取出与B表有关的数据。使用SQL语句操作如下:SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key = B.key。
情况二显示右表中符合join条件的数据(B中存在,A中不存在)。使用SQL语句操作如下:SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key = B.key WHERE A.key IS NULL。
(3)全外连接 full outer join = full join
情况一左右两表的信息都全部显示,符合join条件的信息显示,不符合的置空。使用SQL语句操作如下:SELECT <select_list> FROM Table A FULL OUTER JOIN Table B ON A.key = B.key。在这里也可以用左外连接和右外连接来实现这个情况的全外连接,使用SQL语句操作如下:SELECT <select_list> FROM Table A LEFT JOIN Table B ON A.key = B.key UNION SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key = B.key。其中使用了UNION关键字用于合并与去重。
情况二显示两个表中特有的部分。使用SQL语句操作如下:SELECT <select_list> FROM Table A FULL OUTER JOIN Table B ON A.key = B.key WHERE A.key IS NULL OR B.key IS NULL。在这里也可以用左外连接和右外连接来实现这个情况的全外连接,使用SQL语句操作如下:SELECT <select_list> FROM Table A LEFT JOIN Table B ON A.key = B.key WHERE B.key IS NULL UNION SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key = B.key WHERE A.key IS NULL。其中使用了UNION关键字用于合并与去重。
交叉连接 cross join
生成两张表的笛卡儿积。得到的记录相当于两表的乘积,结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查 询条件的数据行数。使用SQL语句操作如下:SELECT <select_list> FROM Table A CROSS Table B。
在交叉连接后面,不可以使用ON,只能使用WHERE。
通常来说,在大表关联的时候,建议使用inner join或者left join,不建议使用cross join或者where(先进行笛卡儿积,在进行选择,效率太低)。