oracle 学习笔记
–集合查询
CREATE TABLE emp_jobhistory(
id NUMBER, –流水号
empno NUMBER, –员工编号
job VARCHAR2(9), –岗位
begindate DATE, –开始日期
sal Number(7,2) –在该岗位时工资
);
drop table emp_jobhistory;
2.插入如下数据:
INSERT INTO emp_jobhistory VALUES(1,7839,’TRAINEE’,’17-11月-81’,500);
INSERT INTO emp_jobhistory VALUES(2,7839,’SALESMAN’,’17-2月-82’,1800);
INSERT INTO emp_jobhistory VALUES(3,7839,’CLERK’,’17-2月-83’,2000);
INSERT INTO emp_jobhistory VALUES(4,7839,’SALESMAN’,’17-2月-85’,1800);
INSERT INTO emp_jobhistory VALUES(5,7839, ‘MANAGER’ , ‘17-2月-87’ ,3000);
select * from emp_jobhistory;
–联合查询 union , union all
select sal,job from emp where empno=7839
union all
select sal,job from emp_jobhistory;
练习1
• 1.分别使用联合运算及完全联合运算完成,按照
时间升序顺序,查询员工7839的工作岗位列表。
select hiredate hiretime,job job from emp where empno=7839
union
select begindate,job from emp_jobhistory where empno=7839 order by hiretime;
select hiredate hiretime,job job from emp where empno=7839
union all
select begindate,job from emp_jobhistory where empno=7839 order by hiretime;
• 2.使用多表连接,查询每个部门的部门编号,部
门人数,没有人数的部门显示0。
select d.deptno,count(empno) from emp e,dept d
where e.deptno(+)=d.deptno
group by d.deptno;
• 3.使用联合运算,查询每个部门的部门编号,部
门人数,没有人数的部门显示0。
select deptno,0 from dept where deptno not in (select distinct deptno from emp)
union
select deptno,count(empno) from emp group by deptno;
• 4.使用联合运算,查询10号部门及20号部门的员
工姓名,部门编号。
select ename 姓名,deptno 部门编号 from emp where deptno=10
union all
select ename,deptno from emp where deptno=20 order by 部门编号;
select deptno 部门编号,null 地点,job 职位,hiredate 雇用时间 from emp
union
select deptno,loc,null,null from dept;
–相交运算
intersect
• 例:查询哪些员工做过岗位调动?
select empno from emp
intersect
select empno from emp_jobhistory;
–相减运算
minus
• 例:查询哪些员工没有做过岗位调动?
select empno from emp
minus
select empno from emp_jobhistory;
alter table emp
add constraint df_ename default ename ’ ‘;