《SQL必知必會》第 5 課 高級數(shù)據(jù)過濾

目標:

5.1 組合WHERE子句

5.2 IN操作符

5.3 NOT操作符

這一課講授如何組合 WHERE 子句以建立功能更強淑翼、更高級的搜索條件。我們還將學習如何使用 NOT 和 IN 操作符。

5.1 組合WHERE子句

為了進行更強的過濾控制,SQL 允許給出多個 WHERE 子句。這些子句有兩種使用方式佑刷,即以 AND 子句或 OR 子句的方式使用忘闻。

操作符(operator)用來聯(lián)結或改變 WHERE 子句中的子句的關鍵字钝计,也稱為邏輯操作符(logical operator)

5.1.1 AND操作符

SELECT prod_id,prod_price,prod_name

FROM products

WHERE vend_id='DLL01' AND prod_price<=4;

輸出:

AND?用在 WHERE 子句中的關鍵字,用來指示檢索滿足所有給定條件的行齐佳。

5.1.2 OR 操作符

SELECT prod_id,prod_price,prod_name

?FROM products

?WHERE vend_id='DLL01' OR OR vend_id='BRS01';

輸出:

OR WHERE 子句中使用的關鍵字私恬,用來表示檢索匹配任一給定條件的行。

5.1.3 求值順序

()>AND>OR

SELECT prod_price,vend_id

FROM products

WHERE (vend_id='DLL01' OR vend_id='BRS01') AND prod_price>=10;

輸出:

SELECT prod_price,vend_id

FROM products

WHERE vend_id='DLL01' OR vend_id='BRS01' AND prod_price>=10;

輸出:

5.2 IN操作符

IN 操作符?用來指定條件范圍炼吴,范圍中的每個條件都可以進行匹配本鸣。IN 取一組由逗號分隔、括在圓括號中的合法值硅蹦。

SELECT prod_name,prod_price

FROM products

WHERE vend_id IN ('DLL01','BRS01')

ORDER BY prod_name;

輸出:

為什么要使用 IN 操作符荣德?其優(yōu)點如下。?

1.在有很多合法選項時童芹,IN 操作符的語法更清楚涮瞻,更直觀。?

2.在與其他 AND 和 OR 操作符組合使用 IN 時假褪,求值順序更容易管理署咽。?

3.IN 操作符一般比一組 OR 操作符執(zhí)行得更快(在上面這個合法選項很少的例子中,你看不出性能差異)生音。?

4. IN 的最大優(yōu)點是可以包含其他 SELECT 語句宁否,能夠更動態(tài)地建立WHERE 子句。

IN?WHERE 子句中用來指定要匹配值的清單的關鍵字久锥,功能與 OR 相當家淤。

5.3 NOT操作符

1. NOT? ?WHERE 子句中用來否定其后條件的關鍵字。

2. 因為 NOT 從不單獨使用(它總是與其他操作符一起使用)瑟由,所以它的語法與其他操作符有所不同絮重。NOT 關鍵字可以用在要過濾的列前冤寿,而不僅是在其后。


SELECT prod_name

FROM products

WHERE NOT vend_id='DLL01'

ORDER BY prod_name;

輸出:

5.4 小結

本節(jié)課學習了WHERE子句結合AND和OR操作符進行高級篩選青伤,以及如何使用IN 和NOT 操作符督怜。

WHERE NOT?vend_id='DLL01'

WHERE?vend_id?IN?('DLL01','BRS01')

-- ----------------------------------

-- ----------------第5課 高級數(shù)據(jù)篩選 WHERE AND OR IN NOT----------------------------------

-- ----------------------------------

-- 5.1.1 AND操作符

SELECT prod_id,prod_price,prod_name

FROM products

WHERE vend_id='DLL01' AND prod_price<=4;

-- 5.1.2 OR操作符

SELECT prod_id,prod_price,prod_name

FROM products

WHERE vend_id='DLL01' OR vend_id='BRS01';

-- 5.1.3 求值順序 AND>OR

SELECT prod_price,vend_id

FROM products

