SQL | JOIN(内部,左侧,右侧和完全联接)
在本文中,我们将讨论剩余的两个JOINS:
- 笛卡尔联接
- 自我加入
考虑下面的两个表:
学生课程
- 笛卡尔联接:笛卡尔联接也称为交叉联接。在“笛卡尔联接”中,一个表的每一行与另一表的每一行都有一个联接。当未指定匹配列或WHERE条件时,通常会发生这种情况。
- 在没有WHERE条件的情况下,笛卡尔联接的行为类似于笛卡尔乘积。也就是说,结果集中的行数是两个表的行数的乘积。
- 在存在WHERE条件的情况下,此JOIN将像INNER JOIN一样函数。
- 一般而言,交叉联接类似于内部联接,其中联接条件将始终评估为True
句法:
SELECT table1.column1 , table1.column2, table2.column1... FROM table1 CROSS JOIN table2; table1: First table. table2: Second table
查询示例(CARTESIAN JOIN):
- 在下面的查询中,我们将从“学生”表中选择“姓名”和“年龄”,并从“学生课程”表中选择“ 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: Name of the table. some_condition: Condition for selecting the rows.
查询示例(SELF JOIN):
SELECT a.ROLL_NO , b.NAME FROM Student a, Student b WHERE a.ROLL_NO < b.ROLL_NO;
输出: