PostgreSQL IN, Not IN và các ví dụ

⚡ Tóm tắt thông minh

PostgreSQL Toán tử IN kiểm tra xem một giá trị có xuất hiện trong danh sách hoặc truy vấn con bên trong mệnh đề WHERE hay không, thay thế nhiều điều kiện OR trong các câu lệnh SELECT, UPDATE, INSERT và DELETE để lọc dữ liệu sạch hơn, nhanh hơn và dễ đọc hơn.

  • 📋 Cú pháp: Giá trị IN (danh sách) trả về true khi giá trị khớp với bất kỳ mục nào trong danh sách.
  • 🔤 Danh sách nhân vật: Đặt các giá trị văn bản trong dấu ngoặc đơn.
  • 🔢 Danh sách số: So sánh trực tiếp các số, không cần dấu ngoặc kép, để tìm sự trùng khớp chính xác.
  • 🚫 KHÔNG CÓ TRONG: Trả về các hàng có giá trị không có trong danh sách được cung cấp.
  • ⚠️ Bẫy NULL: Giá trị NULL bên trong NOT IN có thể âm thầm trả về 0 hàng.
  • 🤖 Truy vấn AI: Các trợ lý xây dựng các điều khoản IN và cảnh báo các rủi ro NULL và rủi ro về hiệu suất.

PostgreSQL TRONG, KHÔNG TRONG kèm ví dụ

Là gì PostgreSQL TRONG?

Toán tử IN được sử dụng trong mệnh đề WHERE để kiểm tra xem một giá trị có tồn tại trong một danh sách các giá trị khác hay không. Thao tác IN giúp giảm thiểu nhu cầu sử dụng nhiều điều kiện OR trong các câu lệnh SELECT, UPDATE, INSERT hoặc DELETE.

cú pháp

Toán tử IN có cú pháp như sau:

value IN (value_1, value_2, ...)

Giá trị là giá trị mà bạn đang kiểm tra trong danh sách.

Giá trị_1, giá trị_2… là các giá trị danh sách.

Nếu giá trị được tìm thấy trong danh sách, toán tử sẽ trả về giá trị đúng.

Danh sách có thể là một tập hợp các số hoặc chuỗi, hoặc thậm chí là kết quả đầu ra của một hàm nào đó. Câu lệnh SELECT như hình dưới đây:

value IN (SELECT value FROM table-name);

Câu lệnh đặt bên trong dấu ngoặc đơn được gọi là truy vấn con.

PostgreSQL Trong Với Cá Tính

Hãy để chúng tôi trình bày cách bạn có thể sử dụng toán tử IN với các giá trị ký tự.

Hãy xem xét bảng sau:

Nhân viên:

PostgreSQL Trong Với Cá Tính

Chúng ta hãy chạy truy vấn sau với bảng trên:

SELECT * FROM Employees WHERE name IN ('James John', 'Mercy Bush', 'Kate Joel');

Nó trả về kết quả sau:

PostgreSQL Kết quả IN Với ký tự

Chúng tôi có một danh sách gồm ba tên. Chúng tôi đang tìm kiếm xem có tên nào trong số này xuất hiện trong cột tên của bảng Nhân viên hay không. Kate Joel đã được tìm thấy trùng khớp với một trong các bản ghi của bảng và thông tin chi tiết của bản ghi đó đã được trả về.

PostgreSQL IN Với số

Bây giờ, chúng ta hãy xem cách chúng ta có thể sử dụng toán tử IN với các giá trị số.

Hãy xem xét bảng Giá được đưa ra dưới đây:

Giá:

PostgreSQL IN Với số

Chúng ta có thể chạy truy vấn sau trên bảng:

SELECT * FROM Price WHERE price IN (200, 308, 250, 550);

Điều này trả về như sau:

PostgreSQL IN Với kết quả số

Chúng tôi đã tạo một danh sách với 4 giá trị số. Chúng tôi đang kiểm tra xem chúng tôi có thể khớp bất kỳ giá trị nào trong số này với các giá trị có trong cột giá của bảng giá hay không. Hai giá trị đã được khớp và thông tin chi tiết của chúng đã được trả về.

Sử dụng NOT Operator

Toán tử IN có thể được sử dụng cùng với toán tử NOT. Nó trả về các giá trị không tìm thấy trong cột được chỉ định. Chúng tôi sẽ sử dụng bảng Giá để chứng minh điều này.

SELECT * FROM Price WHERE price NOT IN (200, 400, 190, 230);

Kết quả trả về sẽ như sau:

PostgreSQL Sử dụng toán tử NOT

Chúng tôi đã tạo một danh sách với 4 giá trị số. Chúng tôi đang kiểm tra cột giá của bảng Giá để tìm các giá trị không nằm trong danh sách. Hai giá trị, 250 và 300, không được tìm thấy. Do đó, thông tin chi tiết của chúng đã được trả về.

Sử dụng pgAdmin

