Oracle学习04【持续更新】
Oracle语句继续学习中。。。。。。 打开SQL执行时间的开关。 1.查询10号部门和20号部门的员工信息,使用集合运算,并集. 1)合二为一: 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 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.013.查询工资在1000-2000和1500-2500之间的员工信息(方式二:使用行过滤) select *from empwhere (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 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.004.查询工资在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 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 <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 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表中的数据 向emp表中插入一条记录,注意维护表完整性约束(方式一) 向emp表中插入一条记录,注意维护表完整性约束(方式二) 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,comm) values('SISI',6666,3500,NULL); 向emp表中插入NULL值,隐式插入 insert into emp(ename,deptno) values('SOSO',7777,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,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% 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.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元 ); 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删除emp表 drop table emp; SQL> drop table emp; 表已删除。 已用时间: 00: 00: 00.55 SQL> select * from emp; select * from emp * 第 1 行出现错误: ORA-00942: 表或视图不存在 已用时间: 00: 00: 00.00根据new_emp表,创建emp表的结构,但不会插入数据 create table empasselect * from new_emp where 1=2; SQL> create table emp 2 as 3 select * from new_emp where 1=2; 表已创建。 已用时间: 00: 00: 00.08 SQL> select * from emp; 未选定行 已用时间: 00: 00: 00.00向emp表,批量插入new_emp表中部门号为10的员工信息 insert into emp select *from new_empwhere deptno=10; 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删除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.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行。删除今天所创建的新表new_emp drop table new_emp; SQL> drop table new_emp; 表已删除。 已用时间: 00: 00: 00.03 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |