SQL比較運算子

2019-10-16 22:50:50

在本教學中,您將了解SQL比較運算子以及如何使用它們來組成過濾資料的條件。SQL比較運算子用於測試兩個表示式是否相同,下表說明了SQL中的比較運算子:

編號 運算子 描述/含意
1 = 等於
2 <> 不等於
3 > 大於
4 >= 大於或等於
5 < 小於
6 <= 小於或等於
7 != 不等於

比較運算子的結果只能是三個值:truefalseunknown的其中一個。

1. 等於(=)運算子

等於(=)運算子用於比較兩個表示式的相等性:

expression1 = expression2

如果左表示式的值等於右表示式的值,則返回true; 否則返回false

例如,以下語句查詢姓氏(last_name)為Lee的員工資訊:

SELECT 
    employee_id, first_name, last_name
FROM
    employees
WHERE
    last_name = 'Lee';

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

+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
|         100 | Steven     | Lee       |
|         103 | Alexander  | Lee       |
+-------------+------------+-----------+
2 rows in set

在此範例中,查詢在employees表的last_name列中搜尋字串:Lee

請注意,等於(=)運算子不能用於比較NULL值。 例如,以下查詢是查詢沒有電話號碼的所有員工資訊:

SELECT 
    employee_id, first_name, last_name, phone_number
FROM
    employees
WHERE
    phone_number = NULL;

但是,上面查詢語句返回一個空結果集,因為以下表示式始終返回false

phone_number = NULL

要比較空(null)值,請改用IS NULL運算子,重寫上面查詢語句 -

SELECT 
    employee_id, first_name, last_name, phone_number
FROM
    employees
WHERE
    phone_number IS NULL;

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

+-------------+------------+-----------+--------------+
| employee_id | first_name | last_name | phone_number |
+-------------+------------+-----------+--------------+
|         145 | John       | Liu       | NULL         |
|         146 | Karen      | Liu       | NULL         |
|         176 | Jonathon   | Yang      | NULL         |
|         177 | Jack       | Yang      | NULL         |
|         178 | Kimberely  | Yang      | NULL         |
|         179 | Charles    | Yang      | NULL         |
+-------------+------------+-----------+--------------+
6 rows in set

2. 不等於(<>)運算子

不等於(<>)運算子用於比較兩個非空表示式,如果左表示式的值不等於右表示式,則返回true; 否則返回false

expression1 <> expression2

例如,以下語句將返回部門ID不是8的所有員工資訊。

SELECT 
    employee_id, first_name, last_name, department_id
FROM
    employees
WHERE
    department_id <> 8
ORDER BY first_name , last_name;

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

+-------------+------------+-----------+---------------+
| employee_id | first_name | last_name | department_id |
+-------------+------------+-----------+---------------+
|         103 | Alexander  | Lee       |             6 |
|         115 | Alexander  | Su        |             3 |
|         114 | Avg        | Su        |             3 |
|         193 | Britney    | Zhao      |             5 |
|         104 | Bruce      | Wong      |             6 |
|         109 | Daniel     | Chen      |            10 |
... ...
|         100 | Steven     | Lee       |             9 |
|         203 | Susan      | Zhou      |             4 |
|         106 | Valli      | Chen      |             6 |
|         206 | William    | Wu        |            11 |
+-------------+------------+-----------+---------------+
34 rows in set

可以使用AND運算子組合使用不等於(<>)運算子的多個表示式。 例如,以下語句查詢部門ID不是810的所有員工資訊。

SELECT 
    employee_id, first_name, last_name, department_id
FROM
    employees
WHERE
    department_id <> 8
        AND department_id <> 10
ORDER BY first_name , last_name;

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

+-------------+------------+-----------+---------------+
| employee_id | first_name | last_name | department_id |
+-------------+------------+-----------+---------------+
|         103 | Alexander  | Lee       |             6 |
|         115 | Alexander  | Su        |             3 |
|         114 | Avg        | Su        |             3 |
|         193 | Britney    | Zhao      |             5 |
|         104 | Bruce      | Wong      |             6 |
|         105 | David      | Liang     |             6 |
|         107 | Diana      | Chen      |             6 |
|         118 | Guy        | Zhang     |             3 |
... ...
|         117 | Sigal      | Zhang     |             3 |
|         100 | Steven     | Lee       |             9 |
|         203 | Susan      | Zhou      |             4 |
|         106 | Valli      | Chen      |             6 |
|         206 | William    | Wu        |            11 |
+-------------+------------+-----------+---------------+
28 rows in set

3. 大於(>)運算子

大於運算子(>)比較兩個非空表示式,如果左運算元大於右運算元,則返回true; 否則返回false

expression1 > expression2

例如,要查詢薪水大於12000的員工資訊,那麼可在WHERE子句中使用大於運算子,如下所示:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary > 12000
ORDER BY salary DESC;

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

+-------------+------------+-----------+--------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+--------+
|         100 | Steven     | Lee       | 24000  |
|         101 | Neena      | Wong      | 17000  |
|         102 | Lex        | Liang     | 17000  |
|         145 | John       | Liu       | 14000  |
|         146 | Karen      | Liu       | 13500  |
|         201 | Michael    | Zhou      | 13000  |
+-------------+------------+-----------+--------+

可以使用ANDOR運算子組合成比較運算子的表示式。 例如,以下語句查詢部門ID8並且薪水大於12000的員工資訊:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary > 12000 AND department_id = 8
ORDER BY salary DESC;

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

+-------------+------------+-----------+--------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+--------+
|         145 | John       | Liu       | 14000  |
|         146 | Karen      | Liu       | 13500  |
+-------------+------------+-----------+--------+
2 rows in set

4. 大於等於(>=)運算子

大於或等於(>=)運算子用於比較兩個非空表示式。 如果左表示式的計算結果大於右表示式的值,則結果為true

以下是大於或等於運算子的語法:

expression1 >= expression2

例如,以下查詢語句用於查詢薪水大於或等於9999的員工資訊:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary >= 9999
ORDER BY salary;

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

+-------------+------------+-----------+--------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+--------+
|         204 | Hermann    | Wu        | 10000  |
|         114 | Avg        | Su        | 11000  |
|         108 | Nancy      | Chen      | 12000  |
|         205 | Shelley    | Wu        | 12000  |
|         201 | Michael    | Zhou      | 13000  |
|         146 | Karen      | Liu       | 13500  |
|         145 | John       | Liu       | 14000  |
|         101 | Neena      | Wong      | 17000  |
|         102 | Lex        | Liang     | 17000  |
|         100 | Steven     | Lee       | 24000  |
+-------------+------------+-----------+--------+
10 rows in set

5. 小於或等於(<=)運算子

小於或等於運算子用於比較兩個非空表示式,如果左表示式的值小於或等於右表示式的值,則返回true; 否則返回true

以下是小於或等於運算子的語法:

expression1 <= expression2

例如,以下語句用於查詢薪水小於或等於3500的員工資訊:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary <= 3500
ORDER BY salary;

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

+-------------+------------+-----------+--------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+--------+
|         119 | Karen      | Zhang     | 2500   |
|         118 | Guy        | Zhang     | 2600   |
|         126 | Irene      | Liu       | 2700   |
|         117 | Sigal      | Zhang     | 2800   |
|         116 | Shelli     | Zhang     | 2900   |
|         115 | Alexander  | Su        | 3100   |
+-------------+------------+-----------+--------+
6 rows in set

在本教學中,您學習了如何使用比較運算子來組成比較表示式,以便根據指定的條件過濾資料。