SQL| JOIN(内、左、右、全连接)
在本文中,我们将讨论剩下的两个 JOIN:
- 笛卡尔连接
- 自加入
考虑下面的两个表:
学生课程
- CARTESIAN JOIN :CARTESIAN JOIN 也称为 CROSS JOIN。在 CARTESIAN JOIN 中,一个表的每一行到另一个表的每一行都有一个连接。这通常发生在未指定匹配列或 WHERE 条件时。
- 在没有 WHERE 条件的情况下, CARTESIAN JOIN 将表现得像 CARTESIAN PRODUCT 。即,结果集中的行数是两个表的行数的乘积。
- 在存在 WHERE 条件的情况下,此 JOIN 的函数类似于 INNER JOIN。
- 一般来说,交叉连接类似于内部连接,其中连接条件总是评估为 True
句法:
SELECT table1.column1 , table1.column2, table2.column1... FROM table1 CROSS JOIN table2; table1: First table. table2: Second table
示例查询(笛卡尔连接):
- 在下面的查询中,我们将从 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: Name of the table. some_condition: Condition for selecting the rows.
示例查询(自联接):
SELECT a.ROLL_NO , b.NAME FROM Student a, Student b WHERE a.ROLL_NO < b.ROLL_NO;
输出: