Операторът за равенство (=
) е може би най-често използваният оператор в SQL. Той сравнява равенството на два израза. Дори ако току-що сте започнали своето SQL пътуване, вероятно ще познавате този оператор.
Изходна таблица
Представете си, че нашата база данни съдържа следната таблица. Това е таблицата, която ще използваме за примерите на тази страница.
SELECT * FROM Pets;
Резултат:
+---------+-------------+-----------+-----------+------------+ | 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)
Пример
Ако искаме да вземем всички домашни любимци с определен собственик, бихме могли да направим това:
SELECT *
FROM Pets
WHERE OwnerId = 3;
Резултат:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Нашата заявка използва оператора за равенство (=
), за да сравните равенството на стойността на OwnerId
колона и 3
.
В този случай собственик номер 3 има 3 домашни любимци.
Стрингове
Когато сравнявате със стойност на низ, използвайте кавички около низа. Например, ако искаме да получим информация за всички домашни любимци на име Fluffy, можем да направим следното:
SELECT *
FROM Pets
WHERE PetName = 'Fluffy';
Резултат:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Нашата заявка използва оператора за равенство (=
), за да сравните равенството на стойността на PetName
колона и низ Fluffy
.
В нашия случай можем да видим, че хотелът за домашни любимци в момента има два домашни любимци, наречени Fluffy.
Множество условия
Ако имате няколко условия, можете да използвате множество оператори за равенство.
Като това:
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet';
Резултат:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Можем да видим, че върна редовете, където PetName
колоната беше или Fluffy
или Tweet
.
Отрицание на условието
Можете да използвате NOT
оператор за отричане на условието, предоставено от оператора за равенство. Ето един пример:
SELECT *
FROM Pets
WHERE NOT PetName = 'Fluffy';
Резултат:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Алтернативен начин да направите това е да използвате оператора not equal to, който е или <>
или !=
(или и двете) в зависимост от вашата СУБД.
NULL стойности
Може да сте забелязали, че нашата оригинална примерна таблица съдържа няколко NULL
стойности в колоната DOB.
Колона, съдържаща NULL
означава, че няма стойност. Това е различно от 0
или false
или дори празен низ.
Не можете да използвате оператора equals за сравнение с NULL
. Всъщност това може да зависи от вашата СУБД и нейната конфигурация. Но засега нека да разгледаме какво се случва, ако се опитам да сравня колоната DOB с NULL
.
SELECT * FROM Pets
WHERE DOB = NULL;
Резултат:
(0 rows affected)
Начинът за тестване за NULL
е да използвате IS
.
Следователно ще трябва да пренапишем горното изявление, както следва.
SELECT * FROM Pets
WHERE DOB IS NULL;
Резултат:
+---------+-------------+-----------+-----------+-------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+-------| | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+-------+
NULL
ценностите могат да бъдат трудно нещо за начинаещите да си проучат главата. Всъщност те могат да бъдат трудно нещо за опитни разработчици, за да се ориентират! В SQL, NULL
има малко по-различно значение от NULL
в повечето други езици за програмиране.
Но важното, което трябва да запомните е, че в SQL NULL
означава липса на стойност. Няма стойност. Следователно не можем да кажем, че е равно или не е равно на нещо друго, защото няма стойност, с която да започнем.
Ако се интересувате, вижте SQL Server ANSI_NULLS Explained
за да видите как можете да промените начина NULL
стойностите се третират в SQL Server.