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.