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 李四 数学