
- 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 - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- 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 - 布林 (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 vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 鍵
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 候選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - 邏輯運算子
在 SQL 中,邏輯運算子用於建立條件表示式,該表示式計算結果為真或假。它們用於 SELECT、UPDATE、DELETE 和其他 SQL 語句的 WHERE 子句中,根據指定的條件篩選資料。SQL 中可用的邏輯運算子如下所示
運算子 | 描述 | 示例 |
---|---|---|
ALL | 如果一組比較全部為 TRUE,則為 TRUE。 | |
AND | 如果由 AND 分隔的所有條件均為 TRUE,則為 TRUE。 | |
ANY | 如果一組比較中任何一個為 TRUE,則為 TRUE。 | |
BETWEEN | 如果運算元位於比較範圍之內,則為 TRUE。 | |
EXISTS | 如果子查詢返回一個或多個記錄,則為 TRUE | |
IN | 如果運算元等於表示式列表中的一個,則為 TRUE。 | |
LIKE | 如果運算元與模式匹配(尤其使用萬用字元),則為 TRUE。 | |
NOT | 反轉任何其他布林運算子的值。 | |
OR | 如果由 OR 分隔的任何條件為 TRUE,則為 TRUE | |
IS NULL | 如果表示式的值為 NULL,則為 TRUE。 | |
SOME | 如果一組比較中有些為 TRUE,則為 TRUE。 | |
UNIQUE | UNIQUE 運算子搜尋指定表的每一行以查詢唯一性(無重複項)。 |
在本章中,我們將逐一學習每個運算子,並透過示例展示其用法。在繼續之前,讓我們使用以下查詢建立一個名為 **CUSTOMERS** 的表:
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR(15) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(25), SALARY DECIMAL(18, 2), PRIMARY KEY(ID) );
建立表後,我們可以使用以下查詢將一些值插入表中:
INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(1, 'Ramesh', 32, 'Ahmedabad', 2000.00); INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(2, 'khilan', 25, 'Delhi', 1500.00); INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(3, 'Kaushik', 23, 'Kota', 2000.00); INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(4, 'chaitali', 25, 'Mumbai', 6500.00); INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(5, 'Hardhik', 27, 'Bhopal', 8500.00); INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(6, 'komal', 22, 'MP', 4500.00); INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES(7, 'Muffy', 24, 'Indore', 10000.00 );
讓我們使用以下查詢驗證表是否已建立:
SELECT * FROM CUSTOMERS;
如下所示的輸出結果表明,該表已在資料庫中建立。
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
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 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
現在,讓我們使用上述表執行所有 SQL 邏輯運算。
SQL ALL 運算子
SQL ALL 運算子用於將值與子查詢返回的值集進行比較。它檢查指定條件是否對子查詢結果集中的所有值都成立。ALL 運算子通常與比較運算子一起使用,例如 =、>、<、>=、<=、<> 等。
示例
以下查詢返回所有薪水不等於年齡為 25 的任何客戶薪水的客戶的詳細資訊。
select * from CUSTOMERS where SALARY <> ALL (select SALARY from CUSTOMERS where AGE = 25);
輸出
執行上述查詢時,將獲得以下輸出:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
3 | kaushik | 23 | Kota | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
SQL AND 運算子
SQL AND 運算子用於在 WHERE 子句或 HAVING 子句中組合多個條件。它允許您檢索滿足所有指定條件的行。如果 AND 連線的所有條件對於某一行都為真,則該行將包含在結果集中。
示例
在這裡,我們獲取薪水大於 2000 且年齡小於 25 歲的客戶的 ID、姓名和薪水。
SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000 AND age < 25;
輸出
執行上述查詢時,將獲得以下輸出:
ID | 姓名 | 薪水 |
---|---|---|
6 | Komal | 4500.00 |
7 | Muffy | 10000.00 |
SQL ANY 運算子
SQL ANY 運算子用於將單個值與子查詢返回的值集進行比較。它檢查指定條件是否對子查詢結果集中的至少一個值成立。ANY 運算子通常與比較運算子一起使用,例如“=”、“>”、“<”、“>=”、“<=”、“<>”等。
示例
現在,讓我們嘗試列出所有薪水高於年齡為 32 的任何客戶薪水的客戶的詳細資訊,在本例中,這些客戶是 Chaitali、Hardik、Komal 和 Muffy。
select * from customers WHERE SALARY > ANY (select SALARY from CUSTOMERS where AGE = 32);
輸出
執行上述查詢後,將顯示以下輸出:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
SQL BETWEEN 運算子
SQL BETWEEN 運算子用於過濾指定值範圍內的資料。它檢查值是否在指定的上下限(包括)內。BETWEEN 運算子用於 SQL 查詢的 WHERE 子句中,以檢索屬於特定範圍的行。
示例
在這裡,我們嘗試檢索年齡在 18 到 22 之間的客戶。
SELECT * FROM EMPLOYEE WHERE AGE BETWEEN 18 AND 22;
輸出
上述查詢生成的表如下所示:
ID | 姓名 | 年齡 | 地址 | 薪水 | 加入日期 |
---|---|---|---|---|---|
1 | Khilan | 22 | Nijamabad | 57500.84 | 2022-01-14 |
2 | Ramesh | 21 | Hyderabad | 25550.12 | 2023-01-02 |
4 | kaushik | 18 | Bangolore | 47275.43 | 2023-03-15 |
6 | Hardik | 19 | Noida | 44200.09 | 2023-06-04 |
SQL EXISTS 運算子
SQL EXISTS 運算子用於驗證特定記錄是否存在於 SQL 表中。使用此運算子時,我們需要使用子查詢指定要檢查其存在的記錄。它用於 WHERE 子句中,根據子查詢中行的存在與否過濾結果。如果子查詢返回至少一行,則 EXISTS 運算子返回 true;否則,返回 false。
為了更好地理解,讓我們建立另一個名為 **CARS** 的表,其中包含客戶 ID、汽車名稱和價格等詳細資訊,使用以下查詢:
create table CARS( ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, PRICE INT NOT NULL, PRIMARY KEY(ID) );
使用 INSERT 語句,讓我們將值插入此表:
insert INTO CARS VALUES(2, 'Maruti Swift', 450000); insert INTO CARS VALUES(4, 'VOLVO', 2250000); insert INTO CARS VALUES(7, 'Toyota', 2400000);
如果嘗試使用 SELECT 查詢檢索表的內容,則表將顯示如下:
ID | 姓名 | 價格 |
---|---|---|
2 | Maruti Swift | 450000 |
4 | VOLVO | 2250000 |
7 | Toyota | 2400000 |
示例
現在,讓我們嘗試返回汽車價格大於 2,000,000 的客戶列表。
SELECT * FROM CUSTOMERS WHERE EXISTS (SELECT PRICE FROM CARS WHERE CARS.ID = CUSTOMERS.ID AND PRICE > 2000000);
輸出
以下是上述查詢的輸出:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
4 | Chaitali | 25 | Mumbai | 6500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
SQL IN 運算子
SQL IN 運算子用於指定要與特定列或表示式匹配的值列表。它允許我們檢索其列值與指定列表中的任何值匹配的行。IN 運算子用於 SQL 查詢的 WHERE 子句中,以根據多個可能的值過濾資料。
示例
在以下查詢中,我們嘗試顯示 NAME 等於 'Khilan'、'Hardik' 和 'Muffy'(字串值)的記錄。
select * from CUSTOMERS WHERE NAME IN ('Khilan', 'Hardhik', 'Muffy');
輸出
生成的輸出如下所示:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
5 | Hardhik | 27 | Bhopal | 8500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
SQL LIKE 運算子
SQL LIKE 運算子用於對字元資料執行模式匹配。它用於 SQL 查詢的 WHERE 子句中,根據列中的特定模式過濾行。當您要執行萬用字元搜尋時,LIKE 運算子特別有用,即 **'%'**、**'_'**、**'[]'**、**'[^]'**。
示例
讓我們嘗試顯示 CUSTOMERS 表中的所有記錄,其中 SALARY 以 200 開頭。
SELECT * FROM CUSTOMERS WHERE SALARY LIKE '200%';
輸出
上述程式碼的輸出如下所示:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
SQL NOT 運算子
SQL NOT 運算子用於否定條件。如果指定條件為假,則返回 true;如果條件為真,則返回 false。NOT 運算子通常用於在 SQL 查詢中執行負面或反向過濾。
示例
在以下查詢中,我們檢索薪水不大於 2000 的客戶。
SELECT * FROM CUSTOMERS WHERE NOT (SALARY > 2000.00);
輸出
上述程式碼的輸出如下所示:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
SQL OR 運算子
SQL OR 運算子用於在 WHERE 子句或 HAVING 子句中組合多個條件。它允許我們檢索滿足至少一個指定條件的行。如果 OR 運算子連線的任何條件對於某一行都為真,則該行將包含在結果集中。
示例
以下查詢獲取薪水大於 2000 或年齡小於 25 歲的客戶的 ID、姓名和薪水。
SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000 OR age < 25;
輸出
以下是上述查詢的輸出:
ID | 姓名 | 薪水 |
---|---|---|
3 | Kaushik | 2000.00 |
4 | Chaitali | 6500.00 |
5 | Hardik | 8500.00 |
6 | Komal | 4500.00 |
7 | Muffy | 10000.00 |
SQL IS NULL 運算子
SQL IS NULL 運算子用於檢查列是否具有 NULL 值(沒有值)。如果列值為 NULL,則返回 true;否則返回 false。
示例
讓我們考慮一個名為“Fruit”的表,我們將在資料庫中建立該表,該表在欄位中包含一些 NULL 值。執行以下查詢以建立表。
CREATE TABLE Fruit ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, ADDRESS CHAR (25), PRICE DECIMAL (18, 2), PRIMARY KEY (ID) );
現在,我們將使用下面的查詢來填充上面建立的表。
INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE) VALUES (1, 'Apple', 'Shimla', 2000.00 ); INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE) VALUES (2, 'Mango',NULL, 3000.00 ); INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE) VALUES (3, 'Orange',NULL, 4000.00 ); INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE) VALUES (4, 'Banana', 'AP',NULL); INSERT INTO Fruit (ID,NAME,ADDRESS,PRICE) VALUES (5, 'JackFruit', 'Ooty',NULL);
驗證
要檢查表是否已建立,讓我們執行下面的查詢。
SELECT * FROM Fruit;
執行後,它將顯示如下所示的表:
ID | 姓名 | 地址 | 價格 |
---|---|---|---|
1 | 蘋果 | 西姆拉(Shimla,印度地名) | 2000.00 |
2 | 芒果 | 空 | 3000.00 |
3 | 橙子 | 空 | 4000.00 |
4 | 香蕉 | 阿普(AP,可能指安得拉邦 Andhra Pradesh) | 空 |
5 | 菠蘿蜜 | 烏蒂(Ooty,印度地名) | 空 |
現在,我們嘗試檢索地址未提供的水果列表。
SELECT * FROM Fruit WHERE ADDRESS IS NULL;
輸出
上面查詢的輸出如下所示:
ID | 姓名 | 地址 | 價格 |
---|---|---|---|
2 | 芒果 | 空 | 3000.00 |
3 | 橙子 | 空 | 4000.00 |