sql >> Databáze >  >> RDS >> Database

Operátor SQL AND pro začátečníky

V SQL, AND Operátor umožňuje kontrolovat více podmínek při filtrování vašich dotazů.

AND operátor kombinuje dva booleovské výrazy a vrací TRUE když jsou oba výrazy TRUE .

Tabulka zdrojů

Následující tabulka je použita pro příklady na této stránce.

SELECT * FROM Pets;

Výsledek:

+---------+-------------+-----------+-----------+------------+
| 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)

Příklad

Zde je jednoduchý příklad demonstrující AND operátor.

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

Výsledek:

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

Podle očekávání vrátil pouze ty řádky, kde je PetName sloupec byl Fluffy a DOB sloupec byl větší než 2020-11-01 .

V tomto případě tomuto kritériu odpovídal pouze jeden řádek, a proto byl vrácen pouze jeden řádek.

V kombinaci s jinými operátory

Vaše kritéria filtrování mohou kombinovat výrazy, které kromě AND používají další operátory operátor.

Zde je příklad, který obsahuje OR operátor.

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

Výsledek:

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

Všimněte si, že jsem obklopil OR podmínka se závorkami. Udělal jsem to, abych určil pořadí, ve kterém by měl být každý výraz vyhodnocen.,

Ve výchozím nastavení AND operátory se vyhodnocují před OR operátory. SQL má definované pořadí priority operátorů ve výrazu a to určuje, že AND operátor je vyhodnocen před OR operátor.

Můžete však použít závorky k přepsání definované priority operátorů ve výrazu. Vše v závorkách je vyhodnoceno tak, aby vrátilo jedinou hodnotu. Tuto hodnotu může použít jakýkoli operátor mimo tyto závorky.

Jinými slovy, pomocí závorek můžete určit pořadí, ve kterém chcete, aby byly jednotlivé logické operátory ve výrazu vyhodnoceny.

Chcete-li tento problém demonstrovat, podívejte se na výsledky, když odstraníme závorky.

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

Výsledek:

+---------+-------------+-----------+-----------+------------+
| 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 |
+---------+-------------+-----------+-----------+------------+

Nyní dostáváme jiný výsledek.

Důvodem je, že dotaz nyní kontroluje PetName = 'Tweet' AND DOB >= '2020-11-20' nejprve a poté zkontroluje OR výraz PetName = 'Fluffy' .

Je to, jako bychom kolem AND umístili závorky výraz, jako je tento:

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

Abychom však věci ještě více zmátli, mohli bychom změnit uspořádání našeho dotazu tak, abychom nepoužívali závorky, a přesto jsme získali stejný výsledek jako náš první příklad se závorkami.

Takhle:

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

Výsledek:

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

V tomto případě AND výraz byl podle očekávání vyhodnocen jako první. Pořadí výrazů se právě seřadilo tak, že DOB >= '2020-11-20' AND PetName = 'Fluffy' byl hodnocen jako první, takže jsme vyloučili druhého mazlíčka jménem Fluffy kvůli jeho DOB spadající mimo tento rozsah. Teprve poté byl OR výraz vyhodnocen jako alternativní podmínka k našemu stávajícímu AND výsledek.

Proto se při použití více operátorů důrazně doporučuje používat závorky. Tím zajistíte, že dotaz bude vyhodnocen přesně tak, jak jste zamýšleli.


  1. Pokus o nasazení aplikace Oracle-ADF na Tomcat 7

  2. Převedení řetězce odděleného čárkami na jednotlivé řádky

  3. phpMyAdmin - nelze se připojit - neplatná nastavení - od té doby, co jsem přidal heslo root - uzamčeno

  4. Jak formátovat čísla v Oracle