** 内连接 **

内连接的特点就是 符合连接条件的数据 被选中 不符合连接条件的数据被过滤掉。


上面的 等值连接 非等值连接 自连接 都是内连接。


** 外连接 **

外连接的结果集 等于 内连接的结果集 加上 匹配不上的记录(一个也不能少)

(+) (+) 所在的表的字段 对面的表的数据全部被匹配出来 底层通过 NULL 记录匹配出来的

>select distinct m.id,m.first_name from s_emp e,s_emp m where e.manager_id(+) = m.id and e.manager_id is null;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
练习   s_emp   s_dept 
显示每个员工的id, first_name 和 对应的 部门名(name)
select e.id,first_name,name
from s_emp e,s_dept d
where e.dept_id=d.id;
公司为了业务发展 需要抽调一部分人出来 这些人将离开原来的部门
update s_emp set dept_id = null where id < 3;
commit;
显示每个员工的id, first_name 和 对应的 部门名(name) 没有部门编号的员工也要显示
select e.id,first_name,name
from s_emp e,s_dept d
where e.dept_id=d.id(+);

练习 s_dept s_region
显示每个部门的名字 和 对应的地区的名字
select d.id, d.name,r.name
from s_dept d,s_region r
where d.region_id = r.id;
公司业务扩大了 增加了一些新的部门
insert into s_dept values(100,'test100',NULL);
insert into s_dept values(101,'test101',NULL);
commit;
显示每个部门的名字 和 对应的地区的名字 没有地区编号的部门也要显示
select d.id, d.name,r.name
from s_dept d,s_region r
where d.region_id = r.id(+);
非等值连接的外连接 salgrade s_emp
列出每个员工的 id salary 和 salary 对应的工资级别
select id,salary,grade
from s_emp,salgrade
where salary between losal and hisal;
把 id = 25 和 id=24 的这两个人的工资 改成 12345
update s_emp set salary=12345 where id >= 24;
commit;
列出每个员工的 id salary 和 salary 对应的工资级别 超出统计范围的员工也要显示
select id,salary,grade
from s_emp,salgrade
where salary between losal(+) and hisal(+);


9月      数据库

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!