Curriculum
In this tutorial, you will learn how to use the SQL IN
operator to check if a value is in a set of values.
The IN
is a logical operator in SQL. The IN
operator returns true if a value is in a set of values or false otherwise.
The following illustrates the syntax of the IN
operator:
expression IN (value1,value2,...)
Technically, you can substitute the IN operator with the =
and OR operators The condition that uses the
IN
operator can be rewritten using one or more OR operators as follows:
expression = value1 OR expression = value2 OR ...
To negate the IN
operator, you use the NOT
operator:
expression NOT IN (value1, value2,...)
The NOT IN
operator returns true if the expression
does not equal any values in the list or false otherwise.
To substitute the IN operator, you can use the !=
and AND
operators as follows:
expression != value1 AND expression != value2 AND...
Notice that if any value in the list (value1,value2,...)
is null, the IN
operator returns no rows.
In practice, you often use the IN
and NOT IN
operators in the WHERE clause of the
SELECT statement to select rows with a value in a set of values. Also, you’ll use the
IN
operator in subqueries.
We will use the employees
table in the sample database to demonstrate the functionality of the IN
operator.
The following example uses the IN
operator to find employees with the job id is 8, 9, or 10:
SELECT employee_id, first_name, last_name, job_id FROM employees WHERE job_id IN (8, 9, 10) ORDER BY job_id;
+-------------+------------+-----------+--------+ | employee_id | first_name | last_name | job_id | +-------------+------------+-----------+--------+ | 203 | Susan | Mavris | 8 | | 103 | Alexander | Hunold | 9 | | 104 | Bruce | Ernst | 9 | | 105 | David | Austin | 9 | | 106 | Valli | Pataballa | 9 | | 107 | Diana | Lorentz | 9 | | 201 | Michael | Hartstein | 10 | +-------------+------------+-----------+--------+
The following example uses the NOT IN
operator to find employees whose job’s id is neither 7, 8, nor 9:
SELECT employee_id, first_name, last_name, job_id FROM employees WHERE job_id NOT IN (7, 8, 9) ORDER BY job_id;
+-------------+-------------+-------------+--------+ | employee_id | first_name | last_name | job_id | +-------------+-------------+-------------+--------+ | 206 | William | Gietz | 1 | | 205 | Shelley | Higgins | 2 | | 200 | Jennifer | Whalen | 3 | | 100 | Steven | King | 4 | | 102 | Lex | De Haan | 5 | | 101 | Neena | Kochhar | 5 | | 109 | Daniel | Faviet | 6 | | 113 | Luis | Popp | 6 | | 110 | John | Chen | 6 | | 111 | Ismael | Sciarra | 6 | | 112 | Jose Manuel | Urman | 6 | | 201 | Michael | Hartstein | 10 | | 202 | Pat | Fay | 11 | | 204 | Hermann | Baer | 12 | | 118 | Guy | Himuro | 13 | ...
A subquery is a query nested inside another query. Let’s take a look at an example:
The following query returns the department id of the Marketing
and Sales
departments:
SELECT department_id FROM departments WHERE department_name = 'Marketing' OR department_name = 'Sales'
+---------------+ | department_id | +---------------+ | 2 | | 8 | +---------------+
The query returns a list of two department ids.
And you can pass the id list to the IN
operator to find employees who work in the Marketing
and Sales departments
like this:
SELECT employee_id, first_name, last_name, department_id FROM employees WHERE department_id IN (2, 8);
+-------------+------------+------------+---------------+ | employee_id | first_name | last_name | department_id | +-------------+------------+------------+---------------+ | 145 | John | Russell | 8 | | 146 | Karen | Partners | 8 | | 176 | Jonathon | Taylor | 8 | | 177 | Jack | Livingston | 8 | | 178 | Kimberely | Grant | 8 | | 179 | Charles | Johnson | 8 | | 201 | Michael | Hartstein | 2 | | 202 | Pat | Fay | 2 | +-------------+------------+------------+---------------+
To combine two above queries into a single query, you can use the first query in place of the list inside parentheses followed the IN operator:
SELECT employee_id, first_name, last_name, salary FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_name = 'Marketing' OR department_name = 'Sales')