SQL技巧(1)檢索記錄

2021-07-02 07:21:40 字數 3077 閱讀 4671

(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

postgresql
select 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...