MySQL多表查询是在一个查询语句中操作多张数据表的查询操作,一般有三种方式:内联结(inner join),左联结(left join)和右联结(right join)。下面是多表查询的详细攻略及示例说明:
1. 内联结(inner join)
内联结可以描述两张或以上数据表除了公用的字段外的交集。语法如下:
SELECT column FROM table1 [INNER] JOIN table2 ON condition;
其中,column
表示要查询的列(可以使用多个列,以,
隔开),table1
和table2
是要查询的两张数据表,condition
表示关联条件,也叫内联结条件。
下面是一个多表内联结查询的示例:
假设我们有两张数据表,一张名为students
,包含学生的信息和学号,另一张名为scores
,包含学生成绩和学号,它们的结构如下:
students表
id name sex age class_id
1 Tom M 18 1
2 Jerry F 17 1
3 Lily M 18 2
4 Lucy F 17 3
scores表
id student_id Chinese Math English
1 1 90 90 90
2 2 80 80 80
3 3 70 70 70
4 4 60 60 60
现在,我们想查询姓名、性别、年龄、班级和各科成绩。我们可以使用如下的SQL语句:
SELECT students.name, students.sex, students.age, students.class_id, scores.Chinese, scores.Math, scores.English
FROM students
INNER JOIN scores
ON students.id = scores.student_id;
运行结果如下:
name sex age class_id Chinese Math English
Tom M 18 1 90 90 90
Jerry F 17 1 80 80 80
Lily M 18 2 70 70 70
Lucy F 17 3 60 60 60
2. 左联结(left join)
左联结可以描述左边数据表与右边数据表的全部几何,以及左边数据表中符合条件的交集数据。语法如下:
SELECT column FROM table1 LEFT [OUTER] JOIN table2 ON condition;
其中,table1
作为左表(左边的表),table2
作为右表(右边的表),condition
表示左联结条件。
下面是一个多表左联结查询的示例:
假设我们要查询student表中所有记录以及它们的成绩,如果该学生没有成绩,则成绩信息为NULL,我们可以使用如下的SQL语句:
SELECT students.name, students.sex, students.age, students.class_id, scores.Chinese, scores.Math, scores.English
FROM students
LEFT JOIN scores
ON students.id = scores.student_id;
运行结果如下:
name sex age class_id Chinese Math English
Tom M 18 1 90 90 90
Jerry F 17 1 80 80 80
Lily M 18 2 70 70 70
Lucy F 17 3 60 60 60
Tim F 20 4 NULL NULL NULL
3. 右联结(right join)
右联结可以描述右边数据表与左边数据表的全部几何,以及右边数据表中符合条件的交集数据。语法如下:
SELECT column FROM table1 RIGHT [OUTER] JOIN table2 ON condition;
其中,table1
作为左表(左边的表),table2
作为右表(右边的表),condition
表示右联结条件。
下面是一个多表右联结查询的示例:
假设我们要查询有成绩信息的学生和他们的成绩,我们可以使用如下的SQL语句:
SELECT students.name, students.sex, students.age, students.class_id, scores.Chinese, scores.Math, scores.English
FROM students
RIGHT JOIN scores
ON students.id = scores.student_id;
运行结果如下:
name sex age class_id Chinese Math English
Tom M 18 1 90 90 90
Jerry F 17 1 80 80 80
Lily M 18 2 70 70 70
Lucy F 17 3 60 60 60
NULL NULL NULL NULL 85 85 85
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL多表查询的案例详解 - Python技术站