问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL 连接详解:内连接、左连接、右连接和全连接

创作时间:
作者:
@小白创作中心

SQL 连接详解:内连接、左连接、右连接和全连接

引用
1
来源
1.
https://geek-docs.com/sql/sql-tutorials/sql-join-set-1-inner-left-right-and-full-joins.html

SQL连接语句是数据库查询中非常重要的概念,它允许我们根据两个或多个表之间的公共字段组合数据。本文将详细介绍四种主要的连接类型:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN),并通过具体的语法和示例帮助读者理解它们的使用场景和效果。

考虑以下两个表格:

Student

StudentCourse

A. 内连接(INNER JOIN)

内连接是最简单的连接方式,它将从两个表中选择所有满足条件的行。具体来说,内连接将通过合并两个表中满足条件的所有行来创建结果集,即公共字段的值将是相同的。

语法:

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
INNER JOIN table2
ON table1.matching_column = table2.matching_column;

table1: 第一个表.
table2: 第二个表
matching_column: 两个表共用的列.

注意:我们也可以用JOIN来代替INNER JOIN。JOIN与INNER JOIN相同。

示例查询(内连接)

这个查询将显示注册不同课程的学生的姓名和年龄。

SELECT StudentCourse.COURSE_ID, Student.NAME, Student.AGE FROM Student
INNER JOIN StudentCourse
ON Student.ROLL_NO = StudentCourse.ROLL_NO;

B. 左连接(LEFT JOIN)

左连接返回联接左侧表的所有行,并匹配联接右侧表的行。对于右边没有匹配行的行,结果集将包含null。左连接也称为左外连接。

语法:

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
LEFT JOIN table2
ON table1.matching_column = table2.matching_column;

table1: 第一个表.
table2: 第二个表
matching_column: 两个表共用的列.

注意:我们也可以使用LEFT OUTER JOIN来代替LEFT JOIN,两者是相同的。

示例查询(LEFT JOIN)

SELECT Student.NAME,StudentCourse.COURSE_ID 
FROM Student
LEFT JOIN StudentCourse 
ON StudentCourse.ROLL_NO = Student.ROLL_NO;

C. 右连接(RIGHT JOIN)

右连接类似于左连接。这个联接返回联接右侧表的所有行,并返回联接左侧表的匹配行。对于左侧没有匹配行的行,结果集将包含null。右连接也称为右外连接。

语法:

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
RIGHT JOIN table2
ON table1.matching_column = table2.matching_column;

table1: 第一个表.
table2: 第二个表
matching_column: 两个表共用的列.

注意:我们也可以使用RIGHT OUTER JOIN来代替RIGHT JOIN,两者是相同的。

示例查询(RIGHT JOIN)

SELECT Student.NAME,StudentCourse.COURSE_ID 
FROM Student
RIGHT JOIN StudentCourse 
ON StudentCourse.ROLL_NO = Student.ROLL_NO;

D. 全连接(FULL JOIN)

全连接通过组合LEFT JOIN和RIGHT JOIN的结果来创建结果集。结果集将包含来自两个表的所有行。对于没有匹配的行,结果集将包含NULL values。

语法:

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
FULL JOIN table2
ON table1.matching_column = table2.matching_column;

table1: 第一个表.
table2: 第二个表
matching_column: 两个表共用的列.

示例查询(全部加入)

SELECT Student.NAME,StudentCourse.COURSE_ID 
FROM Student
FULL JOIN StudentCourse 
ON StudentCourse.ROLL_NO = Student.ROLL_NO;

输出:

NAME    COURSE_ID
HARSH   1
PRATIK  2
RIYANKA 2
DEEP    3
SAPTARHI    1
DHANRAJ NULL
ROHIT   NULL
NIRAJ   NULL
NULL    4
NULL    5
NULL    4
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号