当前位置:首页 > 行业动态 > 正文

mysql 多表联合查询

多表联合查询是指在同一张表中查询来自多个表的数据,可以使用JOIN关键字来实现。常见的联合查询有内连接、左连接、右连接和全连接。

MySQL联表查询是一种在多个表中查询数据的方法,它可以帮助我们轻松实现多表关联操作,联表查询主要有以下几种类型:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN),下面将详细讲解这些类型的用法。

1、内连接(INNER JOIN)

内连接是最常用的连接类型,它返回两个表中满足连接条件的所有记录,如果某个记录在另一个表中没有匹配的记录,则不会显示该记录。

语法:

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

示例:

假设有两个表,一个是学生表(student),一个是成绩表(score):

学生表(student):

id name
1 小明
2 小红
3 小刚

成绩表(score):

id student_id subject score
1 1 语文 80
2 1 数学 90
3 2 语文 85
4 2 数学 95

查询学生姓名和他们的语文成绩:

SELECT student.name, score.subject, score.score
FROM student
INNER JOIN score
ON student.id = score.student_id
WHERE score.subject = '语文';

结果:

name subject score
小明 语文 80
小红 语文 85

2、左连接(LEFT JOIN)

左连接返回左表中的所有记录,以及右表中满足连接条件的记录,如果在右表中没有匹配的记录,则显示为NULL。

语法:

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

示例:

查询所有学生的姓名和他们的数学成绩(如果没有数学成绩,则显示为NULL):

SELECT student.name, score.subject, score.score
FROM student
LEFT JOIN score
ON student.id = score.student_id
WHERE score.subject = '数学';

结果:

name subject score
小明 数学 90
小红 数学 95
小刚 NULL NULL

3、右连接(RIGHT JOIN)

右连接返回右表中的所有记录,以及左表中满足连接条件的记录,如果在左表中没有匹配的记录,则显示为NULL。

语法:

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

4、全连接(FULL JOIN)

全连接返回两个表中满足连接条件的所有记录,如果某个记录在另一个表中没有匹配的记录,则显示为NULL。

语法:

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

MySQL联表查询可以帮助我们轻松实现多表关联操作,通过使用不同类型的连接,我们可以根据需要获取所需的数据,在实际使用中,还可以结合其他SQL语句,如分组、排序等,以实现更复杂的查询需求。

0