Udostępnij przez


Konwencje łączenia warunków wyszukiwania w okienku Kryteria (Visual Database Tools)

Dotyczy:programu SQL Server

Zapytania, które zawierają dowolną liczbę warunków wyszukiwania, połączone z dowolną liczbą operatorów AND i OR . Zapytanie z kombinacją AND klauzul i OR może stać się złożone, dlatego warto zrozumieć, w jaki sposób takie zapytanie jest interpretowane podczas jego wykonywania i jak takie zapytanie jest reprezentowane w okienku kryteria (narzędzia visual database tools) i okienku SQL (Visual Database Tools).

Notatka

Aby uzyskać szczegółowe informacje na temat warunków wyszukiwania zawierających tylko jeden AND operator lub OR , zobacz Określanie wielu warunków wyszukiwania dla jednej kolumny (Visual Database Tools) i Określanie wielu warunków wyszukiwania dla wielu kolumn (Visual Database Tools).

W tym artykule znajdziesz informacje o:

  • Pierwszeństwo AND i OR w zapytaniach, które zawierają oba te elementy.

  • Sposób, w jaki warunki w AND klauzulach i OR odnoszą się logicznie do siebie.

  • Sposób, w jaki projektant zapytań i widoków reprezentuje zapytania w okienku Kryteria zawierające zarówno zapytania, jak AND i OR.

Aby ułatwić zrozumienie poniższej dyskusji, wyobraź sobie, że pracujesz z tabelą zawierającą employee kolumny hire_date, job_lvli status. W przykładach założono, że musisz znać informacje, takie jak czas pracy pracownika w firmie (czyli to, jaka jest data zatrudnienia pracownika), jaki typ pracy wykonuje pracownik (jaki jest poziom pracy) i status pracownika (na przykład emerytowany).

Pierwszeństwo elementów AND i OR

Gdy zapytanie jest wykonywane, ocenia najpierw klauzule połączone z elementem AND, a następnie te połączone z elementem OR.

Notatka

Operator NOT ma pierwszeństwo przed operatorem i ANDOR .

Na przykład aby znaleźć pracowników, którzy byli z firmą przez ponad pięć lat w pracy niższego poziomu lub pracowników z miejsc pracy na poziomie średnim bez względu na ich datę zatrudnienia, można utworzyć klauzulę WHERE , taką jak:

WHERE
   hire_date < '01/01/95' AND
   job_lvl = 100 OR
   job_lvl = 200

Aby zastąpić domyślny pierwszeństwo AND powyżej OR, można umieścić nawiasy wokół określonych warunków w okienku SQL. Warunki w nawiasach są zawsze oceniane jako pierwsze. Aby na przykład znaleźć wszystkich pracowników, którzy byli z firmą ponad pięć lat w pracy niższej lub średniej, można utworzyć klauzulę WHERE , taką jak:

WHERE
   hire_date < '01/01/95' AND
   (job_lvl = 100 OR job_lvl = 200)

Wskazówka

Zaleca się, aby w celu jasności zawsze uwzględniać nawiasy podczas łączenia AND klauzul i OR zamiast polegać na domyślnym pierwszeństwie.

Jak działa funkcja AND z wieloma klauzulami OR

Zrozumienie, jak AND i OR klauzule są powiązane w połączeniu, mogą pomóc w konstruowaniu i interpretowaniu złożonych zapytań w Projektancie zapytań i widoków.

Jeśli połączysz wiele warunków przy użyciu metody AND, pierwszy zestaw warunków połączonych z AND ma zastosowanie do wszystkich warunków w drugim zestawie. Innymi słowy, warunek połączony z AND innym warunkiem jest dystrybuowany do wszystkich warunków w drugim zestawie. Na przykład następująca reprezentacja schematu przedstawia AND warunek połączony z zestawem OR warunków:

A AND (B OR C)

Reprezentacja powyżej jest logicznie równoważna następującej reprezentacji schematu, która pokazuje, jak AND warunek jest dystrybuowany do drugiego zestawu warunków:

(A AND B) OR (A AND C)

Ta zasada dystrybucji ma wpływ na sposób korzystania z Projektanta zapytań i widoków. Załóżmy na przykład, że szukasz wszystkich pracowników, którzy byli z firmą ponad pięć lat w pracy niższej lub średniej. Należy wprowadzić następującą WHERE klauzulę do instrukcji w okienku SQL:

WHERE (hire_date < '01/01/95') AND
   (job_lvl = 100 OR job_lvl = 200)

Klauzula połączona z elementem AND ma zastosowanie do obu klauzul połączonych z OR. Jawnym sposobem wyrażenia tego jest powtórzenie AND warunku raz dla każdego warunku w klauzuli OR . Następująca instrukcja jest bardziej jawna (i dłuższa) niż poprzednia instrukcja, ale jest logicznie równoważna:

