MySQL IN
Samenvatting: in deze tutorial leert u hoe u MySQL IN
operator kunt gebruiken om te bepalen of een gespecificeerde waarde overeenkomt met een willekeurige waarde in een lijst of een subquery.
Inleiding tot de MySQL IN Operator
Met de IN
operator kunt u bepalen of een gespecificeerde waarde overeenkomt met een willekeurige waarde in een reeks waarden of teruggegeven door een subquery.
Het volgende illustreert de syntaxis van de IN
operator:
Code language: SQL (Structured Query Language) (sql)SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Laten we de query in meer detail bekijken:
- Gebruik een
column
of een expressie (expr
) met deIN
operator in deWHERE
clausule. - Scheid de waarden in de lijst door komma’s (,).
De IN
operator geeft 1 terug als de waarde van de column_1
of het resultaat van de expr
expressie gelijk is aan een waarde in de lijst, anders geeft het 0 terug.
Wanneer de waarden in de lijst allemaal constanten zijn, voert MySQL de volgende stappen uit:
- Eerst worden de waarden geëvalueerd op basis van het type van de
column_1
of het resultaat van deexpr
expressie. - Tweede, sorteer de waarden.
- Derde, zoek naar de waarde met behulp van het binaire zoekalgoritme. Een query die gebruikmaakt van de
IN
operator met een lijst constanten presteert daarom zeer snel.
Merk op dat als de expr
of een willekeurige waarde in de lijst NULL
is, de IN
operator NULL
teruggeeft.
U kunt de IN
operator combineren met de NOT
operator om te bepalen of een waarde niet overeenkomt met een waarde in een lijst of een subquery. En u kunt de IN
operator ook gebruiken in de WHERE
clausule van andere statements, zoals UPDATE
, en DELETE
.
MySQL IN operator voorbeelden
Laten we eens oefenen met enkele voorbeelden van het gebruik van de IN
operator. Bekijk de volgende offices
tabel uit de voorbeelddatabase:
Als u de kantoren wilt vinden die zich in de V.S. en Frankrijk, kunt u de IN
operator gebruiken zoals in de volgende query:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Probeer het uit
U kunt hetzelfde resultaat bereiken met de OR
operator als de volgende query:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Probeer het eens
In het geval dat de lijst veel waarden heeft, moet je een heel lang statement construeren met meerdere OR
operators. Met de IN
operator kunt u de query inkorten en leesbaarder maken.
Om kantoren te krijgen die zich niet in de VS en Frankrijk bevinden, gebruikt u NOT IN
in de WHERE
-clausule, en wel als volgt:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Probeer het uit
Mysql IN gebruiken met een subquery
De IN
operator wordt vaak gebruikt met een subquery. In plaats van een lijst van letterlijke waarden te geven, krijgt de subquery een lijst van waarden uit een of meer tabellen en gebruikt deze als de invoerwaarden van de IN
operator.
Laten we eens kijken naar de orders
en orderDetails
tabellen uit de voorbeelddatabase:
Voorbeeld, als u de orders wilt vinden waarvan de totale waarden groter zijn dan 60,000
, gebruikt u de operator IN
, zoals in de volgende query wordt getoond:
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);
Probeer het eens
De hele query hierboven kan worden opgesplitst in twee afzonderlijke query’s.
Eerst geeft de subquery een lijst met bestelnummers waarvan de waarden groter zijn dan 60,000
met behulp van de GROUP BY
en HAVING
-clausules:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Probeer het uit
Tweede, de buitenste query gebruikt de IN
operator in de WHERE
clausule om gegevens uit de orders
tabel te halen:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Probeer het uit
In deze tutorial hebt u geleerd hoe u MySQL IN
operator kunt gebruiken om te bepalen of een waarde overeenkomt met een willekeurige waarde in een lijst met waarden.
- Was deze tutorial nuttig?
- JaNee