首先還是老規矩,把用到的表貼出來,表名emp
問題1.
在where子句中不能直接使用别名,這是因為where的執行順序在select之前,也就是說,在通過where子句對資料進行篩選的時候,别名并不存在。
問題2. 在select語句中使用條件邏輯
在示例表中 SAL 字段表示工資,如果員工的工資少于2000,則傳回NO,如果超過4000,則傳回YES,否則傳回OK,這樣的需求類似于進階語言中的IF-ELSE語句,那麼這個功能如何通過SQL來實作呢?
通過case表達式(關于case表達式的介紹,在前面的文章中有提到)
SELECT ename,sal,
case when sal < 2000 then 'NO'
when sal > 4000 then 'YES'
else 'OK'
end as STATUS
from emp;
問題3.随機傳回若幹行記錄
從表中擷取特定數量的随機記錄
SELECT ename,job
from emp
ORDER BY RAND() limit 5;
在這裡使用了ORDER BY子句,可能有些人會有疑問,在emp表中并沒有出現供ORDER BY用來排序的字段,那麼排序是如何進行的呢?原因飲食ORDER BY子句可以接受一個函數的傳回值,并利用該傳回值改變結果集的順序。
我們換一種形式來展示
SELECT ename,job,RAND() as rand
from emp
ORDER BY rand limit 5;
這裡我們将随機值進行輸出,可以看到每一行資料按照随機值升序排序之後,取前五行。
問題4.把NULL值轉換為實際值
實際生産中,我們不希望從資料庫中拿出來的資料是NULL值,是以需要把NULL值做一些轉換,當值為NULL值轉換為特定的值,避免因為NULL而差生意料之外的問題。
1.通過coalesce函數,該函數能傳回參數清單中第一個非空的值
SELECT ename,job,comm,COALESCE(comm,0)
from emp;
以上代碼在MYSQL資料庫測試有效。