Database
 sql >> Baza danych >  >> RDS >> Database

Operator SQL nie równy () dla początkujących

W SQL operator nierówny (<> ) porównuje nierówność dwóch wyrażeń. Oznacza to, że sprawdza, czy jedno wyrażenie nie równa się innemu wyrażeniu.

Jeśli jeden lub oba operandy są NULL , NULL jest zwracany.

SQL ma również inny operator nierówny (!= ), który robi to samo. To, którego używasz, może zależeć od Twojego DBMS, z którego korzystasz najwygodniej, a być może także od tego, czy Twoja organizacja ma jakieś konwencje kodowania, które dyktują, który z nich powinien być używany.

Tabela źródłowa

Wyobraź sobie, że nasza baza danych zawiera poniższą tabelę. To jest tabela, której użyjemy dla przykładów na tej stronie.

SELECT * FROM Pets;

Wynik:

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

Przykład

Gdybyśmy chcieli zdobyć wszystkie zwierzęta, które nie mieć określonego właściciela, możemy to zrobić:

SELECT *
FROM Pets
WHERE OwnerId <> 3;

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Nasze zapytanie używa operatora nierównego (<> ), aby sprawdzić, czy OwnerId kolumna nie jest równa 3 . Zapytanie zwraca wszystkie zwierzęta, które nie mają właściciela nr 3.

Struny

Porównując z wartością ciągu, użyj cudzysłowów wokół ciągu. Na przykład, jeśli chcielibyśmy uzyskać informacje o wszystkich zwierzętach domowych, które nie mają imienia Puszysty, możemy wykonać następujące czynności:

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

Wynik:

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

Wiele warunków

Jeśli masz wiele warunków, możesz użyć wielu operatorów (zarówno tych samych, jak i różnych).

Tak:

SELECT * FROM Pets 
WHERE OwnerId <> 1 AND OwnerId <> 3;

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Negowanie warunku

Jeśli używasz NOT operatora, aby zanegować warunek dostarczony przez operator nierówny, otrzymasz wyniki równe (= ) operator:

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

Wynik:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

W takim przypadku lepiej jest po prostu użyć równego (= ) operator, na przykład:

SELECT *
FROM Pets
WHERE PetName = 'Fluffy';

Oczywiście samo to można zanegować za pomocą NOT operator, który dałby nam ten sam wynik, co równanie (<> ) operator daje nam:

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

Wartości NULL

Być może zauważyłeś, że nasza oryginalna przykładowa tabela zawiera kilka NULL wartości w kolumnie DOB.

Kolumna zawierająca NULL oznacza, że ​​nie ma wartości. Różni się to od 0 lub false , a nawet pusty ciąg.

Nie możesz użyć operatora nierównego do porównania z NULL . W rzeczywistości może to zależeć od twojego DBMS i jego konfiguracji. Ale na razie spójrzmy, co się stanie, jeśli spróbuję porównać kolumnę DOB z NULL .

SELECT * FROM Pets 
WHERE DOB <> NULL;

Wynik:

(0 rows affected)

Sposób na testowanie pod kątem NULL wartości to użycie IS NOT NULL .

Dlatego musielibyśmy przepisać powyższe stwierdzenie w następujący sposób.

SELECT * FROM Pets 
WHERE DOB IS NOT NULL;

Wynik:

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

Teraz otrzymujemy tylko te wiersze, które nie są NULL w DOB kolumna.

Jeśli jesteś zainteresowany, zobacz SQL Server ANSI_NULLS Explained aby zobaczyć, jak możesz zmienić sposób, w jaki NULL wartości są traktowane w SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instrukcja SQL INSERT INTO

  2. Przestawianie, przestawianie i dzielenie kolumn w Edytorze zapytań usługi Power BI

  3. Jak DevOps powinien używać DBaaS (bazy danych jako usługi) do optymalizacji tworzenia aplikacji

  4. Zrozumienie czasów operatora planu wykonania

  5. Gdy RÓŻNE <> GRUPUJ WG