SQL WHERE IN——用例子解釋

SQL WHERE IN——用例子解釋

您是否厭倦了手動過濾數據庫中的數據並尋找更有效的方法來過濾具有多個值的數據?SQL WHERE IN 可能是您需要的解決方案!

如果您正在使用 SQL 數據庫,您可能遇到過 WHERE IN 運算符。此運算符用於在 WHERE 子句中指定多個值,使您可以更精確地過濾數據。

使用此運算符,您可以指定要與表中的列匹配的值列表。此列表可以硬編碼或由子查詢生成,從而為您過濾數據的方式提供了很大的靈活性。

SQL WHERE IN——用例子解釋

例如,您可以使用 IN 運算符從特定城市列表中查找所有客戶,或根據一組產品 ID 篩選結果。

使用 WHERE IN 運算符的好處之一是它可以使您的查詢更有效率。通過使用值列表而不是多個 OR 條件,您可以減少數據庫需要完成的處理量。

這在處理大型數據集或複雜查詢時尤其重要,因為即使是很小的優化也會對性能產生很大影響。

目錄

SQL WHERE IN 子句是什麼?

SQL WHERE IN 子句用於根據值列表過濾數據。它允許您使用多個 OR 條件的簡寫形式在 WHERE 子句中指定多個值。SQL Server 、PostgreSQL、MYSQL 和 Oracle的 WHERE IN 子句語法如下:

SELECT column_name(s) 
FROM table_name 
WHERE column_name IN (value1, value2, ...); 

如果我們考慮上面的 SELECT 語句,WHERE IN 子句允許您從指定列與列表中的任何值匹配的表中檢索數據。當您要搜索一組特定的值時,它是過濾數據的有用語法。

SQL WHERE IN 子句如何工作?

該子句通過將指定列與列表中的每個值進行比較來工作。如果該列與列表中的任何值匹配,則該行將包含在結果集中。

假設您有一個名為“customers”的表,它由三列組成:“customer_id”、“customer_name”和“country”。您想要檢索來自美國、加拿大和墨西哥的所有客戶。以下查詢將向您展示 WHERE IN 子句的用法:SELECT customer_id, customer_name, country FROM customers WHERE country IN ('USA','Canada','Mexico');

SQL WHERE IN 子句示例

如果要根據可能值列表過濾結果,可以使用 SQL WHERE IN 子句。此子句提供了一種簡單的方法來選擇特定列與一組值中的一個匹配的行。

以下是如何使用該子句的五個示例:

  1. 使用具有單個值的 SQL WHERE IN 子句

假設您要選擇狀態列設置為“已發布”的表格中的所有行。您可以使用以下 SQL 語句執行此操作:

SELECT * 
FROM my_table 
WHERE status IN ('published');

這將返回狀態列設置為“已發布”的所有行。

  1. 使用具有多個值的 SQL WHERE IN 子句

現在假設您要選擇狀態列設置為“已發布”或“草稿”的所有行。您可以使用以下 SQL 語句:

SELECT * 
FROM my_table 
WHERE status IN ('published', 'draft');

這將返回狀態列設置為“已發布”或“草稿”的所有行。此外,您可以添加任意數量的值,以逗號分隔。

  1. 將 SQL WHERE IN 子句與刪除語句一起使用

假設您有一個名為“customers”的表,其中包含以下數據:

SQL WHERE IN——用例子解釋

要根據“City”列中的多個值從此表中刪除行,可以將 SQL WHERE IN 子句與 DELETE 語句一起使用,如以下查詢所示:

DELETE FROM customers
WHERE City IN ('New York', 'Chicago', 'Miami');

該語句將從“customers”表中刪除“City”列名稱與列表中的任何值匹配的所有行,即'New York'、'Chicago'、'Miami'。在上面的示例中,它將從表中刪除第一行、第三行和第五行。

請注意,在將 WHERE IN 子句與 DELETE 語句一起使用時,您應該非常小心,確保刪除正確的數據,以免出錯。最好先在一小部分數據上測試您的查詢,然後再在整個數據庫上運行它。

  1. 使用 WHERE IN 運算符和 SQL WHERE 子句根據數值過濾數據

SELECT *
FROM customers
WHERE age IN (25, 30, 35)
AND city = 'London';

此查詢將返回“customers”表中 age 列包含數值 25、30 或 35 且 city 列包含值“London”的所有行。

