在本教學中,您將了解SQL比較運算子以及如何使用它們來組成過濾資料的條件。SQL比較運算子用於測試兩個表示式是否相同,下表說明了SQL中的比較運算子:
編號 | 運算子 | 描述/含意 |
---|---|---|
1 | = |
等於 |
2 | <> |
不等於 |
3 | > |
大於 |
4 | >= |
大於或等於 |
5 | < |
小於 |
6 | <= |
小於或等於 |
7 | != |
不等於 |
比較運算子的結果只能是三個值:true
,false
和unknown
的其中一個。
等於(=
)運算子用於比較兩個表示式的相等性:
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
不等於(<>
)運算子用於比較兩個非空表示式,如果左表示式的值不等於右表示式,則返回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不是8
和10
的所有員工資訊。
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
大於運算子(>
)比較兩個非空表示式,如果左運算元大於右運算元,則返回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 |
+-------------+------------+-----------+--------+
可以使用AND
或OR
運算子組合成比較運算子的表示式。 例如,以下語句查詢部門ID
是8
並且薪水大於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
大於或等於(>=
)運算子用於比較兩個非空表示式。 如果左表示式的計算結果大於右表示式的值,則結果為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
小於或等於運算子用於比較兩個非空表示式,如果左表示式的值小於或等於右表示式的值,則返回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
在本教學中,您學習了如何使用比較運算子來組成比較表示式,以便根據指定的條件過濾資料。