Operator równości (= ) jest prawdopodobnie najczęściej używanym operatorem w SQL. Porównuje równość dwóch wyrażeń. Nawet jeśli dopiero zaczynasz swoją przygodę z SQL, prawdopodobnie znasz ten operator.
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 zwierzaki z określonym właścicielem, moglibyśmy to zrobić:
SELECT *
FROM Pets
WHERE OwnerId = 3; Wynik:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Nasze zapytanie używa operatora równości (= ), aby porównać równość wartości OwnerId kolumna i 3 .
W tym przypadku właściciel numer 3 ma 3 zwierzęta.
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 zwierzakach o imieniu Fluffy, moglibyśmy wykonać następujące czynności:
SELECT *
FROM Pets
WHERE PetName = 'Fluffy'; Wynik:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Nasze zapytanie używa operatora równości (= ), aby porównać równość wartości PetName kolumna i ciąg Fluffy .
W naszym przypadku widzimy, że hotel dla zwierząt ma obecnie dwa zwierzęta o nazwie Fluffy.
Wiele warunków
Jeśli masz wiele warunków, możesz użyć wielu operatorów równości.
Tak:
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'; Wynik:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Widzimy, że zwrócił wiersze, w których PetName kolumna była albo Fluffy lub Tweet .
Negowanie warunku
Możesz użyć NOT operator, aby zanegować warunek dostarczony przez operator równości. Oto przykład:
SELECT *
FROM Pets
WHERE NOT 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 | +---------+-------------+-----------+-----------+------------+
Alternatywnym sposobem na zrobienie tego jest użycie operatora nierównego, którym jest albo <> lub != (lub oba) w zależności od systemu DBMS.
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 lub nawet pusty ciąg.
Nie możesz użyć operatora równości 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 jest użycie IS .
Dlatego musielibyśmy przepisać powyższe stwierdzenie w następujący sposób.
SELECT * FROM Pets
WHERE DOB IS NULL; Wynik:
+---------+-------------+-----------+-----------+-------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+-------| | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+-------+
NULL wartości mogą być trudne dla początkujących. W rzeczywistości mogą być trudne dla doświadczonych programistów! W SQL NULL ma nieco inne znaczenie niż NULL w większości innych języków programowania.
Ale ważną rzeczą do zapamiętania jest to, że w SQL NULL oznacza brak wartości. Nie ma wartości. Dlatego nie możemy powiedzieć, że jest równy lub nie równy czemuś innemu, ponieważ nie ma wartości, od której można by zacząć.
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.