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%'  ; 
      
  • Wiodąca karta wieloznaczna
    • Znajdź dowolny ciąg, który kończy się na literę „S”
              WYBIERZ  ename  FROM  emp  GDZIE  ename  LIKE  '%S'  ; 
      
  • Wiele symboli wieloznacznych
    • Znajdź dowolny ciąg zawierający, gdziekolwiek, literę „S”
              WYBIERZ  ename  FROM  emp  GDZIE  ename  LIKE  '%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%'  ; 
      
  • 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_]%'  ; 
      

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.

  1. ^ „Klauzula SQL WHERE - Rzeczy, które początkujący muszą wiedzieć” .
  2. ^   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 .
  3. ^ Microsoft Technet Źródło 21 listopada 2013 r.

Linki zewnętrzne