MySQL IN
Podsumowanie: W tym poradniku dowiesz się jak używać operatora MySQL IN
do określania czy określona wartość pasuje do dowolnej wartości na liście lub podzapytaniu.
Wprowadzenie do operatora MySQL IN
Operator IN
pozwala określić, czy określona wartość pasuje do dowolnej wartości w zestawie wartości lub zwróconej przez podzapytanie.
Następująca ilustracja przedstawia składnię operatora IN
:
Code language: SQL (Structured Query Language) (sql)SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Przeanalizujmy zapytanie bardziej szczegółowo:
- Użyj
column
lub wyrażenia (expr
) z operatoremIN
w klauzuliWHERE
. - Oddziel wartości na liście przecinkami (,).
Operator IN
zwraca 1, jeśli wartość wyrażenia column_1
lub wynik wyrażenia expr
jest równa dowolnej wartości z listy, w przeciwnym razie zwraca 0.
Gdy wszystkie wartości na liście są stałymi, MySQL wykonuje następujące kroki:
- Pierwsze, oceń wartości na podstawie typu wyrażenia
column_1
lub wyniku wyrażeniaexpr
. - Po drugie, posortuj wartości.
- Po trzecie, wyszukaj wartość za pomocą algorytmu wyszukiwania binarnego. Dlatego zapytanie, które wykorzystuje operator
IN
z listą stałych wykonuje się bardzo szybko.
Zauważ, że jeśli expr
lub dowolna wartość na liście jest NULL
, operator IN
zwraca NULL
.
Możesz połączyć operator IN
z operatorem NOT
, aby określić, czy wartość nie pasuje do żadnej wartości na liście lub w podzapytaniu. Możesz również użyć operatora IN
w klauzuli WHERE
innych stwierdzeń, takich jak UPDATE
, i DELETE
.
Przykłady operatora MySQL IN
Przećwiczmy na kilku przykładach użycie operatora IN
. Zobacz następującą tabelę offices
z przykładowej bazy danych:
Jeśli chcesz znaleźć biura, które znajdują się w USA i Francji. i Francji, możesz użyć operatora IN
w następujący sposób:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Try It Out
Ten sam rezultat możesz osiągnąć za pomocą operatora OR
w postaci następującego zapytania:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Try It Out
W przypadku, gdy lista ma wiele wartości, trzeba skonstruować bardzo długą instrukcję z wieloma operatorami OR
. Stąd operator IN
pozwala skrócić zapytanie i uczynić je bardziej czytelnym.
Aby uzyskać biura, które nie są zlokalizowane w USA i Francji, należy użyć NOT IN
w klauzuli WHERE
w następujący sposób:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Try It Out
Użycie MySQL IN z podzapytaniem
Operator IN
jest często używany z podzapytaniem. Zamiast podawać listę dosłownych wartości, podzapytanie pobiera listę wartości z jednej lub więcej tabel i używa ich jako wartości wejściowych operatora IN
.
Przyjrzyjrzyjmy się tabelom orders
i orderDetails
z przykładowej bazy danych:
Na przykład, jeśli chcemy znaleźć zamówienia, których suma wartości jest większa niż 60,000
, używamy operatora IN
, jak pokazano w poniższym zapytaniu:
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
Całe powyższe zapytanie można rozbić na dwa osobne zapytania.
Po pierwsze, podzapytanie zwraca listę numerów porządkowych, których wartości są większe niż 60,000
przy użyciu klauzul GROUP BY
i HAVING
:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Try It Out
Po drugie, zapytanie zewnętrzne wykorzystuje operator IN
w klauzuli WHERE
do pobrania danych z tabeli orders
:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Try It Out
W tym poradniku dowiedziałeś się, jak używać operatora MySQL IN
do określania, czy dana wartość pasuje do dowolnej wartości z listy wartości.
- Czy ten poradnik był pomocny?
- TakNie