在本教程中,您將學習如何使用 IN 和 BETWEEN運算符并與WHERE子句一起使用。
在上一章中,我們學習了如何使用AND和OR運算符組合多個條件。但是,有時這是不夠的,例如,如果您必須檢查位于一個范圍或一組值中的值。
這里出現了IN和BETWEEN操作符,它允許您定義一個獨占范圍或一組值,而不是組合單獨的條件。
IN運算符是邏輯運算符,用于檢查一組值中是否存在特定值。 其基本語法可以通過以下方式給出:
SELECT column_list FROM table_name WHERE column_name IN (value1, value1,...);
在這里,column_list是要獲取其值的數據庫表的列/字段的名稱,例如name,age,country等。好吧,讓我們看看一些實例。
考慮我們在數據庫中有一個employees表,該表具有以下記錄:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | +--------+--------------+------------+--------+---------+
以下SQL語句將僅返回dept_id為1或3的那些雇員。
SELECT * FROM employees WHERE dept_id IN (1, 3);
執(zhí)行查詢后,您將獲得如下結果集:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | +--------+--------------+------------+--------+---------+
同樣,您可以使用NOT IN運算符,則該運算符與IN運算符完全相反。以下SQL語句將返回除dept_id不是1或3的那些雇員以外的所有雇員。
SELECT * FROM employees WHERE dept_id NOT IN (1, 3);
執(zhí)行查詢后,這次您將獲得如下結果集:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | +--------+--------------+------------+--------+---------+
如果列中的值落在特定范圍內,有時您想選擇一行。處理數字數據時,這種類型的條件很常見。
要基于這種條件執(zhí)行查詢,您可以利用BETWEEN運算符。它是一個邏輯運算符,可讓您指定要測試的范圍,如下所示:
SELECT column1_name, column2_name, columnN_name FROM table_name WHERE column_name BETWEEN min_value AND max_value;
讓我們根據雇員(employees)表上的范圍條件構建和執(zhí)行查詢。
以下SQL語句將僅返回employees表中薪水在7000到9000之間的那些雇員。
SELECT * FROM employees WHERE salary BETWEEN 7000 AND 9000;
執(zhí)行后,您將獲得如下輸出:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | +--------+--------------+------------+--------+---------+
將BETWEEN運算符與日期或時間值一起使用時,請使用CAST()函數將這些值顯式轉換為所需的數據類型,以獲得最佳結果。例如,如果在與DATE的比較中使用諸如“ 2016-12-31”之類的字符串,則將其轉換為DATE,如下所示:
以下SQL語句選擇2006年1月1日(即“ 2006-01-01”)至2016年12月31日(即“ 2016-12-31”)之間雇用的所有雇員:
SELECT * FROM employees WHERE hire_date BETWEEN CAST('2006-01-01' AS DATE) AND CAST('2016-12-31' AS DATE);
執(zhí)行查詢后,您將獲得如下結果集:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | +--------+--------------+------------+--------+---------+
雖然日期和數字范圍是最常見的,但您也可以建立條件來搜索字符串范圍。以下SQL語句選擇名稱以“ O”和“ Z”之間的任何字母開頭的所有雇員:
SELECT * FROM employees WHERE emp_name BETWEEN 'O' AND 'Z';
執(zhí)行后,您將獲得如下輸出:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | +--------+--------------+------------+--------+---------+