Oracle学习(5)---数据定义语言---连接查询
发布时间:2020-12-12 15:30:28 所属栏目:百科 来源:网络整理
导读:连接查询 源码项目地址 在应用中所需要的数据来自于一个表的情况非常少。经常会需要查询两个或两个 以上的表。这种查询两个或两个以上的数据表或试图的查询叫做连接查询。 表的连接查询包括等值连接、非等值连接、自连接、内连接和外连接,以等值连 接为例,下
连接查询源码项目地址 在应用中所需要的数据来自于一个表的情况非常少。经常会需要查询两个或两个 以上的表。这种查询两个或两个以上的数据表或试图的查询叫做连接查询。 表的连接查询包括等值连接、非等值连接、自连接、内连接和外连接,以等值连 接为例,下面描述连接查询的语法: SELECT table1.column,table2.column
FROM table1,table2
WHERE table1.column1 = table2.column2;
可以使用表的别名来简化连接查询。一旦给表定义了别名,在整个SQL语句中就不能 再使用表的全名了,可以对比一下不使用或使用别名的效果。 --不使用别名
SELECT EMP.ENAME,DEPT.DNAME
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPT.NO;
--使用别名
SELECT E.ENAME,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPT.NO;
> 等值连接是连接查询中最常见的一种,通常是在有主外键关系的表间建立,并将连接
条件设定为有关系的列,使用 "=" 连接相关的表。
--例1: 等值连接查询
--查询职员表中的全部数据
SELECT E.ENAME,E.JOB,D.DNAME,D.LOC
FROM SCOTT.EMP E,SCOTT.DEPT D
WHERE E.DEPTNO = D.DEPTNO;
--除了等值连接条件外还有其他连接条件
SELECT E.ENAME,SCOTT.DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.DEPTNO = 10;
结果为: 

也可以以此类推,对多个表做等值连接查询,多个表之间存在主从表关系,连接
条件同样写在WHERE子句中。为了避免笛卡尔积,连接n各表,最少需要n-1个
连接条件
> 非等值连接在多个表使用非等号连接,查询在多个表中有非等值关联关系的
数据,非等值连接符包括 >,>=,<,<=,<>以及 BETWEEN...AND,LIKE,IN等。
--例2: 非等值连接的查询
--查询每个职员的工资级别
SELECT E.ENAME,E.SAL,S.GRADE
FROM SCOTT.EMP E,SCOTT.SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
结果为: 
> 自连接是一种比较特殊的连接查询,数据的来源是一个表,即关联关系来自于
单表中的多个列。表中的列参照同一个表中的其它列的情况称作自参表。
自连接是通过将表用别名虚拟成两个表的方式实现,可以是等值或不等值连接。
--例3: 自连接
--查出每个职员经理的名字,以及他们的职员编码
SELECT
WORKER.EMPNO W_EMPNO,WORKER.ENAME W_ENAME,MANAGER.EMPNO M_EMPNO,MANAGER.ENAME M_ENAME
FROM SCOTT.EMP WORKER,SCOTT.EMP MANAGER
WHERE WORKER.MGR = MANAGER.EMPNO;
结果为: 
> 上面所介绍的连接查询都属于内连接,即返回满足连接条件的数据记录,在有些情况下,需要返回
那些不满足连接天剑的记录。在Oracle 9i版本之后外链接一般在FROM短句中指定。
Oracle 9i之后的外链接语法:
SELECT table1.column,table2.column
FROM table1 [INNER | LEFT | RIGHT | FULL] JOIN table2
ON table1.column1 = table2.column2;
1. ### 内连接
> 内连接返回所有满足连接条件的记录
--例4: 内连接(1)
--使用等值连接的形式
SELECT E.ENAME,D.DNAME
FROM SCOTT.EMP E,SCOTT.DEPT D
WHERE E.DEPTNO = D.DEPTNO;
结果为: 
--例5: 内连接(2)
--使用NATURAL JOIN对于,将两个表中所有同名列做等值连接。如果两个表中同名列数据
--类型不能比较的话,就会报错
SELECT E.ENAME,D.DNAME
FROM SCOTT.EMP E NATURAL JOIN SCOTT.DEPT D;
结果为: 
--例6: 内连接(3)
--使用USING子句实现,较NATURAL JOIN方式更灵活,是将两个表中指定的同名列做等值
--连接,避免了同名列可能因类型不同导致的错误。
SELECT E.ENAME,D.DNAME
FROM SCOTT.EMP E JOIN SCOTT.DEPT D
USING(DEPTNO);
结果为: 
--例7: 内连接(4)
--使用ON子句。这种方式避免了第3种方式必须有同名列的缺陷,可以在ON子句中指定连接条件,--列名可以相同也可以不同。
SELECT E.ENAME,D.DNAME
FROM SCOTT.EMP E JOIN SCOTT.DEPT D
ON (E.DEPTNO = D.DEPTNO);
结果为: 
2. ### 左外链接
> 外连接是内连接的一种扩展,做外链接是指不仅会返回满足连接条件的记录,还可以返回那些
不满足连接条件的操作符左边表的其它记录。
--例8: 左外连接
INSERT INTO SCOTT.EMP(EMPNO,ENAME)
VALUES (1235,'MATHA');
SELECT E.ENAME,D.DNAME
FROM SCOTT.EMP E LEFT OUTER JOIN SCOTT.DEPT D
ON E.DEPTNO = D.DEPTNO;
结果为: 
3. ### 右外链接
> 右外连接除了返回满足连接条件的记录,还可以返回那些不满足连接条件的操作符右边表
的其它记录
--例9: 右外连接
SELECT E.ENAME,D.DNAME
FROM SCOTT.EMP E RIGHT OUTER JOIN SCOTT.DEPT D
ON E.DEPTNO = D.DEPTNO;
结果为: 
4. ### 全外连接
> 全外连接是指返回满足条件的记录,还会返回不满足连接条件的所有其他行,即使左链接和右连接的综合。
--例10: 全外连接
SELECT E.ENAME,D.DNAME
FROM SCOTT.EMP E FULL OUTER JOIN SCOTT.DEPT D
ON E.DEPTNO = D.DEPTNO;
结果为: 

源码项目地址 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读
