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
column
ou uma expressão (expr
) com a cláusulaIN
operador 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_1
ou 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
IN
com 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 OR
como 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.