码迷,mamicode.com
首页 > 数据库 > 详细

ORACLE 第4节 多表查询

时间:2015-08-15 23:03:49      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

学习目标:

?使用等值不等值连接在SELECT语句中查询多个表中的数据。
?使用自连接
使用外连接查询不满足连接条件的数据


Oracle连接


等值连接:

使用连接在多个表中查询数据。

SELECT  table1.column, table2.column

FROM  table1, table2

WHERE  table1.column1table2.column2;

?WHERE 子句中写入连接条件。
?在表中有相同列时,在列名之前加上表名前缀

两个表的连接
select e.employee_id,e.last_name,d.department_id
from employees e,departments d
where e.department_id = d.department_id
三个表的连接

select e.employee_id,e.last_name,d.department_id,l.city
from employees e,departments d,locations l
where e.department_id = d.department_id and
d.location_id = l.location_id

?连接 n个表,至少需要n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。

非等值连接:

select e.last_name,e.salary,j.grade_level
from employees e,job_grades j
where e.salary between j.lowest_sal and j.highest_sal

内连接和外连接:


内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接

没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符,即用圆括号括起来的加号(+)
--左外连接
select e.employee_id,e.last_name,d.department_name
from employees e,departments d
where e.department_id = d.department_id(+)
--右外连接
select e.employee_id,e.last_name,d.department_name
from employees e,departments d
where e.department_id(+) = d.department_id


使用SQL: 1999语法连接

使用连接从多个表中查询数据:

SELECT table1.column, table2.column

FROM  table1

[CROSS JOINtable2] |

[NATURAL JOINtable2] |

[JOINtable2 USING(column_name)] |

[JOINtable2 ON(table1.column_name = table2.column_name)] |

[LEFT|RIGHT|FULL OUTER JOINtable2 ON(table1.column_name =table2.column_name)];

自然连接:
?NATURALJOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接
?在表中查询满足等值条件的数据。
如果只是列名相同而数据类型不同,则会产生错误。
select e.employee_id,e.last_name,d.department_name
from employees e natural join departments d

使用 USING子句创建连接:

?在NATURAL JOIN 子句创建等值连接时,可以使用 USING子句指定等值连接中需要用到的列
?使用USING 可以在有多个列满足条件时进行选择。

JOINUSING子句经常同时使用

select e.employee_id,e.last_name,d.department_name
from employees e join departments d
using(department_id)

这种方法有局限性:如果两个表中的列名(一个叫department_id,另外一个叫id)不一样,这个方法就失效了。

使用ON子句创建连接(常用):

?自然连接中是以具有相同名字的列为连接条件的。
?可以使用 ON子句指定额外的连接条件
?这个连接条件是与其它条件分开的。
ON子句使语句具有更高的易读性


<pre name="code" class="sql">select e.employee_id,e.last_name,d.department_name
from employees e 
join departments d
on e.department_id = d.department_id

这个和等值连接是很相似的

select e.employee_id,e.last_name,d.department_name,l.city
from employees e 
<strong>join departments d</strong>
on e.department_id = d.department_id
<strong>join locations l</strong>
on d.location_id = l.location_id


版权声明:本文为博主原创文章,未经博主允许不得转载。

ORACLE 第4节 多表查询

标签:

原文地址:http://blog.csdn.net/u014338577/article/details/47687605

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!