select 
from table0,table1
where table0.id(+)=table.id;

解决方案 »

  1.   

    学生表
        学号 姓名
        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是可以省略的