本教學將介紹SQL AND運算子,並演示如何將其應用於在SQL語句的WHERE
子句中形成條件。
AND
運算子是一個邏輯運算子,它在SELECT,UPDATE或DELETE語句的WHERE
子句中組合了兩個布林表示式。 以下說明了AND
運算子的語法:
expression1 AND expression2;
如果兩個表示式的計算結果為true
,則AND
運算子返回true
。 如果兩個表示式中的一個為false
,即使其中一個表示式為NULL
,則AND
運算子返回false
。
下表說明了比較true
,false
和NULL
值時AND
運算子的結果:
- | TRUE | FALSE | NULL |
---|---|---|---|
TRUE | TRUE | FALSE | NULL |
FALSE | FALSE | FALSE | FALSE |
NULL | NULL | FALSE | NULL |
我們將使用範例資料庫中的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;
執行上面範例程式碼,得到以下結果 -
短路功能允許資料庫系統在確定結果後立即停止評估邏輯表示式的其餘部分。
讓我們看一個例子來更好地理解短路計算功能的工作原理。
請參閱以下條件:
1 = 0 AND 1 = 1;
資料庫系統首先處理兩個比較,並使用AND
運算子來評估兩個結果。
但是,使用短路評估功能,資料庫系統只需要評估表示式的左側部分,因為左側部分(1 = 0
)返回false
,導致整個條件返回false
,而不管右側部分條件的結果如何。
因此,短路功能可以減少CPU計算時間,並且在某些情況下有助於防止執行時錯誤。 考慮以下情況:
1 = 0 AND 1/0;
如果資料庫系統支援短路功能,則不會評估導致除零錯誤的表示式(1/0)的右側部分。
現在,您應該了解SQL AND
運算子的工作原理以及如何應用它以在查詢中形成複雜查詢條件。