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

Toán tử SQL IN cho người mới bắt đầu

Trong SQL, IN toán tử cho phép bạn lọc kết quả truy vấn của mình dựa trên danh sách các giá trị.

Bạn cũng có thể sử dụng nó để so khớp với bất kỳ giá trị nào được trả về bởi một truy vấn con (truy vấn con là một truy vấn được lồng bên trong một truy vấn khác).

Bảng nguồn

Các bảng sau được sử dụng cho các ví dụ trên trang này.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Kết quả:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
| 4           | Rabbit    |
+-------------+-----------+
(4 rows affected)
+---------+-------------+-----------+-----------+------------+
| 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ụ

Dưới đây là một ví dụ để chứng minh IN nhà điều hành.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Kết quả:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Chúng tôi có thể đạt được kết quả tương tự bằng cách sử dụng hai OR toán tử:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' 
    OR PetName = 'Bark' 
    OR PetName = 'Wag';

Tuy nhiên, IN toán tử là một cách ngắn gọn hơn để làm điều đó. IN toán tử đặc biệt có lợi khi bạn có một danh sách dài các giá trị để so sánh với.

IN toán tử hầu như luôn thực thi nhanh hơn nhiều OR , đặc biệt là trên các tập dữ liệu lớn hơn.

Giá trị số

Các giá trị không chỉ giới hạn ở các chuỗi. Ví dụ:bạn có thể sử dụng IN trên danh sách các giá trị số.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetId IN (1, 3, 5);

Kết quả:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
| 5       | Tweet     | 2020-11-28 |
+---------+-----------+------------+

Ngày

Dưới đây là một ví dụ sử dụng danh sách ngày tháng.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE DOB IN (
    '2020-11-20', 
    '2018-10-01', 
    '2015-10-01'
    );

Kết quả:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
+---------+-----------+------------+

Sử dụng IN với Truy vấn con

Một lợi ích khác của IN là toán tử có thể chứa một SELECT khác danh sách. Đây được gọi là truy vấn con . Truy vấn con là một truy vấn được lồng bên trong một truy vấn khác (hoặc thậm chí là một truy vấn con khác).

Đây là một ví dụ.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Kết quả:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Ví dụ này cho chúng tôi thấy có bao nhiêu loại vật nuôi trong khách sạn vật nuôi của chúng tôi.

Sử dụng NOT IN

Chúng tôi có thể thêm NOT để lật điều này và xem có bao nhiêu loại vật nuôi không trong khách sạn thú cưng của chúng tôi.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );

Kết quả:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

Trong trường hợp này, cơ sở dữ liệu của chúng tôi chứa một loại vật nuôi là Rabbit , nhưng chúng tôi hiện không có bất kỳ con thỏ nào làm thú cưng.

Biểu thức

Các giá trị được cung cấp là một danh sách các biểu thức. Do đó, bạn có thể làm những việc như sau:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetId IN (1, 3, 2 + 3);

Kết quả:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
| 5       | Tweet     | 2020-11-28 |
+---------+-----------+------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ngưỡng tham gia thích ứng

  2. Mô hình quan hệ

  3. Định dạng dữ liệu trong Power BI Desktop Visualizations

  4. Cải thiện giải pháp trung bình hàng đầu / giảm dần hàng đầu

  5. Cải thiện hiệu suất của UDF với NULL ON NULL INPUT