SQL 连接(内连接,左连接,右连接和全连接)
SQL Join 语句用于根据两个或多个表之间的公共字段组合数据或行。不同类型的连接如下:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
考虑以下两个表格:
Student
StudentCourse
最简单的连接是INNER Join。
A. INNER JOIN
只要满足条件,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
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