Tham gia truy vấn con SQL với truy vấn bên ngoài

Tham Gia Truy Van Con Sql Voi Truy Van Ben Ngoai



Khi làm việc với cơ sở dữ liệu quan hệ, bạn cần nắm vững cách thao tác và kết hợp các câu truy vấn để thực hiện các tác vụ mà mình mong muốn. Đó là lý do tại sao mỗi công cụ cơ sở dữ liệu quan hệ thực hiện hương vị của ngôn ngữ SQL bằng cách cố gắng cung cấp các tính năng đặc biệt, hiệu quả và dễ sử dụng cho người dùng của nó.

Một trong những tính năng mạnh mẽ nhất của SQL là truy vấn con. Truy vấn con là một tập hợp các truy vấn lồng nhau trong một truy vấn lớn hơn và phức tạp hơn. Truy vấn con cho phép bạn truy xuất dữ liệu hoặc thực hiện các thao tác phức tạp hơn dưới dạng một thực thể duy nhất.







Chúng ta có thể sử dụng các truy vấn con để thực hiện lọc, sắp xếp, tổng hợp dữ liệu trên nhiều bảng, v.v.



Tuy nhiên, một tính năng khác được ẩn dưới các truy vấn con SQL được gọi là liên kết truy vấn con. Chúng tương tự như các truy vấn con; thay vào đó, chúng là các phép nối cho phép bạn sử dụng truy vấn con bên trong truy vấn bên ngoài để nối các bảng lại với nhau.



Nếu đầu óc bạn đang quay cuồng, đừng lo lắng vì phép nối truy vấn con có thể khó thành thạo, đặc biệt là trong thời gian đầu. Tuy nhiên, hướng dẫn này cố gắng chia nhỏ phép nối truy vấn con theo các bước cơ bản mà không để lại quá nhiều cơ hội.





Hãy nhớ rằng chúng tôi cho rằng bạn không phải là người mới đối với SQL, SQL Joins, SQL Subqueries, v.v. Tuy nhiên, nếu đúng như vậy, hãy xem hướng dẫn của chúng tôi về các chủ đề để khám phá thêm.

Làm chủ SQL Outer Joins

Nếu bạn muốn hiểu cách làm việc với phép nối truy vấn con, học cách làm việc với phép nối ngoài là yếu tố then chốt.



Nếu bạn chưa quen, phép nối ngoài SQL cho phép bạn tìm nạp tất cả các hàng từ một bảng và các hàng phù hợp từ bảng thứ hai. Nó phức tạp hơn thế một chút, bao gồm phép nối ngoài bên trái, phép nối ngoài bên phải, phép nối ngoài đầy đủ, v.v.

Trong phép nối ngoài bên trái của SQL, truy vấn trả về tất cả các hàng từ bảng bên trái và các hàng phù hợp từ bảng bên phải. Truy vấn bao gồm các giá trị NULL trong các cột kết quả nếu không có hàng phù hợp trong bảng bên phải.

Trong trường hợp nối ngoài bên phải, truy vấn trả về tất cả các hàng từ bảng bên phải nhưng chỉ các hàng phù hợp từ bảng bên trái. Tương tự, truy vấn bao gồm các giá trị NULL nếu không có hàng phù hợp từ bảng bên trái.

Cuối cùng, chúng ta có kết nối bên ngoài đầy đủ. Phép nối này trả về tất cả các hàng từ bảng bên phải và bên trái và các giá trị NULL cho bất kỳ bản ghi không khớp nào.

Tham gia truy vấn con SQL

Bây giờ chúng ta đã hiểu về truy vấn con SQL, hãy nói về phép nối truy vấn con. Phép nối truy vấn con cho phép chúng ta sử dụng các truy vấn con bên trong truy vấn bên ngoài để nối các bảng.

Nếu bạn đang hỏi, đó là nó? Vâng, đó là tất cả những gì liên kết truy vấn phụ làm.

Để chứng minh điều này tốt hơn, hãy lấy ví dụ cú pháp sau được minh họa trong phần sau:

