SQL连接:笛卡尔连接和自连接用法示例

2021年4月17日18:05:49 发表评论 92 次浏览

SQL | JOIN(内, 左, 右和完全连接)

在本文中, 我们将讨论剩余的两个JOINS:

考虑下面的两个表:

表

StudentCourse

表5

笛卡尔连接:CARTESIAN JOIN也称为CROSS JOIN。在"笛卡尔连接"中, 一个表的每一行与另一表的每一行都有一个连接。当未指定匹配列或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;

输出如下:

table_final

自连接:顾名思义, 在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;

输出如下:

SQL连接查询

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: