Bài giảng cơ sở dữ liệu chương III ths lương thị ngọc khánh

80 313 0
Bài giảng cơ sở dữ liệu  chương III   ths  lương thị ngọc khánh

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CƠ SỞ DỮ LIỆU GV: ThS Lương Thị Ngọc Khánh Email: ltnkhanh@it.tdt.edu.vn Web: it.tdt.edu.vn/~ltnkhanh Chƣơng III NGÔN NGỮ SQL NÂNG CAO Câu truy vấn liệu phức tạp Bảng ảo View Hàm – thủ tục - trigger Bài tập Cơ sở liệu ví dụ • CSDL Quản lý đề án: – NhanVien(manv, honv, tenlot, tennv, ngaysinh, diachi, phai, luong, manql, maphong) – PhongBan(maphong, tenphong, trphong, ngnhanchuc) – DDPhong(maphong, diadiem) – DeAn(tenda, mada, ddiemda, maphong) – PhanCong(manv, mada, thoigian) – ThanNhan(manv, tentn, phai, ngaysinh, quanhe) 01-2014 504009 – Ngôn ngữ SQL nâng cao Truy vấn lồng • Các câu lệnh SELECT lồng nhiều mức • Các câu truy vấn mệnh đề WHERE kết hợp phép nối logic • Câu truy vấn thường trả tập giá trị 01-2014 504009 – Ngôn ngữ SQL nâng cao Truy vấn lồng (tt) • Cú pháp: SELECT FROM WHERE ( SELECT FROM WHERE ) 01-2014 504009 – Ngôn ngữ SQL nâng cao Truy vấn lồng (tt) • Mệnh đề WHERE câu truy vấn cha – – So sánh tập hợp thường với số toán tử • IN, NOT IN • ALL • ANY SOME – Kiểm tra tồn • EXISTS • NOT EXISTS 01-2014 504009 – Ngôn ngữ SQL nâng cao Truy vấn lồng (tt) – Có loại truy vấn lồng: • Lồng phân cấp – Mệnh đề WHERE truy vấn khơng tham chiếu đến thuộc tính bảng mệnh đề FROM truy vấn cha – Câu truy vấn thực trước, lần • Lồng tương quan – Mệnh đề WHERE truy vấn tham chiếu thuộc tính bảng mệnh đề FROM truy vấn cha – Khi thực hiện, câu truy vấn thực nhiều lần, lần tương ứng với truy vấn cha 01-2014 504009 – Ngôn ngữ SQL nâng cao Truy vấn lồng (tt) – Ví dụ truy vấn lồng phân cấp: SELECT MANV, TENNV FROM NHANVIEN, DDPhong WHERE DIADIEM = ‘TP HCM’ AND phong = maphong – Tương đương với câu truy vấn lồng sau: SELECT MANV, TENNV FROM NHANVIEN WHERE PHONG IN (SELECT MAPHONG FROM DDPHONG WHERE DIADIEM = ‘TP HCM’ ) 01-2014 504009 – Ngôn ngữ SQL nâng cao Truy vấn lồng (tt) • Ví dụ: Tìm nhân viên khơng có thân nhân 01-2014 504009 – Ngơn ngữ SQL nâng cao Truy vấn lồng (tt) – Ví dụ truy vấn lồng tương quan: SELECT MANV, TENNV FROM NHANVIEN WHERE EXISTS ( SELECT * FROM PHONGBAN WHERE TENPHONG=‘Nghien PHONG=MAPHONG) cuu’ AND  Câu truy vấn cho kết gì? Tương đương với câu truy vấn đơn giản nào? SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG 01-2014 504009 – Ngôn ngữ Ths Lƣơng Thị Ngọc Khánh – Khoa CNTT - ĐH TĐT SQL nâng cao 10 Cú pháp Trigger • Cú pháp: CREATE TRIGGER Tên_Trigger ON Tên_Bảng FOR { [ INSERT ] [,] [ UPDATE ] [,] [ DELETE ]} AS Các câu lệnh Trigger Ví dụ SELECT, WHILE, IF … 01-2014 504009 – Ngôn ngữ SQL nâng cao 66 Ví dụ Trigger • Ví dụ cho lđqh sau: – Sinhvien(masv, tensv, malop) – Lop(malop, tenlop, siso) • cập nhật sĩ số lớp thêm sinh viên CREATE TRIGGER trg_CapNhatSiSo ON SINHVIEN FOR INSERT AS UPDATE LOP SET LOP.SiSo = LOP.SiSo + FROM LOP INNER JOIN INSERTED ON LOP.MaLop = INSERTED.MaLop 01-2014 504009 – Ngôn ngữ SQL nâng cao 67 Bảng INSERTED, DELETED • Cấu trúc bảng INSERTED, DELETED tương tự cấu trúc bảng mà trigger tác động • Dữ liệu bảng INSERTED dòng liệu chèn vào bảng chạy câu lệnh INSERT • Dữ liệu bảng DELETED dịng liệu bị xóa khỏi bảng chạy câu lệnh DELETE • Khi chạy lệnh UPDATE, dịng liệu cũ copy vào DELETED, dòng liệu (sau cập nhật) copy vào INSERTED 01-2014 504009 – Ngôn ngữ SQL nâng cao 68 Bảng INSERTED, DELETED Bảng SINHVIEN trước chạy INSERT 01 Kiệt 07TH1C INSERT SINHVIEN VALUES (‘02’,’Trung’, ’07TH1C’) Trong câu lệnh trigger : Bảng INSERTED gồm 02 Trung 07TH1C Bảng DELETED rỗng Bảng SINHVIÊN 01 Kiệt 07TH1C 02 Trung 07TH1C Bảng INSERTED, DELETED Bảng SINHVIEN trước chạy DELETE 01 Kiệt 07TH1C 02 Trung 07TH1C DELETE SINHVIEN WHERE MaSV = ‘02’ Trong câu lệnh trigger : Bảng INSERTED rỗng Bảng DELETED 02 Trung 07TH1C Bảng SINHVIÊN 01 Kiệt 07TH1C Bảng INSERTED, DELETED Bảng SINHVIEN trước chạy UPDATE 01 Kiệt 07TH1C 02 Trung 07TH1C UPDATE SINHVIEN SET TenSV = ‘Thanh’ WHERE MaSV = ‘02’ Trong câu lệnh trigger : Bảng INSERTED 02 07TH1C Thanh Bảng DELETED rỗng 02 07TH1C Trung Bảng SINHVIÊN 01 Kiệt 07TH1C 02 Thanh 07TH1C Ví dụ Trigger • Ví dụ cập nhật sĩ số lớp thêm sinh viên, xóa sinh viên CREATE TRIGGER trg_CapNhatSiSo ON SINHVIEN FOR INSERT , DELETE AS UPDATE LOP SET LOP.SiSo = LOP.SiSo + FROM LOP INNER JOIN INSERTED ON LOP.MaLop = INSERTED.MaLop UPDATE LOP SET LOP.SiSo = LOP.SiSo – FROM LOP INNER JOIN DELETED ON LOP.MaLop = DELETED.MaLop 01-2014 504009 – Ngôn ngữ SQL nâng cao 72 Sử dụng IF UPDATE • Trong trigger ta sử dụng câu lệnh IF UPDATE để phát việc thay đổi cột • Cú pháp : IF UPDATE (Tên_Cột) Câu lệnh SQL cột tương ứng thay đổi 01-2014 504009 – Ngôn ngữ SQL nâng cao 73 Ví dụ Trigger • Ví dụ cập nhật sĩ số lớp cập nhật mã lớp sinh viên CREATE TRIGGER trg_CapNhatSinhVienMaLop ON SINHVIEN FOR UPDATE AS IF UPDATE (MaLop) BEGIN UPDATE LOP SET LOP.SiSo = LOP.SiSo + FROM LOP INNER JOIN INSERTED ON LOP.MaLop = INSERTED.MaLop UPDATE LOP SET LOP.SiSo = LOP.SiSo – FROM LOP INNER JOIN DELETED ON LOP.MaLop = DELETED.MaLop END 01-2014 504009 – Ngôn ngữ SQL nâng cao 74 Thay đổi Trigger • Nếu muốn thay đổi Trigger ta dùng câu lệnh ALTER TRIGGER Tên_Trigger ON Tên_Bảng FOR Câu_Lệnh AS Câu lệnh • Nếu muốn xóa trigger, ta dùng : DROP TRIGGER Tên_Trigger 01-2014 504009 – Ngôn ngữ SQL nâng cao 75 Hủy thay đổi liệu • Nếu trigger ta dùng câu lệnh : – ROLLBACK TRANSACTION • Thì hành động thay đổi liệu khơng thực • Ví dụ : CREATE TRIGGER trg_KhongDelete ON SINHVIEN FOR DELETE AS ROLLBACK TRANSACTION • Kết : câu lệnh DELETE khơng có hiệu lực 01-2014 504009 – Ngôn ngữ SQL nâng cao 76 Một số lưu ý trigger – Trigger giống thủ tục, thủ tục phải gọi chạy tay, trigger gọi tự động – Trigger không truyền tham số – Nếu nhiều trigger gán vào bảng, cho hành động thay đổi liệu tất trigger kích hoạt (không biết thứ tự thực hiện) – Khi viết trigger phải xác định : trigger viết cho bảng ? Cho câu lệnh (INSERT, UPDATE hay DELETE) ? Nội dung trigger ? 01-2014 504009 – Ngôn ngữ SQL nâng cao 77 Bài tập chương III • Cho lược đồ csdl QLBanHang mơ tả sau: 01-2014 504009 – Ngôn ngữ SQL nâng cao 78 Bài tập chương III (tt) • Thực yêu cầu sau SQL – – – – – – – – 01-2014 Tạo csdl tạo bảng, nhập liệu cho bảng csdl Cho biết mã tên mặt hàng có giá lớn 10 số lượng có 20 Cho biết thông tin khách hàng mua mặt hàng áo Việt Tiến Cho biết thông tin mặt hàng chưa khách hàng đặt mua? Cho biết tổng số lượng bán mặt hàng Bổ sung ràng buộc cho bảng DONDATHANG rang buộc kiểm tra ngày giao hàng ngày chuyển hàng phải sau với ngày đặt hàng Cho biết thông tin khách hàng có ngày sinh Thống kê số lượng hóa đơn lập nhân viên 504009 – Ngôn ngữ SQL nâng cao 79 Bài tập chương III (tt) • Viết trigger thực cơng việc sau csdl quản lý đề án: – Đảm bảo chèn thêm nhân viên hay cập nhật lương nhân viên đảm bảo lương nhân viên khơng lớn lương trưởng phịng – Khi thông tin nhân viên làm việc cho dự án thay đổi, tổng số làm việc nhân viên cho dự án lớn 40h/tuần nhỏ 20h/tuần hiển thị thơng báo – Khi nhân viên bị xóa, xóa thơng tin việc tham gia dự án thân nhân nhân viên 01-2014 504009 – Ngơn ngữ SQL nâng cao 80 ... ngữ Ths Lƣơng Thị Ngọc Khánh – Khoa CNTT - ĐH TĐT SQL nâng cao 10 Truy vấn lồng (tt) • Tìm nhân viên có người thân tên giới tính với nhân viên 01-2014 504009 – Ngôn ngữ Ths Lƣơng Thị Ngọc Khánh. .. lồng (tt) • Tìm nhân viên có lương lớn lương nhân viên phịng • Tìm nhân viên có lương lớn lương tất nhân viên phòng 01-2014 504009 – Ngôn ngữ Ths Lƣơng Thị Ngọc Khánh – Khoa CNTT - ĐH TĐT SQL...Chƣơng III NGÔN NGỮ SQL NÂNG CAO Câu truy vấn liệu phức tạp Bảng ảo View Hàm – thủ tục - trigger Bài tập Cơ sở liệu ví dụ • CSDL Quản lý đề án: – NhanVien(manv,

Ngày đăng: 03/12/2015, 01:03

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan