Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Toán tử so sánh là gì?

Toán tử so sánh là một phần quan trọng của hầu hết các ngôn ngữ lập trình.

Toán tử so sánh được sử dụng để so sánh hai biểu thức. Kết quả là true hoặc false . Nó cũng có thể không được biết. Điều này cũng có thể được biểu thị bằng 1 , 0 hoặc NULL , tùy thuộc vào ngôn ngữ. Chúng thường được gọi là “Biểu thức Boolean”.

Khi được sử dụng với cơ sở dữ liệu, các toán tử so sánh có thể được sử dụng bên trong các truy vấn SQL của bạn để lọc dữ liệu theo một tiêu chí nhất định.

Các toán tử so sánh phổ biến

Hầu hết các ngôn ngữ lập trình hỗ trợ các toán tử so sánh sau đây ở dạng này hay dạng khác:

OPERATOR Ý NGHĨA
= Bằng
> Lớn hơn
< Ít hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
<> Không bằng

SQL sử dụng cú pháp tương tự như được liệt kê trong bảng trên.

Một số ngôn ngữ sử dụng cú pháp khác để tránh nhầm lẫn với các toán tử gán. Ví dụ:Python và JavaScript sử dụng == thay vì = . Mặt khác, ColdFusion sử dụng eq .

Các kiểu dữ liệu khác nhau

Một số ngôn ngữ có một toán tử đặc biệt để chỉ định rằng cả hai giá trị phải có cùng kiểu dữ liệu.

Ví dụ:JavaScript cũng bao gồm === toán tử chỉ định rằng cả hai giá trị đều bằng nhau rằng chúng phải có cùng kiểu dữ liệu. Nhưng nếu kiểu dữ liệu không liên quan, hãy sử dụng == thay thế.

Ví dụ

Greater Than Operator

Dưới đây là một ví dụ về việc sử dụng toán tử Greater Than trong truy vấn T-SQL.

SELECT Name, Population
FROM country
WHERE Population > 100000000
ORDER BY Population DESC;

Kết quả:

+--------------------+--------------+
| Name               | Population   |
|--------------------+--------------|
| China              | 1277558000   |
| India              | 1013662000   |
| United States      | 278357000    |
| Indonesia          | 212107000    |
| Brazil             | 170115000    |
| Pakistan           | 156483000    |
| Russian Federation | 146934000    |
| Bangladesh         | 129155000    |
| Japan              | 126714000    |
| Nigeria            | 111506000    |
+--------------------+--------------+

Trong ví dụ này, tôi đã sử dụng toán tử Greater Than (> ) để chỉ chọn các quốc gia có dân số lớn hơn 100000000.

Toán tử Equals

Đây là một ví dụ khác, trong đó tôi sử dụng toán tử bằng (= ) để trả về dữ liệu chính xác bằng một giá trị nhất định.

SELECT CountryCode, Name 
FROM city 
WHERE CountryCode = 'AFG'

Kết quả:

+---------------+----------------+
| CountryCode   | Name           |
|---------------+----------------|
| AFG           | Kabul          |
| AFG           | Qandahar       |
| AFG           | Herat          |
| AFG           | Mazar-e-Sharif |
+---------------+----------------+

Trong trường hợp này, tôi chỉ trả lại những thành phố có mã quốc gia bằng AFG .

Điều này chứng tỏ rằng các toán tử so sánh không chỉ giới hạn ở các kiểu dữ liệu số.

Ngày

Bạn cũng có thể sử dụng toán tử so sánh vào ngày tháng, ví dụ:

SELECT * FROM Artists
WHERE ActiveFrom > '1990-01-01';

Kết quả:

+------------+----------------+--------------+
| ArtistId   | ArtistName     | ActiveFrom   |
|------------+----------------+--------------|
| 5          | Devin Townsend | 1993-01-01   |
| 8          | Maroon 5       | 1994-01-01   |
| 9          | The Script     | 2001-01-01   |
| 14         | Karnivool      | 1997-01-01   |
| 15         | Birds of Tokyo | 2004-01-01   |
+------------+----------------+--------------+

Như bạn có thể thấy, kết quả duy nhất được trả về là những kết quả lớn hơn (sau) ngày được chỉ định.

Lớn hơn hoặc ngang với nhà điều hành

Tôi có thể sử dụng toán tử Greater Than hoặc Equal To để bao gồm ngày được chỉ định trong kết quả.

SELECT * FROM Artists
WHERE ActiveFrom >= '1990-01-01';

Kết quả:

