1. 程式人生 > 實用技巧 >讀書筆記-mysql經典例項

讀書筆記-mysql經典例項

  • 隨機返回幾行
SELECT ename,job  
FROM EMP
ORDER BY RAND() LIMIT 5
  • 查詢NULL值: 要判斷一個值是否為Null,必須使用IS Null
select *from emp where comm is null

Null值不會等於或者不等於任何值,甚至不能與其自身作比較。因此,不能使用 = 或 != 來測試某一列的值是否為Null。判斷一行是否含有Null,必須使用IS Null。你也可以使用IS NOT Null來找到給定列的值不是Null的所有行

  • 將NUll值換為其他值
    SELECT COALESCE(comm,0) FROM EMP
    處理Null值時,最好利用資料庫的內建功能。
  • case when 處理Null值
select case
       when comm is not null then comm
       else 0
       end
from emp
  • order by: 如果你的查詢語句裡有GROUP BY或DISTINCT,那麼就不能按照SELECT列表之外的列進行排序。

  • 排序時對Null值的處理
    使用CASE表示式標記Null值。該標記有兩種可能的取值:一種代表Null值,另一種代表非Null值。一旦你做好了標記,只要簡單地把它放進ORDER BY子句就行了。這樣一來,你就能在不影響非Null值的情況下,方便地調整Null值的位置了

  • order by 根據條件排序

    如果JOB等於SALESMAN,就要按照COMM來排序;否則,按照SAL排序。你希望返回如下所示的結果集

  • UNION ALL:將重複的值也算上

  • UNION: 過濾掉重複值,會進行一次排序,去除重複值

  • 查詢只存在於一個表中的資料
    其中oracle可以直接用MINUS
    eg: select deptno from dept
    minus
    select deptno from emp
    mysql:
    select deptno from dept
    where deptno not in (select deptno from emp)
    可以使用DISTINCT來確保每個在EMP表裡缺少的DEPTNO值只出現一次
    select distinct deptno
    from dept
    where deptno not in (select deptno from emp)
    在使用NOT IN時,要注意Null值。考慮如下的表NEW_DEPT
    create table new_dept(deptno integer)
    insert into new_dept values (10)
    insert into new_dept values (50)
    insert into new_dept values (null)
    如果你試著使用NOT IN子查詢檢索存在於DEPT表卻不存在於NEW_DEPT表的DEPTNO,會發現查不到任何值
    SELECT *
    FROM DEPT
    WHERE deptno NOT IN (SELECT deptno FROM new_dept)
    這樣返回為空
    原因就在於NEW_DEPT表裡有Null值。子查詢會返回3行DEPTNO,分別為10、50和Null值。IN和NOT IN本質上是OR運算,
    由於Null值參與OR邏輯運算的方式不同,IN和NOT IN將會產生不同的結果
    當使用in時:

    使用not in時: