Oracle学习04【持续更新】

来源:互联网 发布:ubuntu下安装eclipse 编辑:程序博客网 时间:2024/05/22 14:55

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二个集合中的公共部门,只取一次 
   当集合运算和多表查询都可以完成任务时,最好选用:多表查询
  【多表查询】->子查询->集合 .

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行。
2.查询工资在1000-2000和1500-2500之间的员工信息(方式一:使用集合运算,交集)

select * from emp where sal between 1000 and 2000
 intersect 
select * from emp where sal between 1500 and 2500;

22:08:20 SQL> select * from emp where sal between 1000 and 200022:10:45   2  intersect22: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
3.查询工资在1000-2000和1500-2500之间的员工信息(方式二:使用行过滤)
select * from emp where (sal between 1000 and 2000) and (sal between 1500 and 2500);
22:11:21 SQL> select * from emp where (sal between 1000 and 2000) and (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.00
4.查询工资在1000-2000,但不在1500-2500之间的员工信息,使用集合运算,差集
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 200022:14:43   2   minus22:14:43   3  select ename,sal from emp where sal between 1500 and 2500;姓名                       工资-------------------- ----------ADAMS                      1100MARTIN                     1250MILLER                     1300WARD                       1250已用时间:  00: 00: 00.00
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">select * from emp</span>
where (sal between 1000 and 2000) and (sal not between 1500 and 2500);
22:15:49   2  where (sal between 1000 and 2000) and (sal not between 1500 and 2500);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_emp as select * from emp;

向emp表中插入一条记录,注意维护表完整性约束(方式一)
insert into emp values(4444,'JACK','IT',7788,sysdate,4000,100,40);

向emp表中插入一条记录,注意维护表完整性约束(方式二)
insert into emp(ename,empno,job,mgr,hiredate,sal,deptno,comm) values('MARRY',5555,'IT',7788,sysdate,3000,40,100);

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行。
向emp表中插入NULL值,显示插入
insert into emp(ename,empno,job,mgr,hiredate,sal,deptno,comm) 
values('SISI',6666,'IT',7788,sysdate,3500,40,NULL);
向emp表中插入NULL值,隐式插入
insert into emp(ename,empno,job,mgr,hiredate,sal,deptno) 
values('SOSO',7777,'IT',7788,sysdate,3500,40);

插入成功:

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
使用&占位符,动态输入值,&可以运用在任何一个DML语句中,在values子句中使用
insert into emp(ename,empno,job,mgr,hiredate,sal,deptno,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.2 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     960           20
将'SMITH'的工资设置为10号部门的平均工资
子: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.00SQL> 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元
            );
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.00SQL> 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
删除emp表
drop table emp;
SQL> drop table emp;表已删除。已用时间:  00: 00: 00.55SQL> select * from emp;select * from emp              *第 1 行出现错误:ORA-00942: 表或视图不存在已用时间:  00: 00: 00.00
根据new_emp表,创建emp表的结构,但不会插入数据
create table emp as select * from new_emp where 1=2; 
SQL> create table emp  2  as  3  select * from new_emp where 1=2;表已创建。已用时间:  00: 00: 00.08SQL> select * from emp;未选定行已用时间:  00: 00: 00.00
向emp表,批量插入new_emp表中部门号为10的员工信息
insert into emp
select * from new_emp where deptno=10;
SQL> insert into emp  2  select * from new_emp where deptno=10;已创建3行。已用时间:  00: 00: 00.03SQL> 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
删除emp表
drop table emp;
依据new_emp表,创建emp表,且emp表只包括empno,ename字段
create table emp
as
select empno,ename from new_emp where 1!=1;
SQL> create table emp as select empno,ename from new_emp where 1!=1;表已创建。已用时间:  00: 00: 00.01
向emp表,批量插入emp表中部门号为10的员工信息
insert into emp(empno,ename)
select empno,ename
from new_emp
where deptno=10;
SQL> insert into emp(empno,ename)  2  select empno,ename  3  from new_emp  4  ;已创建14行。已用时间:  00: 00: 00.03SQL> 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行。
删除今天所创建的新表new_emp

drop table new_emp;

SQL> drop table new_emp;表已删除。已用时间:  00: 00: 00.03









0 0