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
sql-operators.htm
廣告