📅  最后修改于: 2023-12-03 15:36:11.124000             🧑  作者: Mango
在SQL中,相交的含义是两个集合中共有的元素。也就是说,如果两个集合有至少一个相同的值,它们就是相交的。我们可以使用JOIN(连接)操作来查找两个表中相交的数据。
内连接使用INNER JOIN关键字来查找两个表中相交的数据。这种连接方式只返回满足条件的数据匹配项。例如,假设我们有两个表:学生表和课程表,它们的结构如下所示:
学生表:
| id | name | age | |----|--------|-----| | 1 | Tom | 20 | | 2 | Jerry | 21 | | 3 | Nancy | 19 | | 4 | Rachel | 22 |
课程表:
| id | course | student_id | |----|----------|------------| | 1 | math | 1 | | 2 | science | 2 | | 3 | history | 1 | | 4 | geography | 3 |
现在我们想找到所有选修了数学课的学生,我们可以使用INNER JOIN操作。代码如下:
SELECT students.name, courses.course
FROM students
INNER JOIN courses
ON students.id = courses.student_id
WHERE courses.course = 'math'
该查询将返回以下结果:
| name | course | |--------|--------| | Tom | math |
左连接使用LEFT JOIN关键字来查找两个表中相交和不相交的数据。左连接返回左表中的所有数据和右表中的匹配数据。如果没有匹配,右表的返回值将是NULL。例如,我们使用以下查询语句来获取所有学生及其选修的课程,即使某些学生没有选修任何课程。
SELECT students.name, courses.course
FROM students
LEFT JOIN courses
ON students.id = courses.student_id
该查询将返回以下结果:
| name | course | |--------|-----------| | Tom | math | | Tom | history | | Jerry | science | | Nancy | NULL | | Rachel | geography |
注意:在左连接中,左表(即FROM子句中指定的表)中的所有行都将返回,即使在RIGHT JOIN子句中没有匹配行。如果左表中没有匹配的行,则右表中的所有列都将为NULL。
右连接使用RIGHT JOIN关键字来查找两个表中相交和不相交的数据。右连接返回右表中的所有数据和左表中的匹配数据。如果没有匹配,左表的返回值将是NULL。例如,我们使用以下查询语句来获取所有课程及其对应的学生,即使某些课程没有学生选修。
SELECT students.name, courses.course
FROM students
RIGHT JOIN courses
ON students.id = courses.student_id
该查询将返回以下结果:
| name | course | |--------|-----------| | Tom | math | | Tom | history | | Jerry | science | | NULL | literature| | Rachel | geography |
注意:在右连接中,右表(即RIGHT JOIN子句中指定的表)中的所有行都将返回,即使在LEFT JOIN子句中没有匹配行。如果右表中没有匹配的行,则左表中的所有列都将为NULL。