English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,您将学习如何使用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 | +--------+--------------+------------+--------+---------+
Ecco una query SQL che restituirà solodept_id为1或3的雇员。
SELECT * FROM employees WHERE dept_id IN (1, 3);
Dopo aver eseguito la query, otterrai il seguente insieme di risultati:
+--------+--------------+------------+--------+---------+ | 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);
Dopo aver eseguito la query, questa volta otterrai il seguente insieme di risultati:
+--------+--------------+------------+--------+---------+ | 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 | +--------+--------------+------------+--------+---------+
Se il valore in una colonna si trova all'interno di un intervallo specifico, a volte vuoi selezionare una riga. Questo tipo di condizione è comune quando si lavora con dati numerici.
Per eseguire una query basata su questa condizione, puoi utilizzare l'operatore BETWEEN. È un operatore logico che ti permette di specificare l'intervallo da testare, come ad esempio:
SELECT column1_name, column2_name, columnN_name FROM table_name WHERE column_name BETWEEN min_value AND max_value;
Vediamo comeImpiegati (employees)Costruire e eseguire una query con condizioni di range sulla tabella.
Ecco una query SQL che restituirà soloemployeesQuesti sono gli impiegati nella tabella con uno stipendio tra 7000 e 9000.
SELECT * FROM employees WHERE salary BETWEEN 7000 AND 9000;
Eseguito, otterrai l'output seguente:
+--------+--------------+------------+--------+---------+ | 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 | +--------+--------------+------------+--------+---------+
Quando si utilizza l'operatore BETWEEN con valori di data o ora, utilizzare la funzione CAST() per convertire esplicitamente questi valori nel tipo di dati desiderato per ottenere i migliori risultati. Ad esempio, se si utilizza una stringa come '2016-12-31' per confrontarla con DATE, convertirlo come segue:
Ecco un esempio di query SQL che seleziona tutti gli impiegati assunti tra il 1 gennaio 2006 (ovvero '2006-01-01') e il 31 dicembre 2016 (ovvero '2016-12-31'):
SELECT * FROM employees WHERE hire_date BETWEEN CAST('2006-01-01' AS DATE) AND CAST('2016-12-31' AS DATE);
Dopo aver eseguito la query, otterrai il seguente insieme di risultati:
+--------+--------------+------------+--------+---------+ | 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 | +--------+--------------+------------+--------+---------+
Sebbene le date e i range numerici siano i più comuni, puoi anche creare condizioni per cercare range di stringhe. Ecco un esempio di query SQL che seleziona tutti gli impiegati il cui nome inizia con qualsiasi lettera tra 'O' e 'Z':
SELECT * FROM employees WHERE emp_name BETWEEN 'O' AND 'Z';
Eseguito, otterrai l'output seguente:
+--------+--------------+------------+--------+---------+ | 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 | +--------+--------------+------------+--------+---------+