Oracle篇 之 多表查询

时间:2023-03-10 03:49:10
Oracle篇 之 多表查询

一、概念

从多个表中查询数据时,需要在表和表间建立连接,一般使用主外键建立连接

二、连接种类

1.

等连接:连接条件使用等号

非等连接:连接条件使用等号以外的其它符号

2.

内连接:根据指定的连接条件进行连接查询,满足连接条件的数据才会出现在结果集(最常见的等值连接)

外连接:在内连接的基础上,将某个连接表不符合连接条件的记录加入结果集

3.自连接:自身表中的列关联自身表中的其它列

4.集合操作符

union:两个集合的并集,去掉重复内容

union all:两个集合的并集,重复内容取2次

minus:第一个集合减去和第二个集合相交的内容

intersect:两个集合的交集

三、连接查询操作

1).连接查询语法

select last_name,name

from s_emp,s_dept

where s_emp.dept_id=s_dept.id;

左外连接:A left outer join B-----中的(A为基准,遇到A中不符合条件的也加入, B中用null填充,包含左边表的全部行)

基本写法:

1. Select  e.last_name,d.name

From s_emp e left outer join s_dept d

On e.dept_id=d.id;

Oracle特有写法:

2. Select  e.last_name,d.name

From s_emp e ,s_dept d

Where  e.dept_id(+)=d.id;

右外连接:A right outer join B -----(B为基准,遇到B中不符合条件的也加入 , A中用null填充,包含右边表的全部行)

全外连接(包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行)

查询所有员工名、员工部门名(员工没有分配部门、部门没有员工)?

select e.last_name,d.name

from s_emp e full outer join s_dept d

on e.dept_id=d.id;

select e.last_name,d.name

from s_emp e,s_dept d

where e.dept_id(+)=d.id(+); //Error,oracle没有全外连接特有写法

2)集合操作符

eg:

union:两个集合的并集,去掉重复内容

select e.last_name,d.name

from s_emp e,s_dept d

where e.dept_id=d.id(+)

union

select e.last_name,d.name

from s_emp e,s_dept d

where e.dept_id(+)=d.id;