Database
 sql >> Database >  >> RDS >> Database

Operatore SQL AND per principianti

In SQL, il AND operatore ti consente di verificare la presenza di più condizioni durante il filtraggio delle query.

Il AND combina due espressioni booleane e restituisce TRUE quando entrambe le espressioni sono TRUE .

Tabella delle sorgenti

La tabella seguente viene utilizzata per gli esempi in questa pagina.

SELECT * FROM Pets;

Risultato:

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

Esempio

Ecco un semplice esempio per dimostrare il AND operatore.

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

Risultato:

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

Come previsto, ha restituito solo quelle righe in cui è presente sia il PetName la colonna era Fluffy e il DOB la colonna era maggiore di 2020-11-01 .

In questo caso, solo una riga corrispondeva a quel criterio e, pertanto, è stata restituita solo una riga.

Combinato con altri operatori

I tuoi criteri di filtro possono combinare espressioni che utilizzano altri operatori oltre a AND operatore.

Ecco un esempio che include OR operatore.

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

Risultato:

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

Nota che ho circondato OR condizione tra parentesi. L'ho fatto per specificare l'ordine in cui ogni espressione dovrebbe essere valutata.,

Per impostazione predefinita, AND gli operatori vengono valutati prima di OR operatori. SQL ha un ordine di precedenza definito degli operatori in un'espressione, e questo impone che il AND l'operatore viene valutato prima di OR operatore.

Tuttavia, puoi utilizzare le parentesi per ignorare la precedenza definita degli operatori in un'espressione. Tutto ciò che è racchiuso tra parentesi viene valutato per restituire un singolo valore. Tale valore può essere utilizzato da qualsiasi operatore al di fuori di tali parentesi.

In altre parole, puoi utilizzare le parentesi per specificare l'ordine in cui desideri che ogni operatore logico venga valutato in un'espressione.

Per dimostrare questo problema, dai un'occhiata ai risultati quando rimuoviamo le parentesi.

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

Risultato:

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

Ora otteniamo un risultato diverso.

Questo perché la query ora controlla PetName = 'Tweet' AND DOB >= '2020-11-20' prima, quindi controlla OR espressione PetName = 'Fluffy' .

È come se inserissimo le parentesi attorno a AND espressione, come questa:

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

Tuttavia, per confondere ulteriormente le cose, potremmo riorganizzare la nostra query in modo da non usare parentesi e ottenere comunque lo stesso risultato del nostro primo esempio con parentesi.

In questo modo:

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

Risultato:

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

In questo caso, il AND l'espressione è stata valutata per prima, come previsto. L'ordine delle espressioni si è appena allineato in modo che DOB >= '2020-11-20' AND PetName = 'Fluffy' è stato valutato per primo, quindi abbiamo escluso l'altro animale domestico chiamato Fluffy a causa del suo DOB cadendo al di fuori di tale intervallo. Solo dopo è stato il OR espressione valutata come condizione alternativa al nostro AND esistente risultato.

Pertanto, si consiglia vivamente di utilizzare le parentesi quando si utilizzano più operatori. In questo modo si garantisce che la query venga valutata esattamente nel modo previsto.