在数据库查询中,左外连接(LEFT JOIN)用于从左表返回所有记录,即使右表中没有匹配项。以下是一个示例:
表格1: 学生成绩表 (tSc)
| StudentsID | CourseID | Grade |
|------------|----------|-------|
| 1 | 001 | 97 |
| 2 | 002 | 89 |
| 3 | 003 | 81 |
| 3 | 002 | 76 |
表格2: 学生信息表 (tStudents)
| SNo | SName |
|-----|---------|
| 1 | 梅超风 |
| 2 | 陈玄风 |
| 3 | 陆乘风 |
| 4 | 曲灵风 |
使用左外连接进行查询:
SELECT tS.SName, C.CourseID, C.Grade
FROM ttStudents AS S
LEFT JOIN tSc AS C ON S.SNo = C.StudentID;
返回的结果为:
| SName | CourseID | Grade |
|---------|----------|-------|
| 梅超风 | 001 | 97 |
| 陈玄风 | 002 | 89 |
| 陆乘风 | 003 | 81 |
| 曲灵风 | NULL | NULL |
注意:上面查询会返回所有学生及其对应课程成绩,即使某些学生没有选择课程,返回结果中的课程ID和成绩为NULL。
如果调换表的位置,即先从课程表查询,再进行左外连接,查询语句如下:
SELECT tS.SName, C.CourseID, C.Grade
FROM tSc AS C
LEFT JOIN ttStudents AS S ON C.StudentID = S.SNo;
查询结果是不同的,具体原因在于左外连接是基于查询顺序的。如果先选择课程表(tSc),结果将保留所有课程记录,并且在没有匹配学生的情况下返回NULL。
结论:两种写法结果不完全相同,主要是因为左外连接基于查询的顺序。