Stosowanie IN do znalezienia jednej wartości w wielu kolumnach

Z dokumentacji technet: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/in-transact-sql

IN (Transact-SQL) – Determines whether a specified value matches any value in a subquery or a list.

Oficjalna dokumentacja nie wspomina o możliwości wykorzystania polecenia IN do przeszukiwania wielu kolumn dla podanej wartości. Jednak implementacja  przewiduje takie przypadki, pokaże też na co engine zamienia takie polecenie.
Czasami zdecydowanie szybciej i wygodniej jest użyć tej konstrukcji zamiast kombinować z warunkami na OR. Sami zobaczcie:

Przykład:

Tworzymy tabelę, jedna kolumna z kluczem i cztery gdzie będziemy ładowali dane. Do niektórych kolumn insertujemy słowo ‚ugabuga’, którego później będziemy szukac.

 

Wynikiem będzie tabela:

I teraz jak się nie namęczyć żeby nie pisać czterech warunków: WHERE col1 = ‚ugabuga’ OR col2 = ‚ugabuga’ OR (…)
wystarczy „odwrócić” IN:

 

Wynik:

Jak SQL Interpretuje takie zapytanie?
Możemy sprawdzić to na execution planie. Widać, że sam zamienia to na ORy 🙂

POST PIERWOTNIE OPUBLIKOWANY JAKO TSQL NA DZIŚ #28

Dodaj komentarz