方格精選

QUERY 函式大解析(二):WHERE

更新於 發佈於 閱讀時間約 12 分鐘
嘿,大家好!我是喜特先生,Mr. Sheet。不知道大家的 SELECT 用得如何?
這是 QUERY 函式大解析系列文章的第二篇,建議你先看過第一篇 QUERY 函式的原理和 SELECT 並實際練習操作後,再來看這篇文章唷!(延伸閱讀: QUERY 函式大解析(一):基本原理與 SELECT
我們上次聊到了怎麼用 SELECT 選取整個資料範圍和特定欄位,這次我們要來介紹怎麼用 WHERE 來更進一步指定搜尋條件,回傳符合條件的資料
我在方格子上寫了一系列使用 QUERY 的教學文章,也歡迎你來看看:
我們來看看究竟這個 WHERE 是什麼,還有為什麼這麼實用吧!

WHERE 是什麼

「當符合某條件的時候,回傳資料」的意思。WHERE 語法可以指定搜尋條件,要 QUERY 只回傳符合條件的資料。所謂的「條件」可以分成下列幾種:
WHERE 可以讓你對「欄」指定搜尋條件,不是「列」喔!WHERE 會去搜尋欄裡面相符指定條件的資訊,並回傳結果。
接下來會針對每個條件類型,來講解怎麼用、什麼時候用。

比較運算子

= 等於
「這欄等於 ### 的值都回傳給我吧」
的意思。可以用來等於數值或是文字。記得如果要做文字的處理,要放上「單引號」(因為我們的 QUERY 語法本身就帶有雙引號、再用雙引號會產生錯誤)!
WHERE A = 100
WHERE B = '喜特先生'
WHERE C = 'abc'
!=、<> 不等於
「這欄不等於 ### 的值都回傳給我吧」
。兩個寫法(!=、<>)都可以,可以用來不等於數值或是文字。
WHERE A != 100
WHERE B != '喜特先生'
WHERE C <> 'abc'
>、<、>=、<= 大於、小於、大於等於、小於等於
「這欄__於 ### 的值都回傳給我吧」
的意思。
WHERE A > 100
WHERE B <= 50
WHERE C < 1000

空值

is null 為空值
「這欄裡面只要儲存格是空值的資料都回傳給我吧」
的意思。
WHERE A is null
is not null 不為空值
「這欄裏面只要儲存格不是空值的資料都回傳給我吧」
。通常會用在過濾掉空的儲存格的資料,很方便的語法。
WHERE B is not null

文字搜尋

要先注意,如果你要搜尋的資料是英文的話,大小寫有差!在做搜尋的時候可以先看一下原本的資料是怎麼寫的,再進行 QUERY。
contains 含有…的文字
「這欄含有 ### 的文字的資料都回傳給我吧」
的意思。只要含有特定字元,就會回傳結果。
WHERE A contains '喜特先生'
例如說你想找資料欄裡含有「育」的資料,你會得到「私立才國小」、「市立德國小」、「市立英國小」等等含有「育」字的結果。
舉個英文大小寫要注意的例子:例如你想找 John,「John Adams」、「Long John Silver」會列入結果,但「john adams」不會被算在裡面,因為 john 的 j 不是大寫。
starts with 以…開始的文字
「這欄以 ### 為開始的文字的資料都回傳吧!」
的意思。
WHERE B starts with '喜'
如搜尋以「市立」開始的資料,就會得到「市立北大國小」、「市立新林國小」、「市立板橋國小」等等以「市立」開始的結果。如果是英文的話邏輯也一樣,搜尋以「e」開始的資料,會得到「engineering」、「eng」、「eat」等等。
ends with 以…結束的文字
「這欄以 ### 為結束的文字的資料都回傳吧!」
的意思。
WHERE C ends with '生'
像是搜尋以「777」為結尾的資料,就會得到「(02)…777」、「(03)…777」的結果。英文也是,搜尋以「y」結尾的資料,會得到「cowboy」、「boy」、「my」等等的結果。
其他還有兩個我們沒介紹,是更進階的 matches 還有 like 。它們可以做更細緻的搜尋,但礙於篇幅我們之後再講解講解了。

邏輯運算子

假想你今天在新聞看到,你最愛的老婆們終於要來台灣開握手會:
「我想去新垣結衣的握手會」
「我想去吉岡里帆的握手會」
但如果可以的話,「小孩子才做選擇,我全都要嘛!」所以你開始思考達成兩樣條件的可能性。
我們把「前往結衣的握手會」當成一個條件,「前往吉岡的握手會」當另一個條件,得到的可能性就是我們的 QUERY 結果。
我們就以這個打比方,來解釋 QUERY 裡支援的三個邏輯運算子。
AND 且 — 「小孩子才做選擇,我兩場握手會全都要去!」
「把同時符合條件 A 和條件 B 的結果都傳給我吧」的意思。
WHERE A 條件 AND B 條件
WHERE A = '新垣結衣' AND B = '吉岡里帆'
如果今天有三個或更多的條件,你也可以用 And 串連起來,也就是「把同時符合條件 A、條件 B、條件 C⋯條件 N 的值都給我吧」的意思。
OR 或 — 「好吧,我只能去其中一個,但是不管去哪一個,我就很滿意了」
「把符合任何條件資料都傳給我吧!」的意思。
WHERE A 條件 OR B 條件
WHERE A = '新垣結衣' OR B = '吉岡里帆'
同理可證,三個以上的條件時,也是「把符合條件 A、或條件 B、或條件 C ⋯或條件 N 的資料都傳給我吧!」的意思。
NOT 不反轉自己設定的條件
「把不符合這個條件的資料都傳給我吧!」的意思。
WHERE NOT A 條件
WHERE NOT A 條件 AND NOT B 條件
切記要把 NOT 寫在條件前面否定才會生效!
當然如果覺得太麻煩,也可以適度用剛剛介紹到的「is not null」、「<>」、「!=」來達成你的搜尋。
你也可以用這些邏輯運算子做出不同排列組合:
符合 A 是新垣結衣且 B 是吉岡里帆、但 C 不是有村架純:
WHERE A = '新垣結衣' AND B = '吉岡里帆' AND NOT C = '有村架純'
如果你有多個條件,也可以用括號()讓 QUERY 知道你要優先執行這個條件,像是:
WHERE (A = '新垣結衣' AND B = '吉岡里帆') OR C = '有村架純'
再加上前面的比較運算子、文字搜尋和空值的運用,你可以篩選出不少資訊了!

WHERE 語法怎麼寫?

寫在 SELECT 後面就可以了。也就是:
=QUERY(資料, "SELECT ... WHERE ...")
如果有很多搜尋條件、用邏輯運算子串連,你可以這樣寫(以 AND 為例):
=QUERY(資料, "SELECT ...
WHERE A = ###
AND B = ###
AND C = ###...")

現在是練習時間!

打開試算表、複製後,你會看到一份名單。
(免責聲明:這個名單上面的資訊都是用各種不同的生成器做出來的,如有雷同,真的是巧合)
每一個欄位的資料類型都是文字,所以我們稍後的搜尋都要記得用單引號括起來。來出幾個題目:

一、搜尋所有性別是女性的資料

我們先把剛剛的結構搬出來看一下:
=QUERY(資料, "SELECT ... WHERE ...")
資料:無庸置疑,我們的資料範圍很明顯就是這個名單的 A 欄到 E 欄了。
語法:我們要全部的欄位,就用 SELECT * 把全部的欄位包起來。再來就是 WHERE 的條件,我們要找性別(C欄)是「女」的資訊。
條件:用等於(=)就可以解決了!
那我們就回到 QUERY 的試算表,寫下 =QUERY 後,定義資料的範圍:
=QUERY('資料'!A:E
再來打個逗點,寫下 SELECT 的欄位有什麼:
=QUERY('資料'!A:E, "SELECT *
最後就是 WHERE!空一格,來指定一下條件:C 欄等於「女」。別忘了把「女」這個字符用單引號括起來:
=QUERY('資料'!A:E,"SELECT * WHERE C = '女'")
痛快按下 Enter 鍵:
你可能也注意到這個搜尋結果沒有標題列吧?如果你需要標題的話,可以在 QUERY 的最後一個參數那邊打上一個 1,告訴 QUERY 我這邊有一列標題。語法像是這樣:
=QUERY('資料'!A:E, "SELECT * WHERE C = '女'", 1)
雖然我們前面提到「標題」這個參數可以省略,QUERY 可以偵測資料是否含有標題列,但好像對中文的資料不是太有效,建議還是可以加上 1 來確保搜尋結果安全無虞。

二、搜尋所有姓氏是「林」的人員資料

我們的資料範圍不變,SELECT 的範圍也不變,只需要考慮 WHERE 怎麼寫就行了!中文的姓氏是姓名的第一個字,我覺得用「以…開始」的 starts with 應該滿適合的:
=QUERY('資料'!A:E, "SELECT * WHERE A starts with '林'", 1)

三、搜尋所有姓氏是「李」且性別是「女」的人員資料

再來我們就來試試看用邏輯運算子,用 and 來連接兩個條件。
這邊的條件A是「姓氏是李」、條件B是「性別是女」。我們要找同時符合兩個條件(也就是「且」)的話,會用到 and。如果你還不太確定條件A跟條件B怎麼寫的話,就是:
姓氏是李:WHERE A starts with '李'
性別是女:WHERE C = '女'
接下來我們把兩個條件結合起來,就會變成:
WHERE A starts with '李' and WHERE C = '女'
但這邊的 WHERE 寫了兩次,我們只需要寫一次即可。也就是:
WHERE A starts with '李' and C = '女'
這樣就行了!接下來就把前面的資料範圍、還有 SELECT、指定標題列寫好的話,就會像是這樣:
=query('資料'!A:E, "SELECT *
WHERE A starts with '李' and C = '女'",1)
執行結果就會像是這個樣子:

讀到這裡,大家辛苦了!到目前為止我們已經學到了怎麼用 WHERE 來限制搜尋條件,進一步篩選出想要的結果。到這邊其實已經學會了 QUERY 的一大部分,多多習慣 WHERE、就可以很有效率地在茫茫大海裡面找到資料。
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!
想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!
avatar-img
14.4K會員
148內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
喜特先生官方沙龍 的其他內容
QUERY,一個真的要隆重介紹的函式,真的很好用。一起從頭開始學這個強力的函式吧!
QUERY,一個真的要隆重介紹的函式,真的很好用。一起從頭開始學這個強力的函式吧!
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
上一篇我們介紹了SQL基本架構和語法,如何用簡單的SELECT 和 FROM 撈取資料。本篇我們來討論,如何根據指定的條件來篩選資料,僅返回符合條件的結果。
Thumbnail
※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
條件資料行是POWER QUERY裡面一個可以設定指定條件,進而判斷符合條件的資料產生指定的內容,就跟EXCEL中的IF函數很像。 但是POWER QUERY的條件資料行,他是利用對話式的視窗,所以不需要自己動手寫函數,就可以順利達到相同的功能。 今天就用1個資料3個題目來學習這個功能
Thumbnail
網友提出的一個問題,如影片。 當輸入關鍵字+數量,例:起司+10 下拉式選單自動產生有關起司的產品的清單供選擇並且帶出規格、數量、金額與小計 《為什麼要做這個功能呢?》 當資料很多的時候,如果每筆資料都是用篩選的方式來找出想要的產品,可能會耗掉非常多的時間。 所以如果可以藉由關鍵字,
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
上一篇我們介紹了SQL基本架構和語法,如何用簡單的SELECT 和 FROM 撈取資料。本篇我們來討論,如何根據指定的條件來篩選資料,僅返回符合條件的結果。
Thumbnail
※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
條件資料行是POWER QUERY裡面一個可以設定指定條件,進而判斷符合條件的資料產生指定的內容,就跟EXCEL中的IF函數很像。 但是POWER QUERY的條件資料行,他是利用對話式的視窗,所以不需要自己動手寫函數,就可以順利達到相同的功能。 今天就用1個資料3個題目來學習這個功能
Thumbnail
網友提出的一個問題,如影片。 當輸入關鍵字+數量,例:起司+10 下拉式選單自動產生有關起司的產品的清單供選擇並且帶出規格、數量、金額與小計 《為什麼要做這個功能呢?》 當資料很多的時候,如果每筆資料都是用篩選的方式來找出想要的產品,可能會耗掉非常多的時間。 所以如果可以藉由關鍵字,
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為