学生表
学号 姓名
0001 小李
0002 小王
0003 小朱
0004 小黄
选课表
学号 课程
0001 高数
0002 线数
0004 英语
0005 电脑
--左(外)联接
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号 = 选课表.学号(+)
查询的结果是:
学号 姓名 课程
0001 小李 高数
0002 小王 线数
0003 小朱
0004 小黄 电脑
学生表.学号 = 选课表.学号(+)表示
学生表(也就是左边的表)所有行都会被返回
即使选课表中没有相应的行与学生表中的行匹配
--右(外)联接
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号(+) = 选课表.学号
查询的结果是:
学号 姓名 课程
0001 小李 高数
0002 小王 线数
0004 小黄 电脑
0005 电脑
学生表.学号(+) = 选课表.学号表示
选课表(也就是右边的表)所有行都会被返回
即使学生表中没有相应的行与选课表中的行匹配
不同的数据库系统对外联接有不同的表示
有些根本不兼容
如(还是以上例为基础)
MS SQL SERVER 外联接的SQL写法
--左(外)联接 - 第一种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号 *= 选课表.学号
--左(外)联接 - 第二种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表 LEFT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号
--右(外)联接 - 第一种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号 =* 选课表.学号
--右(外)联接 - 第二种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表 RIGHT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号
--注:在MS SQL SERVER中,OUTER关健字可以省略
ACCESS 外联接的SQL写法
--左(外)联接 - 第二种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表 LEFT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号
--右(外)联接 - 第二种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表 RIGHT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号
--注:在ACCESS中,关健字OUTER不可以省略
ORACLE 外联接的SQL写法
--左(外)联接 - 第一种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号 = 选课表.学号(+)
--右(外)联接 - 第一种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号(+) = 选课表.学号
ORACLE直到9i才支持SQL-92外联接语法
LEFT (OUTER)JOIN和RIGHT (OUTER) JOIN
和MS SQL SERVER一样
关健字OUTER是可以省略的Top