Pierwszeństwo AND/OR i używanie nawiasów
Najczęstszy błąd filtrowania, który rekruterzy celowo umieszczają w pytaniach
Pierwszeństwo AND/OR i używanie nawiasów to bezpłatna lekcja SQL Interview Prep na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.
Pułapka zastawiana przez osoby prowadzące rozmowy techniczne
Najczęstszy błąd filtrowania podczas rozmów technicznych na pierwszy rzut oka wygląda poprawnie. Otrzymuje Pan/Pani polecenie: znaleźć zamówienia klienta 5, które mają status oczekujące lub wysłane. Kandydat zapisuje klauzulę WHERE z połączonymi operatorami AND i OR, po czym otrzymuje dodatkowe wiersze.
Dlaczego? Ponieważ AND ma wyższy priorytet niż OR. Baza danych najpierw ocenia wszystkie pary AND, a dopiero potem operatory OR. Ta lekcja utrwala tę zasadę, aby nie tracić przez nią punktów.
Priorytet operatorów w jednym zdaniu
W każdym dialekcie SQL operatory logiczne mają następujący priorytet: najpierw NOT, następnie AND, a na końcu OR.
NOTma najwyższy priorytetANDma średni priorytetORma najniższy priorytet
Zatem A OR B AND C należy odczytać jako A OR (B AND C), a nigdy jako (A OR B) AND C. Osoba prowadząca rozmowę liczy na to, że ta zasada zostanie zapomniana.
Błędne zapytanie
Oto zapytanie, które kandydat zapisuje dla przypadku klient 5, status oczekujący lub wysłany. Wygląda poprawnie, ale takie nie jest.
Ponieważ AND ma wyższy priorytet, SQL odczytuje je jako (customer_id = 5 AND status = 'pending') OR status = 'shipped'. Druga gałąź nie zawiera żadnego filtra klienta, więc zwraca wysłane zamówienia od każdego klienta.
SELECT *
FROM orders
WHERE customer_id = 5
AND status = 'pending'
OR status = 'shipped';Rozwiązanie: nawiasy
Należy ująć gałąź OR w nawiasy, aby filtr klienta dotyczył obu statusów. Nawiasy zmieniają priorytet operatorów i jasno wyrażają intencję.
Teraz SQL najpierw ocenia zgrupowane wyrażenie OR, a następnie stosuje customer_id = 5 do całej grupy. Doświadczeni recenzenci dodają nawiasy nawet wtedy, gdy priorytet operatorów już zapewnia poprawne działanie — wyłącznie dla czytelności.
SELECT *
FROM orders
WHERE customer_id = 5
AND (status = 'pending' OR status = 'shipped');Prześledzenie tabeli prawdy
Weźmy wysłane zamówienie klienta 9. Prześledźmy błędną wersję:
customer_id = 5ma wartość falsestatus = 'pending'ma wartość falsefalse AND falsema wartość falsefalse OR (status = 'shipped' is true)ma wartość true
Wiersz zostaje zwrócony, mimo że nie dotyczy klienta 5. Głośne prześledzenie jednego konkretnego wiersza jest dokładnie tym, co osoby prowadzące rozmowy techniczne chcą zobaczyć.
NOT ma najwyższy priorytet
NOT dotyczy tylko warunku, który występuje bezpośrednio po nim. Zatem NOT status = 'open' AND priority = 'high' oznacza (NOT status = 'open') AND priority = 'high'.
Jeśli intencją jest zanegowanie całości, należy użyć nawiasów: NOT (status = 'open' AND priority = 'high'). Zgodnie z prawem de Morgana jest to równoważne status <> 'open' OR priority <> 'high'.
SELECT *
FROM tickets
WHERE NOT (status = 'open' AND priority = 'high');Przykład z trzema warunkami
Znajdź produkty, które są (elektroniką lub sprzętem AGD) i dostępne w magazynie. Bez nawiasów filtr dostępności dotyczyłby tylko sprzętu AGD.
Poniższe zgrupowane zapytanie jest czytelne: wybierz jedną z dwóch kategorii, a następnie wymagaj dostępności. Zasada jest następująca: gdy zapytanie łączy AND z OR, niemal zawsze trzeba ująć grupę OR w nawiasy.
SELECT *
FROM products
WHERE (category = 'electronics' OR category = 'appliances')
AND in_stock = true;IN jako czytelniejsza alternatywa
Długi łańcuch operatorów OR dla tej samej kolumny jest jednocześnie podatny na błędy i rozwlekły. Zastąp go operatorem IN, który nie budzi wątpliwości i nie wymaga nawiasów.
Poniższe zapytanie jest dokładnie równoważne poprzedniemu, ale trudniej je zepsuć. Rekruterzy doceniają taką refaktoryzację, ponieważ pokazuje ona zrozumienie zarówno poprawności, jak i czytelności kodu.
SELECT *
FROM products
WHERE category IN ('electronics', 'appliances')
AND in_stock = true;Pierwszeństwo operatorów w filtrach obliczanych
Pierwszeństwo operatorów ma zastosowanie również wtedy, gdy łączone są działania arytmetyczne i logika. W wyrażeniu price * 1.2 > 100 OR discount = 0 AND active = true najpierw są rozwiązywane działania arytmetyczne i porównania, następnie AND, a na końcu OR.
Zatem wyrażenie należy odczytać jako (price * 1.2 > 100) OR ((discount = 0) AND (active = true)). W razie wątpliwości nie należy pod presją próbować zapamiętywać tabeli — wystarczy ująć każdą grupę w nawiasy.
Jak odpowiedzieć na żywo
Gdy rekruter pokazuje filtr łączący AND i OR oraz pyta co to zwraca, należy wykonać trzy czynności:
- podać zasadę pierwszeństwa:
ANDprzedOR - na głos przepisać zapytanie z nawiasami, aby ujawnić jego rzeczywiste grupowanie
- prześledzić jeden wiersz, który ujawnia błąd
Następnie należy przedstawić poprawioną wersję z nawiasami. Taka sekwencja pokazuje rygor typowy dla doświadczonego programisty.
Nawyk zabezpieczający
Profesjonalny nawyk jest następujący: zawsze ujmować każdą grupę OR w nawiasy. Kosztuje to dwa znaki i eliminuje całą klasę błędów oraz uwag podczas przeglądu kodu.
Osoby przeglądające kod nigdy nie powinny musieć oceniać pierwszeństwa operatorów w myślach, aby potwierdzić poprawność filtra. Grupowanie powinno być widoczne. To jeden z nielicznych przypadków, w których nadmiarowa składnia jest powszechnie uznawana za dobry styl.
SELECT order_id, status
FROM orders
WHERE customer_id = 5
AND (status = 'pending' OR status = 'shipped');Szybki test
Przed odpowiedzią proszę rozważyć zasadę pierwszeństwa operatorów.
Podsumowanie
Najważniejsze wnioski:
- Pierwszeństwo operatorów logicznych to NOT, następnie AND, a potem OR
- Filtry łączące
AND/ORniemal zawsze wymagają nawiasów wokół grupyOR - Brak nawiasu po cichu rozszerza wyniki, często całkowicie pomijając jeden z filtrów
- Długie łańcuchy
ORdla jednej kolumny należy zastępować operatoremIN - Odpowiadając na żywo: podaj zasadę, dodaj nawiasy, prześledź jeden wiersz, a następnie popraw zapytanie
Grupy OR zawsze należy ujmować w nawiasy, nawet gdy kolejność operatorów i tak daje poprawny wynik.
Często zadawane pytania
Czy lekcja „Pierwszeństwo AND/OR i używanie nawiasów” jest bezpłatna?
Tak — pełny tekst „Pierwszeństwo AND/OR i używanie nawiasów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Interview Prep, przejdź na CoddyKit PRO. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Pierwszeństwo AND/OR i używanie nawiasów”?
Najczęstszy błąd filtrowania, który rekruterzy celowo umieszczają w pytaniach Ćwiczysz SQL Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Interview Prep?
Nie wymagamy żadnego doświadczenia. SQL Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Pierwszeństwo AND/OR i używanie nawiasów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Interview Prep?
Tak. Każda lekcja SQL Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pierwszeństwo AND/OR i używanie nawiasów
- BETWEEN, IN i granice włączne
- LIKE, symbole wieloznaczne i znaki ucieczki
- Filtrowanie według wartości obliczanych