WHERE (hire_date < '01/01/95') AND
  (job_lvl = 100) OR
  (hire_date < '01/01/95') AND
  (job_lvl = 200)

Zasada dystrybucji AND klauzul do OR połączonych klauzul ma zastosowanie niezależnie od liczby poszczególnych warunków. Załóżmy na przykład, że chcesz znaleźć wyższych lub średnich pracowników, którzy byli z firmą ponad pięć lat lub są na emeryturze. Klauzula WHERE może wyglądać następująco:

WHERE
   (job_lvl = 200 OR job_lvl = 300) AND
   (hire_date < '01/01/95') OR (status = 'R')

Po rozproszeniu warunków połączonych z usługą AND klauzula WHERE wygląda następująco:

WHERE
   (job_lvl = 200 AND hire_date < '01/01/95') OR
   (job_lvl = 200 AND status = 'R') OR
   (job_lvl = 300 AND hire_date < '01/01/95') OR
   (job_lvl = 300 AND status = 'R')

Jak wiele klauzul AND i OR są reprezentowane w okienku Kryteria

Projektant zapytań i widoków reprezentuje warunki wyszukiwania w okienku Kryteria (Narzędzia bazy danych wizualizacji).The Query and View Designer (Projektant zapytań i widoków reprezentuje warunki wyszukiwania w okienku Kryteriów (Narzędzia bazy danych wizualizacji). Jednak w niektórych przypadkach, które obejmują wiele klauzul połączonych z AND i OR, reprezentacja w okienku Kryteria może nie być oczekiwana. Ponadto jeśli zmodyfikujesz zapytanie w okienku Kryteria lub okienku Diagram (Narzędzia bazy danych wizualizacji), może się okazać, że instrukcja SQL została zmieniona z wprowadzonego elementu.

Ogólnie rzecz biorąc, te reguły określają, jak AND i OR klauzule są wyświetlane w okienku Kryteria:

  • Wszystkie warunki połączone z AND są wyświetlane w kolumnie siatki Filtr lub w tej samej kolumnie Or... .

  • Wszystkie warunki połączone z OR są wyświetlane w osobnych kolumnach Or... .

  • Jeśli logicznym wynikiem kombinacji AND klauzul i OR jest to, że AND element jest dystrybuowany do kilku OR klauzul, okienko Kryteria reprezentuje to jawnie, powtarzając klauzulę AND tyle razy, ile to konieczne.

Na przykład w okienku SQL można utworzyć warunek wyszukiwania, taki jak następujące, w którym dwie klauzule połączone z AND mają pierwszeństwo przed trzecim połączonym z OR:

WHERE (hire_date < '01/01/95') AND
  (job_lvl = 100) OR
  (status = 'R')

Projektant zapytań i widoków reprezentuje tę WHERE klauzulę w okienku Kryteria w następujący sposób:

Zrzut ekranu przedstawiający pierwszeństwo klauzuli OR w okienku Kryteria.

Jeśli jednak klauzule połączone OR mają pierwszeństwo przed klauzulą AND , klauzula AND jest powtarzana dla każdej OR klauzuli. Powoduje to dystrybucję klauzuli AND do każdej OR klauzuli. Na przykład w okienku SQL można utworzyć klauzulę WHERE , taką jak:

WHERE (hire_date < '01/01/95') AND
  ( (job_lvl = 100) OR
  (status = 'R') )

Projektant zapytań i widoków reprezentuje tę WHERE klauzulę w okienku Kryteria w następujący sposób:

Zrzut ekranu przedstawiający wiele klauzul AND i OR w okienku Kryteria.

OR Jeśli połączone klauzule obejmują tylko jedną kolumnę danych, Projektant zapytań i widoków może umieścić całą OR klauzulę w jednej komórce siatki, unikając konieczności powtarzania klauzuliAND. Na przykład w okienku SQL można utworzyć klauzulę WHERE , taką jak:

WHERE (hire_date < '01/01/95') AND
  ((status = 'R') OR (status = 'A'))

Projektant zapytań i widoków reprezentuje tę WHERE klauzulę w okienku Kryteria w następujący sposób:

Zrzut ekranu przedstawiający połączone klauzule OR zdefiniowane w okienku Kryteria.

Jeśli wprowadzisz zmianę w zapytaniu (na przykład zmieniając jedną z wartości w okienku Kryteria), Projektant zapytań i widoków ponownie utworzy instrukcję SQL w okienku SQL. Utworzona ponownie instrukcja SQL przypomina wyświetlanie okienka Kryteria, a nie oryginalną instrukcję. Jeśli na przykład okienko Kryteria zawiera klauzule rozproszone AND , instrukcja wynikowa w okienku SQL zostanie ponownie utworzona z jawnymi klauzulami rozproszonymi AND . Aby uzyskać szczegółowe informacje, zobacz Jak i działa z wieloma klauzulami OR we wcześniejszej części tego artykułu.