1、組合where子句
為了進行更強的過濾控制,sql允許給出多個where子句,這些子句有兩種使用方式,即以and子句或or子句的方式使用。
注意:1、操作符:用來聯結或改變where子句中的子句的關鍵字,也稱為邏輯操作符
1.1、and操作符
#檢索由**商dll01製造且**小於等於4美元的所有產品的名稱和**;
select prod_id , prod_price , prod_name
from products
where vend_id = 'dll01' and prod_price <= 4 ;
1.2 、or操作符
#檢索由**商dll01或者brs01製造的所有產品的產品名和**;
select prod_name ,prod_price
from products
where vend_id = 'dll01' or vend_id = 'brs01' ;
1.3、求值順序
列出**為10美元及以上,且有dll01或bsr01製造的產品。
輸入:select prod_name,prod_price
from products
where vend_id = 'dll01' or vend_id = 'brs01'
and prod_price >= 10;
#錯誤輸出:
分析:返回的行中由四行**小於10美元,顯然返回的行未按預期的進行過濾。原因就是and操作符的優先順序比or操作符的優先順序高,所有這裡理解為:由**商brs01製造的**為10美元以上的所有產品,以及由**商製造的所有產品而且不管其**如何。
輸入:select prod_name,prod_price
from products
where (vend_id = 'dll01' or vend_id = 'brs01')
and prod_price >= 10;
#正確#正確的語句和前一條的唯一差別就是,將前兩個條件用圓括號括了起來
輸出:注意:
1、任何時候使用具有and和or操作符的whereziju,都應該使用圓括號明確的分組操作符。不要過分依賴預設求值順序,即使他確實如你希望的那樣。使用圓括號沒有什麼壞處,他能消除歧義。
2、in操作符
in:where子句中用來指定要匹配值的清單的關鍵字,功能與or相當。
select prod_name,prod_price
from products
where vend_id in ('dll01','brs01')
order by prod_name ;
select prod_name,prod_price
from products
where vend_id = 』dll01『 or vend_id = 'brs01'
order by prod_name ;
為什麼要使用in操作符
1、再由很多合法選項時,in操作符的語法更清楚,更直觀。
2、在與其他and和or操作符組合使用in時,求職順序更容易管理。
3、in操作符一般比一組or操作符執行的更快。
4、in的最大優點是可以包含其他select語句,能夠更動態的建立where子句。
3、not操作符
where子句中的not操作符由且只有乙個功能,那就是否定其後所更的任何條件。
select prod_name
from produtcts
where not vend_id = 'dll01'
order by prod_name ;
分析:這裡的not否定跟在其後的條件,因此,dbms不是匹配vend_id為dll01,而是匹配非dll01之外的所有東西。
#以上的例子也可以使用<>操作符來完成
select prod_name
from products
where vend_id <> 'dll01'
order by prod_name ;
分析:為什麼使用not?對於這裡的這種簡單的where子句,使用not確實沒有什麼優勢。但在更複雜的子句中,not是非常有用的。
sql一些小查詢語句
1.表內容 2005 05 09 勝 2005 05 09 勝 2005 05 09 負 2005 05 09 負 2005 05 10 勝 2005 05 10 負 2005 05 10 負 如果要生成下列結果,該如何寫sql語句?勝 負 2005 05 09 2 2 2005 05 10 1 2...
SQL查詢的一些小技巧
1.當使用and時,將很可能不為真的條件放在前面.因為資料庫系統從左到右計算條件,並遵守運算子的優先順序.如果乙個條件中存在兩個或多個and運算子,則左邊的乙個條件首先被計算.例子 1 select language 2from computer 3where comefrom usa and da...
SQL一些小技巧
1.把某個字段重新生氣序列 從1到n declare i int set i 0 update table1 set i i 1,field1 i 2.按成績排名次 update 成績表 set a.名次 select count 1 from 成績表 b where a.總成績 b.總成績 fro...