MySQL的三表组合查询简介(mysql三表组合查询)
MySQL的三表组合查询简介
MySQL是当前应用最广泛的关系型数据库之一,能够支持多种不同类型的查询,其中之一就是三表组合查询。三表组合查询是指从三个不同的数据库表中获取数据并将其组合到一起以创建新的视图。
三表组合查询是通过使用 joins来实现的,通常最常用的是内联结(INNER JOIN)。内联结是将两个或多个表之间的列(列名一致)进行比较,并仅返回两个表中相互匹配数据的行。在三表组合查询中,它将比较三个表,然后返回这些表中相互匹配的数据行,以创建一个新视图。
下面我们以一个简单的例子:考试报名系统为例进行讲解。
我们有三个表:students、courses 和 scores。
students表:
| id | name | age | gender |
| 1 | Tom | 20 | Male |
| 2 | Jack | 21 | Male |
| 3 | Lily | 20 | Female |
| 4 | Sam | 22 | Male |
courses表:
| id | name |
| 1 | math |
| 2 | music |
| 3 | art |
| 4 | PE |
scores表:
| id | student_id | course_id | score |
| 1 | 1 | 1 | 98 |
| 2 | 1 | 2 | 85 |
| 3 | 2 | 2 | 90 |
| 4 | 3 | 1 | 88 |
| 5 | 3 | 3 | 92 |
| 6 | 3 | 4 | 78 |
| 7 | 4 | 1 | 85 |
| 8 | 4 | 2 | 70 |
| 9 | 4 | 4 | 75 |
现在我们要使用三表组合查询,找出每个学生的姓名、年龄、选修的课程、每个课程的成绩。
我们可以使用以下 SQL 命令:
SELECT students.name, students.age, courses.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id
INNER JOIN courses ON scores.course_id = courses.id;
运行此查询的结果应如下图所示:
| name | age | name | score |
| Tom | 20 | math | 98 |
| Tom | 20 | music| 85 |
| Jack | 21 | music| 90 |
| Lily | 20 | math | 88 |
| Lily | 20 | art | 92 |
| Lily | 20 | PE | 78 |
| Sam | 22 | math | 85 |
| Sam | 22 | music| 70 |
| Sam | 22 | PE | 75 |
该查询通过 INNER JOIN 将三个表进行连接,然后按照指定的列名获取表中的数据。通过这种方式,我们可以轻松地创建一个新视图,并从多个表中获取数据。
代码实现:
若使用PHP进行三表组合查询,可以采用以下代码:
$link=mysqli_connect(‘localhost’,’root’,’******’);
mysqli_query($link,’set names utf8′);
mysqli_select_db($link,’dbname’);
$sql2=”
SELECT `students`.`name`, `students`.`age`, `courses`.`name`, `scores`.`score`
FROM `students`
INNER JOIN `scores` ON `students`.`id`=`scores`.`student_id`
INNER JOIN `courses` ON `scores`.`course_id`=`courses`.`id`
“;
$result2=mysqli_query($link,$sql2) or die(mysqli_error($link));
while($rows2=mysqli_fetch_row($result2))
{
printf (“%s %s %s %s
“,$rows2[0],$rows2[1],$rows2[2],$rows2[3]);
}
这是通过 PHP 语言连接 MySQL 数据库,使用 INNER JOIN 关键字从多个表中检索所需数据的代码示例。