SQL的各种连接(crossjoin、innerjoin、fulljoin)的⽤法理解
SQL中的连接可以分为内连接,外连接,以及交叉连接。
1. 交叉连接CROSS JOIN
如果不带WHERE条件⼦句,它将会返回被连接的两个表的笛卡尔积,返回结果的⾏数等于两个表⾏数的乘积;
举例,下列A、B、C 执⾏结果相同,但是效率不⼀样:
A:SELECT*FROM table1 CROSS JOIN table2
B:SELECT*FROM table1,table2
C:select*from table1 a inner join table2 b
A:select a.*,b.*from table1 a,table2 b where a.id=b.id
B:select*from table1 a cross join table2 b where a.id=b.id (注:cross join后加条件只能⽤where,不能⽤on)
C:select*from table1 a inner join table2 b on a.id=b.id
⼀般不建议使⽤⽅法A和B,因为如果有WHERE⼦句的话,往往会先⽣成两个表⾏数乘积的⾏的数据表然后才根据WHERE条件从中选择。
因此,如果两个需要求交际的表太⼤,将会⾮常⾮常慢,不建议使⽤。
sql left join 多表连接2. 内连接INNER JOIN
两边表同时符合条件的组合
如果仅仅使⽤
SELECT*FROM table1 INNER JOIN table2
内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果⼀样,但是不同于笛卡尔积的地⽅是,没有笛卡尔积那么复杂要先⽣成⾏数乘积的数据表,内连接的效率要⾼于笛卡尔积的交叉连接。但是通常情况下,使⽤INNER JOIN需要指定连接条件。
***************关于等值连接和⾃然连接
等值连接(=号应⽤于连接条件, 不会去除重复的列)
⾃然连接(会去除重复的列)
数据库的连接运算都是⾃然连接,因为不允许有重复的⾏(元组)存在。
例如:
SELECT*FROM table1 AS a INNER JOIN table2 AS b lumn
3. 外连接OUTER JOIN
指定条件的内连接,仅仅返回符合连接条件的条⽬。
外连接则不同,返回的结果不仅包含符合连接条件的⾏,⽽且包括左表(左外连接时), 右表(右连接时)或者两边连接(全外连接时)的所有数据⾏。
1)左外连接LEFT [OUTER]JOIN
显⽰符合条件的数据⾏,同时显⽰左边数据表不符合条件的数据⾏,右边没有对应的条⽬显⽰NULL
例如
SELECT*FROM table1 AS a LEFT[OUTER]JOIN lumn
2)右外连接RIGHT [OUTER]JOIN
显⽰符合条件的数据⾏,同时显⽰右边数据表不符合条件的数据⾏,左边没有对应的条⽬显⽰NULL
例如
SELECT*FROM table1 AS a RIGHT[OUTER]JOIN lumn
3)全外连接full [outer]join
显⽰符合条件的数据⾏,同时显⽰左右不符合条件的数据⾏,相应的左右两边显⽰NULL,即显⽰左连接、右连接和内连接的并集
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论