Truy vấn lồng là những câu lệnh mà trong thành phần WHERE có chứa thêm một câu lệnh SELECT khác nữa. Câu lệnh này thường gặp khi dữ liệu cần thiết phải duyệt qua nhiều lần. Đây là một trong những vấn đề khó khăn nhất khi thực hiện truy vẫn dữ liệu.

- Các câu lệnh SELECT có thể lồng nhiều mức.

- Các câu truy vấn con trong cùng một mệnh đề WHERE được kết hợp bằng phép nối logic.

- Câu truy vấn con thường trả về một tập các giá trị.

- Mệnh đề WHERE của câu truy vấn cha:

      + <Biểu thức> <So sánh tập hợp> <Truy vấn con>

      + So sánh tập hợp thường đi cùng với một số toán tử: IN, NOT IN, ALL, ANY hoặc SOME

      + Kiểm tra sự tồn tại: EXISTS, NOT EXISTS

Có hai loại truy vấn lồng:

+ Lồng phân cấp: Mệnh đề WHERE của câu truy vấn con không tham chiếu đến thuộc tính các mối quan hệ trong mệnh đề FROM ở câu truy vấn cha. Khi thực hiện, câu truy vấn con sẽ được thực hiện trước.

+ Lồng tương quan: Mệnh đề WHERE của câu truy vấn con tham chiếu ít nhất một thuộc tính của các quan hệ trong mệnh đề FROM ở câu truy vấn cha.

Cú pháp:

SELECT DANH_SACH_COT
FROM DANH_SACH_QUAN_HE
WHERE <SO_SANH, TAP_HOP> (
    SELECT DANH_SACH_COT
    FROM DANH_SACH_QUAN_HE
    WHERE DIEU_KIEN
)

Ví dụ minh họa

Để thuận tiện cho các bạn học tập, mình có tạo sẵn file .sql trong này đã mình tạo cấu trúc bảng và data sẵn để các bạn dễ dàng thực hiện truy vấn, các bạn có thể tải tại đây.

Ví dụ 1: Tìm họ và tên của các nhân viên trực thuộc các phòng ban ở địa bàn TP HCM

Hướng dẫn giải:

Bước 1: Tìm tất cả các phòng có địa điểm TP HCM

SELECT MAPHG
FROM DIADIEM_PHG
WHERE DIADIEM = 'TP HCM'

Bước 2: Tìm nhân viên trực thuộc các phòng trong bước 1

SELECT HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE PHG IN (
    SELECT MAPHG
    FROM DIADIEM_PHG
    WHERE DIADIEM = 'TP HCM'
)

Kết quả:

Ví dụ 2: Tìm họ và tên của các nhân viên không tham gia vào đề án 10

Hướng dẫn giải:

Bước 1: Tìm tất cả các nhân viên tham gia vào đề án 10

SELECT MA_NVIEN
FROM PHANCONG
WHERE SODA = 10

Bước 2: Tìm nhân viên không thuộc danh sách trong bước 1

SELECT HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE MANV NOT IN (
    SELECT MA_NVIEN
    FROM PHANCONG
    WHERE SODA = 10
)

Kết quả:

Ví dụ 3: Tìm nhân viên có lương lớn hơn lương ít nhất một nhân viên phòng 4

Cách 1: Viết câu truy vấn dạng lồng phân cấp

Hướng dẫn giải:

Bước 1: Tìm lương của tất cả nhân viên phòng 4

SELECT LUONG
FROM NHANVIEN
WHERE PHG = 4

Bước 2: Tìm nhân viên có mức lương lớn hơn ít nhất một mức lương trong bước 1

SELECT HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE LUONG > ANY (
    SELECT LUONG
    FROM NHANVIEN
    WHERE PHG = 4
)

Kết quả:

Cách 2: Viết truy vấn dạng lồng tương quan

Hướng dẫn giải:

SELECT HONV, TENLOT, TENNV
FROM NHANVIEN NV1
WHERE EXISTS (
    SELECT HONV, TENLOT, TENNV
    FROM NHANVIEN NV2
    WHERE NV2.PHG = 4 AND NV1.LUONG > NV2.LUONG
)

Kết quả:

Ví dụ 4: Tìm nhân viên có lương lớn hơn lương của tất cả nhân viên phòng 4

Hướng dẫn giải:

Bước 1: Tìm lương tất cả nhân viên phòng 4

SELECT LUONG
FROM NHANVIEN
WHERE PHG = 4

Bước 2: Tìm nhân viên có mức lương lớn hơn tất cả các mức lương trong bước 1

SELECT HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE LUONG > ALL (
    SELECT LUONG
    FROM NHANVIEN
    WHERE PHG = 4
)

Kết quả:

CÓ THỂ BẠN QUAN TÂM

Lập trình T SQL

Lập trình T SQL

T-SQL (Transact SQL) là ngôn ngữ lập trình cơ sở dữ liệu thủ tục độc quyền của Microsoft dành cho SQL Server. Chúng cũng được sử dụng để viết các thủ tục được lưu trữ, là một đoạn mã nằm trên máy chủ...

SQL Server - Constraints

SQL Server - Constraints

Trong một CSDL, luôn luôn tồn tại rất nhiều mối liên hệ ảnh hưởng qua lại lẫn nhau giữa các thuộc tính của một quan hệ, giữa các bộ giá trị trong một quan hệ và giữa các thuộc tính của các bộ giá trị...

SQL Server - Table

SQL Server - Table

Trong cơ sở dữ liệu, để tạo và quản trị các bảng dữ liệu, người dùng cần phải trả lời các câu hỏi sau: + Bảng dùng để lưu trữ những thông tin gì? Nên đặt tên bảng mang tính chất gợi nhớ tương ứng v...

SQL Server - Mệnh đề HAVING

SQL Server - Mệnh đề HAVING

Chức năng: xuất ra kết quả là các dữ liệu thỏa mãn các điều kiện theo từng nhóm quy định trong GROUP BY.

SQL Server - Backup / Restore Database

SQL Server - Backup / Restore Database

Mục đích của việc sao lưu và phục hồi dữ liệu Sao lưu và phục hồi dữ liệu là vấn đề rất quan trọng khi quản trị cơ sở dữ liệu. Hoạt động này đảm bảo cho dữ liệu khi xảy ra sự cố, ta có thể khôi phục...

SQL Server - User Defined Function

SQL Server - User Defined Function

Khái niệm User Defined Function là những hàm do người dùng tự định nghĩa để đáp ứng một mục tiêu nào đó. Một số hạn chế so với thủ tục là các tham số truyền vào không được mang thuộc tính OUTPUT, ng...

SQL Server - Mệnh đề GROUP BY

SQL Server - Mệnh đề GROUP BY

Chức năng: gom nhóm các dòng dữ liệu theo tiêu chí gom nhóm đặt trong mệnh đề GROUP BY nhằm hỗ trợ và phục vụ các mục đích của câu truy vấn.

SQL Server - Stored Procedure

SQL Server - Stored Procedure

Khái niệm Stored Procedure - SP (thủ tục) là một tập các lệnh T -SQL và một số cấu trúc điều khiển, được lưu với một tên và được thực thi như một đơn vị công việc (Single unit of work) . Một thủ tục...

SQL Server - Lệnh UPDATE

SQL Server - Lệnh UPDATE

Chức năng: cho phép người dùng cập nhật giá trị các thuộc tính trên các dòng của bảng dữ liệu có sẵn trong cơ sở dữ liệu.

ManhDanBlogs