MySQL IN
Resumo: neste tutorial, aprenderá como utilizar o MySQL IN operador para determinar se um valor especificado corresponde a qualquer valor numa lista ou numa subconsulta.
Introdução ao MySQL IN Operator
O operador IN permite-lhe determinar se um valor especificado corresponde a qualquer valor de um conjunto de valores ou devolvido por uma subconsulta.
O seguinte ilustra a sintaxe do IN operador:
Code language: SQL (Structured Query Language) (sql)SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Vamos examinar a consulta com mais detalhe:
- Use a
columnou uma expressão (expr) com a cláusulaINoperador naWHERE. - separar os valores na lista por vírgulas (,).
O IN operador retorna 1 se o valor do column_1 ou o resultado do expr expressão for igual a qualquer valor da lista, caso contrário, retorna 0.
Quando os valores na lista são todos constantes, o MySQL executa os seguintes passos:
- Primeiro, avaliar os valores com base no tipo da expressão
column_1ou resultado da expressãoexpr. - Segundo, ordenar os valores.
- Terceiro, pesquisar o valor utilizando o algoritmo de pesquisa binária. Portanto, uma consulta que utiliza o operador
INcom uma lista de constantes tem um desempenho muito rápido.
Nota que se o expr ou qualquer valor na lista é NULL, o IN operador retorna NULL.
p>É possível combinar o operador IN com o operador NOT para determinar se um valor não corresponde a nenhum valor de uma lista ou subconsulta. E também pode usar o operador IN no operador WHERE cláusula de outras declarações como UPDATE, e DELETE.
MySQL IN exemplos de operadores
P>Prática com alguns exemplos de utilização do operador IN. Ver o seguinte offices tabela da base de dados de amostras:

Se quiser encontrar os escritórios que se localizam nos EUA. e França, pode usar o operador IN como a seguinte consulta:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Try It Out
br>Pode obter o mesmo resultado com o operador ORcomo a seguinte consulta:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Try It Out
Caso a lista tenha muitos valores, é necessário construir uma declaração muito longa com múltiplos operadores OR. Assim, o operador IN permite-lhe encurtar a consulta e torná-la mais legível.
Para obter escritórios que não se localizam nos EUA e França, usa a cláusula NOT IN na cláusula WHERE como se segue:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Try It Out

Usando o MySQL IN com uma subconsulta
O operador IN é frequentemente utilizado com uma subconsulta. Em vez de fornecer uma lista de valores literais, a subconsulta obtém uma lista de valores de uma ou mais tabelas e utiliza-os como valores de entrada do operador IN.
Vamos ver as tabelas orders e orderDetails da base de dados de amostras:
>

Por exemplo, se quiser encontrar as encomendas cujos valores totais são superiores a 60,000, utilize o operador IN como mostra a consulta seguinte:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Try It Out

A consulta acima pode ser dividida em duas consultas separadas.
P>Primeiro, a subconsulta retorna uma lista de números de ordem cujos valores são superiores a 60,000 usando as cláusulas GROUP BY e HAVING:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Try It Out

p>Segundo, a consulta externa utiliza a cláusula IN operador na WHERE para obter dados da tabela orders:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Try It Out
Neste tutorial, aprendeu como utilizar o MySQL IN operador para determinar se um valor corresponde a qualquer valor de uma lista de valores.