A2-02-07.DML-Querying Data with MySQL IN Operator
转载自:http://www.mysqltutorial.org/sql-in.aspx
Querying Data with MySQL IN Operator
Summary: in this tutorial, you will learn how to use MySQL IN operator to determine if a specified value matches any value in a list or a subquery.
Introduction to the MySQL IN Operator
The IN operator allows you to determine if a specified value matches any one of a list or a subquery. The following illustrates the syntax of the IN operator.
|
1
2
3
4
5
6
|
SELECT
column1,column2,...
FROM
table_name
WHERE
(expr|column_1) IN ('value1','value2',...);
|
Let’s examine the query in more detail:
- You can use a
columnor an expression (expr) with theINoperator in the WHERE clause. - The values in the list must be separated by a comma (,).
- The
INoperator can also be used in theWHEREclause of other statements such as INSERT, UPDATE, DELETE, etc.
The IN operator returns 1 if the value of the column_1 or the result of the expr expression is equal to any value in the list, otherwise, it returns 0.
When the values in the list are all constants:
- First, MySQL evaluates the values based on the type of the
column_1or result of theexprexpression. - Second, MySQL sorts the values.
- Third, MySQL searches for values using binary search algorithm. Therefore, a query that uses the
INoperator with a list of constants will perform very fast.
Note that if the expr or any value in the list is NULL, the IN operator returns NULL
You can combine the IN operator with the NOT operator to determine if a value does not match any value in a list or a subquery.
MySQL IN examples
Let’s practice with some examples of using the IN operator.

If you want to find out the offices that locate in the U.S. and France, you can use the IN operator as the following query:
|
1
2
3
4
5
6
|
SELECT
officeCode, city, phone, country
FROM
offices
WHERE
country IN ('USA' , 'France');
|

You can achieve the same result with the OR operator as the following query:
|
1
2
3
4
5
6
|
SELECT
officeCode, city, phone
FROM
offices
WHERE
country = 'USA' OR country = 'France';
|
In case the list has many values, you have to construct a very long statement with multiple OR operators. Hence, the IN operator allows you to shorten the query and make the query more readable.
To get offices that do not locate in USA and France, you use NOT IN in the WHERE clause as follows:
|
1
2
3
4
5
6
|
SELECT
officeCode, city, phone
FROM
offices
WHERE
country NOT IN ('USA' , 'France');
|

MySQL IN with subquery
The IN operator is often used with a subquery. Instead of providing a list of constant values, the subquery provides the list of values.
Let’s take a look at the orders and orderDetails tables:

For example, if you want to find orders whose total amounts are greater than 60000, you use the INoperator as the following query:
|
1
2
3
4
5
6
7
8
9
10
11
|
SELECT
orderNumber, customerNumber, status, shippedDate
FROM
orders
WHERE
orderNumber IN (SELECT
orderNumber
FROM
orderDetails
GROUP BY orderNumber
HAVING SUM(quantityOrdered * priceEach) > 60000);
|

The whole query above can be broken down into 2 queries.
First, the subquery returns a list of order numbers that have total greater than 60000 using the GROUP BY and HAVING clauses on the orderDetails table.
|
1
2
3
4
5
6
|
SELECT
orderNumber
FROM
orderDetails
GROUP BY orderNumber
HAVING SUM(quantityOrdered * priceEach) > 60000;
|

Second, the main query gets the data from the orders table and applies the IN operator in the WHEREclause.
|
1
2
3
4
5
6
|
SELECT
orderNumber, customerNumber, status, shippedDate
FROM
orders
WHERE
orderNumber IN (10165,10287,10310);
|
In this tutorial, we have shown you how to use MySQL IN operator to determine if a value matches any value in a list or a subquery.

浙公网安备 33010602011771号