oracle新接觸的sql語句

下面sql語句  是依據  oracle下用戶scott/tiger下的emp表

新接觸的知識

1.出現在select列表中的字段或者出現在order by後面的字段,如果不是包含在分組函數中,那麼該字段必須同時在group by子句中出現.

出現在group by子句中的字段則不必須出現在select列表中.

2.如果沒有group by子句,select列表中不允許出現字段(單行函數)與分組函數混合使用的情況

例如

SELECT empno ,sal FROM emp; 合法

SELECT avg(sal)FROM emp;合法

SELECT empno,INITCAP(ename),AVG(sal) FROM emp;不合法

3.case 表達式

SELECT empno,ename,sal,
CASE deptno
  WHEN 10 THEN '財務部'
    WHEN 20 THEN '研發部'
      ELSE '未知部門'
        END 部門
        FROM emp;

4.decode表達式

SELECT empno,ename,sal,
decode(deptno,10,'財務部門',
       20,'研發部門',
       '未知部門')部門
       FROM emp;

5.在pl/sql developer中   使用select * from emp for update 然後點擊查詢結果集左上角的鎖  就能進行修改 也可以對一個列進行插入等操作

6. v_ename=&NAME;   &表示可以接受鍵盤輸入   如果接受的是數字的話  直接輸入即可 例如:  2

如果接受的是字符型數據的話  需要在數據上加    單引號    例如 '張雲成'

-------------------------------------------------

1.獲取受僱日期的天數

SELECT ename,trunc(SYSDATE-hiredate)FROM emp;

SELECT ename,trunc(SYSDATE)-TRUNC(hiredate) FROM emp;

2.算出每個部門,每個職位的平均工資和平均獎金(平均值包括沒有獎金),如果平均獎金大於300,顯示"獎金不錯",如果平局獎金100到300,顯示

"獎金一般",如果平均獎金小於100,顯示"基本沒有獎金",按部門編號降序,平均工資降序排列.

SELECT AVG(sal),AVG(NVL(comm,0)),
CASE  
  WHEN AVG(NVL(comm,0))>300 THEN '獎金不錯'
    WHEN AVG(NVL(comm,0))<=300 AND AVG(NVL(comm,0))>100 THEN '獎金一般'
      ELSE '基本沒獎金'END 獎金狀況
FROM emp GROUP BY deptno,job
ORDER BY deptno DESC,AVG(sal) DESC;

3.得到工資大於自己部門平均工資的員工信息

SELECT e.*,m.avgsal
FROM emp e, (SELECT deptno, AVG(sal) AS avgsal FROM emp GROUP BY deptno)m
WHERE e.deptno=m.deptno AND e.sal>m.avgsal ;

4.兩表聯查

a: 1      b:  2

     2           4

     3           6

     4

     5

1):內連接

    2   2

    4    4

2)滿外連接

    1   

     2     2

     3     

     4      4

     5     

              6

3)左連接

    1

     2     2

     3    

     4      4

     5

4)右連接

    2    2

    4    4

           6

5.集合操作

建立一張只包含20部門員工信息的表

CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20;     


參考資料:超詳細Oracle教程.pdf


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章