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’;