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

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

V SQL, NOT operátor neguje booleovský vstup (obrátí hodnotu libovolného booleovského výrazu). Proto vrací TRUE když je výraz FALSE .

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 1

Zde je jednoduchý příklad, který demonstruje NOT operátor.

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

Výsledek:

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

V tomto případě jsme použili NOT operátor negovat výsledek LIKE operátor. Náš dotaz vrátí všechna domácí zvířata, která nezačínají písmenem F.

Příklad 2 – Použití NOT s porovnávacími operátory

Pokud používáte NOT Chcete-li negovat operátor porovnání, budete muset mírně upravit svou syntaxi oproti syntaxi použité v předchozím příkladu.

Pokud jej například chcete použít k negaci operátoru rovná se (= ), použijte následující syntaxi:

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

Výsledek:

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

Tím se vrátí všechna zvířata, jejichž jméno není Fluffy.

V tomto příkladu jsme vložili NOT operátor před názvem sloupce. Pokud bychom to neudělali, dostali bychom chybu, která vypadá asi takto:

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

Výsledek:

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

Stejného výsledku jsme mohli dosáhnout také použitím operátoru nerovná se (buď <> nebo != v závislosti na vašem DBMS).

Například toto:

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

Nebo toto:

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

Příklad 3 – Stejná syntaxe s logickými operátory

Jak se ukázalo, můžeme tuto syntaxi použít také při použití logických operátorů, jako je LIKE operátor, který jsme použili v prvním příkladu.

Proto bychom mohli přepsat první příklad na tento:

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

Výsledek:

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

V případě, že si nejste jisti, v čem je rozdíl, přesunuli jsme NOT operátor za PetName sloupec až před něj.

Zde jsou tato dvě prohlášení společně:

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

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

Příklad 4 – Negace více podmínek

NOT operátor neguje pouze jednu podmínku. Pokud máte více podmínek, které musíte negovat, použijte samostatný NOT operátor pro každou podmínku,

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

Výsledek:

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

Příklad 5 – Přednost

Při použití složených podmínek, kde máte více operátorů, NOT operátor je vyhodnocen před jakýmkoli logickým operátorem, ale po kterémkoli. porovnávací operátory,

Když dva operátory ve výrazu mají stejnou úroveň priority, jsou vyhodnoceny zleva doprava na základě jejich pozice ve výrazu. Můžete však použít závorky k určení pořadí, ve kterém má být každá podmínka vyhodnocena.

Zde je příklad.

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

Výsledek:

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

Nepoužili jsme zde žádné závorky a všechny podmínky byly negovány pomocí NOT operátor, a tedy AND operátor má přednost před OR operátor.

Můžeme však použít závorky k určení, že OR podmínka by měla být vyhodnocena před AND podmínka.

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

Výsledek:

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

V tomto případě dostaneme jiný výsledek.

Příklad 6 – Negace operátora BETWEEN

Zde je další příklad, tentokrát s použitím NOT operátor negovat výsledek BETWEEN operátor.

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

Výsledek:

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

V tomto příkladu jsme vrátili všechny řádky s DOB sloupec není mezi 2018-10-01 a 2020-09-17 .

V tomto případě tomuto kritériu odpovídaly dva řádky, a proto byly vráceny dva řádky.

Toto je opačný výsledek následujícího dotazu:

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

Výsledek:

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

V tomto příkladu jsme vrátili všechny řádky s DOB sloupec je mezi 2018-10-01 a 2020-09-17 .

V tomto případě tomuto kritériu odpovídaly čtyři řádky, a proto byly vráceny čtyři řádky.


  1. Jak mohu vygenerovat (nebo získat) skript ddl na existující tabulce v oracle? Musím je znovu vytvořit v Hive

  2. Jak odečíst 2 data v oracle, abyste získali výsledek v hodině a minutě

  3. Můj DBA je nemocný – Tipy pro přepnutí databáze při selhání databáze pro správce systému

  4. SQL Server Jedinečný složený klíč dvou polí s automatickým přírůstkem druhého pole