SQL - IN vs EXISTS: Hướng dẫn chi tiết cho người mới bắt đầu
Xin chào các nhà pháp sư SQL tương lai! Tôi rất vui mừng được làm hướng dẫn viên cho bạn trong hành trình đầy.exciting vào thế giới của SQL. Hôm nay, chúng ta sẽ khám phá hai công cụ mạnh mẽ trong bộ công cụ SQL của chúng ta: các toán tử IN và EXISTS. Đừng lo lắng nếu bạn mới bắt đầu lập trình - tôi sẽ hướng dẫn bạn từng bước một, giống như tôi đã làm cho hàng trăm học sinh trong lớp của mình trong nhiều năm qua.
Toán tử SQL IN
Hãy bắt đầu với toán tử IN. Hãy tưởng tượng bạn đang lên kế hoạch cho một bữa tiệc và bạn có một danh sách bạn bè mà bạn muốn mời. Toán tử IN hoạt động tương tự - nó cho phép bạn xác định nhiều giá trị trong mệnh đề WHERE. Nó giống như nói, "Tôi muốn tìm tất cả dữ liệu khớp với bất kỳ giá trị nào trong này."
Cú pháp cơ bản
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
Ví dụ 1: Tìm quả cụ thể
Giả sử chúng ta có một bảng叫做 'fruits' với các cột 'id' và 'name'. Chúng ta muốn tìm tất cả các loại quả là táo, chuối hoặc cam.
SELECT * FROM fruits
WHERE name IN ('apple', 'banana', 'orange');
Truy vấn này sẽ trả về tất cả các hàng WHERE tên quả là táo, chuối hoặc cam. Nó giống như hỏi, "Tôi có thể có tất cả các loại quả trong danh sách này không?"
Ví dụ 2: Sử dụng IN với một truy vấn con
Toán tử IN trở nên mạnh mẽ hơn khi kết hợp với một truy vấn con. Giả sử chúng ta có một bảng khác gọi là 'favorite_fruits' liệt kê các loại quả yêu thích của mọi người.
SELECT * FROM fruits
WHERE name IN (SELECT fruit_name FROM favorite_fruits);
Truy vấn này tìm tất cả các loại quả là sở thích của ai đó. Nó giống như nói, "Hiển thị cho tôi tất cả các loại quả có trong danh sách yêu thích của bất kỳ ai."
Toán tử SQL EXISTS
Bây giờ, hãy chuyển sang toán tử EXISTS. Nếu IN giống như kiểm tra các mục trong danh sách, EXISTS giống như hỏi một câu hỏi có/không. Nó kiểm tra xem có bất kỳ hàng nào tồn tại thỏa mãn một điều kiện nào đó.
Cú pháp cơ bản
SELECT column_name(s)
FROM table_name
WHERE EXISTS (subquery);
Ví dụ 3: Tìm quả có đơn hàng
Giả sử chúng ta có một bảng 'orders' ghi lại các đơn hàng quả. Chúng ta muốn tìm tất cả các loại quả đã được đặt hàng ít nhất một lần.
SELECT * FROM fruits
WHERE EXISTS (
SELECT 1 FROM orders
WHERE orders.fruit_id = fruits.id
);
Truy vấn này trả về tất cả các loại quả có ít nhất một đơn hàng. Nó giống như hỏi, "Loại quả này có đơn hàng nào không? Nếu có, hiển thị cho tôi loại quả đó."
Ví dụ 4: Tìm khách hàng không có đơn hàng
Chúng ta cũng có thể sử dụng NOT EXISTS để tìm ngược lại. Hãy tìm khách hàng không đặt hàng nào.
SELECT * FROM customers
WHERE NOT EXISTS (
SELECT 1 FROM orders
WHERE orders.customer_id = customers.id
);
Truy vấn này tìm tất cả các khách hàng không có đơn hàng nào. Nó giống như hỏi, "Có khách hàng nào không đặt hàng không? Hiển thị cho tôi những khách hàng đó."
IN vs EXISTS: Nên sử dụng哪一个?
Bây giờ chúng ta đã thấy cả IN và EXISTS trong hành động, bạn có thể tự hỏi, "Tôi nên sử dụng cái nào?" Đó là một câu hỏi tuyệt vời! Hãy phân tích.
Về hiệu suất
Nói chung:
- IN thường nhanh hơn khi kết quả của truy vấn con nhỏ
- EXISTS có thể hiệu quả hơn với các tập dữ liệu lớn
Nhưng hãy nhớ rằng, hiệu suất cơ sở dữ liệu có thể thay đổi, vì vậy luôn tốt nhất để kiểm tra với dữ liệu cụ thể của bạn.
Về khả năng đọc và ý định
- Sử dụng IN khi bạn có một danh sách cụ thể các giá trị để kiểm tra
- Sử dụng EXISTS khi bạn đang kiểm tra sự hiện diện hoặc vắng mặt của dữ liệu liên quan
Xử lý NULL
- IN đối xử với các giá trị NULL khác nhau (nó không trả về các hàng với NULL)
- EXISTS không có hạn chế này
Dưới đây là bảng tóm tắt khi nào nên sử dụng từng toán tử:
Tình huống | Toán tử khuyến nghị |
---|---|
Kiểm tra chống lại một danh sách nhỏ các giá trị已知 | IN |
Kiểm tra sự hiện diện của các bản ghi liên quan | EXISTS |
Làm việc với các tập dữ liệu lớn | EXISTS |
Khi các giá trị NULL nên được bao gồm trong kết quả | EXISTS |
Khi bạn cần kiểm tra nhiều điều kiện | EXISTS |
Kết luận
Và thế là bạn đã có, các học trò SQL của tôi! Chúng ta đã cùng nhau khám phá các vùng đất của IN và EXISTS, tìm hiểu về sức mạnh và trường hợp sử dụng của chúng. Nhớ rằng, giống như việc chọn đúng công cụ cho công việc, việc chọn giữa IN và EXISTS phụ thuộc vào tình huống cụ thể của bạn.
Trong khi tiếp tục hành trình SQL của bạn, đừng ngại thử nghiệm với cả hai toán tử. Thử chúng ra, xem chúng hoạt động như thế nào với dữ liệu của bạn, và sớm bạn sẽ phát triển trực giác để biết khi nào nên sử dụng từng toán tử.
Trước khi để bạn đi, đây là một chút hài hước về SQL: Tại sao quản trị viên cơ sở dữ liệu rời bỏ vợ mình? Bà ấy có quá nhiều view và anh ấy không thể xử lý được sự thiếu cam kết của bà ấy!
Tiếp tục luyện tập, 保持好奇心, và chúc bạn thành công với các truy vấn!
Credits: Image by storyset