Oracle學習04【持續更新】

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









發佈了75 篇原創文章 · 獲贊 9 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章