sql >> Database >  >> RDS >> Database

SQL NOT-operator voor beginners

In SQL is de NOT operator negeert een Booleaanse invoer (het keert de waarde van elke Booleaanse uitdrukking om). Daarom retourneert het TRUE wanneer de uitdrukking FALSE . is .

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 1

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

SELECT * FROM Pets 
WHERE PetName NOT LIKE 'F%';

Resultaat:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

In dit geval gebruikten we de NOT operator om de uitkomst van de LIKE . te negeren exploitant. Onze zoekopdracht retourneert alle huisdieren die niet beginnen met de letter F.

Voorbeeld 2 – NOT gebruiken met vergelijkingsoperators

Als u de NOT . gebruikt operator om een ​​vergelijkingsoperator te negeren, moet u uw syntaxis iets wijzigen ten opzichte van degene die in het vorige voorbeeld werd gebruikt.

Als u het bijvoorbeeld wilt gebruiken om de operator is gelijk aan (= ), gebruik de volgende syntaxis:

SELECT * FROM Pets 
WHERE NOT PetName = 'Fluffy';

Resultaat:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 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 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Hiermee worden alle huisdieren geretourneerd wiens naam niet Fluffy is.

In dit voorbeeld plaatsen we de NOT operator voor de kolomnaam. Als we dat niet hadden gedaan, zouden we een foutmelding hebben gekregen die ongeveer als volgt gaat:

SELECT * FROM Pets 
WHERE PetName NOT = 'Fluffy';

Resultaat:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '='.

We hadden hetzelfde resultaat kunnen bereiken door de operator niet gelijk aan te gebruiken (ofwel <> of != afhankelijk van uw DBMS).

Bijvoorbeeld dit:

SELECT * FROM Pets 
WHERE PetName <> 'Fluffy';

Of dit:

SELECT * FROM Pets 
WHERE PetName != 'Fluffy';

Voorbeeld 3 – Zelfde syntaxis met logische operators

Het blijkt dat we die syntaxis ook kunnen gebruiken bij het gebruik van logische operatoren, zoals de LIKE operator die we in het eerste voorbeeld gebruikten.

Daarom kunnen we het eerste voorbeeld hiernaar herschrijven:

SELECT * FROM Pets 
WHERE NOT PetName LIKE 'F%';

Resultaat:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Als je niet zeker weet wat het verschil is, hebben we de NOT . verplaatst operator van na de PetName kolom, naar ervoor.

Hier zijn de twee uitspraken samen:

SELECT * FROM Pets 
WHERE PetName NOT LIKE 'F%';

SELECT * FROM Pets 
WHERE NOT PetName LIKE 'F%';

Voorbeeld 4 – Meerdere voorwaarden negeren

De NOT operator negeert slechts een enkele voorwaarde. Als je meerdere voorwaarden hebt die je moet negeren, gebruik dan een aparte NOT operator voor elke voorwaarde,

SELECT * FROM Pets 
WHERE NOT PetName = 'Fluffy'
AND NOT PetName = 'Wag';

Resultaat:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Voorbeeld 5 – Voorrang

Als u samengestelde voorwaarden gebruikt, waarbij u meerdere operatoren heeft, wordt de NOT operator wordt geëvalueerd voorafgaand aan logische operatoren, maar na elke. vergelijkingsoperatoren,

Wanneer twee operators in een uitdrukking hetzelfde prioriteitsniveau hebben, worden ze van links naar rechts geëvalueerd op basis van hun positie in de uitdrukking. U kunt echter haakjes gebruiken om de volgorde aan te geven waarin u elke voorwaarde wilt evalueren.

Hier is een voorbeeld.

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

Resultaat:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 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 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

We hebben hier geen haakjes gebruikt en alle voorwaarden werden genegeerd met de NOT operator, en dus de AND operator had voorrang op de OR exploitant.

We kunnen echter haakjes gebruiken om aan te geven dat de OR voorwaarde moet worden geëvalueerd vóór de AND staat.

SELECT * FROM Pets 
WHERE 
    (NOT PetName = 'Fluffy'
    OR NOT PetName = 'Wag')
    AND NOT DOB > '2020-01-01';

Resultaat:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
+---------+-------------+-----------+-----------+------------+

In dit geval krijgen we een ander resultaat.

Voorbeeld 6 – Negeer de TUSSEN-operator

Hier is nog een voorbeeld, dit keer met de NOT operator om het resultaat van de BETWEEN . te negeren telefoniste.

SELECT * FROM Pets 
WHERE DOB NOT BETWEEN '2018-10-01' AND '2020-09-17';

Resultaat:

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

In dit voorbeeld hebben we alle rijen geretourneerd waar de DOB kolom is niet tussen 2018-10-01 en 2020-09-17 .

In dit geval kwamen twee rijen overeen met die criteria en daarom werden er twee rijen geretourneerd.

Dit is het tegenovergestelde resultaat van de volgende zoekopdracht:

SELECT * FROM Pets 
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17';

Resultaat:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

In dit voorbeeld hebben we alle rijen geretourneerd waar de DOB kolom is tussen 2018-10-01 en 2020-09-17 .

In dit geval kwamen vier rijen overeen met die criteria en daarom werden er vier rijen geretourneerd.


  1. Hoe maak en gebruik je een tijdelijke tabel in de Oracle-opgeslagen procedure?

  2. Vergelijk datums die zijn opgeslagen als string met behulp van Datetime

  3. SQL-datumnotatie:hoe u er op een slimme manier mee omgaat?

  4. PHP/MySQL Null-waarden invoegen