Database
 sql >> Baza danych >  >> RDS >> Database

Operator SQL AND dla początkujących

W SQL AND Operator umożliwia sprawdzenie wielu warunków podczas filtrowania zapytań.

AND operator łączy dwa wyrażenia logiczne i zwraca TRUE gdy oba wyrażenia są TRUE .

Tabela źródłowa

Poniższa tabela jest używana jako przykłady na tej stronie.

SELECT * FROM Pets;

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Przykład

Oto prosty przykład demonstrujący AND operatora.

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' AND DOB > '2020-11-01';

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
+---------+-------------+-----------+-----------+------------+

Zgodnie z oczekiwaniami, zwrócił tylko te wiersze, w których oba PetName kolumna była Fluffy i DOB kolumna była większa niż 2020-11-01 .

W tym przypadku tylko jeden wiersz spełniał te kryteria, a zatem został zwrócony tylko jeden wiersz.

W połączeniu z innymi operatorami

Twoje kryteria filtrowania mogą łączyć wyrażenia, które używają innych operatorów oprócz AND operator.

Oto przykład, który zawiera OR operatora.

SELECT * FROM Pets 
WHERE (PetName = 'Fluffy' OR PetName = 'Tweet')
AND DOB >= '2020-11-20';

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

Zauważ, że otoczyłem OR stan z nawiasami. Zrobiłem to, aby określić kolejność, w jakiej każde wyrażenie powinno być oceniane.,

Domyślnie AND operatory są oceniane przed OR operatorów. SQL ma zdefiniowaną kolejność pierwszeństwa operatorów w wyrażeniu, a to dyktuje, że AND operator jest oceniany przed OR operator.

Możesz jednak użyć nawiasów, aby przesłonić zdefiniowane pierwszeństwo operatorów w wyrażeniu. Wszystko w nawiasach jest oceniane, aby zwrócić pojedynczą wartość. Ta wartość może być używana przez dowolny operator poza tymi nawiasami.

Innymi słowy, możesz użyć nawiasów, aby określić kolejność, w jakiej każdy operator logiczny ma być oceniany w wyrażeniu.

Aby zademonstrować ten problem, spójrz na wyniki po usunięciu nawiasów.

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'
AND DOB >= '2020-11-20';

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Teraz otrzymujemy inny wynik.

Dzieje się tak, ponieważ zapytanie sprawdza teraz PetName = 'Tweet' AND DOB >= '2020-11-20' najpierw, potem sprawdza OR wyrażenie PetName = 'Fluffy' .

To tak, jakbyśmy umieścili nawiasy wokół AND wyrażenie, jak to:

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR (PetName = 'Tweet'
AND DOB >= '2020-11-20');

Jednak, aby jeszcze bardziej pomylić sprawę, możemy zmienić kolejność naszego zapytania, aby nie używać nawiasów, a mimo to uzyskać ten sam wynik, co nasz pierwszy przykład z nawiasami.

Tak:

SELECT * FROM Pets 
WHERE DOB >= '2020-11-20' 
AND PetName = 'Fluffy' OR PetName = 'Tweet';

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

W tym przypadku AND wyrażenie zostało ocenione jako pierwsze, zgodnie z oczekiwaniami. Tak się złożyło, że kolejność wyrażeń została wyrównana tak, że DOB >= '2020-11-20' AND PetName = 'Fluffy' został oceniony jako pierwszy, więc wykluczyliśmy drugiego zwierzaka o imieniu Fluffy ze względu na jego DOB wypadanie poza ten zakres. Dopiero po tym nastąpiło OR wyrażenie oceniane jako warunek alternatywny do naszego istniejącego AND wynik.

Dlatego zdecydowanie zaleca się stosowanie nawiasów w przypadku korzystania z wielu operatorów. W ten sposób zapewnisz, że zapytanie zostanie ocenione dokładnie tak, jak chcesz.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Operator SQL BETWEEN dla początkujących

  2. SQL, jak zaktualizować dane

  3. Spotkania w miejscu pracy:odzyskiwanie przestrzeni z przewymiarowanej bazy danych

  4. NextForm v3:Pięć opcji migracji danych i baz danych

  5. Jak zapewnić regularne tworzenie kopii zapasowych baz danych