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

Operator SQL nie jest 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 Owners;

Wynik:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Simpson    | (489) 591-0408 | NULL              |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Przykład

Gdybyśmy chcieli zwrócić listę wszystkich właścicieli, którzy nie mają OwnerId z 3 , możemy to zrobić:

SELECT *
FROM Owners
WHERE OwnerId != 3;

Wynik:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Nasze zapytanie używa operatora nierównego (!= ), aby sprawdzić, czy OwnerId kolumna nie jest równa 3 . Zapytanie zwraca wszystkich właścicieli z wyjątkiem 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 właścicielach, których imię nie jest Homer, moglibyśmy wykonać następujące czynności:

SELECT *
FROM Owners
WHERE FirstName != 'Homer';

Wynik:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Simpson    | (489) 591-0408 | NULL              |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

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 Owners 
WHERE OwnerId != 1 AND OwnerId != 3;

Wynik:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 4         | Boris       | Trump      | (349) 611-8908 | NULL              |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Gdy zaczniesz używać większej liczby warunków, powinieneś użyć nawiasów, aby otoczyć warunki, które chcesz najpierw ocenić. Jeśli tego nie zrobisz, może się okazać, że uzyskasz nieoczekiwane wyniki ze względu na warunki oceniane w kolejności, której nie zamierzałeś.

Negowanie warunku

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

SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';

Wynik:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
+-----------+-------------+------------+----------------+-------------------+

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

SELECT *
FROM Owners
WHERE FirstName = 'Homer';

Oczywiście samo to można zanegować za pomocą NOT operator, który dałby nam ten sam wynik, co nierówne (!= ) operator daje nam:

SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';

Wartości NULL

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

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ć Email kolumna na NULL .

SELECT * FROM Owners 
WHERE Email != 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 Owners 
WHERE Email IS NOT NULL;

Wynik:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
| 6         | Burt        | Tyson      | (309) 565-0112 | [email protected]  |
+-----------+-------------+------------+----------------+-------------------+

Teraz otrzymujemy tylko te wiersze, które nie są NULL w Email 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. Czym są bazy danych?

  2. Hekaton z niespodzianką:In-memory TVP – część 2

  3. Filtrowanie tabel w IRI Workbench

  4. Zmniejsz liczbę wywołań bazy danych, aby poprawić wydajność witryny

  5. Utwórz relację w SQL