天易05—-韓順平oracle視頻講解部分總結(01)

來源:互聯網
上載者:User

desc 表名;(可查看該表的詳細資料)

showuser;(查看當前所使用的使用者)

修改欄位名:alter table [表名] rename column 舊的欄位名 to 新的欄位名;

1)select b.id,b.title,b.ndate,a.manag,ename from bbs b,addmanage awhere b.id=a.aid

and a.managename='天易';

 

2)自串連(自串連是指在同一張表中的串連查詢,自串連查詢可以將一張表看做成兩張表進行查詢)

 顯示某個員工的上級領導的姓名,比如顯示'FORD'的上級領導是誰:

select worker.ename,boss.ename from emp worker,empboss where worker.mgr=boss.empno and

worker.ename='FORD';

3)子查詢(子查詢是指嵌入在其它sql語句中的select語句,也叫巢狀查詢)

 

   單行子查詢(單行子查詢是指只返回一行資料的子查詢語句)

   如何顯示SMITH同一部門的新員工:select * from emp wheredeptno=(select deptno

from emp where ename='SMITH');

  

   多行子查詢(多行子查詢指返回多行資料的子查詢)

   如何查詢和部門10的工作相同的僱員的名字、崗位、工資、部門號:

  select * from emp where job in(selectdistinctjob from emp where deptno=10);

(distinct關鍵字表示查詢出的資料中沒有重複資料)

  

   在多行子查詢中使用all操作符

   如何顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號:

  select ename,sal,deptno from emp where sal>all(select sal from empwhere

deptno=30);

   另一種方法:

  select ename,sal,deptno from emp where sal>(select max(sal) from empwhere

deptno=30);

  

   在多行子查詢中使用any操作符

   如何顯示工資比部門30的任意一個員工的工資高的員工的姓名、工資、和部門號:

  select ename,sal,deptno from emp where sal>any(select sal from empwhere

deptno=30);

   另一種方法:

  select ename,sal,deptno from emp where sal>(select min(sal) from empwhere

deptno=30);

  

   不論是單行子查詢還是多行子查詢,子查詢中返回的都只是一列而不是多列。

 

   多列子查詢:

   單行子查詢是指子查詢只返回單列、單行資料。

   多行子查詢是指返回單列多行資料,都是針對單列而言的。

   而多列子查詢則是指查詢返回多個列資料的子查詢語句

   如何查詢smith的部門和崗位完全相同的所有僱員:

  select * from emp where (deptno,job)=(select deptno,job from emp where

ename='SMITH');(deptno,job前後一定要對應一致)

 

 

    在from子句中使用子查詢

如何顯示高於自己部門平均工資的員工的資訊:

第一步:先查詢出各個部門的平均工資和部門號:

Select deptno,avg(sal) mysal from emp group by deptno;

第二步:把上面的查詢的結果值看做是一張子表

Selecta2.ename,a2.sal,a2.deptno,a1.mysal from emp a2, (Select deptno,avg(sal) mysalfrom emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal;

 

 

分頁查詢

Oracle分頁一共有三種方式:1.根據ROWID來分2.按分析函數來分3.按rownum來分(其中第一種最快,第三種次之,第二種最慢)

1.rownum分頁:

 1)顯示所有資料:

Select a1.*,rownum rn from (select * from emp) a1;

 2)只顯示出前10行的資料:

Select a1.*,rownum rn from (select * from emp) a1 whererownum<=10;

    3)只查詢出6到10行的所有資料:

     Select * from (Select a1.*,rownum rn from (select * from emp) a1 whererownum<=10) a2 where s2.rn>=6;

        4)只查詢出6到10行的僱員名稱和薪水:(這種情況下只需改動最底層的條件即可,即上面語句:(select *from emp))

     Select * from (Select a1.*,rownum rn from (select ename,sal from emp) a1where rownum<=10) a2 where s2.rn>=6;或者:

(select * from(select a.aid,a.managename,rownum rn from addmanage awhere rownum<=10)a1 where a1.rn>=6)

              只查詢出6到10行的僱員名稱和薪水並按薪水從低到高進行排序:(所有的改動只需在最底層:(select ename,sal from emp)進行改動)

              Select* from (Select a1.*,rownum rn from (select ename,sal from emp order by sal) a1where rownum<=10) a2 where s2.rn>=6;

 

用查詢結果建立新表

這個命令是一種快捷的建表方法:

Create tablemytable(id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp;

 

 

使用子查詢來插入資料(其中建立的表kkk中的三個欄位屬性必須和查詢的欄位的屬性對應一致,否則會報錯)

insert intokkk(myid,myname,mydept) select aid,managename,managepass from addmanage whereaid=23;

使用子查詢修改資料(欄位屬性也必須對應一致)

希望員工scott的崗位、工資、補助與smith員工一樣:

Update empset(job,sal,comn) =(select job,sal,comn from emp where ename=’smith’) whereename=’scott’;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.