博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多表关联查询(ORACLE版)
阅读量:5743 次
发布时间:2019-06-18

本文共 11572 字,大约阅读时间需要 38 分钟。

hot3.png

前言:这几天学习oracle,把自己对于关联查询的理解,记录下。如有错误请指正!

交叉连接:

交欢连接又称为“笛卡儿积连接”,是两个或多个表之间的无条件连接。一个表中所有的记录与其它表的所有的记录进行连接。

如果进行连接的表中的数据行数分别为“n1,n2、n3”,那么交叉连接后结果集中有n1xn2xn3条记录。

一、内连接

内连接是种常用的关联查询方式,使用inner join来实现,其中inner是可以省略的语法如下:

内连接的标准语法

select colums_list

from table_name1 [inner] join table_name2

on join_codition

参数说明:

  • colums_list :字段列表
  • table_name1和table_name2:是两个要实现内联接的表名
  • join_condition:实现内连接的条件表达式

内连接语法:Oracle扩展的连接方式

SELECT table1.column,talbe2.column[,…]

FROM table1,table2[,…]

WHERE condition;

例如:

SQL> select e.empno 员工号,e.ename 员工姓名,e.job 职务,d.dname  2  from emp e inner join dept d  3  on e.deptno = d.deptno;------------------------------------------------或者-------------------------------------------------------------------------------SQL> select e.empno 员工号,e.ename 员工姓名,e.job 职务,d.dname  2    from emp e ,dept d where e.deptno = d.deptno;  员工号 员工姓名             职务               DNAME                        ---------- -------------------- ------------------ ----------------------------       7369 SMITH                CLERK              RESEARCH                           7499 ALLEN                SALESMAN           SALES                              7521 WARD                 SALESMAN           SALES                              7566 JONES                MANAGER            RESEARCH                           7654 MARTIN               SALESMAN           SALES                              7698 BLAKE                MANAGER            SALES                              7782 CLARK                MANAGER            ACCOUNTING                         7788 SCOTT                ANALYST            RESEARCH                           7839 KING                 PRESIDENT          ACCOUNTING                         7844 TURNER               SALESMAN           SALES                              7876 ADAMS                CLERK              RESEARCH                         员工号 员工姓名             职务               DNAME                        ---------- -------------------- ------------------ ----------------------------       7900 JAMES                CLERK              SALES                              7902 FORD                 ANALYST            RESEARCH                           7934 MILLER               CLERK              ACCOUNTING                   已选择14行。

 

二、外连接

外连接分为:左外连接和右外连接、完全连接

  1. A、左外连接:关键字为left outer join 或者 left join

  2. 语法:

1、标准SQL语句的连接方式

SELECT table1.column, table2.column[,…]

FROM table1 LEFT JOIN table2[,]

ON table1.column <operator> table2.column[,…];

  1. 2、Oracle扩展的连接方式

    SELECT table1.column, table2.column[,…]

    FROM table1, table2[,…]

    WHERE table1.column <operator>

    table2.column(+)[…];

  2. 例如:

  3. SQL> select e.empno,e.ename,e.job,d  2  .dname  3   from emp e left join dept d  4  on e.deptno = d.deptno;-----------------------------------------------------------或者----------------------------------------------------------------------------------SQL> select e.empno,e.ename,e.job,d.dname  2  from emp e,dept d  3  where e.deptno = d.deptno(+);     EMPNO ENAME                JOB                DNAME                        ---------- -------------------- ------------------ ----------------------------       7934 MILLER               CLERK              ACCOUNTING                         7839 KING                 PRESIDENT          ACCOUNTING                         7782 CLARK                MANAGER            ACCOUNTING                         7902 FORD                 ANALYST            RESEARCH                           7876 ADAMS                CLERK              RESEARCH                           7788 SCOTT                ANALYST            RESEARCH                           7566 JONES                MANAGER            RESEARCH                           7369 SMITH                CLERK              RESEARCH                           7900 JAMES                CLERK              SALES                              7844 TURNER               SALESMAN           SALES                              7698 BLAKE                MANAGER            SALES                             EMPNO ENAME                JOB                DNAME                        ---------- -------------------- ------------------ ----------------------------       7654 MARTIN               SALESMAN           SALES                              7521 WARD                 SALESMAN           SALES                              7499 ALLEN                SALESMAN           SALES                              9527 LIKE                 PRINTER
  4. B、右外连接:关键字为right outer join 或者 right join

  5. 1、标准SQL语句的连接方式

    SELECT table1.column, table2.column[,…]

    FROM table1 RIGHT JOIN table2[,…]

    ON table1.column <operator> table2.column[…];

  6. 例如:

  7. 2、Oracle扩展的连接方式

    语法:

  8. SELECT table1.column, table2.column[,…]

    FROM table1, table2[,…]

    WHERE table1.column (+)<operator>

    table2.column[…];

  9. 例如:

  10. SQL> select e.empno,e.ename,e.job,d  2  .dname  3   from emp e left join dept d  4  on e.deptno = d.deptno;-------------------------------------------------------------或者--------------------------------------------------------------------SQL> select e.empno,e.ename,e.job,d.dname  2  from emp e,dept d  3  where e.deptno (+)= d.deptno; EMPNO ENAME                JOB                DNAME                        ---------- -------------------- ------------------ ----------------------------       7369 SMITH                CLERK              RESEARCH                           7499 ALLEN                SALESMAN           SALES                              7521 WARD                 SALESMAN           SALES                              7566 JONES                MANAGER            RESEARCH                           7654 MARTIN               SALESMAN           SALES                              7698 BLAKE                MANAGER            SALES                              7782 CLARK                MANAGER            ACCOUNTING                         7788 SCOTT                ANALYST            RESEARCH                           7839 KING                 PRESIDENT          ACCOUNTING                         7844 TURNER               SALESMAN           SALES                              7876 ADAMS                CLERK              RESEARCH                          EMPNO ENAME                JOB                DNAME                        ---------- -------------------- ------------------ ----------------------------       7900 JAMES                CLERK              SALES                              7902 FORD                 ANALYST            RESEARCH                           7934 MILLER               CLERK              ACCOUNTING                                                                      OPERATIONS                   已选择15行。
  11. C、完全连接:关键字为full outer join 或者 full join

  12. 在Oracle数据库中,全外连接的表示方式为

    SELECT table1.column, table2.column[,…]

    FROM table1 FULL JOIN table2[,…]

    ON table1.column1 = table2.column2[…];

  13. 例如:

  14. SQL> select e.empno,e.ename,d.deptno,d.dname from emp e full join dept d on d.deptno = e.deptno;     EMPNO ENAME                    DEPTNO DNAME                                ---------- -------------------- ---------- ----------------------------9528 LIKE                                                                       7369 SMITH                        20 RESEARCH                                   7499 ALLEN                        30 SALES                                      7521 WARD                         30 SALES                                      7566 JONES                        20 RESEARCH                                   7654 MARTIN                       30 SALES                                      7698 BLAKE                        30 SALES                                      7782 CLARK                        10 ACCOUNTING                                 7788 SCOTT                        20 RESEARCH                                   7839 KING                         10 ACCOUNTING                                EMPNO ENAME                    DEPTNO DNAME                                ---------- -------------------- ---------- ----------------------------               7844 TURNER                       30 SALES                                      7876 ADAMS                        20 RESEARCH                                   7900 JAMES                        30 SALES                                      7902 FORD                         20 RESEARCH                                   7934 MILLER                       10 ACCOUNTING                                                                   40 OPERATIONS                           已选择17行。
  15.  

    1. 注:左外连接其实就是:将左边表中的数据全部显示出不无论在其连接表中是否有对应的数据,如果没有与之对应的连接表的值为NULL。
      1.     右外连接是:指在内连接的基础上,将连接操作符右侧表中不符合连接条件的记录加入结果集中,与之对应的连接操作符左侧表列用NULL填充。
      2.      完全连接是:全外连接:指在内连接的基础上,将连接操作符两侧表中不符合连接条件的记录全部加入结果集中。