Ngoài giao diện dòng lệnh SQL, các truy vấn IN và NOT IN tương tự cũng có thể được chạy trực quan thông qua giao diện pgAdmin.

Với nhân vật

Để thực hiện điều tương tự thông qua pgAdmin, hãy làm điều này:

Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn.

Bước 2)

  1. Từ thanh điều hướng ở bên trái, nhấp vào Cơ sở dữ liệu.
  2. Nhấp vào Bản trình diễn.

Sử dụng pgAdmin với ký tự

Bước 3) Nhập truy vấn vào trình soạn thảo truy vấn:

SELECT * FROM Employees WHERE name IN ('James John', 'Mercy Bush', 'Kate Joel');

Bước 4) Nhấp vào nút Thực hiện.

Sử dụng pgAdmin với truy vấn ký tự

Nó sẽ trả về kết quả sau:

Sử dụng pgAdmin với kết quả dạng ký tự

Với số

Để thực hiện điều tương tự thông qua pgAdmin, hãy làm điều này:

Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn.

Bước 2)

  1. Từ thanh điều hướng ở bên trái, nhấp vào Cơ sở dữ liệu.
  2. Nhấp vào Bản trình diễn.

Sử dụng pgAdmin với số

Bước 3) Nhập truy vấn vào trình soạn thảo truy vấn:

SELECT * FROM Price WHERE price IN (200, 308, 250, 550);

Bước 4) Nhấp vào nút Thực hiện.

Sử dụng pgAdmin với truy vấn số

Nó sẽ trả về kết quả sau:

Sử dụng pgAdmin với kết quả dạng số

Sử dụng NOT Operator

Để thực hiện điều tương tự thông qua pgAdmin, hãy làm điều này:

Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn.

Bước 2)

  1. Từ thanh điều hướng ở bên trái, nhấp vào Cơ sở dữ liệu.
  2. Nhấp vào Bản trình diễn.

Sử dụng toán tử NOT trong pgAdmin

Bước 3) Nhập truy vấn vào trình soạn thảo truy vấn:

SELECT * FROM Price WHERE price NOT IN (200, 400, 190, 230);

Bước 4) Nhấp vào nút Thực hiện.

Sử dụng truy vấn toán tử NOT trong pgAdmin

Nó sẽ trả về kết quả sau:

Việc sử dụng toán tử NOT dẫn đến kết quả trong pgAdmin.

Tải xuống Cơ sở dữ liệu được sử dụng trong Hướng dẫn này

Câu Hỏi Thường Gặp

In PostgreSQLMệnh đề EXISTS thường chạy nhanh hơn mệnh đề IN trên các truy vấn con lớn vì nó dừng lại ở kết quả khớp đầu tiên. Đối với các danh sách nhỏ, cố định, mệnh đề IN đơn giản và hiệu quả. Hãy kiểm tra cả hai bằng lệnh EXPLAIN ANALYZE trên dữ liệu của riêng bạn.

Mệnh đề NOT IN coi NULL là giá trị không xác định, vì vậy nếu danh sách hoặc truy vấn con chứa NULL, toàn bộ điều kiện có thể được đánh giá là không xác định và trả về 0 hàng. Hãy lọc bỏ các giá trị NULL hoặc sử dụng NOT EXISTS thay thế.

IN thay thế các chuỗi điều kiện OR dài bằng một mệnh đề dễ đọc hơn. WHERE id IN (1,2,3) tương đương với WHERE id=1 OR id=2 OR id=3, nhưng ngắn gọn hơn, rõ ràng hơn và dễ bảo trì hơn.

Vâng. PostgreSQL coi x IN (a, b, c) tương đương với x = ANY (ARRAY[a, b, c]). Cả hai đều cho cùng một kết quả và thường cùng một kế hoạch truy vấn.

Các trợ lý AI tạo ra mệnh đề IN từ ngôn ngữ tiếng Anh thông thường, đề xuất danh sách giá trị chính xác và cảnh báo rủi ro NULL trong NOT IN. Chúng cũng viết lại các truy vấn chậm và thêm gợi ý EXPLAIN để tối ưu hóa.

Đúng vậy. Công cụ AI Copilot phát hiện các điều kiện OR lặp lại trên cùng một cột và sắp xếp lại chúng thành một danh sách IN duy nhất, cải thiện khả năng đọc hiểu và giảm nguy cơ xảy ra lỗi logic.

Đúng vậy. Hãy đặt câu lệnh SELECT bên trong dấu ngoặc đơn: WHERE id IN (SELECT id FROM orders). Truy vấn bên trong, được gọi là truy vấn con, sẽ cung cấp danh sách các giá trị được kiểm tra bởi mệnh đề IN.

Đối với các bảng lớn, NOT EXISTS hoặc LEFT JOIN với IS NULL thường cho hiệu quả tốt hơn NOT IN vì PostgreSQL Xây dựng một phép nối ngược hiệu quả. Đồng thời đảm bảo các cột được so sánh đã được lập chỉ mục.

Tóm tắt bài viết này với: