sql中cross join,sql各种join用法详解

  sql中cross join,sql各种join用法详解

  SQL中的连接可以分为内部连接、外部连接和交叉连接。

  1.交叉连接

  如果没有WHERE子句,则返回连接的两个表的笛卡尔积,返回的行数等于两个表的行数的乘积;

  例如,下面的A、B和C具有相同的执行结果,但是效率不同:

  答:从表1交叉连接表2中选择*

  b:从表1、表2中选择*

  c:从表1 a的内部连接表2 b中选择*

  a:从表1 a、表2 b中选择a.*、b.*,其中a.id=b.id

  b:select * from table 1a cross join table 2b where a . id=b . id(注意:cross join只能用在where,不能用在on)。

  c:从a.id=b.id上的表1 a内部连接表2 b中选择*

  一般不建议使用方法A和方法B,因为如果有WHERE子句,会将两行乘以表中行数的数据表进行示教,然后根据WHERE条件进行选择。

  所以如果两个需要通信的表太大,会非常非常慢,不建议使用。

  2.内部连接

  同时满足条件的两个表的组合。

  如果你只使用

  SELECT * FROM表1内部联接表2

  如果不指定连接条件,内连接会有和笛卡尔积的交叉连接一样的结果,但和笛卡尔积不同的是,如果没有笛卡尔积那么复杂,内连接的效率要比笛卡尔积的交叉连接高。

  但是,通常使用内部联接需要指定联接条件。

  * * * * * * * * * * * *关于等联接和自然连接

  Equijoin (=符号应用于联接条件,不会删除重复的列)

  自然联接(重复的列将被删除)

  所有数据库连接操作都是自然连接,因为不允许重复的行(元组)。

  例如:

  SELECT * FROM table1作为内部连接table2 AS b on a.column=b.column

  3.外部连接

  指定条件的内部联接,并且只返回满足联接条件的条目。

  外部连接是不同的。返回的结果不仅包括满足连接条件的行,还包括左表(对于左外连接)、右表(对于右连接)或两侧连接(对于全外连接)中的所有数据行。

  1)左外连接左[外]连接

  显示符合条件的数据行,同时显示左侧数据表中不符合条件的数据行。右边没有对应的条目显示为空。

  例如

  从表1中选择*作为a.column=b.column的左[外]联接

  2)右连接右[外]连接

  显示符合条件的数据行,同时显示右侧数据表中不符合条件的数据行。左边没有相应的条目显示为空。

  例如

  从表1中选择*作为a.column=b.column上的右[外]联接

  3)完全[外部]连接

  显示合格的数据行,同时显示左侧和右侧不合格的数据行。对应的左右两边显示NULL,即显示左连接、右连接和内连接的并集。

sql中cross join,sql各种join用法详解