Truy vấn con: chỉ là một câu lệnh truy vấn lựa chọn (SELECT) được lồng vào các câu lệnh truy vấn khác nhằm thực hiện các truy vấn tính toán phức tạp. Khi sử dụng đến truy vấn con chúng ta cần lưu tâm đến một vài yếu tốsau:
Nguyễn ThịThúy Loan Trang 130 2/12/2011
Các câu lệnh truy vấn dữ liệu
o Cần mởvà đóng ngoặc đơn cho câu lệnh truy vấn con.
o Chúng ta chỉ được phép tham chiếu đến tên một cột hoặc một biểu thức sẽ trả về giá trị trong truy vấn con.
o Kết quả truy vấn con có thể trả về là một giá trị đơn lẻhoặc một danh sách các giá trị.
o Cấp độ lồng nhau của các truy vấn con bên trong SQL Server là không giới hạn.
Nguyễn ThịThúy Loan Trang 131 2/12/2011
Các câu lệnh truy vấn dữ liệu
Truy vấn con trảvềmột giá trịđơn:là truy vấn mà kết qủa trả về của nó luôn đảm bảo chỉ là một giá trịđơn.
Ví dụ: đểbiết được sinh viên nào có ngày sinh gần đây nhất.
SELECT MAX(NGSINH)
FROM SV
Kết quảtrảvề: 1990-07-21 00:00:00.000
Nguyễn ThịThúy Loan Trang 132 2/12/2011
Các câu lệnh truy vấn dữ liệu
Select * From SV
Where Ngsinh = '07-21-1990'
Kết hợp 2 câu truy vấn trên
SELECT *
FROM SV
WHERE Ngsinh = (SELECT MAX(Ngsinh)
Nguyễn ThịThúy Loan Trang 133 2/12/2011
Các câu lệnh truy vấn dữ liệu
Truy vấn con trả về danh sách các giá trị: kết quả trả về của nó là danh sách các giá trị hay còn gọi là một tập hợp các phần tử. Toán tửIN sẽ được sử dụng để so sánh truy vấn con dạng này.
Nguyễn ThịThúy Loan Trang 134 2/12/2011
Các câu lệnh truy vấn dữ liệu
Ví dụ 1: để biết nhà cung cấp nào mà công ty
đã đặt hàng trong tháng 01/2009. SELECT MaNCC
FROM DONDH
WHERE Convert(char(7), NgayDH, 21) = “2009-01” Kết quảtrảvề MaNCC C03, C01 Các câu lệnh truy vấn dữ liệu Hoặc:
SELECT TenNCC, DienThoai FROM NHACC
WHERE MaNCC IN(‘C01’, ‘C03’)
Các câu lệnh truy vấn dữ liệu
Đâu đảm bảo rằng trong tháng 01/2009 công ty chỉ đặt hàng cho 2 nhà cung cấp C01 và C03. Do đó để luôn luôn có được danh sách họ tên các nhà cung cấp mà công ty đã đặt hàng trong tháng 01-2009 chúng ta thực hiện truy vấn con sau:
Nguyễn ThịThúy Loan Trang 137 2/12/2011
Các câu lệnh truy vấn dữ liệu
SELECT TenNCC, DienThoai FROM NHACC
WHERE MaNCC IN (SELECT MaNCC
FROM DONDH
WHERE Convert(char(7), NgayDH, 21) = ‘2009-01’ )
Nguyễn ThịThúy Loan Trang 138 2/12/2011
Các câu lệnh truy vấn dữ liệu
Hoặc dùng EXISTS
SELECT TenNCC, DienThoai FROM NHACC
WHERE EXISTS (SELECT *
FROM DONDH
WHERE Convert(char(7), NgayDH, 21) = ‘2009-01’
AND NHACC.MaNCC = DONDH.MaNCC)
Nguyễn ThịThúy Loan Trang 139 2/12/2011
Các câu lệnh truy vấn dữ liệu
Ví dụ 2: Để biết danh sách các nhà cung cấp nào mà công ty chưa bao giờ đặt hàng. Chúng ta có thểthực hiện câu truy vấn như sau:
SELECT TenNhaCC, DienThoai
FROM NHACC
WHERE MaNCC NOT IN
(SELECT Distinct MaNCC
FROM DONDH)
Nguyễn ThịThúy Loan Trang 140 2/12/2011
Các câu lệnh truy vấn dữ liệu
Hoặc
SELECT TenNhaCC, DienThoai
FROM NHACC
WHERE MaNCC <> ALL (SELECT Distinct MaNCC
FROM DONDH)
Lưu ý: IN tương đương =ANY NOT IN tương đương <>ALL
Nguyễn ThịThúy Loan Trang 141 2/12/2011
Lệnh INSERT
Cách 1: Thêm trực tiếp một bộ
INSERT INTObảng[<cột 1>, <cột 2>,…, cột n]
VALUES(<giá trị1>, <giá trị2>,…, <giá trịn>)
Ví dụ: Thêm dữliệu vào SV
SV (MaSV, TenSV, NgSinh, Malop)
Nguyễn ThịThúy Loan Trang 142 2/12/2011
Lệnh INSERT
Insert into SV values('004', 'Tran Thi Ha', '05- 26-1990', '08CDTH')
Hay
Insert into SV(MaSV, TenSV, NgSinh, Malop) values('004', 'Tran Thi Ha', '05-26-1990', '08CDTH')
Lệnh INSERT
Cách 2: Thêm nhiều bộ giá trị lấy từ các bộ
giá trịcủa các bảng của CSDL
INSERT INTO bảng[<cột 1>, <cột 2>,…, <cột n>]
SELECT … FROM …. WHERE
Lệnh INSERT
Ví dụ:
LOP_SV( TenLop, SiSo)
INSERT INTO LOP_SV( TenLop, SiSo) SELECT TenLop, count(*)
FROM SV, LOP
WHERE SV.MaLop=LOP.MaLop GROUP BY TenLop
Nguyễn ThịThúy Loan Trang 145 2/12/2011 Lệnh UPDATE Cú pháp: UPDATE<tên bảng> SET <cột 1> = <giá trị1>, <cột 2> = <giá trị2>, ………, <cột n> = <giá trịn> [WHERE <điều kiện>]
Nguyễn ThịThúy Loan Trang 146 2/12/2011
Lệnh UPDATE
Ví dụ: Sửa sinh viên Dư Thanh Linh ở lớp 11CDTH thành 11CDKT
Nguyễn ThịThúy Loan Trang 147 2/12/2011
Lệnh DELETE
Cú pháp:
DELETE [FROM] Bảng [WHERE <điều kiện>]
Ví dụ: Xóa tất cảcác nhân viên có LCB < 700
Nguyễn ThịThúy Loan Trang 148 2/12/2011