SQL教學
SQL RDBMS概念
SQL簡介
SQL NOT NULL約束
SQL DEFAULT約束
SQL唯一約束
SQL主鍵
SQL外鍵
SQL CHECK約束
SQL示例數據庫
SQL索引約束
SQL NULL值
數據庫 - 第一範式(1NF)
數據庫 - 第二範式(2NF)
數據庫 - 第三範式(3NF)
SQL RDBMS數據庫
SQL語法
SQL數據類型
SQL操運算符
SQL算術運算符
SQL比較運算符
SQL邏輯運算符
SQL表達式
SQL創建數據庫(CREATE DATABASE)
SQL丟棄或刪除數據庫(DROP DATABASE)
SQL選擇數據庫(SELECT Database, USE語句)
SQL創建表(CREATE Table)
SQL從現有表創建表
SQL刪除表(DROP或DELETE Table)
SQL INSERT INTO插入查詢
SQL SELECT查詢語句
SQL WHERE子句
SQL AND和OR運算符
SQL UPDATE更新查詢
SQL DELETE刪除查詢
SQL LIKE子句
SQL TOP,LIMIT,ROWNUM子句
SQL ORDER BY排序子句
SQL GROUP BY(分組)
SQL Distinct關鍵字
SQL排序結果
SQL約束
SQL Join聯接
SQL INNER JOIN(內部連接)
SQL LEFT JOIN(左連接)
SQL RIGHT JOIN(右連接)
SQL FULL JOIN(全連接)
SQL自連接
SQL笛卡爾或交叉連接
SQL UNION子句/操作符
SQL INTERSECT子句
SQL EXCEPT子句
SQL別名語法
SQL索引
SQL ALTER TABLE(修改表)
SQL TRUNCATE TABLE(截斷表)
SQL View(視圖)
SQL Having子句
SQL事務
SQL通配符運算符
SQL日期函數
SQL ADDDATE()函數
SQL ADDTIME()函數
SQL CONVERT_TZ()函數
SQL CURDATE()函數
SQL CURRENT_DATE()函數
SQL CURTIME()函數
SQL CURRENT_TIME()函數
SQL CURRENT_TIMESTAMP()方法
SQL DATE(expr)函數
SQL DATEDIFF()方法
SQL DATE_ADD()和DATE_SUB()方法
SQL DATE_FORMAT()函數
SQL DATE_SUB()方法
SQL DAY()函數
SQL DAYNAME()函數
SQL DAYOFMONTH()函數
SQL DAYOFWEEK()函數
SQL DAYOFYEAR()函數
SQL EXTRACT()函數
SQL FROM_DAYS()函數
SQL FROM_UNIXTIME()函數
SQL HOUR()方法
SQL LAST_DAY()函數
SQL LOCALTIME和LOCALTIME()函數
SQL LOCALTIMESTAMP和LOCALTIMESTAMP()函數
SQL MAKEDATE()函數
SQL MAKETIME()函數
SQL MICROSECOND()函數
SQL MINUTE()函數
SQL MONTH()函數
SQL MONTHNAME()函數
SQL NOW()函數
SQL PERIOD_ADD()函數
SQL PERIOD_DIFF()函數
SQL QUARTER()函數
SQL SECOND()函數
SQL SEC_TO_TIME()函數
SQL STR_TO_DATE()函數
SQL SUBDATE()函數
SQL SUBTIME()函數
SQL SYSDATE()函數
SQL TIME()函數
SQL TIMEDIFF()函數
SQL TIMESTAMP()函數
SQL TIMESTAMPADD()函數
SQL TIMESTAMPDIFF()函數
SQL TIME_FORMAT()函數
SQL TIME_TO_SEC()函數
SQL TO_DAYS()函數
SQL UNIX_TIMESTAMP()函數
SQL UTC_DATE()函數
SQL UTC_TIME()函數
SQL UTC_TIMESTAMP()函數
SQL WEEK()函數
SQL WEEKDAY()函數
SQL WEEKOFYEAR()函數
SQL YEAR()函數
SQL YEARWEEK()函數
SQL臨時表
SQL克隆表
SQL子查詢
SQL使用序列(自動遞增)
SQL DISTINCT重複處理
SQL注入
SQL實用函數
SQL MAX()函數
SQL MIN()函數
SQL AVG()函數
SQL SUM()函數
SQL SQRT()函數
SQL RAND()函數
SQL CONCAT()函數
SQL數值函數
SQL ABS()函數
SQL ACOS()函數
SQL ASIN(X)函數
SQL ATAN(X)函數
SQL ATAN2()函數
SQL BIT_AND()函數
SQL BIT_COUNT()函數
SQL BIT_OR()函數
SQL CEIL()函數
SQL CONV()函數
SQL COS()函數
SQL COT()函數
SQL DEGREES()函數
SQL EXP(X)函數
SQL FLOOR(X)函數
SQL FORMAT(X,D)函數
SQL GREATEST()函數
SQL INTERVAL()函數
SQL LEAST()函數
SQL LOG()函數
SQL LOG10(X)函數
SQL MOD()函數
SQL OCT(N)函數
SQL PI()函數
SQL POW()函數
SQL RADIANS()函數
SQL ROUND()函數
SQL SIGN(X)函數
SQL SIN(X)函數
SQL SQRT(X)函數
SQL STD()函數
SQL TAN(X)函數
SQL TRUNCATE()函數
SQL字符串函數
SQL ASCII(str)函數
SQL BIN(N)函數
SQL BIT_LENGTH()函數
SQL CHAR()函數
SQL CHAR_LENGTH()函數
SQL CHARACTER_LENGTH()函數
SQL字符串CONCAT()函數
SQL CONCAT_WS()函數
SQL CONV(N,from_base,to_base)函數
SQL ELT()函數
SQL EXPORT_SET()函數
SQL FIELD()函數
SQL FIND_IN_SET()函數
SQL FORMAT()函數
SQL HEX()函數
SQL INSERT()函數
SQL INSTR()函數
SQL LCASE()函數
SQL LEFT()函數
SQL LENGTH()函數
SQL LOAD_FILE()函數
SQL LOCATE()函數
SQL LOWER()函數
SQL LPAD()函數
SQL LTRIM()函數
SQL MAKE_SET()函數
SQL MID()函數
SQL OCT()函數
SQL OCTET_LENGTH()函數
SQL ORD()函數
SQL POSITION()函數
SQL QUOTE()函數
SQL REGEXP模式
SQL REPEAT()函數
SQL REPLACE()函數
SQL REVERSE()函數
SQL RIGHT()函數
SQL RPAD()函數
SQL SOUNDEX()函數
SQL SPACE()函數
SQL STRCMP()函數
SQL SUBSTRING()函數
SQL SUBSTRING_INDEX()函數
SQL TRIM()函數
SQL UCASE()函數
SQL UNHEX()函數
SQL UPPER()函數