請注意,WHERE IN 運算符是一個邏輯運算符,它只允許您為單個列指定多個值。SELECT 語句用於從表中檢索數據,WHERE 子句用於根據特定條件過濾數據。

在此示例中,查詢返回“customers”表中的行,其中 age 列與指定數值之一匹配,city 列與值“London”匹配。此查詢中使用的列名稱是“age”和“city”,所查詢的表是“customers”。

  1. 將 WHERE IN 與 SELECT 語句和 IN 運算符結合使用。

SELECT *
FROM orders
WHERE customer_id IN (
    SELECT customer_id
    FROM customers
    WHERE country = 'USA'
);

在此示例中,我們使用子查詢從“customers”表中檢索所有客戶 ID,其中 country 列包含值“USA”。然後,我們使用 WHERE IN 運算符根據這些客戶 ID 過濾“訂單”表。

此查詢將返回訂單表中 customer_id 列與子查詢返回的客戶 ID 之一匹配的所有行。

請記住,WHERE IN 運算符是一個比較運算符,允許您將列與值列表進行比較。在這種情況下,我們將 customer_id 列與子查詢返回的客戶 ID 列表進行比較。

通過使用此運算符和子查詢,您可以根據特定條件過濾數據並僅檢索滿足您需要的數據。

2 使用 SQL WHERE IN 子句的主要好處?

  1. 改進的查詢性能

該子句在查詢性能方面提供了最大的好處之一。當基於多個值過濾數據時,使用子句比使用 OR 運算符編寫多個 WHERE 子句更高效、更快速。這是因為數據庫引擎可以優化查詢執行計劃以高效地檢索必要的數據。

例如,考慮以下帶有“customers”表的SQL查詢,我們在其中嘗試根據國家/地區識別客戶詳細信息。

SELECT CustomerID,CustomerName,phone,Email,CustomerCounter
FROM customers WHERE country='USA' 
			OR country='Canada' 
			OR country='Mexico' ;

SQL WHERE IN——用例子解釋

 SELECT CustomerID,CustomerName,phone,Email,CustomerCounter
FROM customers 
WHERE country IN ('USA', 'Canada', 'Mexico'); 

SQL WHERE IN——用例子解釋

如上例所示,使用子句可以顯著提高查詢性能並節省更多時間。一次選擇所有國家比在更大的數據集中使用 OR 運算符逐個選擇國家要容易得多。

  1. 簡化的查詢編寫

使用SQ L WHERE IN 子句的另一個主要好處是它可以簡化編寫複雜查詢的過程。當您需要根據多個值過濾數據時,使用多個帶有 OR 運算符的 WHERE 子句會很快變得麻煩且難以管理。

使用子句允許您在單個語句中指定要過濾的所有值,使您的查詢更易於閱讀和維護。這在處理大型數據集或需要編寫具有多個條件的複雜查詢時特別有用。

例如,考慮以下 SQL 查詢:

SELECT *
FROM products 
WHERE category='Electronics' AND (brand='Apple' OR brand='Samsung' OR brand='Sony') 
SELECT *
FROM products 
WHERE category='Electronics' AND brand IN ('Apple', 'Samsung', 'Sony') 

在上述示例的兩個查詢中,查詢都會返回 Apple、Samsung 和 Sony 的所有“電子”產品。

但是,如後一個查詢中所示,使用 WHERE IN 子句可以簡化使用複雜查詢的過程,並使它們更易於閱讀和理解。

此外,它還有助於避免錯誤並減少耗時。

我們的最終決定

恭喜!您現在已經知道如何使用 SQL WHERE IN 子句根據值列表過濾數據。讓我們評估一下我們學到的東西:

通過使用 WHERE IN,您可以簡化一系列 SQL 查詢並創建它們以檢索更高效的書面輸出。

請記住,WHERE IN 是多個 OR 條件的簡寫,因此它可以替換一長串 OR 語句。此外,該子句可以與子查詢一起使用,允許您根據另一個查詢的結果過濾數據。

使用 WHERE IN 時,務必要考慮要比較的值的數據類型。如果數據類型不匹配,您可能需要使用類型轉換函數來確保准確比較。

總的來說,SQL WHERE IN 子句是一種功能強大但基本的語法,用於在 SQL 查詢中過濾數據。通過掌握該子句,您可以提高 SQL 代碼的性能和可讀性,從長遠來看更易於使用和維護。


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的