SQL Cookbook 第一章:檢索記錄 20140314

1.連接列值:將多列值作爲一列返回。

--DB2,Oracle:是用雙豎線作爲連接運算符。

--MySQL:支持concat函數。

select concat(ename,' works as a ',job) as msg from table where deptno=10

 

--SQL Server:使用+運算符進行連接操作。

select ename+' works as a '+job as msg from table where deptno=10

 

 

1.8、在select 語句中使用條件邏輯:要在select語句中對數值執行IF-ELSE 操作。

--使用CASE表達式直接在SELECT語句中執行條件邏輯。

 

例:如果一個小員工工資<=2000,返回‘UNDERPAID’; 如果>=4000,返回‘OVERPAID’;如果在兩者之間,返回‘OK’

 

select ename, sal,

case when sal<=2000 then 'UNDERPAID'

WHEN sal>=4000 then 'OVERPAID'

else 'OK'

end as status

from emp 

 

1.9、限制返回的行數:限制查詢中返回的行數,這裏不關心順序。

--DB2: select * from emp fetch first 5 rows only

--MySQL: select * from emp limit 5

--Oracle: select * from emp where rownum<=5

--SQL Server: select top 5 * from emp

 

 

1.10、從表中隨機返回n條記錄

--在ORDER BY 字句中使用該函數,對行進行隨機排序。

 

--DB2:同時使用內置函數RAND 與ORDER BY 和FETCH

select ename, job from emp order by rand() fetch first 5 rows only

--MYSQL: 同時使用內置的RAND函數、LIMIT、和ORDER BY

select ename,job,from emp order by rand() limit 5

--Oracle: 同時使用DBMS_RANDOM 中內置函數VALUE、ORDER BY 和內置函數ROWNUM:

select * from 

(select ename,job from emp order by dbms_random.value()) 

where rownum<=5

--SQL Server:同時使用內置函數NEWID, TOP,和ORDER BY 返回隨機結果集:

select top 5 ename,job from emp order by newid()

 

--總結:1)ORDER BY 字句可以接受函數的返回值,並使用它來改變結果集的次序。

2)ORDER BY 子句中指定數字常量時,是要求根據SELECT列表中相應位置的列來排序。

3)ORDER BY 子句中使用函數時,則按函數在每一行計算結果排序。

 

 

 

1.11、查找空值:要查找某列值爲空的所有行。

--要確定值是否爲空,必須使用IS NULL 或者IS NOT NULL.

select * from emp where comm is null

 

1.12、將空值轉換爲實際值

--使用COALESCE函數用實際值來替換空值, 多個參數時返回第一個非空值。

select coalesce(comm,0) from emp

 

--使用CASE:

select case 

when comm is null them 0 

else comm

end

from emp

 

 

1.13、按模式搜索

--需要返回匹配特定子串或模式的行。

--使用LIKE運算符合SQL 通配符“%”。

 

例:在部門10和部門20需要返回名字中有一個“I”或者職務(Job title)中帶“ER”的員工。

select ename,job 

from emp

where deptno in (10,20) and

(ename like '%I%' or job like '%ER')

 

 

 

 

 

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