+------------+----------------+--------------+
| ArtistId   | ArtistName     | ActiveFrom   |
|------------+----------------+--------------|
| 5          | Devin Townsend | 1993-01-01   |
| 8          | Maroon 5       | 1994-01-01   |
| 9          | The Script     | 2001-01-01   |
| 14         | Karnivool      | 1997-01-01   |
| 15         | Birds of Tokyo | 2004-01-01   |
| 16         | Bodyjar        | 1990-01-01   |
+------------+----------------+--------------+

Trong trường hợp này, một hàng thừa được trả về (hàng cuối cùng).

Ít hơn Toán tử

Đây là điều sẽ xảy ra nếu tôi thay đổi truy vấn của mình để sử dụng toán tử Nhỏ hơn.

SELECT * FROM Artists
WHERE ActiveFrom < '1990-01-01';

Kết quả:

+------------+------------------------+--------------+
| ArtistId   | ArtistName             | ActiveFrom   |
|------------+------------------------+--------------|
| 1          | Iron Maiden            | 1975-12-25   |
| 2          | AC/DC                  | 1973-01-11   |
| 3          | Allan Holdsworth       | 1969-01-01   |
| 4          | Buddy Rich             | 1919-01-01   |
| 6          | Jim Reeves             | 1948-01-01   |
| 7          | Tom Jones              | 1963-01-01   |
| 10         | Lit                    | 1988-06-26   |
| 11         | Black Sabbath          | 1968-01-01   |
| 12         | Michael Learns to Rock | 1988-03-15   |
| 13         | Carabao                | 1981-01-01   |
+------------+------------------------+--------------+

Tôi nhận được tất cả các hàng ít hơn ngày được chỉ định.

So sánh các giá trị NULL

NULL các giá trị có thể làm phức tạp mọi thứ một chút khi sử dụng các toán tử so sánh. Tóm lại, bạn có thể nhận được một kết quả khác, tùy thuộc vào cách cấu hình môi trường của bạn.

Ví dụ:trong SQL Server, nếu bạn sử dụng toán tử Equals (= ) hoặc toán tử Không bằng (<> ) để kiểm tra với NULL , kết quả của bạn sẽ phụ thuộc vào ANSI_NULLS của bạn cài đặt (tức là có ON hay không hoặc OFF ).

Để kiểm tra với NULL , SQL Server cũng cung cấp IS NULL vị từ, hoạt động nhất quán, bất kể ANSI_NULLS của bạn thiết lập. Điều này cũng bao gồm IS NOT NULL biến thể để thử nghiệm đối với non-NULL các giá trị.

Dưới đây là một ví dụ minh họa ý tôi muốn nói.

ANSI_NULLS ON

Đầu tiên, chúng tôi đặt ANSI_NULLS thành ON , sau đó chạy một vài kiểm tra đối với NULL .

SET ANSI_NULLS ON;

SELECT NULL
WHERE NULL = NULL;

SELECT NULL
WHERE 1 = NULL;

SELECT NULL
WHERE NULL IS NULL;

SELECT 'Not NULL'
WHERE 1 IS NOT NULL;

SELECT 'Not NULL'
WHERE 1 <> NULL;

Kết quả:

(0 rows affected)
(0 rows affected)
+--------------------+
| (No column name)   |
|--------------------|
| NULL               |
+--------------------+
(1 row affected)
+--------------------+
| (No column name)   |
|--------------------|
| Not NULL           |
+--------------------+
(1 row affected)
(0 rows affected)

ANSI_NULLS OFF

Bây giờ chúng tôi đặt ANSI_NULLS thành OFF , sau đó chạy các bài kiểm tra tương tự.

SET ANSI_NULLS OFF;

SELECT NULL
WHERE NULL = NULL;

SELECT NULL
WHERE 1 = NULL;

SELECT NULL
WHERE NULL IS NULL;

SELECT 'Not NULL'
WHERE 1 IS NOT NULL;

SELECT 'Not NULL'
WHERE 1 <> NULL;

Kết quả:

+--------------------+
| (No column name)   |
|--------------------|
| NULL               |
+--------------------+
(1 row affected)
(0 rows affected)
+--------------------+
| (No column name)   |
|--------------------|
| NULL               |
+--------------------+
(1 row affected)
+--------------------+
| (No column name)   |
|--------------------|
| Not NULL           |
+--------------------+
(1 row affected)
+--------------------+
| (No column name)   |
|--------------------|
| Not NULL           |
+--------------------+
(1 row affected)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bất ngờ về hiệu suất và giả định:BẬT SỐ KHOẢN

  2. Giảm thiểu tác động của việc mở rộng cột IDENTITY - phần 2

  3. Chạy SQL Scripts trong môi trường Multitenant với catcon.pl

  4. Bắt đầu Điều chỉnh Hiệu suất trong Cơ sở dữ liệu Azure SQL

  5. Giám sát độ trễ đọc / ghi