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.返回顶部
 
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

DBS-Oracle:表的连接查询的更多相关文章

  1. Oracle表的常用查询实验(一)

    Oracle表的常用查询实验(一) 练习1.请查询表DEPT中所有部门的情况. select * from dept; 练习2.查询表DEPT中的部门号.部门名称两个字段的所有信息. select d ...

  2. Oracle 表的连接方式(2)-----HASH JOIN的基本机制2

    Hash算法原理 对于什么是Hash算法原理?这个问题有点难度,不是很好说清楚,来做一个比喻吧:我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分 ...

  3. Oracle 表的连接方式

    1. 连接说明 ① Oracle一次只能连接两个表.不管查询中有多少个表,Oracle 在连接中一次仅能操作两张表. ② 当执行多个表的连接时,优化器从一个表开始,将它与另一个表连接:然后将中间结果与 ...

  4. oracle中的连接查询与合并查询总结

    连接查询: 连接查询是指基于多张表或视图的查询.使用连接查询时,应指定有效的查询条件,不然可能会导致生成笛卡尔积.如现有部门表dept,员工表emp,以下查询因查询条件无效,而产生笛卡尔积:   (各 ...

  5. mysql——多表——外连接查询——左连接、右连接、复合条件查询

    ), d_id ), name ), age ), sex ), homeadd ) ); ,,,'nan','beijing'); ,,,'nv','hunan'); ,,,'nan','jiang ...

  6. mysql——多表——内连接查询

    内连接查询:可以查询两个或者两个以上的表,当两个表中存在表示相同意义的字段时,可以通过该字段来连接这两个表: 当该字段的值相等时,就查询出该记录. 前期准备两个表: ), d_id ), name ) ...

  7. oracle表内连接和外连接

    n  概述 表连接分为内连接和外连接 n  内连接 内连接实际上就是利用where子句对两张表形成的笛卡尔集进行筛选,我们前面学习的查询都是内连接,也是在开发过程中用的最多的连接查询. 基本语法: s ...

  8. Oracle表的基本查询

    Oracle 分页 1.rownum分页 Select * from emp; Select a1.*,rownum rn from (Select * from emp) a1; 2.显示rownu ...

  9. Oracle 表的连接方式(2)-----HASH JOIN的基本机制3

    HASH JOIN的模式 hash join有三种工作模式,分别是optimal模式,onepass模式和multipass模式,分别在v$sysstat里面有对应的统计信息: SQL> sel ...

随机推荐

  1. chrome打开控制台状态下,没有人为打断点,自动进入断点模式的解决方法

    如下图所示:在控制台去掉Sources -> XHR/fetch Breakpoints -> Any XHR or fetch 的勾

  2. Codeforces Round #449

    960  asteri 1384     492 00:04 -1 892 01:33     960 PEPElotas 1384     488 00:06 896 00:26       960 ...

  3. the selection cannot be run on any server

    导入war包后运行jsp 显示: the selection cannot be run on any server 问题原因: Dynamic Web Module 的版本与server不匹配.Dy ...

  4. 【MFC】如何在mfc窗口程序中调用控制台

    1.工程名为Zero,在CZeroDlg.cpp中加入头文件 #include “conio.h” : 2.在CZeroDlg::OnInitDialog() {…}函数中加入AllocConsole ...

  5. (转载)RxJava 与 Retrofit 结合的最佳实践

    RxJava 与 Retrofit 结合的最佳实践 作者:tough1985 感谢 DaoCloud 为作者提供的 500 RMB 写作赞助: 成为赞助方 /开始写作 前言 RxJava和Retrof ...

  6. ML一些简单的资源

    参考文献及推荐阅读 维基百科,http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm: 机器学习中的相似性度量,http://www.cnb ...

  7. 3D特征:关于HFM和HBB

    1.HBB    三维绑定框 (1): 要用到HBB,定义还不太清楚,来自于 VALVE Developer Community (https://developer.valvesoftware.co ...

  8. map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。

    var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt); // roots的值为[1, 2, 3], numbers的值仍为[1, 4, ...

  9. MySQL 5.7 安装过程中遇到的坑

    在安装的过程中遇到了几个坑,特地记录下来.启动的时候会有有个错误: 大意为mysql退出且更新不了pid文件. 查看error.log,如图: 大意为ibdtata1文件不够,初始化的时候页数太大.初 ...

  10. 小白学习Spark系列三:RDD常用方法总结

    上一节简单介绍了Spark的基本原理以及如何调用spark进行打包一个独立应用,那么这节我们来学习下在spark中如何编程,同样先抛出以下几个问题. Spark支持的数据集,如何理解? Spark编程 ...