SQL - WHERE 子句



SQL WHERE 子句

SQL 的WHERE 子句用於過濾由 DML 語句(如 SELECT、UPDATE 和 DELETE 等)獲得的結果。我們可以使用 WHERE 子句從單個表或多個表(聯接操作後)中檢索資料。

例如,您可以使用 WHERE 子句檢索組織中某個部門的員工詳細資訊,或收入高於/低於某個金額的員工,或有資格獲得獎學金的學生的詳細資訊等。此子句基本上提供了要檢索哪些記錄以及哪些記錄要忽略的規範。

語法

SQL WHERE 子句的基本語法如下所示:

DML_Statement column1, column2,... columnN
FROM table_name
WHERE [condition];

這裡,DML_Statement 可以是任何語句,例如 SELECT、UPDATE、DELETE 等。

您可以使用比較或邏輯運算子(例如,>、<、=、LIKE、NOT 等)指定條件。

WHERE 子句與 SELECT 語句

通常,SELECT 語句用於從表中檢索資料。如果我們將 WHERE 子句與 SELECT 語句一起使用,我們可以根據特定條件(或表示式)過濾要檢索的行。以下是它的語法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

示例

假設我們在 MySQL 資料庫中使用 CREATE TABLE 語句建立了一個名為 CUSTOMERS 的表,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下 INSERT 查詢將 7 條記錄插入此表:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'Hyderabad', 4500.00),
(7, 'Muffy', 24, 'Indore', 10000.00);

建立的表如下所示:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 艾哈邁達巴德 2000.00
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
4 Chaitali 25 孟買 6500.00
5 Hardik 27 博帕爾 8500.00
6 Komal 22 海得拉巴 4500.00
7 Muffy 24 因多爾 10000.00

在以下查詢中,我們從 CUSTOMERS 表中獲取 ID、NAME 和 SALARY 欄位,用於薪水大於 2000 的記錄:

SELECT ID, NAME, SALARY FROM CUSTOMERS 
WHERE SALARY > 2000;

輸出

這將產生以下結果:

ID 姓名 薪水
4 Chaitali 6500.00
5 Hardik 8500.00
6 Komal 4500.00
7 Muffy 10000.00

WHERE 子句與 UPDATE 語句

UPDATE 語句用於修改表中現有的記錄。使用 SQL WHERE 子句與 UPDATE 語句一起,我們可以更新特定記錄。如果不使用 WHERE 子句,則 UPDATE 語句將影響表的所有記錄。以下是語法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

示例

在以下查詢中,我們使用 WHERE 子句以及 UPDATE 語句將名為 Ramesh 的客戶的薪水增加 10000:

UPDATE CUSTOMERS set SALARY = SALARY+10000 
where NAME = 'Ramesh';

輸出

我們得到以下結果。我們可以觀察到 2 個客戶的年齡已被修改:

Query OK, 2 rows affected (0.02 sec)
Rows matched: 2  Changed: 2  Warnings: 0

驗證

要驗證更改是否反映在表中,我們可以使用 SELECT 語句,如以下查詢所示:

SELECT * FROM CUSTOMERS WHERE NAME = 'Ramesh';

表顯示如下:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 艾哈邁達巴德 12000.00

WHERE 子句與 IN 運算子

使用 IN 運算子,您可以在 where 子句中指定值列表或子查詢。如果您將 WHERE 和 IN 與 SELECT 語句一起使用,它允許我們檢索表中與指定列表中的任何值匹配的行。以下是它的語法:

WHERE column_name IN (value1, value2, ...);

其中,column_name 是表的列,而 value1、value2 等是我們想要與 column_name 比較的值列表。

示例

假設您想顯示 CUSTOMERS 表中具有 NAME 值 KhilanHardikMuffy 的記錄,您可以使用以下查詢:

SELECT * from CUSTOMERS 
WHERE NAME IN ('Khilan', 'Hardik', 'Muffy');

輸出

獲得的結果如下:

ID 姓名 年齡 地址 薪水
2 Khilan 25 德里 1500.00
5 Hardik 27 博帕爾 8500.00
7 Muffy 24 因多爾 10000.00

WHERE 子句與 NOT IN 運算子

使用 NOT IN 運算子的 WHERE 子句是使用 IN 運算子的 WHERE 子句的否定。

  • 如果您使用 WHERE 和 IN 運算子,則 DML 語句將作用於指定的(列的)值列表
  • 相反,如果您使用 WHERE 和 NOT IN 運算子,則 DML 操作將對不在指定列表中的(列的)值執行。
因此,如果您將 WHERE 子句與 NOT IN 運算子以及 SELECT 語句一起使用,則會檢索與值列表不匹配的行。以下是語法:
WHERE column_name NOT IN (value1, value2, ...);

示例

在此示例中,我們顯示來自 CUSTOMERS 表的記錄,其中 AGE 不等於 252322

SELECT * from CUSTOMERS WHERE AGE NOT IN (25, 23, 22);

輸出

我們獲得如下所示的結果:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 艾哈邁達巴德 12000.00
5 Hardik 27 博帕爾 8500.00
7 Muffy 24 因多爾 10000.00

WHERE 子句與 LIKE 運算子

使用 LIKE 運算子的 WHERE 子句允許我們過濾與特定模式匹配的行。此特定模式由萬用字元(如 %、_、[] 等)表示。以下是語法:

WHERE column_name LIKE pattern;

其中,column_name 是我們要對比模式的列,而 pattern 是可以包含萬用字元(如 %、_、[] 等)的字串。

示例

以下查詢將顯示所有名稱以 K 開頭且長度至少為 4 個字元的記錄:

SELECT * FROM CUSTOMERS WHERE NAME LIKE 'K___%';

輸出

獲得的結果如下:

ID 姓名 年齡 地址 薪水
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
6 Komal 22 海得拉巴 4500.00

WHERE 子句與 AND, OR 運算子

我們可以在 SQL 中一起使用 AND 和 OR 運算子,以在 WHERE 子句中組合多個條件,以過濾滿足指定條件的行。AND 運算子將確保僅過濾滿足所有條件的行,而 OR 運算子將過濾滿足任何一個指定條件的記錄。但是,這僅在指定一個條件不足以過濾所有所需行時使用。

以下是如何在 WHERE 子句中使用 AND 和 OR 運算子的語法:

WHERE (condition1 OR condition2) AND condition3;

示例

在以下查詢中,我們根據某些條件從 CUSTOMERS 表中檢索所有行。括號控制求值順序,以便首先應用 OR 運算子,然後應用 AND 運算子:

SELECT * FROM CUSTOMERS
WHERE (AGE = 25 OR salary < 4500) 
AND (name = 'Komal' OR name = 'Kaushik');

輸出

這將產生以下結果:

ID 姓名 年齡 地址 薪水
3 Kaushik 23 科塔 2000.00
廣告

© . All rights reserved.