SQL WHERE高階資料過濾

2021-10-04 07:31:58 字數 2379 閱讀 6536

1.講解where子句建立功能更強、更高階的搜尋條件,將學習not和in操作符

上面我們將where子句在過濾資料時使用的都是單元的條件,為了更強的過濾控制,sql允許給出多個where子句,這些自己有兩種使用方式,即and子句或or子句使用方式.

操作符(operator)

用來聯結或改變where子句中的子句關鍵字,也稱邏輯操作符.

2.and操作符

用來檢索滿足條件的行

要通過不止乙個列進行過濾,可以使用and操作符給where子句附加條件,下面**給出乙個列子:

sql語句檢索有產品名字和折扣**滿足條件的輸出.

3.or操作符

用來表示檢索匹配任一給定的條件的行.

or操作符與and操作符正好相反,它指示dbms檢索匹配任何一條件的行,事實上,許多dbms在or where子句的第乙個條件得到滿足的情況下,就不在計算第二個條件了(在第乙個條件滿足時,不管第二個條件是否滿足,相應的行都將被檢索出來).

or操作符告訴dbms匹配任意條件而不是同時匹配兩個條件,如果這裡使用的是and操作符,則沒有資料返回(因為會建立沒有匹配行的where子句).

4.求值順序

where子句可以包含任意數目的and和or操作符,允許兩者結合以進行複雜、高階過濾.

我們可以看到有問題,顯然行沒有按預期的進行過濾,為什麼?原因在於求值的順序,sql(像多數語言一樣)在處理or操作符前,優先處理and操作符,當sql看到where子句時,10252**為30以上,以及10248的所有產品id,而不管其**如何,換句話說,由於and在求值過程中優先順序更高,操作符被錯誤地組合了.

我們採用圓括號對操作符進行明確分組,看下面select語句及輸出:因為and具有比or操作符更高的求值順序,所以dbms首先過濾括號內的or條件,這時,sql語句變成了選擇由**在30以上的所以id.

在where子句使用圓括號

任何時候使用具有and和or操作符的where子句,都應該使用圓括號明確地分組操作,不要過分依賴預設求值順序,即使它確實如你希望的那樣.使用圓括號沒有壞處,它能消除歧義.

5.in操作符

where子句中用來指定要匹配的清單關鍵字,功能與or相當.

in操作符用來指定條件範圍,範圍中的每個條件都可以進行匹配,in取一組都會分隔、括在圓括號的合法值.下面介紹這個操作符.

此select語句檢索查出產品orderid,in操作符後跟由逗號分隔的合法值,這些值必須在括號中.

為什麼使用in操作符呢,其優點為:

在有很多合法選項時,in操作符的語法更清楚,更直觀.

在與其他and和or操作符組合使用in時,求值順序更易管理.

in操作符一般比一組or操作符執行得更快

in的最大優點是可以包含其他select語句,能更動態地建立where子句.

6.not操作符

where子句中的not操作符有且只有乙個功能,那就是否定其後所跟的任何條件,因為not從不單獨使用(它總是與其他操作符一起使用),所以它的語法與其他操作符有所不同,not關鍵字可以用在要過濾的資料.

notwher子句中用來否定其後的關鍵字

列出了產品為chai之外的所有產品.

這裡的not否定跟在其後的條件,因此,dbms不是匹配productname=『chai』,而是匹配chai之外的所有東西.

也可以使用<>操作符來完成.

為什麼使用not?這裡簡單where子句,使用not確實沒有什麼優勢,在更複雜句子中,not是非常有用的,例如,在聯合in操作符聯合使用時,not可以非常簡單地找出與條件列表不匹配的行.

高階資料過濾(like)

單字元過濾 select from t employee where fname like erry 多字元過濾 select from t employee where fname like t 集合匹配過濾 jt 第乙個字母為j 或t的資訊 jt 反集合 第乙個字母不為j 或t 的資訊 sele...

SQL學習之高階資料過濾

一 高階資料過濾之in操作符 in 操作符用來指定條件範圍,範圍中的每個條件都可以進行匹配。in取一組由逗號分隔 括在圓括號中的合法值。如下 select itemid,itemname,checkvaluenum,checkvaluestring,resultlevel from t check ...

SQL(5) 高階資料過濾

select prod name,prod price from product where vend id dell01 and prod price 5000 select prod name,prod price from product where vend id del01 or vend...