MySQL多表查询练习三表查询(mysql三表查询题)
MySQL多表查询练习:三表查询
在关系型数据库中,多表查询是非常常见的操作。在此次MySQL练习中,我们将练习三表查询,以便更好地理解多表查询的概念和运用。
在此之前,我们需要先了解一下三种连接查询的概念:
– 内连接查询:只查询两个表中相互匹配的行。
– 左连接查询:查询左表中所有的行,以及右表中匹配的行。
– 右连接查询:查询右表中所有的行,以及左表中匹配的行。
接下来,我们将通过以下的示例来演示三种连接查询的具体应用。
三个表分别为:学生表(students)、选课表(chosen_courses)和课程表(courses)。它们的数据结构如下:
students表:
| id | name | age | gender |
|——-|——–|——-|——–|
| 1 | Alice | 18 | F |
| 2 | Bob | 20 | M |
| 3 | Charlie| 19 | M |
| 4 | David | 20 | M |
chosen_courses表:
| student_id | course_id |
|————|———–|
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 3 |
| 4 | 1 |
courses表:
| id | course_name | teacher_name |
|——|—————-|————–|
| 1 | Math | Mr. Lee |
| 2 | English | Mr. Smith |
| 3 | Chemistry | Ms. Brown |
| 4 | Physics | Ms. Green |
示例一:内连接查询
内连接查询需要在两个表中都存在的记录。上述示例中,我们可以查询出选课信息和对应的学生和课程信息:
“` sql
SELECT students.name, courses.course_name
FROM students
INNER JOIN chosen_courses ON students.id = chosen_courses.student_id
INNER JOIN courses ON chosen_courses.course_id = courses.id;
查询结果为:
| name | course_name ||---------|-------------|
| Alice | Math || Alice | English |
| Bob | English || Charlie | Chemistry |
| David | Math |
示例二:左连接查询
左连接查询可以获取左表的所有行,以及右表中与左表相关联的行。如果右表中没有相应的行,则显示NULL值。下面我们可以查询出每个学生选了哪些课程:
``` sqlSELECT students.name, courses.course_name
FROM studentsLEFT JOIN chosen_courses ON students.id = chosen_courses.student_id
LEFT JOIN courses ON chosen_courses.course_id = courses.id;
查询结果为:
| name | course_name |
|———|————-|
| Alice | Math |
| Alice | English |
| Bob | English |
| Charlie | Chemistry |
| David | Math |
| Alice | Biology |
| NULL | Physics |
示例三:右连接查询
右连接查询与左连接查询类似,只不过它会获取右表的所有行。下面我们可以查询出每个课程被哪些学生选了:
“` sql
SELECT students.name, courses.course_name
FROM students
RIGHT JOIN chosen_courses ON students.id = chosen_courses.student_id
RIGHT JOIN courses ON chosen_courses.course_id = courses.id;
查询结果为:
| name | course_name ||---------|-------------|
| Alice | Math || Bob | English |
| Charlie | Chemistry || David | Math |
| Alice | Biology || NULL | Physics |
以上就是关于MySQL多表查询练习三表查询的介绍。通过掌握三种连接查询,我们可以更好地解决各种多表查询问题。