SQL将外部联合分为了右外部联合(right outer join)、左外部联合(left outer join)、完全外部联合(full outer join)3个类型。
左外部联合:LEFT OUTER JOIN
基本语法:SELECT column_list
FROM table1 LEFT OUTER JOIN table2
ON condition
思想:OUTER JOIN语句表1中的所有记录都被返回在结果中,即使表2没有匹配的。
举例:现有演员信息表(Actors)和电影信息表(Class),下文中分别简称表1和表2,具体数据如下:
Actors
SId |
SActor | SDateOfBirth | FilmId |
1 | 贝拉 | 1999-08-07 | 1 |
2 | 爱德华 | 1998-04-20 | 3 |
3 | 雅各布 | 1998-11-28 | 5 |
Films
FilmId | FilmName | YearReleased |
1 | 暮色 | 2005 |
2 | 新月 | 2006 |
3 | 月食 | 2007 |
4 | 破晓 | 2008 |
5 | 午夜阳光 | 2009 |
SELECT Actors.SActor, Film.FileName, FROM Actors LEFT JOIN Film ON Actors.FilmId = Film.FilmId
返回结果为:
表1中的只有3个记录全部都包含在结果中。
左外部联合:RIGHT OUTER JOIN
基本语法:SELECT column_list
FROM table1 RIGHT OUTER JOIN table2
ON condition
思想:与外部联合相反。都返回表2中的所有记录,即使表1没有相匹配的记录
举例:演员信息表(Actors)和电影信息表(Class)
SELECT SActor, FilmName, YearReleased FROM Actors RIGHT OUTER JOIN Films ON Actors.FilmId = Films.FilmId
返回结果如下:
完全外部联合:FULL OUTER JOIN
基本语法:SELECT column_list
FROM table1 FULL OUTER JOIN table2
ON condition
思想:左外部联合和右外部联合的组合。返回表1和表2的所有行
举例:现有演员信息表(Actors)和电影信息表(Class)
SELECT SActor, FilmName, YearReleased FROM Actors FULL OUTER JOIN Films ON Actors.FilmId = Films.FilmId;
返回结果如下: