如何編寫簡單查詢
已發表: 2022-03-21如何查詢 SQL 數據庫:
- 確保您有一個數據庫管理應用程序(例如 MySQL Workbench、Sequel Pro)。
- 如果沒有,請下載數據庫管理應用程序並與您的公司合作以連接您的數據庫。
- 了解您的數據庫及其層次結構。
- 找出您的表格中有哪些字段。
- 開始編寫 SQL 查詢以提取所需數據。
聽說過 SQL 嗎? 您可能在數據分析的背景下聽說過它,但從沒想過它會適用於您作為營銷人員。 或者,您可能會想,“這是為高級數據用戶準備的。 我永遠做不到。”
好吧,你大錯特錯了! 最成功的營銷人員都是數據驅動的,而數據驅動最重要的部分之一就是快速從數據庫中收集數據。 SQL 是最流行的工具。
如果您的公司已經將數據存儲在數據庫中,您可能需要學習 SQL 才能訪問數據。 但不用擔心——您來對地方了。 讓我們直接跳進去。
為什麼使用 SQL?
SQL(通常發音為“sequel”)代表結構化查詢語言,當公司有大量數據需要處理時使用它。 SQL 的美妙之處在於,在將數據存儲在關係數據庫中的公司工作的任何人都可以使用它。 (很有可能,你的確實如此。)
例如,如果您在一家軟件公司工作並希望獲取客戶的使用數據,您可以使用 SQL 來實現。 如果您正在幫助開發一個包含客戶購買數據的電子商務公司的網站,您可以使用 SQL 找出哪些客戶正在購買哪些產品。 當然,這些只是眾多可能應用中的一小部分。
這樣想:你有沒有在 Excel 中打開一個非常大的數據集,只讓你的電腦死機甚至關機? SQL 允許您一次僅訪問數據的某些部分,因此您不必將所有數據下載到 CSV 中、對其進行操作並可能使 Excel 過載。 換句話說,SQL 負責您可能習慣在 Excel 中進行的數據分析。
如何編寫簡單的 SQL 查詢
在我們開始之前,請確保您有一個允許您從數據庫中提取數據的數據庫管理應用程序。 一些選項包括 MySQL 或 Sequel Pro。
首先下載這些選項之一,然後與您公司的 IT 部門討論如何連接到您的數據庫。 您選擇的選項將取決於您產品的後端,因此請與您的產品團隊核實以確保您選擇了正確的選項。
了解數據庫的層次結構
接下來,重要的是要習慣您的數據庫及其層次結構。 如果您有多個數據數據庫,則需要仔細研究要使用的數據的位置。
例如,假設我們正在使用有關美國人的多個數據庫。 輸入查詢“SHOW DATABASES;”。 結果可能顯示您有幾個用於不同位置的數據庫,包括一個用於新英格蘭的數據庫。
在您的數據庫中,您將擁有不同的表,其中包含您要使用的數據。 使用上面的相同示例,假設我們想找出其中一個數據庫中包含哪些信息。 如果我們使用查詢“SHOW TABLES in NewEngland;”,我們會發現我們有新英格蘭每個州的表:people_connecticut、people_maine、people_massachusetts、people_newhampshire、people_rhodeisland 和 people_vermont。
最後,您需要找出表中有哪些字段。 字段是您可以從數據庫中提取的特定數據。 例如,如果要拉取某人的地址,字段名稱可能不只是“地址”——它可能分為地址城市、地址狀態、地址壓縮。 為了弄清楚這一點,請使用查詢“Describe people_massachusetts;”。 這提供了您可以使用 SQL 提取的所有數據的列表。
讓我們使用我們的新英格蘭示例快速查看層次結構:
- 我們的數據庫是:新英格蘭。
- 我們在該數據庫中的表是:people_connecticut、people_maine、people_massachusetts、people_newhampshire、people_rhodeisland 和 people_vermont。
- people_massachusetts 表中的字段包括:address_city、address_state、address_zip、hair_color、age、first_name 和 last_name。
現在,讓我們編寫一些簡單的 SQL 查詢來從我們的 NewEngland 數據庫中提取數據。
基本 SQL 查詢
要了解如何編寫 SQL 查詢,讓我們使用以下示例:
2003 年出生的馬薩諸塞州有哪些紅頭髮的人按字母順序排列?
選擇
SELECT 選擇要在圖表中顯示的字段。 這是您要從數據庫中提取的特定信息。 在上面的示例中,我們希望找到符合其餘條件的人。
這是我們的 SQL 查詢:
選擇
名,
姓
;
從
FROM 精確定位您要從中提取數據的表。 在前面的部分中,我們了解到新英格蘭的六個州分別有六個表:people_connecticut、people_maine、people_massachusetts、people_newhampshire、people_rhodeisland 和 people_vermont。 因為我們專門尋找馬薩諸塞州的人,所以我們將從該特定表中提取數據。
這是我們的 SQL 查詢:
選擇
名,
姓
從
people_massachusetts
;
在哪裡
WHERE 允許您過濾更具體的查詢。 在我們的示例中,我們希望過濾查詢以僅包含 2003 年出生的紅頭髮的人。讓我們從紅頭髮過濾器開始。
這是我們的 SQL 查詢:
選擇
名,
姓
從
people_massachusetts
在哪裡
頭髮顏色=“紅色”
;
如果您想查看馬薩諸塞州的所有人以及他們的頭髮顏色,hair_color 可能是您最初的 SELECT 語句的一部分。 但是,如果您想過濾以僅查看紅頭髮的人,則可以使用 WHERE 語句來實現。
之間
除了等於 (=),BETWEEN 是另一個可用於條件查詢的運算符。 對於介於指定最小值和最大值之間的值,BETWEEN 語句為真。
在我們的例子中,我們可以使用 BETWEEN 從特定年份提取記錄,例如 2003 年。這是查詢:
選擇
名,
姓
從
people_massachusetts
在哪裡
出生日期在“2003-01-01”和“2003-12-31”之間
;
和
AND 允許您向 WHERE 語句添加其他條件。 請記住,除了 2003 年出生的人之外,我們還想過濾紅頭髮的人。由於我們的 WHERE 語句被紅頭髮標準佔用,我們如何才能過濾特定的出生年份呢?
這就是 AND 語句的用武之地。在這種情況下,AND 語句是一個日期屬性——但不一定非要如此。 (注意:請與您的產品團隊核對日期格式,確保格式正確。)
這是我們的 SQL 查詢:
選擇
名,
姓
從
people_massachusetts
在哪裡
頭髮顏色=“紅色”
和
出生日期在“2003-01-01”和“2003-12-31”之間
;
或者
OR 也可以與 WHERE 語句一起使用。 使用 AND 時,兩個條件都必須為真才能出現在結果中(例如,頭髮顏色必須是紅色並且必須在 2003 年出生)。 對於 OR,任一條件都必須為真才能出現在結果中(例如,頭髮顏色必須是紅色或必須在 2003 年出生)。
下面是 OR 語句在運行中的樣子:
選擇
名,
姓
從
people_massachusetts
在哪裡
hair_color = '紅色'
或者
出生日期在“2003-01-01”和“2003-12-31”之間
;
不是
在 WHERE 語句中使用 NOT 來顯示指定條件不成立的值。 如果我們想拉出所有沒有紅頭髮的馬薩諸塞州居民,我們可以使用以下查詢:
選擇
名,
姓
從
people_massachusetts
哪裡沒有
hair_color = '紅色'
;
訂購方式
計算和組織也可以在查詢中完成。 這就是 ORDER BY 和 GROUP BY 函數的用武之地。首先,我們將使用 ORDER BY 和 GROUP BY 函數查看 SQL 查詢。 然後,我們將簡要了解兩者之間的區別。
ORDER BY 子句允許您按您在 SELECT 語句中指定的任何字段進行排序。 在這種情況下,讓我們按姓氏排序。
這是我們的 SQL 查詢:
選擇
名,
姓
從
people_massachusetts
在哪裡
hair_color = '紅色'
和
出生日期在“2003-01-01”和“2003-12-31”之間
訂購方式
姓
;
通過...分組
GROUP BY 類似於 ORDER BY,但聚合了具有相似性的數據。 例如,如果您的數據中有任何重複項,則可以使用 GROUP BY 來計算字段中的重複項數。
這是您的 SQL 查詢:
選擇
名,
姓
從
people_massachusetts
在哪裡
hair_color = '紅色'
和
出生日期在“2003-01-01”和“2003-12-31”之間
通過...分組
姓
;
由 VS 訂購通過...分組
為了展示 ORDER BY 語句和 GROUP BY 語句之間的區別,讓我們簡單地跳出馬薩諸塞州的示例,看看一個非常簡單的數據集。 以下是四名員工的身份證號碼和姓名的列表。
如果我們在此列表中使用 ORDER BY 語句,員工的姓名將按字母順序排序。 結果將如下所示:
如果我們改為使用 GROUP BY 語句,則員工將根據他們在初始表中出現的次數進行計數。 請注意,Peter 在初始表中出現了兩次,因此結果如下所示:
跟我到現在? 好的,讓我們回到我們一直在創建的關於 2003 年出生的馬薩諸塞州紅頭髮人的 SQL 查詢。
限制
根據數據庫中的數據量,運行查詢可能需要很長時間。 這可能會令人沮喪,特別是如果您在查詢中出錯並且現在需要等待才能繼續。 如果你想測試一個查詢,LIMIT 函數可以讓你限制你得到的結果的數量。
例如,如果我們懷疑馬薩諸塞州有成千上萬的人有紅頭髮,我們可能希望在完全運行之前使用 LIMIT 測試我們的查詢,以確保我們獲得了我們想要的信息。 例如,假設我們只想查看結果中的前 100 人。
這是我們的 SQL 查詢:
選擇
名,
姓
從
people_massachusetts
在哪裡
hair_color = '紅色'
和
出生日期在“2003-01-01”和“2003-12-31”之間
訂購方式
姓
限制
100
;
插入
除了從關係數據庫中檢索信息之外,SQL 還可用於修改數據庫的內容。 當然,您需要權限才能更改公司的數據。 但是,如果您曾經負責管理數據庫的內容,我們將分享一些您應該知道的查詢。
首先是 INSERT INTO 語句,用於將新值放入數據庫。 如果我們想向馬薩諸塞州表中添加一個新人,我們可以通過首先提供我們要修改的表的名稱以及我們要添加到的表中的字段來實現。 接下來,我們將要添加的每個相應值寫入 VALUE。
該查詢可能如下所示:
插入
people_massachusetts (address_city, address_state, address_zip, hair_color, age, first_name, last_name)

價值觀
(劍橋,馬薩諸塞州,02139,金發女郎,32 歲,Jane,Doe)
;
或者,如果要向表中的每個字段添加值,則無需指定字段。 這些值將按照它們在查詢中列出的順序添加到列中。
插入
people_massachusetts
價值觀
(劍橋,馬薩諸塞州,02139,金發女郎,32 歲,Jane,Doe)
;
如果您只想向特定字段添加值,則必須指定這些字段。 假設我們只想插入一條包含 first_name、last_name 和 address_state 的記錄——我們可以使用以下查詢:
插入
people_massachusetts (first_name, last_name, address_state)
價值觀
(Jane,Doe,馬薩諸塞州)
;
更新
如果您想用不同的值替換數據庫中的現有值,可以使用 UPDATE。 例如,如果有人在數據庫中記錄為紅頭髮,而實際上他們的頭髮是棕色的,該怎麼辦? 我們可以使用 UPDATE 和 WHERE 語句更新這條記錄:
更新
people_massachusetts
放
hair_color = '棕色'
在哪裡
first_name = '簡'
和
姓氏 = 'Doe'
;
或者,假設您的表中存在問題,其中“address_state”的某些值顯示為“Massachusetts”,而其他值顯示為“MA”。 要將“MA”的所有實例更改為“Massachusetts”,我們可以使用一個簡單的查詢並一次更新多條記錄:
更新
people_massachusetts
放
address_state = '馬薩諸塞州'
在哪裡
地址狀態 = MA
;
使用 UPDATE 時要小心。 如果您沒有使用 WHERE 語句指定要更改的記錄,您將更改表中的所有值。
刪除
DELETE 從您的表中刪除記錄。 與 UPDATE 一樣,請務必包含 WHERE 語句,以免意外刪除整個表。
或者,如果我們碰巧在 people_massachusetts 表中找到了幾條實際居住在緬因州的記錄,我們可以通過定位 address_state 字段來快速刪除這些條目,如下所示:
刪除自
people_massachusetts
在哪裡
address_state = '緬因州'
;
獎勵:高級 SQL 提示
現在您已經學習瞭如何創建一個簡單的 SQL 查詢,讓我們討論一些其他技巧,您可以使用這些技巧將您的查詢提升一個檔次,從星號開始。
*(星號)
當您向 SQL 查詢添加星號字符時,它會告訴查詢您希望在結果中包含所有數據列。
在我們一直使用的馬薩諸塞州示例中,我們只有兩個列名:first_name 和 last_name。 但是假設我們想要在結果中看到 15 列數據——在 SELECT 語句中輸入所有 15 列名稱會很痛苦。 相反,如果您將這些列的名稱替換為星號,則查詢將知道將所有列拉入結果中。
下面是 SQL 查詢的樣子:
選擇
*
從
people_massachusetts
在哪裡
頭髮顏色=“紅色”
和
出生日期在“2003-01-01”和“2003-12-31”之間
訂購方式
姓
限制
100
;
%(百分比符號)
百分號是一個通配符,意味著它可以表示數據庫值中的一個或多個字符。 通配符有助於查找共享常見字符的記錄。 它們通常與 LIKE 運算符一起用於在數據中查找模式。
例如,如果我們想獲取表中郵政編碼以“02”開頭的每個人的姓名,我們可以編寫以下查詢:
選擇
名,
姓
在哪裡
address_zip LIKE '02%'
;
在這裡,“%”代表“02”之後的任何數字組,因此此查詢會查找任何具有以“02”開頭的 address_zip 值的記錄。
過去 30 天
一旦我開始定期使用 SQL,我發現我的一個首選查詢涉及試圖找出哪些人在過去 30 天內採取了行動或滿足了特定的一組標準。
假設今天是 2021 年 12 月 1 日。您可以通過將birth_date 設為 2021 年 11 月 1 日和 2021 年 11 月 30 日之間的跨度來創建這些參數。該 SQL 查詢如下所示:
選擇
名,
姓
從
people_massachusetts
在哪裡
頭髮顏色=“紅色”
和
出生日期在“2021-11-01”和“2021-11-30”之間
訂購方式
姓
限制
100
;
但是,這需要考慮哪些日期涵蓋了過去 30 天,並且您必須不斷更新此查詢。
相反,要使日期自動跨越過去 30 天,無論是哪一天,您可以在 AND 下鍵入:birth_date >= (DATE_SUB(CURDATE(),INTERVAL 30))
(注意:您需要與您的產品團隊仔細檢查此語法,因為它可能會根據您用於提取 SQL 查詢的軟件而有所不同。)
因此,您的完整 SQL 查詢將如下所示:
選擇
名,
姓
從
people_massachusetts
在哪裡
頭髮顏色=“紅色”
和
出生日期 >= (DATE_SUB(CURDATE(),INTERVAL 30))
訂購方式
姓
限制
100
;
數數
在某些情況下,您可能需要計算字段條件出現的次數。 例如,假設您要計算從馬薩諸塞州統計的人出現不同頭髮顏色的次數。 在這種情況下,COUNT 會派上用場,因此您不必手動添加不同頭髮顏色的人數或將該信息導出到 Excel。
下面是那個 SQL 查詢的樣子:
選擇
髮色,
計數(頭髮顏色)
從
people_massachusetts
和
出生日期在“2003-01-01”和“2003-12-31”之間
通過...分組
髮色
;
平均
AVG 計算查詢結果中屬性的平均值,不包括 NULL 值(空)。 在我們的示例中,我們可以使用 AVG 來計算查詢中馬薩諸塞州居民的平均年齡。
下面是我們的 SQL 查詢的樣子:
選擇
平均(年齡)
從
people_massachusetts
;
和
SUM 是您可以在 SQL 中執行的另一個簡單計算。 它計算查詢中所有屬性的總值。 因此,如果我們想將馬薩諸塞州居民的所有年齡相加,我們可以使用以下查詢:
選擇
總和(年齡)
從
people_massachusetts
;
最小值和最大值
MIN 和 MAX 是兩個 SQL 函數,它們為您提供給定字段的最小值和最大值。 我們可以使用它來識別馬薩諸塞州表中年齡最大和最年輕的成員:
此查詢將為我們提供最舊的記錄:
選擇
最小(年齡)
從
people_massachusetts
;
這個查詢給了我們最舊的:
選擇
MAX(年齡)
從
people_massachusetts
;
加入
有時您可能需要在一個 SQL 查詢中訪問來自兩個不同表的信息。 在 SQL 中,您可以使用 JOIN 子句來執行此操作。
(對於那些熟悉 Excel 公式的人來說,當您需要在 Excel 中組合來自兩個不同工作表的信息時,這類似於使用 VLOOKUP 公式。)
假設我們有一張表,其中包含所有馬薩諸塞州居民的用戶 ID 及其出生日期的數據。 此外,我們還有一個完全獨立的表格,其中包含所有馬薩諸塞州居民的用戶 ID 和他們的頭髮顏色。
如果我們想弄清楚 2003 年出生的馬薩諸塞州居民的頭髮顏色,我們需要訪問兩個表中的信息並將它們組合起來。 這是因為兩個表共享一個匹配的列:用戶 ID。
因為我們從兩個不同的表中調用字段,所以我們的 SELECT 語句也將略有變化。 我們需要指定它們來自哪個表,而不是僅僅列出我們想要包含在結果中的字段。 (注意:星號函數在這裡可能會派上用場,因此您的查詢在結果中包含兩個表。)
要從特定表中指定字段,我們所要做的就是將表名與字段名結合起來。 例如,我們的 SELECT 語句會說“table.field”——用句點分隔表名和字段名。
在這種情況下,我們還假設了一些事情:
- 馬薩諸塞州生日表包括以下字段:first_name、last_name、user_id、birthdate
- 馬薩諸塞州頭髮顏色表包括以下字段:user_id、hair_color
因此,您的 SQL 查詢將如下所示:
選擇
生日_馬薩諸塞州.first_name,
生日_馬薩諸塞州.last_name
從
生日_馬薩諸塞州加入頭髮顏色_馬薩諸塞州使用(user_id)
在哪裡
頭髮顏色=“紅色”
和
出生日期在“2003-01-01”和“2003-12-31”之間
訂購方式
姓
;
此查詢將使用同時出現在birthdate_massachusetts 表和haircolor_massachusetts 表中的字段“user_id”連接兩個表。 然後,您可以看到一張 2003 年出生的紅頭髮人的表格。
案子
如果要根據滿足的條件向查詢返回不同的結果,請使用 CASE 語句。 按順序評估條件。 一旦滿足條件,則返回相應的結果,並跳過所有後續條件。
如果不滿足任何條件,您可以在末尾包含 ELSE 條件。 如果沒有 ELSE,則如果不滿足任何條件,查詢將返回 NULL。
下面是一個使用 CASE 根據查詢返回字符串的示例:
選擇
名,
姓
從
people_massachusetts
案子
WHEN hair_color = 'brown' THEN '這個人有一頭棕色的頭髮。
WHEN hair_color = 'blonde' THEN '這個人有一頭金發。
WHEN hair_color = 'red' THEN '這個人有一頭紅頭髮。
ELSE '頭髮顏色未知。
結尾
;
營銷人員應該知道的基本 SQL 查詢
恭喜。 您已準備好運行自己的 SQL 查詢! 雖然您可以使用 SQL 做更多事情,但我希望您發現此基礎知識概述對您有所幫助,這樣您就可以親自動手了。 憑藉紮實的基礎知識,您將能夠更好地導航 SQL 並處理一些更複雜的示例。
編者註:這篇文章最初發表於 3 月 25 日,為了全面性已經更新。