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 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
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 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
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
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表中的數據
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.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 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.08
SQL> 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.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