Oracle数据库的学习记录:
十六、多表查询(SQL1999语法)
之前给出的(+)标记只是Oracle才有的
整个SQL:1999语法里面定义的多表查询的结构如下:
SELECT [DISTINCT] * | 列 [别名] FROM 表名称1
[CROSS JION 表名称2]
[NATURAL JOIN 表名称2]
[JOIN 表名称 ON(条件)|USING(字段)]
[LEFT|RIGHT|FULL OUTER JOIN 表名称2;
建议不使用
1.交叉连接:CROSS JOIN,主要的功能是产生笛卡尔积,
范例:SELECT * FROM emp CROSS JOIN dept;
2.自然连接:NATURAL JOIN,自动使用关联字段消除笛卡尔积(一般关联字段是外键,此处是使用名字),属于内连接的概念
范例:SELECT * FROM emp NATURAL JOIN dept;
在返回查询结果时,默认情况下会将关联字段设置在第一列上,重复的列内容不再显示
3.USING子句:如果一张表里面有多个关联字段存在,那么可以使用USING子句明确的设置一个关联字段
范例:SELECT * FROM emp JOIN dept USING(deptno);
4.ON子句:如果没有关联字段,那么可以使用ON子句设置条件
范例:SELECT * FROM emp e JOIN salgrade s ON(e.sal BETWEEN s.losal AND s.hisal);
5.外连接,在SQL:1999语法标准里面明确的定义了数据表的左外连接、右外连接、全外连接
范例:左外连接
SELECT * FROM emp LEFT OUTER JOIN dept USING(deptno);
范例:右外连接
SELECT * FROM emp RIGHT OUTER JOIN dept USING(deptno);
范例:全外连接
SELECT * FROM emp FULL OUTER JOIN dept USING(deptno);