📜  SQL SELECT多个表中检索(1)

📅  最后修改于: 2023-12-03 15:20:14.718000             🧑  作者: Mango

SQL SELECT多个表中检索

在实际的数据库操作中,我们往往需要从多个表中检索数据。这时,我们可以使用多表查询来实现。

多表查询的语法格式

多表查询的基本语法格式为:

SELECT column_name(s)
FROM table1
JOIN table2 ON table1.column_name = table2.column_name;

其中,table1table2是要联合查询的表,column_name(s)是要检索出的列名。

这里的ON是指定联接中的联接条件。

内连结(INNER JOIN)

内连结是多表查询的常用方式之一,它可以通过指定两个表之间的列名相同来联结两个或多个表,并返回所有存在匹配关系的行。

例如,我们有两个表studentsgrades,分别存储了学生和成绩的相关信息,我们可以通过内连接来查询学生的姓名和对应科目的成绩。

SELECT students.name, grades.subject, grades.score
FROM students
JOIN grades ON students.id = grades.student_id;

这样就可以查询出所有学生的姓名和对应科目的成绩了。

左外连结(LEFT JOIN)

左外连结是指将左边表中的所有行都保留下来,并将右边表中与之匹配的行合并到结果中去。如果右边表中没有与之匹配的行,则返回的值为NULL。

例如,在上面的例子中,如果还存在未被录入成绩的学生,我们可以通过左外连接查询出其所有信息,并将其成绩默认为NULL。

SELECT students.name, grades.subject, grades.score
FROM students
LEFT JOIN grades ON students.id = grades.student_id;

这样就可以查询出所有学生的姓名和对应科目的成绩了,未录入成绩的学生科目和成绩则显示为NULL。

右外连结(RIGHT JOIN)

右外连结是指将右边表中的所有行都保留下来,并将左边表中与之匹配的行合并到结果中去。如果左边表中没有与之匹配的行,则返回的值为NULL。

例如,在上面的例子中,如果存在未录入的学生信息,我们可以通过右外连接来查询出其所有信息,并将其成绩默认为NULL。

SELECT students.name, grades.subject, grades.score
FROM students
RIGHT JOIN grades ON students.id = grades.student_id;

这样就可以查询出所有学生的姓名和对应科目的成绩了,未录入学生信息的科目和成绩则显示为NULL。

完整外连结(FULL OUTER JOIN)

完整外连结是指将左右两张表都保留下来,并将两者之间的关联关系全部合并到结果中去。如果两个表中存在没有关联关系的行,则也要显示出来,并将其对应的值设置为NULL。

例如,在上面的例子中,我们可以使用完整外连结来查询出所有学生和对应的成绩,以及不存在的学生和成绩。

SELECT students.name, grades.subject, grades.score
FROM students
FULL OUTER JOIN grades ON students.id = grades.student_id;

这样就可以查询出所有学生的姓名和对应科目的成绩了,未录入学生信息的科目和成绩则显示为NULL,不存在的学生科目和成绩也要显示出来。

结束语

多表查询是实际的数据库操作中常见的需求,通过掌握以上所述的多表连接方式,可以解决很多问题,并提高数据分析的效率。