WHERE (vend_id='DLL01' OR vend_id='BRS01') AND prod_price>=10;

SELECT prod_price,vend_id

FROM products

WHERE vend_id='DLL01' OR vend_id='BRS01' AND prod_price>=10;

-- 5.2 IN操作符

SELECT prod_name,prod_price

FROM products

WHERE vend_id IN ('DLL01','BRS01')

ORDER BY prod_name;

-- 5.3 NOT操作符

SELECT prod_name

FROM products

WHERE NOT vend_id='DLL01'

ORDER BY prod_name;


挑戰(zhàn)題:

答案:https://forta.com/books/0135182794/challenges/

1. 編寫 SQL 語句,從 Vendors 表中檢索供應商名稱(vend_name)狠角,僅返回加利福尼亞州的供應商(這需要按國家[USA]和州[CA]進行過濾号杠,沒準其他國家也存在一個加利福尼亞州)。提示:過濾器需要匹配字符串丰歌。

SELECT vend_name

FROM Vendors

WHERE vend_country = 'USA' AND vend_state = 'CA';

2. 編寫 SQL 語句姨蟋,查找所有至少訂購了總量 100 個的 BR01、BR02 或BR03 的訂單立帖。你需要返回 OrderItems 表的訂單號(order_num)眼溶、產品 ID(prod_id)和數(shù)量,并按產品 ID 和數(shù)量進行過濾晓勇。提示:根據(jù)編寫過濾器的方式堂飞,可能需要特別注意求值順序。48 | 第 5 課 高級數(shù)據(jù)過濾

SELECT order_num,prid_id,quantity

FROM orderitems

WHERE prod_id IN('BR01','BR02','BR03') AND quantity>=100;


3. 現(xiàn)在绑咱,我們回顧上一課的挑戰(zhàn)題绰筛。編寫 SQL 語句,返回所有價格在 3美元到 6美元之間的產品的名稱(prod_name)和價格(prod_price)描融。使用 AND铝噩,然后按價格對結果進行排序。

SELECT prod_name,prod_price

FROM products

WHERE prod_price>=3 AND prod_price<=6

ORDER BY prod_price;


4. 下面的 SQL 語句有問題嗎窿克?(嘗試在不運行的情況下指出薄榛。)

SELECT vend_name

FROM Vendors

ORDER BY vend_name

WHERE vend_country = 'USA' AND vend_state = 'CA';

SELECT vend_name

FROM Vendors

WHERE vend_country = 'USA' AND vend_state = 'CA'

ORDER BY vend_name;

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市让歼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丽啡,老刑警劉巖谋右,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異补箍,居然都是意外死亡改执,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門坑雅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辈挂,“玉大人,你說我怎么就攤上這事裹粤≈盏伲” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拇泣。 經(jīng)常有香客問我噪叙,道長,這世上最難降的妖魔是什么霉翔? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任睁蕾,我火速辦了婚禮,結果婚禮上债朵,老公的妹妹穿的比我還像新娘子眶。我一直安慰自己,他們只是感情好序芦,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布臭杰。 她就那樣靜靜地躺著,像睡著了一般芝加。 火紅的嫁衣襯著肌膚如雪硅卢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天藏杖,我揣著相機與錄音将塑,去河邊找鬼。 笑死蝌麸,一個胖子當著我的面吹牛点寥,可吹牛的內容都是我干的。 我是一名探鬼主播来吩,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼敢辩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弟疆?” 一聲冷哼從身側響起戚长,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怠苔,沒想到半個月后同廉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡柑司,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年迫肖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攒驰。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蟆湖,死狀恐怖,靈堂內的尸體忽然破棺而出玻粪,到底是詐尸還是另有隱情隅津,我是刑警寧澤诬垂,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站饥瓷,受9級特大地震影響剥纷,放射性物質發(fā)生泄漏。R本人自食惡果不足惜呢铆,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一晦鞋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棺克,春花似錦悠垛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纱皆,卻和暖如春湾趾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背派草。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工搀缠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人近迁。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓艺普,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鉴竭。 傳聞我的和親對象是個殘疾皇子歧譬,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內容