(molinaro-sql cookbook筆記)
select *
from emp
better style:
select empno, ename, job, sal, mgr, hiredate, comm, deptno
from emp
兩者效能相同,但列出所有列的名稱提高了可讀性。
多數廠商都支援的where中的運算子
= < > <= >= ! <>
邏輯運算子優先順序:
not > and > or
所以
where deptno = 10 or comm is not null or sal <= 2000 and deptno=20
等價於
where deptno = 10 or comm is not null or (sal <= 2000 and deptno=20)
select sal as salary, comm as commission
from emp
但是select-from-where的執行順序為
from->where->select, 在where執行是別名並不存在,可以使用內聯檢視(inline view)解決:
select *
from (
select sal as salary, comm as commission
from emp
) xwhere salary < 5000
其中內聯檢視的別名為x,並非所有資料庫都需要顯示命名,但所有資料庫都接受這種方式。
oracle,postgresql
select ename || 'work as' || job as msg
mysql
select concat (ename, 'work as' , job) as msg
sql server
select ename + 'work as' + job as msg
ename
salstatus
smith
800underpaid
allen
4200
overpaid
ward
2450ok
select ename, sal,
case when sal <= 2000 then 'underpaid'
when sal >= 4000 then 'overpaid'
else 'ok'
end as status
from emp
未匹配的行會返回null
db2
select *
from emp fetch first 5 rows only
mysql, postgresql
select *
from emp limit 5
oracle
select *
from emp
where rownum <= 5
注:無法用rownum = 5來返回第五行,獲取的每一行由於不滿足 rownum = 5永遠都重新計算為第1行
sql server
select top 5 *
from emp
db2
select ename, job
from emp
order by rand() fetch first 5 rows only
mysql
select ename, job
from emp
order by rand() limit 5
postgresqlselect ename, job
from emp
order by random() limit 5
oracle
select *
from (
select ename, job
from emp
order by dbms_random.value()
)where rownum <= 5
sql server
select top 5 ename, job
from emp
order by newid()
注:在order by中使用數字常量,根據select列表中相應位置的列排序,在order by中使用函式時,按函式在每一行計算結果。
select *
from emp
where comm is null
null不能用等於和不等於跟任何值比較(包括自身),必須使用is null/ is not null
select coalesce(comm, 0)
from emp
若comm非空,返回comm值,否則返回0
select ename, job
from emp
where deptno in (10, 20) and (ename like '%i%' or job like 』%er')
在部門10和部門20, 返回名字中有『i』或者職務中以『er'結尾的員工。
in 操作符: 在 where 子句中規定多個值, in (value1,value2,...)
萬用字元: % 匹配任何字元 _匹配單個字元
1 檢索資料 SQL
結束sql語句 多條sql語句必須以分號 分隔。多數dbms不需要在單條sql語句後加分號,但也有dbms可能必須在單條sql語句後加上分號。當 然,如果願意可以總是加上分號。事實上,即使不一定需要,加上分號也肯定沒有壞處。sql語句和大小寫 請注意,sql語句不區分大小寫,因此select與sel...
SQLCookbook 學習筆記 1檢索記錄
特殊字元 表示 所有列 使用 和指定某個列 效能相同。使用where 指定 要保留哪些行 判斷某個字段 是非為空 用 is null 或者 is not null 如 mysql select from menpiao where logdate is null 在使用 and 和or 的時候,可以...
SQL從特定位置檢索記錄
top只能從表頭部檢索資料 offsetfetch子句從結果集的特定位置檢索特定數量的記錄 offset指定在查詢執行之前要排除的行數,fetch指定在查詢執行時要返回的行數 例題 從表中篩選第16 26條記錄 select from employee order by employeeid off...