SQL 连接(笛卡尔连接和自连接)
SQL|连接(内连接,左连接,右连接和全连接)
在本文中,我们将讨论剩下的两个join:
- CARTESIAN JOIN
- SELF JOIN
考虑以下两个表格:
StudentCourse
笛卡尔连接(CARTESIAN JOIN)
笛卡尔连接也被称为交叉连接。在笛卡尔连接中,一个表的每一行与另一个表的每一行都有一个连接。这通常发生在没有指定匹配列或WHERE条件的情况下。
- 在没有WHERE条件的情况下,笛卡尔连接的行为将类似于笛卡尔积。也就是说,结果集中的行数是两个表的行数的乘积。
-
在存在WHERE条件的情况下,此连接的功能类似于内连接。
-
一般来说,交叉连接类似于内部连接,其中连接条件将始终计算为True
语法:
SELECT table1.column1 , table1.column2, table2.column1...
FROM table1
CROSS JOIN table2;
table1 : 第一个表.
table2 : 第二个表
示例查询(笛卡尔连接):
- 在下面的查询中,我们将从Student表中选择NAME和Age,从StudentCourse表中选择COURSE_ID。在输出中,您可以看到Student表的每一行与StudentCourse表的每一行连接在一起。结果集中的总行数= 4 * 4 = 16。
SELECT Student.NAME, Student.AGE, StudentCourse.COURSE_ID
FROM Student
CROSS JOIN StudentCourse;
输出 :
自连接(SELF JOIN)
顾名思义,在SELF JOIN中,表是与自己连接的。也就是说,根据某些条件,表的每一行都与自身和所有其他行连接。换句话说,我们可以说它是同一个表的两个副本之间的连接。
语法:
SELECT a.coulmn1 , b.column2
FROM table_name a, table_name b
WHERE some_condition;
table_name : 表名
some_condition : 选择行的条件.
示例查询(SELF JOIN):
SELECT a.ROLL_NO , b.NAME
FROM Student a, Student b
WHERE a.ROLL_NO < b.ROLL_NO;
输出: