SQL IN & BETWEEN 運算符

在本教程中,您將學習如何使用 IN 和 BETWEEN運算符并與WHERE子句一起使用。

使用范圍和成員資格條件

在上一章中,我們學習了如何使用AND和OR運算符組合多個條件。但是,有時這是不夠的,例如,如果您必須檢查位于一個范圍或一組值中的值。

這里出現了IN和BETWEEN操作符,它允許您定義一個獨占范圍或一組值,而不是組合單獨的條件。

IN運算符

IN運算符是邏輯運算符,用于檢查一組值中是否存在特定值。 其基本語法可以通過以下方式給出:

SELECT column_list FROM table_name
WHERE column_name IN (value1, value1,...);

在這里,column_list是要獲取其值的數據庫表的列/字段的名稱,例如name,agecountry等。好吧,讓我們看看一些實例。

考慮我們在數據庫中有一個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 |
+--------+--------------+------------+--------+---------+

BETWEEN 運算符

如果列中的值落在特定范圍內,有時您想選擇一行。處理數字數據時,這種類型的條件很常見。

要基于這種條件執(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 |
+--------+--------------+------------+--------+---------+
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清