SQL And運算子


本教學將介紹SQL AND運算子,並演示如何將其應用於在SQL語句的WHERE子句中形成條件。

2. SQL AND運算子簡介

AND運算子是一個邏輯運算子,它在SELECTUPDATEDELETE語句的WHERE子句中組合了兩個布林表示式。 以下說明了AND運算子的語法:

expression1 AND expression2;

如果兩個表示式的計算結果為true,則AND運算子返回true。 如果兩個表示式中的一個為false,即使其中一個表示式為NULL,則AND運算子返回false

下表說明了比較truefalseNULL值時AND運算子的結果:

 - TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL

1. SQL AND運算子範例

我們將使用範例資料庫中的employees表來演示SQL AND運算子。

mysql> DESC employees;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| employee_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
| first_name    | varchar(20)  | YES  |     | NULL    |                |
| last_name     | varchar(25)  | NO   |     | NULL    |                |
| email         | varchar(100) | NO   |     | NULL    |                |
| phone_number  | varchar(20)  | YES  |     | NULL    |                |
| hire_date     | date         | NO   |     | NULL    |                |
| job_id        | int(11)      | NO   | MUL | NULL    |                |
| salary        | decimal(8,2) | NO   |     | NULL    |                |
| manager_id    | int(11)      | YES  | MUL | NULL    |                |
| department_id | int(11)      | YES  | MUL | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set

以下語句查詢同時具有工作ID是9和薪水大於5000的所有員工:

SELECT
    first_name, last_name, job_id, salary
FROM
    employees
WHERE
    job_id = 9
AND salary > 5000;

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

+------------+-----------+--------+--------+
| first_name | last_name | job_id | salary |
+------------+-----------+--------+--------+
| Alexander  | Lee       |      9 | 9000   |
| Bruce      | Wong      |      9 | 6000   |
+------------+-----------+--------+--------+
2 rows in set

要查詢1997年到1998年之間加入公司的所有員工,使用AND運算子,如下所示:

SELECT
    first_name, last_name, hire_date
FROM
    employees
WHERE
    YEAR (hire_date) >=1997
AND YEAR (hire_date) <= 1998;

執行上面範例程式碼,得到以下結果 -

SQL AND運算子和短路計算

短路功能允許資料庫系統在確定結果後立即停止評估邏輯表示式的其餘部分。

讓我們看一個例子來更好地理解短路計算功能的工作原理。

請參閱以下條件:

1 = 0 AND 1 = 1;

資料庫系統首先處理兩個比較,並使用AND運算子來評估兩個結果。

但是,使用短路評估功能,資料庫系統只需要評估表示式的左側部分,因為左側部分(1 = 0)返回false,導致整個條件返回false,而不管右側部分條件的結果如何。

因此,短路功能可以減少CPU計算時間,並且在某些情況下有助於防止執行時錯誤。 考慮以下情況:

1 = 0 AND 1/0;

如果資料庫系統支援短路功能,則不會評估導致除零錯誤的表示式(1/0)的右側部分。

現在,您應該了解SQL AND運算子的工作原理以及如何應用它以在查詢中形成複雜查詢條件。