Articles

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:

SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Code language: SQL (Structured Query Language) (sql)

Przeanalizujmy zapytanie bardziej szczegółowo:

  • Użyj column lub wyrażenia ( expr ) z operatorem IN w klauzuli WHERE.
  • 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żenia expr.
  • 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:

TabelaOffices

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:

SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Code language: SQL (Structured Query Language) (sql)

Try It Out

Przykład listy krajów MySQL IN
Ten sam rezultat możesz osiągnąć za pomocą operatora OR w postaci następującego zapytania:

SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Code language: SQL (Structured Query Language) (sql)

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:

SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Code language: SQL (Structured Query Language) (sql)

Try It Out

Przykład MySQL NOT IN offices

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:

tabela orderdetails

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:

SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Code language: SQL (Structured Query Language) (sql)

Try It Out

MySQL IN with Subquery example

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:

SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Code language: SQL (Structured Query Language) (sql)

Try It Out

MySQL IN subquery

Po drugie, zapytanie zewnętrzne wykorzystuje operator IN w klauzuli WHERE do pobrania danych z tabeli orders:

SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Code language: SQL (Structured Query Language) (sql)

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *