`
java1573
  • 浏览: 121097 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

数据库“对等连接”的深入理解

SQL 
阅读更多

标题:“对等连接”的深入理解

数据库核心:关系型
关系的体现:一个表设置编号,其它表使用这个编号。通过“编号”是否相等来体现“关系”。

关键字:“编号相等”
用途:多表连接的条件
select *
from 表1,表2
where 表1.编号=表2.编号

更广泛的理解:
1、相关子查询
select 字段1,
(
  select count(字段2) from 表2
  where 表1.编号=表2.编号
)
from 表1
2、exists子句(存在)
select 字段1 from 表1
where not exists
(
  select *  from 表2
  where 表1.编号=表2.编号
)

3、from子查询(最灵活)
select 字段1
from 表1,
(
 select * from 表2
) a
where a.编号=表1.编号


4、多表更新
update 表1 set 字段1=(
   select 字段1 from 表2
   where 表1.编号=表2.编号
)
where 条件

 


需求:更新年龄在20以上(包括20)的姓名
--普通写法
update emp_memo t set t.ename='aa' where t.age>=20

--多表更新
update emp_memo t set t.ename=
(
  select e.ename from emp e
  where t.empno=e.empno
)
where t.age>=20

--提交
commit


测试数据:
prompt PL/SQL Developer import file
prompt Created on 2007-10-12 by Administrator
set feedback off
set define off
prompt Dropping EMP...
drop table EMP cascade constraints;
prompt Dropping EMP_MEMO...
drop table EMP_MEMO cascade constraints;
prompt Creating EMP...
create table EMP
(
  EMPNO    NUMBER(4) not null,
  ENAME    VARCHAR2(10),
  JOB      VARCHAR2(9),
  MGR      NUMBER(4),
  HIREDATE DATE,
  SAL      NUMBER(7,2),
  COMM     NUMBER(7,2),
  DEPTNO   NUMBER(2)
)
;
alter table EMP
  add constraint PK_EMP primary key (EMPNO);
alter table EMP
  add constraint FK_DEPTNO foreign key (DEPTNO)
  references DEPT (DEPTNO);

prompt Creating EMP_MEMO...
create table EMP_MEMO
(
  EMPNO NUMBER(4),
  ENAME VARCHAR2(10),
  MEMO  VARCHAR2(50),
  AGE   NUMBER
)
;
comment on table EMP_MEMO
  is '多表更新:将dept中员工姓名更新到dept2的员工姓名';

prompt Disabling triggers for EMP...
alter table EMP disable all triggers;
prompt Disabling triggers for EMP_MEMO...
alter table EMP_MEMO disable all triggers;
prompt Disabling foreign key constraints for EMP...
alter table EMP disable constraint FK_DEPTNO;
prompt Loading EMP...
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600, 300, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250, 500, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250, 1400, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500, 0, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300, null, 10);
commit;
prompt 14 records loaded
prompt Loading EMP_MEMO...
insert into EMP_MEMO (EMPNO, ENAME, MEMO, AGE)
values (7369, null, '了解LOVO', 15);
insert into EMP_MEMO (EMPNO, ENAME, MEMO, AGE)
values (7521, null, '榕城→蓉城', 25);
insert into EMP_MEMO (EMPNO, ENAME, MEMO, AGE)
values (7521, null, '蓉城→LOVO', 23);
insert into EMP_MEMO (EMPNO, ENAME, MEMO, AGE)
values (7369, null, 'LOVO报名', 30);
commit;
prompt 4 records loaded
prompt Enabling foreign key constraints for EMP...
alter table EMP enable constraint FK_DEPTNO;
prompt Enabling triggers for EMP...
alter table EMP enable all triggers;
prompt Enabling triggers for EMP_MEMO...
alter table EMP_MEMO enable all triggers;
set feedback on
set define on
prompt Done.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics