Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

IN

Termin Definicja
IN

IN to operator Transact-SQL sprawdzający, czy dana wartość znajduje się w podanym zestawie możliwych wartości.

Operator IN w języku Transact-SQL

IN jest predykatem języka Transact-SQL używanym do sprawdzania, czy wartość wyrażenia jest równa jednej z wartości wymienionych w określonym zestawie. Najczęściej stosuje się go w klauzuli WHERE, aby ograniczyć wynik zapytania do kilku konkretnych wartości bez konieczności zapisywania wielu warunków połączonych operatorem OR. Przykładowe zapytanie SELECT * FROM dbo.Produkty WHERE Kategoria IN ('laptop', 'monitor', 'drukarka'); zwróci wiersze, w których kolumna Kategoria ma jedną z trzech wskazanych wartości.

Składnia predykatu ma postać wyrażenie IN (wartość_1, wartość_2, ...). W Transact-SQL lista może zawierać stałe tekstowe, liczbowe, daty albo inne wyrażenia zgodne typem z wartością porównywaną. Dostępna jest również forma NOT IN, która wybiera wiersze, dla których wartość nie należy do wskazanego zestawu. Operator IN nie jest ograniczony do jednej konkretnej tabeli, ale sposób jego wykonania zależy od zapytania, indeksów, liczby elementów listy oraz planu wykonania wybranego przez optymalizator SQL Server.

Porównywanie wartości tekstowych, liczbowych i dat

Wartości na liście IN są porównywane zgodnie z regułami typów danych i sortowania obowiązującymi w SQL Server. Dla kolumn tekstowych znaczenie może mieć kolacja, czyli zestaw reguł określających między innymi porównywanie znaków, wielkość liter oraz znaki diakrytyczne. Jeżeli kolumna ma kolację niewrażliwą na wielkość liter, wartości takie jak 'Warszawa' i 'warszawa' mogą być traktowane jako równoważne. Nie należy zakładać takiego wyniku bez sprawdzenia kolacji kolumny i bazy danych.

Przy danych liczbowych wszystkie elementy listy powinny odpowiadać znaczeniowo porównywanej kolumnie. Dla przykładu WHERE StatusId IN (1, 3, 5) filtruje identyfikatory statusów o wskazanych wartościach. W przypadku dat bezpieczniej jest używać jednoznacznie interpretowanych literałów, takich jak '20260824' dla typu date, zamiast formatów zależnych od ustawień języka lub formatu daty sesji. SQL Server może wykonać niejawną konwersję typów, ale mieszanie typów danych może powodować błędy, ostrzeżenia albo nieoczekiwany koszt obliczeń, szczególnie gdy konwersji podlega kolumna używana w warunku.

IN z podzapytaniem i znaczenie wartości NULL

IN może przyjmować podzapytanie zwracające jedną kolumnę. Przykładowo SELECT p.Id, p.Nazwa FROM dbo.Produkty AS p WHERE p.ProducentId IN (SELECT pr.Id FROM dbo.Producenci AS pr WHERE pr.Aktywny = 1); wybiera produkty przypisane do aktywnych producentów. Podzapytanie użyte w tym miejscu musi zwracać pojedynczą kolumnę, choć może zwrócić wiele wierszy. SQL Server porównuje wartość zewnętrznego wyrażenia z wartościami uzyskanymi przez podzapytanie, a optymalizator może przekształcić taki warunek do planu wykorzystującego między innymi operator półzłączenia.

Przy użyciu IN trzeba uwzględnić logikę trójwartościową Transact-SQL: wynik warunku może być TRUE, FALSE albo UNKNOWN. Wartość NULL nie jest równa żadnej wartości, nawet innemu NULL. Dlatego WHERE Kolumna IN (1, 2, NULL) nie wybierze wierszy, w których Kolumna ma wartość NULL. Dodatkowo NOT IN z podzapytaniem zawierającym NULL może nie zwrócić żadnych oczekiwanych wierszy, ponieważ porównanie z nieznaną wartością prowadzi do UNKNOWN. Gdy trzeba uwzględnić wartości NULL, należy jawnie dodać warunek Kolumna IS NULL albo odpowiednio wykluczyć NULL w podzapytaniu, zależnie od zamierzonej logiki.

Kontrola zapytań wykorzystujących IN w SQL Server

Przy diagnozowaniu zapytania z operatorem IN należy sprawdzić typ i kolację porównywanych kolumn, zawartość listy, możliwość występowania NULL oraz rzeczywisty plan wykonania. Lista stałych jest czytelna przy niewielkiej liczbie wartości, natomiast dla większego, zmiennego zbioru lepszym rozwiązaniem może być tabela tymczasowa, parametr tabelaryczny albo jawnie zdefiniowany zbiór danych użyty w zapytaniu. Nie należy automatycznie zastępować IN wieloma warunkami OR, ponieważ taka zmiana nie musi poprawić planu ani wydajności.

Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów, komputerów PC oraz ich podzespołów. W przypadku problemów z aplikacją korzystającą z SQL Server pomocna jest dokumentacja konkretnego zapytania, komunikat błędu, definicja tabel i kolumn oraz informacja, czy problem dotyczy wyniku, wartości NULL, konwersji typów czy czasu wykonania. Takie dane pozwalają odróżnić błąd składni od błędu logiki warunku albo nieprawidłowej interpretacji danych przez aplikację.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę