SQL左连接

在SQL中,LEFT JOIN(左连接)用于从两个或多个表中获取匹配行以及指定左表中的所有行。左连接将返回左表中的所有行,即使没有匹配的行在右表中。
语法
LEFT JOIN关键字用于从第一个(左侧)表获取所有行,即使没有匹配的行在第二个(右侧)表中。
其基本语法如下:
SELECT 列名
FROM 表1
LEFT JOIN 表2 ON 表1.列名 = 表2.列名;
在这里,表1是左表,表2是右表,ON 关键字用于指定连接的条件。
示例
创建表
首先,让我们创建两个表来演示左连接的用法。假设我们有一个“学生”表和一个“成绩”表,学生表包含学生的ID和姓名,成绩表包含学生的ID和各科成绩。
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(50)
);
CREATE TABLE scores (
student_id INT,
subject VARCHAR(50),
score INT,
FOREIGN KEY (student_id) REFERENCES students(student_id)
);
INSERT INTO students VALUES (1, 'Alice');
INSERT INTO students VALUES (2, 'Bob');
INSERT INTO students VALUES (3, 'Charlie');
INSERT INTO scores VALUES (1, 'Math', 90);
INSERT INTO scores VALUES (1, 'English', 85);
INSERT INTO scores VALUES (2, 'Math', 88);
INSERT INTO scores VALUES (3, 'English', 92);
查询结果
现在我们可以使用左连接来获取学生及其成绩信息。以下是查询语句和结果:
SELECT s.student_id, s.student_name, sc.subject, sc.score
FROM students s
LEFT JOIN scores sc ON s.student_id = sc.student_id;
查询结果如下:
student_id | student_name | subject | score
-----------|--------------|----------|------
1 | Alice | Math | 90
1 | Alice | English | 85
2 | Bob | Math | 88
3 | Charlie | English | 92
在这个示例中,我们可以看到即使Bob没有英语成绩,他仍然显示在结果中,并用NULL表示他的英语成绩。
总结
通过左连接,我们可以从两个表中获取匹配的行,并且左表中的所有行都会显示在结果中,即使在右表中没有匹配的行也不会被过滤掉。这使得查询结果更加完整和具有可读性。左连接在处理两个表之间的关系时非常有用。
极客教程