簡單查詢、插入、更新、刪除SQL語句

773281375發表於2014-03-06
以SCOTT使用者為例
1、查詢SCOTT使用者擁有哪些表
select table_name from user_tables;

2、查詢dept表的所有內容
select * from dept;

3、查詢dept的表結構
desc dept;

4、在dept中增加y一條資料
insert into dept(deptno,dname,loc) values(50,'Development','Beijing');
commit;

注:commit是把插入的資料提交到資料庫中,如果沒有commit,則插入的SQL語句是在計算機的記憶體中,如果遇上斷電故障,出入的資料有可能不會儲存在資料庫中。

5、更新dept的資料
update dept set loc='Shanghai' where deptno=50;
commit;

6、在dept中刪除一條資料
delete from dept where deptno=50;
commit;

7、設定查詢資料的時間格式
中國時間格式:
alter session set nls_date_format='YYYY-MM-DD';

8、查詢當前資料庫的時間
select sysdate from dual;
注:在查詢日期時,sysdate是資料庫當前的日期,dual是oracle資料庫的一個虛表,即不是一個真實存在的表,在查詢用到計算、常量表示式等時可以使用的dual虛表
 
9、查詢每個員工在公司的工作時間
select ename,round((sysdate-hiredate)/365,0) from emp;
注:round(X,Y):是Oracle資料庫的一個四捨五入的函式,X表示需要進行四捨五入的數,Y表示在哪位上進行四捨五入,如果Y=0表示在個位上進行四捨五入,Y=2表示在小數點後兩位進行四捨五入。

10、查詢每個員工在公司的工作時間,按年數排序
select ename,round((sysdate-hiredate)/365,0) from emp order by round((sysdate-hiredate)/365,0);
select ename,round((sysdate-hiredate)/365,0) from emp order by 2;
注:order by是排序關鍵字,2表示按照第二列排序,在這裡ename是第一列,round((sysdate-hiredate)/365,0)是第二列,預設按照升序排序

降序排序:
select ename,round((sysdate-hiredate)/365,0) from emp order by round((sysdate-hiredate)/365,0) desc;
或select ename,round((sysdate-hiredate)/365,0) from emp order by 2 desc;


11、變成中文列名,本土化查詢
select ename as "姓名",round((sysdate-hiredate),0) as "工作年限" from emp order by "工作年限" desc;
注:as是列別名的關鍵字,可以用英文雙引號""裡面的內容來表示該列的別名

12、對查詢出來的員工薪水進行文字說明
select ename || '員工本月工資為:¥' || (sal+1500) as "公司員工本月工資表" from emp order by sal;
注:||是Oracle的連線符,可以把查詢出來的資料和其他字串連線起來,''單引號裡面是字串,可以把裡面的字串輸入

13、過濾重複的資料
select distinct deptno from emp;

14、按照薪水排序查詢工資少於2000
select ename,sal from emp where sal<=2000 order by sal;
 
15、查詢薪水在某個區間的員工
select ename,sal from emp where sal between 1500 and 2500 order by sal;
或者select ename,sal from emp where sal>=1500 and sal<=2000 order by sal;

16、查詢沒有獎金或工資少於1500的員工
select empno,ename,job,sal,comm from emp where comm is null or sal<=1500;
注:null在Oracle資料庫中是一個特殊的值,它既不表示0,也不表示空,是一個不能確定的未知數

select empno,ename,job,sal,comm,sal+nvl(comm,0) from emp where comm is null or sal<=1500 order by sal+nvl(comm,0);
注:nvl(X,Y)是資料庫的一個內部函式,表示如果X有值,則返回X的值,如果X為null,則返回Y的值

17、檢視姓名中“M”開頭的員工
select ename,job,sal from emp where ename like 'M%';
注:like是where中的模糊查詢,後面字串需要用單雙引號括起來,M%表示以M開頭的所有字元

18、where中的in關鍵字
select ename,job, from emp where job in('SALESMAN','ANALYST','MANAGER');
注:in表示在某個列中的多個值均符合,或者使用or代替,如:
select ename,job from emp where job='SALESMAN' or job='ANALYST' or job='MANAGER';

19、統計公司每個崗位有多少個員工
select job,count(*) from emp group by job;
注:group by:是Oracle資料庫中的分組函式,可以這樣理解,按照工作職位進行分組,然後統計每個職位的人數
count(*):是統計數量的一個函式,這裡是統計公司每個崗位的人數

select job as "崗位",count(*)  as "總人數" from emp group by job order by count(*);

20、統計總共要支付員工的薪水
select sum(sal)+sum(nvl(comm,0)) from emp;
注:sum是Oracle資料庫內部的一個函式,即所有數值之和

21、求員工的平均工資
select round(avg(sal),2) from emp;
注:avg資料庫的求平均值函式

22、統計公司所有員工中最高、最低工資及相差多少
select max(sal),min(sal),max(sal)-min(sal) from emp;
注:max統計最大的數值,min統計最小的數值

23、查詢哪些崗位的平均工資高於2500
select job,avg(sal) from emp having avg(sal)>2500 group by job;
注:在使用group by分組時,如有條件限制需要使用having,而不能使用where
      having是篩選組,where篩選記錄

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29489498/viewspace-1102278/,如需轉載,請註明出處,否則將追究法律責任。

相關文章