1. 程式人生 > >sql文練習

sql文練習

都是 spa span 和平 var clas script nta com

查詢中用到的關鍵詞主要包含六個,並且他們的順序依次為 select -- from -- where -- group by -- having -- order by 如:當職員工資小於或等於 2000美元時,就返回信息“過低”,大於或等於 4000美元時,就返回消息“過高”,如果在這兩者之間,就返回“ok”。
select name,sal
case 
 when sal <= 2000 THEN ‘過低‘
 when sal >= 4000 THEN ‘過高‘
 ELSE  ‘OK‘
END AS stats FROM emp WHERE deptno = 10;
工資分檔次統計人數:
SELECT 檔次,count(*) AS 人數
    FROM(SELECT (CASE
         WHEN sal<=1000 THEN ‘0000-1000‘
         WHEN sal<=2000 THEN ‘1000-2000‘                                                                           
         WHEN sal<=3000 THEN ‘2000-3000‘
         ELSE ‘好高‘  END)  AS 檔次,ename,sal FROM emp)
   GROUP BY 檔次
   ORDER BY 1 ;
進行抽查的時候要求只返回兩條數據中的第二行
SELECT * FROM(SELECT rownum AS sn,emp.* FROM emp WHERE rownum <=2) WHERE sn=2;
//rownum是一次對數據進行標識,必須先有第一名再有第二名
進行抽查的時候要求只返回兩條數據
SELECT * FROM emp WHERE rownum<=2;
從表中隨機返回N條記錄(用dbms_random 來對數據進行隨機排序,然而取其中的三行)
SELECT empno,aname
    FROM(SELECT empno,ename FROM emp ORDER BY dbms_random.value())
WHERE  rownum <= 3;
常見的模糊查詢(查出vname中包含字符串“CED”的)
SELECT *  FROM  v  WHERE  vname  LIKE ‘%CED%‘;
查出vname中包含字符串“_BCE”的
錯誤:SELECT * FROM  v  WHERE vname  LIKE   ‘_BCE%‘;
正確:SELECT * FROM v  WHERE  vname  LIKE  ‘\_BCE%‘   ESCAPE ‘\‘;
因為在LIKE語句中%和_都是通配符,我的理解就是個數不同而已
查出vname包含字符串“_/BCE”
錯誤:SELECT   *  FROM     v    WHERE   vname  LIKE   ‘_\BCE%‘  ESCAPE ‘\‘ ;
正確:SELECT   *  FROM     v    WHERE   vname  LIKE   ‘_\\BCE%‘  ESCAPE ‘\‘ ;
結果:_\BCDF
解釋:雙寫轉義字符,百分號和下劃線的處理方式一樣
按照第三列順序排序:
SELECT EMPNO,ENAME,HIREDATE   FROM emp WHERE deptno=10 ORDER BY 3 ASC;
按照部門編號升序,並按工資降序排列:
SELECT empno,deptno,sal,ename,job FROM emp ORDER BY  2  ASC, 3  DESC;
替換字母字符串
SELECT TRANSLATE(‘ab 你好 bcadefg‘ , ‘abcdefg‘ , ‘1234567‘) AS   NEW_STR    FROM   DUAL;
按照字母和數字的混合列中的字母排序 data:6767ADAMS → ename:ADAMS
SELECT data,translate(data,‘-0123456789‘,‘-‘) AS ename  FROM v ORDER BY 2 ;
思路:先將列中字母,也就是取出排序的依據另成一列ename,然後在排序,把數字和字母都替換為空;
查詢每個月倒數第二天入職的員工信息
select 信息
feom 
where 時間列= last_day(時間列)-1
查詢 last_name 等於chen的manager信息 ---- lower表示把字符都編程小寫
select 信息
from 
where lower(last_name)=‘chen‘
通過一條sql查詢自連接
select m.*
from employess e,employess m
where e.manager_id = m.manasger_id and e.last_name = ‘chen‘
通過sql查詢子查詢
select * 
from employess
where employess_id = (
                      select  manager_id  
                      from employess 
                      where last_name = "chen")
查詢平均工資高於8000的部門id和平均工資(使用 having 原因就是 where 關鍵字無法和合計函數一塊使用)
select employess_id , avg(salary)
from employess
group by employess_id
HAVING avg(SALARY)>8000
查詢平均工資最低的員工信息 select *
from employess
where employess_id = (
        select employess_id
        from employess
        group by employess_id
        having salary = min(avg(salary))
)

sql文練習