SQL Server - Truy Vấn Lồng | ManhDan Blogs
Có thể bạn quan tâm
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 = 10Bướ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 = 4Bướ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 = 4Bướ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ả:

Từ khóa » Câu Lệnh Truy Vấn Sql Server
-
13 Câu Lệnh SQL Quan Trọng Programmer Nào Cũng Cần Biết
-
Tổng Hợp Những Câu Lệnh SQL Cơ Bản - TopDev
-
Bài 3: Câu Lệnh Truy Vấn Dữ Liệu Trong SQL - Tìm ở đây
-
Truy Vấn Cơ Bản Trong SQL Server | How Kteam
-
Các Truy Vấn Cơ Bản Trong SQL Server - Comdy
-
Sửa Các Câu Lệnh SQL để Tinh Chỉnh Kết Quả Truy Vấn
-
TRUY VẤN SQL NÂNG CAO (PHẦN 1) - NIIT - ICT Hà Nội
-
Top 26 Câu Lệnh Sql Mà Các Lập Trình Viên Và Nhà Data Nào Cũng Cần ...
-
Hướng Dẫn Học SQL Cho Người Mới Bắt đầu Với SQL Server
-
Tối ưu Hóa Câu Lệnh SQL - Viblo
-
Thứ Tự Thực Hiện Cho Câu Lệnh SQL - Viblo
-
Bài 11: Truy Vấn Dữ Liệu Trong SQL Server (Phần 2) - VnCoder
-
Bài 10: Truy Vấn Dữ Liệu Trong SQL Server (Phần 1) - VnCoder
-
(ADO.NET) SqlCommand Truy Vấn Và Cập Nhật Dữ Liệu C# SQL Server