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
columnof een expressie (expr) met deINoperator in deWHEREclausule. - 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_1of het resultaat van deexprexpressie. - Tweede, sorteer de waarden.
- Derde, zoek naar de waarde met behulp van het binaire zoekalgoritme. Een query die gebruikmaakt van de
INoperator 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