Oracle语句继续学习中。。。。。。
打开sql执行时间的开关。
set time on;//显示当前时间
set timing on;//显示sql执行的时间
关闭sql执行时间的开关,默认是关闭的。
set time off;
set timing off;//关闭sql执行的时间
1.查询10号部门和20号部门的员工信息,使用集合运算,并集.
1)合二为一:
select * from emp where deptno=10
union
select * from emp where deptno=20;
union二个集合中的公共部门,只取一次
当集合运算和多表查询都可以完成任务时,最好选用:多表查询
【多表查询】->子查询->集合 .
2.查询工资在1000-2000和1500-2500之间的员工信息(方式一:使用集合运算,交集)
- sql> select * from emp where deptno=10 union select
- 2 * from emp where deptno=20;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 7369 SMITH CLERK 7902 17-12月-80 800 20
- 7566 JONES MANAGER 7839 02-4月 -81 2975 20
- 7782 CLARK MANAGER 7839 09-6月 -81 2450 10
- 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
- 7839 KING PRESIDENT 17-11月-81 5000 10
- 7876 ADAMS CLERK 7788 23-5月 -87 1100 20
- 7902 FORD ANALYST 7566 03-12月-81 3000 20
- 7934 MILLER CLERK 7782 23-1月 -82 1300 10
- 已选择8行。
select * from emp where sal between 1000 and 2000
intersect
select * from emp where sal between 1500 and 2500;
3.查询工资在1000-2000和1500-2500之间的员工信息(方式二:使用行过滤)
- 22:08:20 sql> select * from emp where sal between 1000 and 2000
- 22:10:45 2 intersect
- 22:10:53 3 select * from emp where sal between 1500 and 2500;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
- 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
- 已用时间: 00: 00: 00.01
select *from empwhere (sal between 1000 and 2000) and (sal between 1500 and 2500);
4.查询工资在1000-2000,但不在1500-2500之间的员工信息,使用集合运算,差集
- 22:11:21 sql> select * from emp where (sal between 1000 and 2000) and (sal betwe
- en 1500 and 2500);
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
- 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
- 已用时间: 00: 00: 00.00
select ename "姓名",sal "工资" from emp where sal between 1000 and 2000
minus
select ename,sal from emp where sal between 1500 and 2500;
- 22:12:42 sql> select ename "姓名",sal "工资" from emp where sal between 1000 and
- 2000
- 22:14:43 2 minus
- 22:14:43 3 select ename,sal from emp where sal between 1500 and 2500;
- 姓名 工资
- -------------------- ----------
- ADAMS 1100
- MARTIN 1250
- MILLER 1300
- WARD 1250
- 已用时间: 00: 00: 00.00
where (sal between 1000 and 2000) and (sal not between 1500 and 2500);
- <span style="font-family: Arial,Helvetica,sans-serif; background-color: rgb(255,255,255);">select *from emp</span>
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 22:15:49 2 where (sal between 1000 and 2000) and (sal not between 1500 and 25
- 00);
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
- 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
- 7876 ADAMS CLERK 7788 23-5月 -87 1100 20
- 7934 MILLER CLERK 7782 23-1月 -82 1300 10
- 已用时间: 00: 00: 00.00
创建新表:
创建新表new_emp,复制emp表中的数据
create table new_empasselect * from emp;
向emp表中插入一条记录,注意维护表完整性约束(方式一)
insert into empvalues(4444,'JACK','IT',7788,sysdate,4000,100,40);
向emp表中插入一条记录,注意维护表完整性约束(方式二)
insert into emp(ename,empno,job,mgr,hiredate,sal,deptno,comm)values('MARRY',5555,3000,40,100);
向emp表中插入NULL值,显示插入
- sql> select * from emp;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 4444 JACK IT 7788 22-6月 -16 4000 100 40
- 5555 MARRY IT 7788 22-6月 -16 3000 100 40
- 7369 SMITH CLERK 7902 17-12月-80 800 20
- 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
- 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
- 7566 JONES MANAGER 7839 02-4月 -81 2975 20
- 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
- 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
- 7782 CLARK MANAGER 7839 09-6月 -81 2450 10
- 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
- 7839 KING PRESIDENT 17-11月-81 5000 10
- 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
- 7876 ADAMS CLERK 7788 23-5月 -87 1100 20
- 7900 JAMES CLERK 7698 03-12月-81 950 30
- 7902 FORD ANALYST 7566 03-12月-81 3000 20
- 7934 MILLER CLERK 7782 23-1月 -82 1300 10
- 已选择16行。
insert into emp(ename,comm)
values('SISI',6666,3500,NULL);
向emp表中插入NULL值,隐式插入
insert into emp(ename,deptno)
values('SOSO',7777,40);
插入成功:
使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在values子句中使用
- sql> select * from emp;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 4444 JACK IT 7788 22-6月 -16 4000 100 40
- 5555 MARRY IT 7788 22-6月 -16 3000 100 40
- 6666 SISI IT 7788 22-6月 -16 3500 40
- 7777 SOSO IT 7788 22-6月 -16 3500 40
insert into emp(ename,comm)
values('&ename',&empno,'&job',&mgr,&hiredate,&sal,&deptno,&comm);
使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在from子句中使用
select * from &emp;
使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在select子句中使用
select empno,ename,&no from emp;
将'SMITH'的工资增加20%
update emp set sal=sal*1.2where ename='SMITH';
将'SMITH'的工资设置为10号部门的平均工资
- sql> select * from emp;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 4444 JACK IT 7788 22-6月 -16 4000 100 40
- 5555 MARRY IT 7788 22-6月 -16 3000 100 40
- 6666 SISI IT 7788 22-6月 -16 3500 40
- 7777 SOSO IT 7788 22-6月 -16 3500 40
- 7369 SMITH CLERK 7902 17-12月-80 960 20
子:select avg(sal) from emp where deptno=10;
主:update emp set sal=trunc(2916.66667,0) where ename='SMITH';
update emp
set sal=(select avg(sal) from emp where deptno=10)
where ename='SMITH';
删除无佣金的员工
- sql> select * from emp;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 4444 JACK IT 7788 22-6月 -16 4000 100 40
- 5555 MARRY IT 7788 22-6月 -16 3000 100 40
- 6666 SISI IT 7788 22-6月 -16 3500 40
- 7777 SOSO IT 7788 22-6月 -16 3500 40
- 7369 SMITH CLERK 7902 17-12月-80 2917 20
delete from emp where comm is null;
删除工资比所有部门平均工资小的员工
- sql> delete from emp where comm is null;
- 已删除12行。
- 已用时间: 00: 00: 00.00
- sql> select * from emp;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 4444 JACK IT 7788 22-6月 -16 4000 100 40
- 5555 MARRY IT 7788 22-6月 -16 3000 100 40
- 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
- 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
- 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
- 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
- 已选择6行。
- 已用时间: 00: 00: 00.01
delete
from emp
where sal < (
select min(avg(sal))
from emp
group by deptno
--1567元
);
删除emp表
- sql> delete
- 2 from emp
- 3 where sal < (
- 4 select min(avg(sal))
- 5 from emp
- 6 group by deptno
- 7 --1567元
- 8 );
- 已删除2行。
- 已用时间: 00: 00: 00.00
- sql> select * from emp;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 4444 JACK IT 7788 22-6月 -16 4000 100 40
- 5555 MARRY IT 7788 22-6月 -16 3000 100 40
- 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
- 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
- 已用时间: 00: 00: 00.01
drop table emp;
根据new_emp表,创建emp表的结构,但不会插入数据
create table empasselect * from new_emp where 1=2;
向emp表,批量插入new_emp表中部门号为10的员工信息
insert into emp
select *from new_empwhere deptno=10;
删除emp表
- sql> insert into emp
- 2 select * from new_emp where deptno=10;
- 已创建3行。
- 已用时间: 00: 00: 00.03
- sql> select * from emp;
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ----- ---------- ---------- ----- ------------ ----- ----- ------
- 7782 CLARK MANAGER 7839 09-6月 -81 2450 10
- 7839 KING PRESIDENT 17-11月-81 5000 10
- 7934 MILLER CLERK 7782 23-1月 -82 1300 10
- 已用时间: 00: 00: 00.00
drop table emp;
依据new_emp表,创建emp表,且emp表只包括empno,ename字段
create table emp
as
select empno,ename from new_emp where 1!=1;
向emp表,批量插入emp表中部门号为10的员工信息
- sql> create table emp as select empno,ename from new_emp where 1!=1;
- 表已创建。
- 已用时间: 00: 00: 00.01
insert into emp(empno,ename)
select empno,ename
from new_emp
where deptno=10;
删除今天所创建的新表new_emp
- sql> insert into emp(empno,ename)
- 2 select empno,ename
- 3 from new_emp
- 4 ;
- 已创建14行。
- 已用时间: 00: 00: 00.03
- sql> select * from emp;
- EMPNO ENAME
- ----- ----------
- 7369 SMITH
- 7499 ALLEN
- 7521 WARD
- 7566 JONES
- 7654 MARTIN
- 7698 BLAKE
- 7782 CLARK
- 7788 SCOTT
- 7839 KING
- 7844 TURNER
- 7876 ADAMS
- 7900 JAMES
- 7902 FORD
- 7934 MILLER
- 已选择14行。
drop table new_emp;