zoukankan      html  css  js  c++  java
  • DBS-Oracle:表的连接查询

    ylbtech-DBS-Oracle:表的连接查询

     链接查询是指基于两个或两个以上表或试图的查询。在实际应用中,查询单个表可能无法满足应用程序的实际需求(例如显示雇员的部门名称以及雇员名),在这种情况下就需要进行链接查询(DEPT和EMP表)。

    1.返回顶部
    1、

    7.4.1 简单链接

    链接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征。简单链接使用逗号将两个或多个表进行连接,这是最简单也是最常用的多表查询形式。

    1. 自然连接

    自然连接是指使用相等比较符(=)指定链接条件的链接查询,这种链接查询主要用于检索主从表之间的相关数据。使用自然链接的语法如下:
    select table1.column,table2.column from table1,table2
    where table1.column1=table2.column2
    例如显示所有雇员的名称、工资及其所在部门名称:
    SQL> select emp.ename,emp.sal,dept.dname from emp,dept
    2  where emp.deptno=dept.depno
    ENAME  SAL  DNAME
    --------------- ------------ -------------------
    SMITH  800   RESEARCH
    ALLEN  1600  ALES
    ...
    FORD  3000  RESEARCH
    MILLER  1300  ACCOUNTING
    已选择14行
    当条件很多时,可以使用 and 操作符。如下:
    SQL> select emp.ename,emp.sal,dept.dname from emp,dept
    2  where emp.deptno=dept.depno and dept.deptno=10;
    ENAME  SAL  DNAME
    --------------- ------------ -------------------
    CLARK  2450   ACCOUNTING
    KING     5000     ACCOUNTING
    MILLER  1300  ACCOUNTING
     

    2.表别名

    表别名就是定义一个标识,容易识别。在多表查询时,如果多个表之间存在相同的列明时,则必须使用表名来限定列。但是,随着查询变得越来越复杂,语句会因为每次限定列时输入表名而变得亢长。
    假如使用表别名重新上面的SQL语句。如下:
    SQL> select emp.ename,emp.sal,dept.dname from emp e,dept d
    2  where e.deptno=d.depno and d.deptno=10;
    ENAME  SAL  DNAME
    --------------- ------------ -------------------
    CLARK  2450   ACCOUNTING
    KING     5000      ACCOUNTING
    MILLER   1300      ACCOUNTING
    上面例子中定义 emp 表名为e,dept表名为d,在 where 子句中进行关联查询时,分别用两个别名代替了表名,这样大大简化了语句。
     

    3.列表名

    当在SQL*Plus中执行查询操作时,首先会显示列标题,然后才会显示数据。默认情况下,列标题是大写格式的列明或表达式。通过使用列别名,可以改变列标题的显示样式。如果要使用列表名,那么列表名在列或者表达式之后,在两者之间可以加 as 关键字。实例:
    SQL> select emp.ename as "雇员名称",emp.sal as "雇员工资",dept.dname as "雇员部门" from emp e,dept d
      where e.deptno=d.depno and d.deptno=10;
    雇员名称  雇员工资  雇员部门
    --------------- ------------ -------------------
    CLARK  2450   ACCOUNTING
    KING     5000      ACCOUNTING
    MILLER   1300      ACCOUNTING
    注意:如果列别名有大小写之分,并包含特殊字符或空格,那么这样的别名必须要用双引号引住。
     
    7.4.2 内连接
    内连接用于返回满足条件的记录,语法如下:
    select table1.column,table2.column from table
    [inner] join table2
    on table1.column1=table2.column2;
    其中参数的含义如下:
    inner join 表示内连接
    on 用于指定链接条件
    下面显示部门号为10的部门的部门名称及其雇员名,如下:
    SQL> select d.dname,e.ename from dept d inner join emp e
    2  on d.deptno=e.deptno;
    DNAME    ENAME
    ---------------------- -----------------
    ACCOUNTING   CLARK 
    ACCOUNTING   KING
    ACCOUNTING   MILLER
    提示:默认情况下,在执行连接查询时,如果没有指定任何连接操作符,那么这些连接查询都属于内连接。
     

    7.4.3 外链接

    外链接是内连接的扩展,它不仅会返回满足连接条件的所有记录,而且还会返回不满足条件的记录。例如:连接的表中有一列是空值,那么外链接也会返回一行。语法如下:
    select table1.column,table2.column from table1
    [left|right] outer join table2
    on table1.column1=table2.column2;
    提示:在链接条件中可以使用连接操作符来执行一个外链接;Oracle特有的外链接操作符是:   (+)。

    1.左外连接

    左外连接不仅会返回连接表中满足链接条件的所有记录,而且还会返回不满足条件的连接操作符左边表的其他行。例如:假如有两个表table1喝table2,它们通过 table1.column1和table2.column2进行链接,table1中包含 column1 为空值的一行。执行这个左外连接的 where子句如下:
    where table1.column1=table2.column2(+)
    下面以 dept 和  emp 表为例,首先更新emp表中雇员名 SCOTT 的部门号为空,如下:
    SQL> update emp set deptno=null where ename='SCOTT';
    已更新1行。
    更新后emp表中 deptno 列包含有一列为空值,使用内连接通过部门号连接查询时,这一列是不显示的,但是通过左外连接可以显示列中有空值的行。下面通过外连接查询部门号和雇员姓名,如下:
    SQL> select d.dname.e.ename from emp e,dept d
    2  where e.deptno=d.deptno(+);
    DNAME      ENAME
    ---------------------------- -------------------
    ACCOUNTING     MILLER
    ACCOUNTING   KING
    ...
    SALES       LLEN
                  SCOTT
    已选择14行
    上面的查询显示了emp表中的雇员名称为SCOTT的行,另外在左外连接中,外链接操作符(二)的右边。
     
    2.右外连接
    有连接不仅会返回满足连接条件的所有记录,而且还会返回不满足连接条件的连接操作符右边表的其他行。右外连接和左外连接的不同在于外链接操作符在操作符(二)的左边,返回连接操作符右边表中有空值的行。下面通过右外连接查询部门号和雇员名称,如下:
    SQL> select d.dname.e.ename from emp e,dept d
    2  where e.deptno(+)=d.deptno;
    DNAME      ENAME
    ---------------------------- -------------------
    RESEARCH     SIMTH
    SALES   ALLEN
    ...
    RESEARCH      FORD
    ACCOUNTING              MILLER
    OPERATIONS
    已选择14行
    上面查询返回一行部门为OPERATIONS的行,在emp表并没有雇员属于这个部门。
     
    7.4.4 自连接
    自连接是指同一张表之间的连接查询,主要用于显示上下级关系或者层次关系。例如:emp表中包含有一列mgr,它是雇员管理者的雇员号,如果雇员没有管理者,则mgr为空值。下面这个查询显示了雇员和管理者的关系:
    SQL> select empno,mgr,ename,job from emp;
    EMPNO  MGR  ENAME  JOB
    ---------------- ------------- ---------------- ---------------------
    7698    7839  BLAKE  MANAGER
    7782    7839  CLARK  MANAGER
    7788    7566  SCOTT  ANALYST
    7839        KING    PRESIDENT
    ...
    已选择14行。
    在上面的查询中,根据empno列和mgr列的对应关系,可以确定雇员BLAKE和CLARK的管理者是KING,而KING的mgr为空,因此KING没有管理者。
    为了显示雇员及其管理者之间的对应关系,可以使用自连接。因为自连接是在同一张表之间的连接,所以必须要定义表别名。
    例如,下面显示BLAKE和CLARK的管理者:
    SQL> select m.ename||' is '||e.name||' manager'
    2  from emp m,emp e
    3  where e.mgr=m.empno;
    M.ENAME||' IS '||E.NAME||'MANAGER'
    ---------------------------------------------------
    KING is CLARK manager
    KING is BLAKE manager
    ...
      已选择13行。
    在上面这个查询中,使用了emp表的两个别名e和m,别名e用于获取雇员的姓名,而别名m用于获得管理者的姓名,where子句以雇员管理者号等于雇员为条件进行查询。
    2、
    2.返回顶部
     
    3.返回顶部
     
    4.返回顶部
     
    5.返回顶部
     
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    ML-线性回归
    ML-决策树
    numpy常用知识点备忘(2)
    numpy常用知识点备忘
    ML-朴素贝叶斯算法
    Git常用命令备忘
    机器学习-决策树算法
    机器学习-线性模型(线性回归与逻辑回归)
    深入JVM内核(四)垃圾回收器与GC参数
    深入JVM内核(三)对象存活判定算法与垃圾收集算法
  • 原文地址:https://www.cnblogs.com/storebook/p/9921564.html
Copyright © 2011-2022 走看看