Heim  >  Artikel  >  Datenbank  >  Oracle 10g数据库基础之基本查询语句-下-连接子查询

Oracle 10g数据库基础之基本查询语句-下-连接子查询

WBOY
WBOYOriginal
2016-06-07 17:13:361153Durchsuche

实验18:表的连接查询 该实验的目的是掌握基本的联合查询. 表的连接 我们要从多张表中要得到信息,就得以一定的条件将表连接在一

实验18:表的连接查询

该实验的目的是掌握基本的联合查询.

表的连接

我们要从多张表中要得到信息,就得以一定的条件将表连接在一起查询。

相关阅读:

Oracle 10g数据库基础之基本查询语句-上
Oracle 10g数据库基础之基本查询语句-中-函数
Oracle 10g数据库基础之基本查询语句-下-连接&子查询

Oracle

Cartesian(笛卡儿)连接

当多张表在一起查询时,没有给定正确的连接条件,结果是第一张表的所有行和第二张表的所有行进行矩阵相乘,得到n*m行的结果集。

一般来说笛卡儿连接不是我们需要的结果。

但表如果有一行的情况下,结果有可能正确。

SQL> select ename,dname from emp,dept;

ENAME      DNAME

---------- --------------

SMITH      ACCOUNTING

ALLEN      ACCOUNTING

……..

SMITH      RESEARCH

ALLEN      RESEARCH

……..

SMITH      SALES

ALLEN      SALES

……..

SMITH      OPERATIONS

ALLEN      OPERATIONS

……..

56 rows selected

SQL>

结果为每个员工在每个部门上了一次班,,4*14=56,这并不是我们想得到的结果。

要避免笛卡儿连接一定要给定一个正确的连接条件。

等值连接

在连接中给定一个相等的连接条件。

SQL> select ename,dname from emp,dept where emp.deptno=dept.deptno;

Oracle

当列的名称在两张表内重复的时候,要加表的前缀来区分,避免不明确的定义。

表的别名

1。便于书写

2。将同名的表区分

3。一旦定义了别名,表的本名就无效

4。只在该语句内有效

5。定义方式为表名后紧跟别名,用空各间隔。

SQL> select ename,dname from emp e,dept d where e.deptno=d.deptno;

Oracle

SQL99的书写方式

select ename,dname from emp e join dept d on (e.deptno=d.deptno);

效率是相同的,SQL99是国标

列的别名,为了区分相同的列的名称,这是别名的本质。

SQL> select ename,dname,e.deptno,d.deptno

from emp e,dept d

where e.deptno=d.deptno;

Oracle

上述显示有两个列名称都叫deptno,我们无法区分。

SQL> select ename,dname,e.deptno "员工表",d.deptno "部门表"

from emp e,dept d

where e.deptno=d.deptno;

Oracle

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn