SQL - ANY 和 ALL 運算子



SQL ANY 和 ALL 運算子用於在單個值和子查詢返回的一系列值之間執行比較。

ANY 和 ALL 運算子必須以標準比較運算子(即 >、>=、<、<=、=、<>、!=)開頭,後跟子查詢。ANY 和 ALL 之間的主要區別在於,如果子查詢中的任何值滿足條件,則 ANY 返回 true,而如果子查詢中的所有值都滿足條件,則 ALL 返回 true。

SQL ANY 運算子

ANY 運算子用於驗證查詢的任何單個記錄是否滿足所需條件。

如果給定條件對範圍內的任何值都滿足,則此運算子返回 TRUE。如果指定範圍內的任何值都不滿足給定條件,則此運算子返回 false。您還可以將另一個查詢(子查詢)與該運算子一起使用。

語法

SQL - ANY 運算子的基本語法如下所示:

Column_name operator ANY (subquery);

其中,

  • column_name 是主查詢中列的名稱。

  • operator 是比較運算子,例如 =、<、>、<=、>= 或 <>。

  • subquery 是返回單個列值的 SELECT 語句。

ANY 與 '>' 運算子

通常,ANY 運算子用於將值與子查詢返回的一組值進行比較,在這種情況下,我們可以將其與>(大於)運算子一起使用,以驗證特定列值是否大於子查詢返回的任何記錄的列值。

示例

為了更好地理解它,讓我們考慮 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 語句將值插入此表,如下所示:

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 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

現在,讓我們列出所有 CUSTOMERS 的詳細資訊,其薪水大於年齡為 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 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

ANY 與 '<' 運算子

類似於'>'運算子,我們可以將'<'(小於)運算子與 ANY 一起使用,以驗證特定列值是否小於子查詢返回的任何記錄的列值。

示例

在這裡,我們查詢具有任何薪水小於先前建立的 CUSTOMERS 表中所有客戶的平均薪水的客戶的不同/不同的年齡:

SELECT DISTINCT AGE FROM CUSTOMERS 
WHERE SALARY < ANY (SELECT AVG(SALARY) FROM CUSTOMERS);

輸出

執行上述查詢時,我們將獲得以下輸出:

年齡
32
25
23
22

ANY 與 '=' 運算子

當我們將=(等於)運算子與 ANY 一起使用時,它會驗證特定列值是否等於子查詢返回的任何記錄的列值。

示例

在下面給出的查詢中,我們檢索所有客戶的詳細資訊,其年齡等於姓名以“K”開頭的任何客戶的年齡:

SELECT * FROM CUSTOMERS 
WHERE AGE = ANY (SELECT AGE FROM CUSTOMERS WHERE NAME LIKE 'K%');

輸出

產生的結果如下:

ID 姓名 年齡 地址 薪水
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
6 Komal 22 Hyderabad 4500.00

SQL ALL 運算子

SQL ALL 運算子返回 SELECT 語句的所有記錄。

  • 如果給定條件對範圍內的所有值都滿足,則返回 TRUE。

  • 它始終返回布林值。

  • 它用於 SQL 查詢中的 SELECT、WHERE 和 HAVING 語句。

  • 子查詢返回的值的資料型別必須與外部查詢表示式的數

語法

SQL ALL 運算子的基本語法如下:

Column_name operator ALL (subquery);

其中,

  • column_name - 是主查詢中列的名稱。

  • operator - 是比較運算子,例如 =、<、>、<=、>= 或 <>。

  • subquery - 是返回單個列值的 SELECT 語句。

ALL 與 WHERE 語句

當我們將 ALL 運算子與 WHERE 子句一起使用時,它會根據指定的條件篩選子查詢的結果。

SQL 中的 WHERE 子句用於根據特定條件篩選查詢中的行。它對錶中的各個行進行操作,並且允許您指定資料返回的查詢中的每一行必須滿足的條件。

示例

如果我們考慮上面建立的 CUSTOMERS 表,則以下查詢將返回所有客戶的詳細資訊,其薪水不等於年齡為 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 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

ALL 與 HAVING 子句

在 SQL 中,ALL 運算子還可以與 HAVING 子句一起使用,以根據應用於組中所有聚合值的條件篩選 GROUP BY 查詢的結果。

示例

以下 SQL 查詢用於獲取所有客戶的詳細資訊,其薪水小於平均薪水:

SELECT NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS 
GROUP BY AGE, SALARY 
HAVING SALARY < ALL (SELECT AVG(SALARY) FROM CUSTOMERS);

輸出

上述查詢的輸出如下:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
6 Komal 22 Hyderabad 4500.00
廣告
© . All rights reserved.