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.