Gdzie (SQL)
Klauzula WHERE
w SQL określa, że instrukcja SQL Data Manipulation Language (DML) powinna mieć wpływ tylko na wiersze spełniające określone kryteria. Kryteria wyrażone są w postaci predykatów. WHERE
nie są obowiązkowymi klauzulami instrukcji SQL DML, ale można ich użyć do ograniczenia liczby wierszy, na które wpływa instrukcja SQL DML lub zwracanych przez zapytanie. W skrócie klauzula SQL WHERE służy do wyodrębnienia tylko tych wyników z instrukcji SQL, jak: SELECT
, INSERT
, UPDATE
lub USUŃ
oświadczenie.
Przegląd
WHERE
jest zarezerwowanym słowem SQL .
Klauzula WHERE
jest używana w połączeniu z instrukcjami SQL DML i przyjmuje następującą ogólną postać:
SQL — DML — instrukcja FROM nazwa_tabeli WHERE predykat
wszystkie wiersze, dla których predykat w klauzuli WHERE
ma wartość True, mają wpływ (lub są zwracane) przez instrukcję lub zapytanie SQL DML. Wiersze, dla których predykat ma wartość False lub Unknown ( NULL ), nie mają wpływu na instrukcję DML ani zapytanie.
Poniższe zapytanie zwraca tylko te wiersze z tabeli mytable , w których wartość w kolumnie mycol jest większa niż 100.
WYBIERZ * Z mytable WHERE mycol > 100
Następująca instrukcja DELETE usuwa z tabeli
mytable tylko te wiersze , w których kolumna mycol ma wartość NULL lub ma wartość równą 100.
USUŃ Z mytable GDZIE mycol IS NULL LUB mycol = 100
Predykaty
Proste predykaty używają jednego z operatorów =
, <>
, >
, >=
, <
, <=
, IN
, BETWEEN
, LIKE
, IS NULL
lub IS NOT NULL
.
W razie potrzeby predykaty można ująć w nawiasy. Słowa kluczowe AND
i OR
mogą być użyte do połączenia dwóch predykatów w nowy. Jeśli stosuje się wiele kombinacji, można użyć nawiasów, aby pogrupować kombinacje, aby wskazać kolejność oceny. Bez nawiasów AND
ma silniejsze powiązanie niż OR
.
Poniższy przykład usuwa wiersze z mytable , w których wartość mycol jest większa niż 100, a wartość item jest równa literałowi łańcuchowemu „Młot”:
USUŃ Z mytable WHERE mycol > 100 AND item = 'Hammer'
W
IN
znajdzie dowolne wartości istniejące w zbiorze kandydatów.
WYBIERZ nazwę WHERE nazwę IN ( 'Montreal' , 'Quebec' )
Wszystkie wiersze pasują do predykatu, jeśli ich wartość jest jednym z kandydujących zestawów wartości. To jest takie samo zachowanie jak
WYBIERZ nazwę GDZIE nazwa = „wartość1” LUB nazwa = „wartość2”
z wyjątkiem tego, że ten ostatni mógłby pozwolić na porównanie kilku kolumn, czego nie ma każda klauzula IN .
W przypadku większej liczby kandydatów IN
jest mniej gadatliwy.
MIĘDZY
BETWEEN
znajdzie dowolne wartości w zakresie.
WYBIERZ nazwę GDZIE nazwa MIĘDZY „wartość1” A „wartość2”
WYBIERZ wynagrodzenie z emp GDZIE wynagrodzenie MIĘDZY 5000 A 10000
Wszystkie wiersze pasują do predykatu, jeśli ich wartość mieści się w przedziale od „wartość1” do „wartość2” włącznie.
TAK JAK
LIKE
znajdzie ciąg pasujący do określonego opisu.
- Końcowa karta wieloznaczna
- Znajdź dowolny ciąg znaków rozpoczynający się na literę „S”
WYBIERZ ename FROM emp GDZIE ename LIKE 'S%' ;
- Znajdź dowolny ciąg znaków rozpoczynający się na literę „S”
- Wiodąca karta wieloznaczna
- Znajdź dowolny ciąg, który kończy się na literę „S”
WYBIERZ ename FROM emp GDZIE ename LIKE '%S' ;
- Znajdź dowolny ciąg, który kończy się na literę „S”
- Wiele symboli wieloznacznych
- Znajdź dowolny ciąg zawierający, gdziekolwiek, literę „S”
WYBIERZ ename FROM emp GDZIE ename LIKE '%S%' ;
- Znajdź dowolny ciąg zawierający, gdziekolwiek, literę „S”
- Pojedynczy symbol wieloznaczny
- Znajdź dowolny ciąg zawierający literę „A”, po której następuje dowolny pojedynczy znak, po którym następuje litera „E”
WYBIERZ ename FROM emp GDZIE ename LIKE '%A_E%' ;
- Znajdź dowolny ciąg zawierający literę „A”, po której następuje dowolny pojedynczy znak, po którym następuje litera „E”
- Klasy postaci
- Znajdź dowolny ciąg, który zaczyna się od litery, cyfry lub symbolu „_”
WYBIERZ ename FROM emp GDZIE ename LIKE '[a-zA-Z0-9_]%' ;
- Znajdź dowolny ciąg, który zaczyna się od litery, cyfry lub symbolu „_”
Predykat LIKE zwykle wykonuje wyszukiwanie bez normalnej korzyści wydajnościowej wynikającej z indeksów. Użycie zamiast tego znaków „=”, „<>” itd. zwiększy wydajność. Rozróżnianie wielkości liter (np. „S” lub „s”) może być różne w zależności od produktu bazy danych lub konfiguracji.
- ^ „Klauzula SQL WHERE - Rzeczy, które początkujący muszą wiedzieć” .
- ^ Mahapatra, Pijusz; Leong, Edmund (marzec 2014). „Czy wszyscy powinniśmy dołączyć do pokolenia YouTube?” . Journal of Surgical Education . 71 (2): 162. doi : 10.1016/j.jsurg.2013.07.004 . ISSN 1931-7204 .
- ^ Microsoft Technet Źródło 21 listopada 2013 r.
Linki zewnętrzne
- PSOUG Home Puget Sound Oracle Users Group podaje kilka przykładów instrukcji SELECT z klauzulami WHERE.