SQL三张表关联查询

SQL三张表关联查询

SQL三张表关联查询

在数据库中,为了更好地存储和管理数据,通常会将数据分散存放在不同的表中,并通过关系来进行连接和查询。当需要从多张表中获取相关信息时,我们可以使用SQL语言进行表关联查询。本文将详细介绍在SQL中进行三张表关联查询的方法和使用案例。

一、表关联查询概述

表关联查询是指通过连接多个表,根据表之间的关系进行数据查询的操作。在查询过程中,通过比较表中的字段,将满足条件的记录连接起来,并将结果返回。表关联查询有以下几种方式:

  1. 内连接(INNER JOIN):返回同时满足两个(或多个)表中条件的记录。
  2. 左连接(LEFT JOIN):返回左表中所有记录以及满足条件的右表记录。
  3. 右连接(RIGHT JOIN):返回右表中所有记录以及满足条件的左表记录。
  4. 全连接(FULL JOIN):返回左右表中所有记录,如果没有匹配的则填充NULL值。
  5. 交叉连接(CROSS JOIN):返回两个表之间的笛卡尔积,即所有可能的组合。

通过以上几种方式,我们可以根据具体需求选择合适的表关联查询方法,获取我们想要的数据结果。

二、三张表关联查询示例

假设我们有三个表:学生表(students)课程表(courses)成绩表(scores),它们的结构如下:

1. 学生表(students)

id name age gender
1 张三 20
2 李四 22
3 王五 21

2. 课程表(courses)

id name
1 语文
2 数学
3 英语

3. 成绩表(scores)

id student_id course_id score
1 1 1 85
2 1 2 90
3 2 1 95
4 2 2 80
5 3 1 75
6 3 3 88

现在我们要查询每个学生的姓名、年龄、性别以及其对应的课程名称和成绩。下面分别使用不同的表关联查询方式进行查询。

1. 内连接查询

内连接查询通过比较连接条件,返回满足条件的同时存在于两个表中的记录。

SELECT students.name, students.age, students.gender, courses.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id
INNER JOIN courses ON courses.id = scores.course_id;

运行结果如下:

name age gender course.name score
张三 20 语文 85
张三 20 数学 90
李四 22 语文 95
李四 22 数学 80
王五 21 语文 75
王五 21 英语 88

2. 左连接查询

左连接查询返回左表中所有记录以及满足条件的右表记录,如果右表中没有匹配的记录,则以NULL填充。

SELECT students.name, students.age, students.gender, courses.name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id
LEFT JOIN courses ON courses.id = scores.course_id;

运行结果如下:

name age gender course.name score
张三 20 语文 85
张三 20 数学 90
李四 22 语文 95
李四 22 数学 80
王五 21 语文 75
NULL NULL NULL 英语 88

3. 右连接查询

右连接查询返回右表中的所有记录以及满足条件的左表记录,如果左表中没有匹配的记录,则以NULL填充。

SELECT students.name, students.age, students.gender, courses.name, scores.score
FROM students
RIGHT JOIN scores ON students.id = scores.student_id
RIGHT JOIN courses ON courses.id = scores.course_id;

运行结果如下:

name age gender course.name score
张三 20 语文 85
张三 20 数学 90
李四 22 语文 95
李四 22 数学 80
王五 21 语文 75
王五 21 英语 88

4. 全连接查询

全连接查询返回左右表中的所有记录,如果没有匹配的记录,则以NULL填充。

SELECT students.name, students.age, students.gender, courses.name, scores.score
FROM students
FULL JOIN scores ON students.id = scores.student_id
FULL JOIN courses ON courses.id = scores.course_id;

运行结果如下:

name age gender course.name score
张三 20 语文 85
张三 20 数学 90
李四 22 语文 95
李四 22 数学 80
王五 21 语文 75
NULL NULL NULL 英语 88

5. 交叉连接查询

交叉连接查询返回两个表之间的笛卡尔积,即所有可能的组合。

SELECT students.name, students.age, students.gender, courses.name, scores.score
FROM students
CROSS JOIN scores
CROSS JOIN courses;

运行结果如下:

name age gender course.name score
张三 20 语文 85
张三 20 数学 90
张三 20 英语 85
李四 22 语文 95
李四 22 数学 90
李四 22 英语 95
王五 21 语文 75
王五 21 数学 90
王五 21 英语 75

三、总结

通过本文的介绍,我们了解了SQL中三张表关联查询的概念和常用方式,包括内连接、左连接、右连接、全连接和交叉连接。这些表关联查询方式可以帮助我们从多个表中获取相关联的数据,使得数据的查询和分析更加灵活和方便。

在实际应用中,我们可以根据具体的需求选择合适的表关联查询方式,并根据表之间的关系建立连接条件,以获取我们所需的数据结果。同时,还可以使用其他SQL语句对查询结果进行排序、筛选等操作,进一步满足数据分析和报表需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程