- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表
- SQL - 約束
- SQL 查詢
- SQL - 插入查詢
- SQL - 選擇查詢
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查詢
- SQL - 刪除查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - BOOLEAN (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION 與 UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - 內連線
- SQL - 左連線
- SQL - 右連線
- SQL - 交叉連線
- SQL - 全連線
- SQL - 自連線
- SQL - 刪除連線
- SQL - 更新連線
- SQL - 左連線與右連線
- SQL - UNION 與 JOIN
- SQL 金鑰
- SQL - 唯一鍵
- SQL - 主鍵
- SQL - 外部索引鍵
- SQL - 組合鍵
- SQL - 備用鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - 唯一索引
- SQL - 叢集索引
- SQL - 非叢集索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - Min & Max
- SQL - 空函式
- SQL - 檢查約束
- SQL - 預設約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY 與 ORDER BY
- SQL - IN 與 EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
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 值 Khilan、Hardik 和 Muffy 的記錄,您可以使用以下查詢:
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 column_name NOT IN (value1, value2, ...);
示例
在此示例中,我們顯示來自 CUSTOMERS 表的記錄,其中 AGE 不等於 25、23 和 22。
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 |