MySQL合并两张表查询
在MySQL中,合并两张表是一种常见的操作,它可以将两个或多个表中的数据合并成一个结果集。通过合并表,我们可以根据特定的条件查询数据,并将结果返回为新的表格。
本文将介绍如何在MySQL中合并两张表进行查询,并提供相应的代码示例。我们将以一个具体的案例来说明这个过程。
案例背景
假设我们有两张表:学生表(students)和成绩表(scores)。学生表包含了学生的基本信息(学号、姓名、年龄等),成绩表包含了学生的各科成绩(学号、科目、成绩等)。我们希望通过合并这两张表,查询出每个学生的所有成绩。
合并两张表的方法
在MySQL中,合并两张表可以使用多种方法,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。下面我们将分别介绍这四种方法的使用。
内连接(INNER JOIN)
内连接会返回两个表中满足连接条件的记录,即只返回两个表中都有的数据。
SELECT students.student_id, students.name, scores.subject, scores.mark
FROM students
INNER JOIN scores ON students.student_id = scores.student_id;
上述代码中,我们使用INNER JOIN
将学生表和成绩表连接起来,并通过ON
关键字指定连接条件。
左连接(LEFT JOIN)
左连接会返回左表中的所有记录,以及满足连接条件的右表记录。如果右表中没有对应的记录,则返回NULL
值。
SELECT students.student_id, students.name, scores.subject, scores.mark
FROM students
LEFT JOIN scores ON students.student_id = scores.student_id;
上述代码中,我们使用LEFT JOIN
将学生表和成绩表连接起来,并通过ON
关键字指定连接条件。
右连接(RIGHT JOIN)
右连接会返回右表中的所有记录,以及满足连接条件的左表记录。如果左表中没有对应的记录,则返回NULL
值。
SELECT students.student_id, students.name, scores.subject, scores.mark
FROM students
RIGHT JOIN scores ON students.student_id = scores.student_id;
上述代码中,我们使用RIGHT JOIN
将学生表和成绩表连接起来,并通过ON
关键字指定连接条件。
全连接(FULL JOIN)
全连接会返回两个表中的所有记录,不管是否满足连接条件。如果某个表中没有对应的记录,则返回NULL
值。
SELECT students.student_id, students.name, scores.subject, scores.mark
FROM students
FULL JOIN scores ON students.student_id = scores.student_id;
上述代码中,我们使用FULL JOIN
将学生表和成绩表连接起来,并通过ON
关键字指定连接条件。
完整代码示例
-- 创建学生表
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
-- 创建成绩表
CREATE TABLE scores (
student_id INT,
subject VARCHAR(50),
mark INT
);
-- 插入学生数据
INSERT INTO students (student_id, name, age)
VALUES (1, '张三', 18),
(2, '李四', 19),
(3, '王五', 20);
-- 插入成绩数据
INSERT INTO scores (student_id, subject, mark)
VALUES (1, '语文', 90),
(1, '数学', 80),
(2, '语文', 85),
(2, '数学', 95),
(3, '语文', 75),
(3, '数学', 70);
-- 内连接查询
SELECT students.student_id, students.name, scores.subject, scores.mark
FROM students
INNER JOIN scores ON students.student_id = scores.student_id;
结果展示
以下是上述代码执行后的查询结果:
student_id | name | subject | mark |
---|---|---|---|
1 | 张三 | 语文 | 90 |
1 | 张三 | 数学 | 80 |
2 | 李四 | 语文 | 85 |
2 | 李四 | 数学 |