对于(+)操作符:

  • 当使用(+)操作符执行外连接时,应当将该操作符放在显示较少行(完全满足连接条件行)一端。
  • (+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
  • 当使用(+)操作符执行外连接时,如果在where语句中包含多个条件,则必须在所有的条件中都包含(+)操作符。
  • (+)操作符只能适用于列,而不能适用于表达式。
  • (+)操作符不能与or和in操作符一起使用。
  • (+)操作符只能用于左外连接和右外连接,不能用于实现完全连接。
  • (+)所在位置的另一则为连接方向,而且如果后面有条件都要注意(+)位置

三、自连接

在应用开发中,用户可能拥有“自引用式”的外键,“自引用式”外键是指表中的一个列可以是该表主键的一个外键。

例如:

SQL> select em2.ename 管理者,em1.ename 下属员工  2  from emp em1 left join emp em2  3  on em1.mgr = em2.empno  4  order by em1.mgr;管理者               下属员工                                                   -------------------- --------------------                                       JONES                FORD                                                       JONES                SCOTT                                                      BLAKE                JAMES                                                      BLAKE                TURNER                                                     BLAKE                MARTIN                                                     BLAKE                WARD                                                       BLAKE                ALLEN                                                      CLARK                MILLER                                                     SCOTT                ADAMS                                                      KING                 CLARK                                                      KING                 BLAKE                                                      管理者               下属员工                                                   -------------------- --------------------                                       KING                 JONES                                                      FORD                 SMITH                                                                           KING                                                                            LIKE                                                                            EAST                                                       已选择16行。

四、交叉连接

交叉连接的执行结果是一个笛卡儿积,那么这种查询结果是非常冗余的,但可以通过where子句来过滤。

QL> select count(*) from emp;  COUNT(*)                                                                      ----------                                                                              16                                                                      SQL> select count(*) from dept;  COUNT(*)                                                                      ----------                                                                               4                                                                      SQL> select count(*) from emp cross join dept;  COUNT(*)                                                                      ----------                                                                              64

转载于:https://my.oschina.net/u/212572/blog/795977

你可能感兴趣的文章
jQuery|元素遍历
查看>>
RedHat 6 安装配置Apache 2.2
查看>>
Openstack 安装部署指南翻译系列 之 Manila服务安装(Share Storage)
查看>>
underscore.js学习笔记
查看>>
windows下常用命令
查看>>
1.5编程基础之循环控制_29:数字反转
查看>>
组策略 之 设备安装设置
查看>>
人工智能还能干这些?这8种AI应用你可能意想不到
查看>>
实现Hyper-V 虚拟机在不同架构的处理器间迁移
查看>>
简单使用saltstack
查看>>
针对web服务器容灾自动切换方案
查看>>
突破媒体转码效率壁垒 阿里云首推倍速转码
查看>>
容器存储中那些潜在的挑战和机遇
查看>>
R语言的三种聚类方法
查看>>
深入理解Python中的ThreadLocal变量(上)
查看>>
如果一切即服务,为什么需要数据中心?
查看>>
《游戏开发物理学(第2版)》一导读
查看>>
Erlang简史(翻译)
查看>>
深入实践Spring Boot2.4.2 节点和关系实体建模
查看>>
10个巨大的科学难题需要大数据解决方案
查看>>