Toán tử bằng (=
) có lẽ là toán tử được sử dụng phổ biến nhất trong SQL. Nó so sánh sự bằng nhau của hai biểu thức. Ngay cả khi bạn chỉ mới bắt đầu hành trình SQL của mình, bạn có thể sẽ biết toán tử này.
Bảng nguồn
Hãy tưởng tượng cơ sở dữ liệu của chúng ta chứa bảng sau. Đây là bảng chúng tôi sẽ sử dụng cho các ví dụ trên trang này.
SELECT * FROM Pets;
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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)
Ví dụ
Nếu chúng tôi muốn nhận tất cả vật nuôi với một người chủ nhất định, chúng tôi có thể làm điều này:
SELECT *
FROM Pets
WHERE OwnerId = 3;
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Truy vấn của chúng tôi sử dụng toán tử bằng (=
) để so sánh sự bình đẳng về giá trị của OwnerId
cột và 3
.
Trong trường hợp này, chủ sở hữu số 3 có 3 vật nuôi.
Chuỗi
Khi so sánh với một giá trị chuỗi, hãy sử dụng dấu ngoặc kép xung quanh chuỗi. Ví dụ:nếu chúng tôi muốn nhận thông tin về tất cả các vật nuôi có tên là Fluffy, chúng tôi có thể làm như sau:
SELECT *
FROM Pets
WHERE PetName = 'Fluffy';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Truy vấn của chúng tôi sử dụng toán tử bằng (=
) để so sánh sự bình đẳng về giá trị của PetName
cột và chuỗi Fluffy
.
Trong trường hợp của chúng tôi, chúng tôi có thể thấy rằng khách sạn vật nuôi hiện có hai vật nuôi tên là Fluffy.
Nhiều điều kiện
Nếu bạn có nhiều điều kiện, bạn có thể sử dụng nhiều toán tử bằng.
Như thế này:
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Chúng ta có thể thấy rằng nó trả về các hàng có PetName
cột là Fluffy
hoặc Tweet
.
Giảm thiểu điều kiện
Bạn có thể sử dụng NOT
toán tử để phủ định điều kiện được cung cấp bởi toán tử bằng. Đây là một ví dụ:
SELECT *
FROM Pets
WHERE NOT PetName = 'Fluffy';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Một cách khác để thực hiện việc này là sử dụng toán tử không bằng với, là <>
hoặc !=
(hoặc cả hai) tùy thuộc vào DBMS của bạn.
Giá trị NULL
Bạn có thể nhận thấy rằng bảng mẫu ban đầu của chúng tôi chứa một vài NULL
trong cột DOB.
Một cột chứa NULL
nghĩa là nó không có giá trị. Điều này khác với 0
hoặc false
, hoặc thậm chí là một chuỗi trống.
Bạn không thể sử dụng toán tử bằng để so sánh với NULL
. Trên thực tế, điều này có thể phụ thuộc vào DBMS của bạn và cấu hình của nó. Nhưng bây giờ, hãy xem điều gì sẽ xảy ra nếu tôi cố gắng so sánh cột DOB với NULL
.
SELECT * FROM Pets
WHERE DOB = NULL;
Kết quả:
(0 rows affected)
Cách kiểm tra NULL
là sử dụng IS
.
Do đó, chúng ta cần viết lại câu lệnh trên như sau.
SELECT * FROM Pets
WHERE DOB IS NULL;
Kết quả:
+---------+-------------+-----------+-----------+-------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+-------| | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+-------+
NULL
các giá trị có thể là một điều khó khăn đối với người mới bắt đầu. Trên thực tế, chúng có thể là một điều khó khăn đối với các nhà phát triển có kinh nghiệm! Trong SQL, NULL
có nghĩa hơi khác với NULL
trong hầu hết các ngôn ngữ lập trình khác.
Nhưng điều quan trọng cần nhớ là, trong SQL, NULL
có nghĩa là thiếu một giá trị. Không có giá trị. Do đó, chúng tôi không thể nói rằng nó bằng hoặc không bằng thứ khác, bởi vì không có giá trị nào để bắt đầu.
Nếu bạn quan tâm, hãy xem SQL Server ANSI_NULLS Explained
để xem cách bạn có thể thay đổi cách NULL
các giá trị được xử lý trong SQL Server.