Trong SQL, toán tử không bằng (!=
) so sánh tính không bằng nhau của hai biểu thức. Đó là, nó kiểm tra xem một biểu thức có không bằng một biểu thức khác.
Nếu một trong hai hoặc cả hai toán hạng là NULL
, NULL
được trả lại.
SQL cũng có một toán tử khác không bằng (<>
), làm điều tương tự. Cái nào bạn sử dụng có thể phụ thuộc vào DBMS của bạn, cái nào bạn cảm thấy thoải mái nhất khi sử dụng và có lẽ cả tổ chức của bạn có bất kỳ quy ước mã hóa nào quy định cái nào nên được sử dụng hay không.
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 Owners;
Kết quả:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Ví dụ
Nếu chúng tôi muốn trả lại danh sách tất cả chủ sở hữu không có OwnerId
trong tổng số 3
, chúng tôi có thể làm điều này:
SELECT *
FROM Owners
WHERE OwnerId != 3;
Kết quả:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Truy vấn của chúng tôi sử dụng toán tử không bằng với (!=
) để kiểm tra xem OwnerId
cột không bằng 3
. Truy vấn trả về tất cả chủ sở hữu ngoại trừ chủ sở hữu số 3.
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ả chủ sở hữu có tên không phải là Homer, chúng tôi có thể làm như sau:
SELECT *
FROM Owners
WHERE FirstName != 'Homer';
Kết quả:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
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ử (cho dù cả hai toán tử giống nhau hay khác nhau).
Như thế này:
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3;
Kết quả:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Khi bạn bắt đầu sử dụng nhiều điều kiện hơn, bạn nên sử dụng dấu ngoặc đơn để bao quanh các điều kiện mà bạn muốn được đánh giá trước. Nếu bạn không làm điều này, bạn có thể nhận được kết quả không mong muốn do các điều kiện được đánh giá theo thứ tự mà bạn không có ý định.
Giảm thiểu điều kiện
Nếu bạn sử dụng NOT
toán tử để phủ định điều kiện được cung cấp bởi toán tử không bằng với, cuối cùng bạn sẽ nhận được kết quả của bằng (=
) toán tử:
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
Kết quả:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Trong trường hợp này, tốt hơn hết bạn chỉ nên sử dụng dấu bằng (=
), như sau:
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
Tất nhiên, bản thân điều này có thể bị phủ định với NOT
toán tử, sau đó sẽ cho chúng ta cùng một kết quả không bằng (!=
) nhà điều hành cung cấp cho chúng tôi:
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
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
các giá trị trong Email
cột.
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ử không bằng với để 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 Email
cột thành NULL
.
SELECT * FROM Owners
WHERE Email != NULL;
Kết quả:
(0 rows affected)
Cách kiểm tra không phải NULL
các giá trị được sử dụng IS NOT NULL
.
Do đó, chúng ta cần viết lại câu lệnh trên như sau.
SELECT * FROM Owners
WHERE Email IS NOT NULL;
Kết quả:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Bây giờ chúng tôi chỉ nhận được những hàng không phải là NULL
trong Email
cột.
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.