LỰA CHỌN *
TỪ bảng1
TRÁI NGOÀI THAM GIA (
CHỌN cột1, cột2
TỪ bảng2
) AS truy vấn con
TRÊN bảng1.column3 = subquery.column1;


Trong cú pháp trước, chúng tôi chọn tất cả các cột từ bảng một bằng cách sử dụng phép nối ngoài bên trái để nối nó với một truy vấn con. Vai trò của truy vấn con là tìm nạp các cột đã xác định từ Bảng 2. Sau đó, chúng ta nối nó với Bảng 1 với điều kiện là cột 2 từ Bảng 1 và cột 1 từ truy vấn con.

Ví dụ thực tế:

Về mặt lý thuyết, nó có vẻ ít trực quan hơn nhưng chúng ta hãy lấy một kịch bản trong thế giới thực bằng cách lấy cơ sở dữ liệu Sakila.

Giả sử chúng ta muốn truy xuất danh sách tất cả các bộ phim trong cơ sở dữ liệu và ngôn ngữ tương ứng của chúng. Ngôn ngữ của phim được lưu trong bảng ngôn ngữ và tên phim được lưu trong bảng phim.

Tuy nhiên, bảng phim có một khóa ngoại được gọi là cột “language_id” từ bảng ngôn ngữ. Do đó, chúng ta có thể sử dụng phép nối truy vấn con với phép nối ngoài bên trái để nối hai bảng lại với nhau như minh họa trong truy vấn sau:

CHỌN f.title, l.name AS ngôn ngữ
TỪ phim f
TRÁI NGOÀI THAM GIA (
CHỌN ngôn ngữ_id, tên
TỪ ngôn ngữ
) NHƯ tôi
BẬT f.language_id = l.language_id;


Trong truy vấn ví dụ trước, chúng tôi chọn cột tiêu đề từ bảng phim và cột tên từ bảng ngôn ngữ.

Sau đó, chúng tôi sử dụng truy vấn con để chọn language_id và cột tên từ bảng ngôn ngữ. Bước tiếp theo là nối nó với bảng phim với điều kiện language_id từ bảng phim bằng language_id từ bảng ngôn ngữ.

Để đảm bảo rằng tất cả các phim được bao gồm trong kết quả, chúng ta cần sử dụng phép nối ngoài bên trái bao gồm tất cả các kết quả từ bảng bên trái, trong trường hợp này là bảng phim.

Một ví dụ đầu ra như sau:


Chúng ta cũng có thể làm tương tự với phép nối ngoài bên phải. Cú pháp như sau:

LỰA CHỌN *
TỪ bảng1
RIGHT NGOÀI THAM GIA (
CHỌN cột1, cột2
TỪ bảng2
) AS truy vấn con
TRÊN bảng1.column3 = subquery.column1;


Điều này hoạt động tương tự nhưng bao gồm tất cả các bản ghi trong bảng bên phải ngay cả khi không có bản ghi phù hợp.

Những điều hữu ích cần biết

Bạn nên hiểu rằng mặc dù phép nối truy vấn con cực kỳ hữu ích và có thể tối ưu hóa quy trình làm việc của bạn, nhưng hãy thận trọng khi sử dụng chúng.

Ví dụ: tránh sử dụng liên kết truy vấn con với tập dữ liệu lớn. Điều này là do họ có thể trả về các bản ghi mở rộng có thể ảnh hưởng đến hiệu suất cơ sở dữ liệu.

Cân nhắc sử dụng các công cụ phân tích truy vấn trước khi thực hiện bất kỳ phép nối truy vấn con nào.

Phần kết luận

Hướng dẫn này khám phá các nguyên tắc cơ bản khi làm việc với truy vấn con và phép nối truy vấn con trong SQL. Ở phần cuối của hướng dẫn này, bây giờ bạn đã hiểu cách làm việc với phép nối truy vấn con, lý do bạn có thể cần sử dụng chúng và một ví dụ thực tế về cách chúng có thể giúp bạn trong quy trình làm việc của mình.