SQL All運算符

在本教程中,您將瞭解SQL ALL運算符以及如何使用它來將值與一組值進行比較。

1. SQL ALL運算符簡介

SQL ALL運算符是一個邏輯運算符,它將單個值與子查詢返回的單列值集進行比較。

以下是SQL ALL運算符的語法:

WHERE column_name comparison_operator ALL (subquery)

SQL ALL運算符必須以比較運算符開頭,例如:>>=<<=<>=,後跟子查詢。 某些數據庫系統(如Oracle)允許使用文字值列表而不是子查詢。

請注意,如果子查詢不返回任何行,則WHERE子句中的條件始終爲true。 假設子查詢返回一行或多行,下表說明了SQL ALL運算符的含義:

條件

描述

c > ALL(…)

c列中的值必須大於要評估爲true的集合中的最大值。

c >= ALL(…)

c列中的值必須大於或等於要評估爲true的集合中的最大值。

c < ALL(…)

c列中的值必須小於要評估爲true的集合中的最小值。

c <= ALL(…)

c列中的值必須小於或等於要評估爲true的集合中的最小值。

c <> ALL(…)

c列中的值不得等於要評估爲true的集合中的任何值。

c = ALL(…)

c列中的值必須等於要評估爲true的集合中的任何值。

2. SQL All運算符示例

我們將使用示例數據庫中的employees表進行演示:

2.1. SQL ALL使用大於運算符
以下查詢查找column_name列中的值大於子查詢返回的最大值的行:

SELECT 
    *
FROM
    table_name
WHERE
    column_name > ALL (subquery);

例如,以下語句查找工資大於部門ID2的員工最高工資的所有員工:

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary > ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 2)
ORDER BY salary;

執行上面查詢語句,得到以下結果:

SQL

下面通過查詢部門ID爲2中員工的最高薪水來驗證它:

mysql> SELECT 
    MAX(salary)
FROM
    employees
WHERE
    department_id = 2; 
+-------------+
| MAX(salary) |
+-------------+
| 13000       |
+-------------+
1 row in set

此查詢返回13000,該值小於使用上述ALL運算符的查詢返回的任何薪水。

2.2. SQL ALL大於或等於運算符

下面顯示了具有大於或等於運算符的SQL ALL運算符的語法:

SELECT 
    *
FROM
    table_name
WHERE
    column_name >= ALL (subquery);

該查詢返回column_name列中的值大於或等於子查詢返回的所有值的所有行。

例如,以下查詢查找薪水大於或等於市場營銷部門(department_id=2)員工最高薪水的所有員工:

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary >= ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 2)
ORDER BY salary;

執行上面查詢語句,得到以下結果:

SQL

如上圖中所示,Michael員工的薪水爲13000,等於營銷部門員工的最高薪水包含在結果集中。

2.3. SQL ALL使用小於運算符
以下說明了ALL運算符結合小於運算符一起使用的查詢:

SELECT 
    *
FROM
    table_name
WHERE
    column_name < ALL (subquery);

此查詢返回column_name列中的值小於子查詢返回的最小值的所有行。

以下語句查找市場營銷部門(department_id=2)中員工的最低薪水:

SELECT 
    MIN(salary)
FROM
    employees
WHERE
    department_id = 2;
+-------------+
| MIN(salary) |
+-------------+
| 6000        |
+-------------+
1 row in set

要查找薪水低於市場營銷部門(department_id=2)員工最低薪水的所有員工,請使用ALL運算符和小於運算符,如下所示:

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary < ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 2)
ORDER BY salary DESC;

執行以上查詢語句,得到以下結果:

SQL

2.4. SQL ALL小於或等於運算符
以下是ALL運算符與小於或等於運算符一起使用的語法:

SELECT 
    *
FROM
    table_name
WHERE
    column_name <= ALL (subquery);

例如,以下語句查找薪水小於或等於市場營銷部門(department_id=2)員工最低薪水的所有員工:

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary <= ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 2)
ORDER BY salary DESC;

執行以上查詢語句,得到以下結果:

SQL

2.5. SQL ALL與不等於運算符

以下查詢返回column_name列中的值不等於子查詢返回的任何值的所有行:

SELECT 
    *
FROM
    table_name
WHERE
    column_name <> ALL (subquery);

例如,要查找工資不等於每個部門平均工資的員工,請使用以下查詢:

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary <> ALL (SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY department_id)
ORDER BY salary DESC;

執行以上查詢語句,得到以下結果:

+------------+-----------+--------+
| first_name | last_name | salary |
+------------+-----------+--------+
| Steven     | Lee       | 24000  |
| Neena      | Wong      | 17000  |
| Lex        | Liang     | 17000  |
| John       | Liu       | 14000  |
| Karen      | Liu       | 13500  |
| Michael    | Zhou      | 13000  |
| Nancy      | Chen      | 12000  |
| Shelley    | Wu        | 12000  |
| Avg        | Su        | 11000  |
| Alexander  | Lee       | 9000   |
... ...
| Shelli     | Zhang     | 2900   |
| Sigal      | Zhang     | 2800   |
| Irene      | Liu       | 2700   |
| Guy        | Zhang     | 2600   |
| Karen      | Zhang     | 2500   |
+------------+-----------+--------+
35 rows in set

請注意,子查詢通過使用AVG()函數和GROUP BY子句查找部門員工的平均工資。

2.6. SQL ALL與等於運算符

當將ALL運算符與等於運算符一起使用時,查詢將查找column_name列中的值等於子查詢返回的任何值的所有行:

SELECT 
    *
FROM
    table_name
WHERE
    column_name = ALL (subquery);

以下示例查找薪水等於市場營銷部門(department_id=2)員工最高薪水的所有員工:

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary = ALL (SELECT 
            MAX(salary)
        FROM
            employees
        WHERE
            department_id = 2);

執行上面查詢語句,得到以下結果:

+------------+-----------+--------+
| first_name | last_name | salary |
+------------+-----------+--------+
| Michael    | Zhou      | 13000  |
+------------+-----------+--------+
1 row in set

在本教程中,您學習瞭如何使用SQL ALL運算符來測試值是否與子查詢返回的值集匹配。