sql >> Database >  >> RDS >> Database

SQL AND-operator voor beginners

In SQL is de AND operator stelt u in staat om op meerdere voorwaarden te controleren bij het filteren van uw zoekopdrachten.

De AND operator combineert twee Booleaanse expressies en retourneert TRUE wanneer beide uitdrukkingen TRUE zijn .

Brontabel

De volgende tabel wordt gebruikt voor de voorbeelden op deze pagina.

SELECT * FROM Pets;

Resultaat:

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

Voorbeeld

Hier is een eenvoudig voorbeeld om de AND . te demonstreren telefoniste.

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

Resultaat:

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

Zoals verwacht, retourneerde het alleen die rijen waar zowel de PetName kolom was Fluffy en de DOB kolom was groter dan 2020-11-01 .

In dit geval voldeed slechts één rij aan dat criterium en daarom werd er maar één rij geretourneerd.

Gecombineerd met andere operators

Uw filtercriteria kunnen uitdrukkingen combineren die andere operators gebruiken naast de AND exploitant.

Hier is een voorbeeld met de OR telefoniste.

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

Resultaat:

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

Merk op dat ik de OR . omsingelde voorwaarde met haakjes. Ik deed dat om de volgorde te specificeren waarin elke uitdrukking moet worden geëvalueerd.,

Standaard AND operatoren worden geëvalueerd vóór OR exploitanten. SQL heeft een gedefinieerde prioriteitsvolgorde van de operators in een expressie, en dit dicteert dat de AND operator wordt geëvalueerd vóór de OR exploitant.

U kunt echter haakjes gebruiken om de gedefinieerde prioriteit van de operators in een uitdrukking te overschrijven. Alles tussen haakjes wordt geëvalueerd om één waarde te retourneren. Die waarde kan door elke operator buiten die haakjes worden gebruikt.

Met andere woorden, u kunt haakjes gebruiken om de volgorde aan te geven waarin u wilt dat elke logische operator in een uitdrukking wordt geëvalueerd.

Bekijk de resultaten wanneer we de haakjes verwijderen om dit probleem aan te tonen.

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

Resultaat:

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

Nu krijgen we een ander resultaat.

Dit komt omdat de zoekopdracht nu PetName = 'Tweet' AND DOB >= '2020-11-20' controleert controleert eerst de OR expressie PetName = 'Fluffy' .

Het is alsof we haakjes rond de AND . plaatsen uitdrukking, zoals deze:

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

Om de zaken nog meer in de war te brengen, zouden we onze zoekopdracht kunnen herschikken zodat we geen haakjes gebruiken en toch hetzelfde resultaat krijgen als ons eerste voorbeeld met haakjes.

Zoals dit:

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

Resultaat:

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

In dit geval is de AND expressie werd eerst geëvalueerd, zoals verwacht. De volgorde van de uitdrukkingen is toevallig zo uitgelijnd dat DOB >= '2020-11-20' AND PetName = 'Fluffy' werd als eerste geëvalueerd, dus we hebben het andere huisdier met de naam Fluffy uitgesloten vanwege zijn DOB buiten dat bereik vallen. Pas daarna was de OR uitdrukking geëvalueerd als een alternatieve voorwaarde voor onze bestaande AND resultaat.

Daarom wordt het ten zeerste aanbevolen om haakjes te gebruiken bij het gebruik van meerdere operators. Als u dit doet, zorgt u ervoor dat de zoekopdracht precies wordt geëvalueerd zoals u hem had bedoeld.


  1. TUPLES gebruiken om meer dan 1000 vermeldingen in de SQL IN-clausule te plaatsen

  2. SQL, lege cellen afhandelen

  3. UTF-8 tekencodering gevechten json_encode()

  4. 10 handige tips voor het afstemmen van MySQL-prestaties