1. Trang chủ
  2. » Công Nghệ Thông Tin

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

80 315 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 0,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Truy vấn lồng • Các câu lệnh SELECT có thể lồng nhau ở 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

Trang 1

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

Trang 2

Chương III

NGÔN NGỮ SQL NÂNG CAO

Câu truy vấn dữ liệu phức tạp Bảng ảo View

Hàm – thủ tục - trigger Bài tập

Trang 3

– DeAn(tenda, mada, ddiemda, maphong)

– PhanCong(manv, mada, thoigian)

– ThanNhan(manv, tentn, phai, ngaysinh, quanhe)

Trang 4

Truy vấn lồng

• Các câu lệnh SELECT có thể lồng nhau ở 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ị

Trang 6

Truy vấn lồng (tt)

• 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

Trang 7

– Câu truy vấn con sẽ được thực hiện trước, 1 lần

• Lồng tương quan

– Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một thuộc tính của các bảng trong mệnh đề FROM ở truy vấn cha

– Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần, mỗi lần tương ứng với một bộ của truy vấn cha

Trang 8

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

Trang 10

Truy vấn lồng (tt)

– Ví dụ truy vấn lồng tương quan:

SELECT MANV, TENNV

SELECT MANV, TENNV

FROM NHANVIEN, PHONGBAN

WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG

Trang 13

– <tên cột> IN <câu truy vấn con>

– Thuộc tính ở mệnh đề SELECT của truy vấn con phải có cùng kiểu dữ liệu với thuộc tính ở mệnh đề WHERE của truy vấn cha

Trang 14

– COUNT(DISTINCT <tên thuộc tính>) đếm số giá trị khác nhau và khác NULL của thuộc tính

• MIN, MAX, SUM, AVG

Trang 15

– Select sum(luong) as ‘tong luong’,

min(luong) as ‘luong nho nhat’, max(luong) as ‘luong lon nhat’, avg(luong) as ‘luong tb’

From NhanVien

– Cho biết số lượng nhân viên của phòng „Nghien cuu‟

Trang 16

Hàm kết hợp và gom nhóm (tt)

• Gom nhóm:

– Nhóm các bộ có cùng giá trị ở một tập các thuộc tính lại với nhau

– Cú pháp:

SELECT <danh sách các cột>

FROM <danh sách các bảng>

WHERE <điều kiện>

GROUP BY <danh sách các cột gom nhóm>

Trang 18

FROM PHANCONG, NHANVIEN WHERE MANVIEN=MANV

GROUP BY MA_NVIEN, HONV, TENNV

– Cho biết những nhân viên tham gia từ 2 đề án trở lên

Trang 19

WHERE <điều kiện>

GROUP BY <danh sách các cột gom nhóm>

HAVING <điều kiện trên nhóm>

• Ví dụ: Cho biết những nhân viên tham gia

từ 2 đề án trở lên

Trang 21

• Mệnh đề HAVING

– Sử dụng các hàm kết hợp trong mệnh đề SELECT

để kiểm tra một số điều kiện nào đó

– Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện lọc trên từng bộ

– Sau khi gom nhóm điều kiện trên nhóm mới được thực hiện

Hàm kết hợp và gom nhóm (tt)

Trang 22

• Thứ tự thực hiện câu truy vấn có mệnh đề GROUP BY và HAVING

– (1) Chọn ra những dòng thỏa điều kiện trong mệnh

Hàm kết hợp và gom nhóm (tt)

Trang 23

23

01-2014 504009 – Ngôn ngữ SQL nâng cao

Hàm kết hợp và gom nhóm (tt)

• Ví dụ:

– Tìm phòng ban có lương trung bình cao nhất

– Tìm 3 nhân viên có lương cao nhất

– Tìm tên các nhân viên được phân công làm tất

cả các đồ án

Trang 24

Điều kiện kết ở mệnh đề FROM

• Thông thường điều kiện của phép kết nối được chỉ định trong mệnh đề where của câu truy vấn

• Chuẩn SQL2 đưa ra một cách khác để biểu diễn cho phép nối Trong cách biểu diễn này: – Điều kiện của phép kết nối được chỉ định ngay trong mệnh đề From

– Ưu điểm: Cho phép biểu diễn phép nối và điều kiện nối rõ ràng (đặc biệt trong trường hợp phép nối được thực hiện từ 3 bảng trở lên)

Trang 25

25

01-2014 504009 – Ngôn ngữ SQL nâng cao

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối bằng (kết nối trong)

Trang 26

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối bằng (kết nối trong)

- Ví dụ: Hiển thị họ tên và ngày sinh, tên lớp của ds sinh viên lớp „Cong nghe thong tin 01‟

select hoten, ngaysinh, tenlop From SinhVien, LopHoc

Where SinhVien.malop = LopHoc.malop

and tenlop = ‘Cong nghe thong tin 01’

- Hoặc có thể viết:

select hoten, ngaysinh, tenlop From SinhVien INNER JOIN LopHoc ON SinhVien.malop = LopHoc.malop

Where tenlop = ‘Cong nghe thong tin 01’

Trang 27

27

01-2014 504009 – Ngôn ngữ SQL nâng cao

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối ngoài

– Cú pháp:

SELECT <danh sách các cột>

FROM R1 LEFT|RIGHT|FULL [OUTER] JOIN R2

ON <biểu thức> WHERE <điều kiện>

– Ví dụ:

Trang 28

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối ngoài

– Ví dụ: ta có 2 bảng NhanVien và DonVi như sau:

• Khi đó, phép kết nối ngoài trái 2 bảng trên cho kết quả sau:

select *

from NhanVien left join DonVi

Trang 29

29

01-2014 504009 – Ngôn ngữ SQL nâng cao

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối ngoài

– Ví dụ: ta có 2 bảng NhanVien và DonVi như sau:

• Phép kết nối ngoài phải 2 bảng trên cho kết quả sau:

select *

from NhanVien right join DonVi

on NhanVien.madv = DonVi.madv

Trang 30

Điều kiện kết ở mệnh đề FROM (tt)

• Kết nối ngoài

– Ví dụ: ta có 2 bảng NhanVien và DonVi như sau:

• Phép kết nối ngoài đầy đủ 2 bảng trên cho kết quả sau:

select *

from NhanVien full join DonVi

Trang 31

31

01-2014 504009 – Ngôn ngữ SQL nâng cao

Điều kiện kết ở mệnh đề FROM (tt)

Trang 32

Điều kiện kết ở mệnh đề FROM (tt)

• Ví dụ:

– Tìm họ tên các nhân viên và tên các đề án nhân viên tham gia nếu có

Trang 33

– Không được lưu trữ vật lý (bảng ảo)

– Không chứa dữ liệu

– Được định nghĩa từ những bảng khác

– Có thể truy vấn hay cập nhật thông qua khung nhìn

Trang 34

• Số dòng phụ thuộc vào điều kiện ở mệnh đề WHERE

• Dữ liệu được lấy từ các bảng ở mệnh đề FROM

• Xóa bỏ khung nhìn:

DROP VIEW <tên khung nhìn>

Khung nhìn (View)

Trang 35

WHERE PHG=5

• Sử dụng khung nhìn như một bảng

SELECT TENNV FROM NVP5

WHERE luong > 2000

Trang 36

Khung nhìn (View)

• Sinh viên tự tìm hiểu thêm về: Cập nhật, bổ sung và xóa dữ liệu qua view

Trang 37

THỦ TỤC LƯU TRỮ - HÀM -

TRIGGER

37

Trang 38

Biến cục bộ

• Biến là một đối tượng có thể chứa dữ liệu

• Dữ liệu có thể đưa vào các câu lệnh SQL dùng cục bộ

• Tên các biến cục bộ phải bắt đầu bằng @

– Ví dụ:

Trang 40

Biến cục bộ (tt)

• Ví dụ:

– Ta có LĐQH CTDONDH(mavtu, sohd, sldat)

• Để tính ra số lượng đặt hàng cao nhất của mặt hàng

“Đầu DVD Hitachi 1 đĩa” có mã vật tư là “DD01” Sử dụng lệnh SELECT như sau:

DECLARE @MaxSldat INT

SELECT @MaxSldat=MAX(SLDAT)

FROM CTDONDH

WHERE MAVTU=‘DD01’

Trang 41

41

01-2014 504009 – Ngôn ngữ SQL nâng cao

Biến cục bộ (tt)

– Xem giá trị của biến

• PRINT @Tên_biến | Biểu_thức_chuỗi

– Ví dụ: Tính giá trị số lượng đặt hàng thấp nhất

và cao nhất, hiển thị kết quả ra màn hình

DECLARE @MinSldat INT, @MaxSldat INT

Trang 45

45

01-2014 504009 – Ngôn ngữ SQL nâng cao

VÍ dụ

45

Trang 46

Ví dụ (tt)

Viết thủ tục thêm một mặt hàng vào bảng MATHANG

CREATE PROC SP_THEMMATHANG (

INSERT INTO MATHANG VALUES(@MAHANG, @TENHANG,

@MANCC, @SOLUONG, @DVT, @GIAHANG)

END

Trang 48

Thủ tục thêm một mặt hàng vào bảng MATHANG có kiểm tra ràng buộc khóa chính và khóa ngoại với bảng NHACUNGCAP

CREATE PROC SP_THEMMATHANG (

@MAHANG CHAR(2),

@TENHANG NVARCHAR(20),

@MANCC CHAR(3), @SOLUONG INT,

@DVT NVARCHAR(20), @GIAHANG INT)

AS

BEGIN

IF (@MAHANG IN (SELECT MAHANG FROM MATHANG))

PRINT 'MA HANG KHONG HOP LE !' else IF (@MANCC NOT IN(SELECT MANCC FROM NHACUNGCAP))

PRINT 'MA NHA CUNG CAP KHONG HOP LE !' else

INSERT INTO MATHANG VALUES(@MAHANG,

@TENHANG, @MANCC, @SOLUONG, @DVT, @GIAHANG)

Trang 49

49

01-2013 504009 – Ngôn ngữ SQL nâng cao

• Viết thủ tục đếm số lượng bán được của mặt hàng có mã nhập vào từ bàn phím

CREATE PROC SP_THONGKE(

WHERE MAHANG = @MAHANG GROUP BY MAHANG

PRINT 'SO LUONG BAN DUOC CUA MAT HANG CO MA "' +

@MAHANG + '" LA: ' + CONVERT(VARCHAR(10),@SLBAN)

Trang 51

51

01-2014 504009 – Ngôn ngữ SQL nâng cao

• Câu lệnh ALTER PROCEDURE được sử dụng để sửa một thủ tục lưu trữ

• Cú pháp giống như lệnh CREATE PROCEDURE

• Sự thay đổi này vẫn giữ lại các quyền người dùng

Trang 53

53

01-2014 504009 – Ngôn ngữ SQL nâng cao

Hàm (function)

• Là đối tượng CSDL tương tự thủ tục

• Điểm khác biệt giữa hàm và thủ tục:

– Hàm trả về một giá trị thông qua tên hàm còn thủ tục thì không

• Có thể sử dụng hàm như là một thành phần của một biêu thức

• Do HQT CSDL cung cấp sẵn

• Có thể được định nghĩa bởi người sử dụng

53

Trang 55

55

01-2014 504009 – Ngôn ngữ SQL nâng cao

Hàm trả về kiểu bảng

([danh_sách_tham_số]) RETURNS TABLE

55

Trang 58

Hàm trả về kiểu bảng

• Lưu ý:

– Cấu trúc bảng trả về bởi hàm được xác định dựa vào định nghĩa của bảng trong mệnh đề RETURNS

– Biến @<biến_bảng> trong mệnh đề RETURNS có

phạm vi sử dụng trong hàm và được sử dụng như một tên bảng

– Câu lệnh RETURN trong thân hàm không chỉ định giá trị trả về Giá trị trả về của hàm chính là các dòng dữ

liệu trong bảng có tên là @<biếnbảng> được định

nghĩa trong mệnh đề RETURNS

Trang 59

59

01-2013 504009 – Ngôn ngữ SQL nâng cao

Ví dụ: Hàm thống kê số lượng sinh viên của mỗi khoa

CREATE FUNCTION Func_Tongsv(@khoahoc SMALLINT) RETURNS

FROM khoa k, lop lh, sinhvien sv

WHERE k.makhoa = lh.makhoa and lh.malop = sv.malop

Trang 60

Ví dụ (tt)

• Câu lệnh:

SELECT * FROM dbo.func_TongSV(25)

– Sẽ cho kết quả thống kê tổng số sinh viên khoá

25 của mỗi khoa:

Trang 61

– Khóa chính (PRIMARY KEY)

– Khóa ngoại (FOREIGN KEY)

– CHECK

• Nhưng làm thế nào để đảm bảo sĩ số của 1 lớp phải luôn đúng trong CSDL sau :

– SINHVIÊN ( MaSV, TenSV, MaLop)

– LỚP (MaLop, TenLop, SiSo)

Trang 62

Trigger (tt)

• Với loại ràng buộc trên, khi người dùng :

– Thêm 1 sinh viên

– Sửa mã lớp trên bảng SINHVIÊN

– Hay xóa 1 sinh viên

đều ảnh hưởng tới sĩ số của 1 lớp

• Để đảm bảo tính đúng đắn của sĩ số, ta cần

1 loại đối tượng có thể tự động gọi khi người

trên bảng SINHVIÊN

Trang 64

dụ cộng sĩ số thêm 1 nếu thêm 1 sinh viên, trừ

sĩ số đi 1 nếu xóa 1 sinh viên …

Trang 65

65

01-2014 504009 – Ngôn ngữ SQL nâng cao

Ưu/ nhược điểm Trigger

Trang 67

67

01-2014 504009 – Ngôn ngữ SQL nâng cao

Ví dụ Trigger

• Ví dụ cho 2 lđqh sau:

– Sinhvien(masv, tensv, malop)

– Lop(malop, tenlop, siso)

• cập nhật sĩ số lớp khi thêm 1 sinh viên

CREATE TRIGGER trg_CapNhatSiSo

ON SINHVIEN

FOR INSERT

AS

UPDATE LOP

SET LOP.SiSo = LOP.SiSo + 1

FROM LOP INNER JOIN INSERTED

ON LOP.MaLop = INSERTED.MaLop

Trang 68

• Dữ liệu bảng DELETED là các dòng dữ liệu

bị xóa ra khỏi bảng khi chạy câu lệnh DELETE

• Khi chạy lệnh UPDATE, dòng dữ liệu cũ sẽ copy vào DELETED, dòng dữ liệu mới (sau cập nhật) sẽ được copy vào INSERTED

Trang 69

Bảng INSERTED, DELETED

Bảng SINHVIEN trước khi chạy INSERT

INSERT SINHVIEN VALUES (‘02’,’Trung’,

Trang 70

Bảng INSERTED, DELETED

Bảng SINHVIEN trước khi chạy DELETE

DELETE SINHVIEN WHERE MaSV = ‘02’

Trong câu lệnh trigger :

Trang 71

Bảng INSERTED, DELETED

Bảng SINHVIEN trước khi chạy UPDATE

UPDATE SINHVIEN SET TenSV = ‘Thanh’ WHERE MaSV = ‘02’

Trong câu lệnh trigger :

Trang 72

AS UPDATE LOP SET LOP.SiSo = LOP.SiSo + 1 FROM LOP INNER JOIN INSERTED

ON LOP.MaLop = INSERTED.MaLop UPDATE LOP

SET LOP.SiSo = LOP.SiSo – 1 FROM LOP INNER JOIN DELETED

Trang 73

• Cú pháp :

IF UPDATE (Tên_Cột)

đổi

Trang 74

Ví dụ Trigger 3

• Ví dụ cập nhật sĩ số lớp khi cập nhật mã lớp của sinh viên

CREATE TRIGGER trg_CapNhatSinhVienMaLop

SET LOP.SiSo = LOP.SiSo + 1

FROM LOP INNER JOIN INSERTED

ON LOP.MaLop = INSERTED.MaLop

UPDATE LOP

SET LOP.SiSo = LOP.SiSo – 1

FROM LOP INNER JOIN DELETED

ON LOP.MaLop = DELETED.MaLop

Trang 75

75

01-2014 504009 – Ngôn ngữ SQL nâng cao

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 mới

• Nếu muốn xóa trigger, ta dùng :

DROP TRIGGER Tên_Trigger

Trang 76

Hủy sự thay đổi dữ liệu

• Nếu trong trigger ta dùng câu lệnh :

AS

ROLLBACK TRANSACTION

• Kết quả : câu lệnh DELETE sẽ không bao giờ

có hiệu lực

Trang 77

– Nếu nhiều trigger được gán vào 1 bảng, cho cùng

sẽ được kích hoạt (không biết được thứ tự thực hiện)

– Khi viết trigger phải xác định được : trigger viết

?

Trang 78

Bài tập chương III

• Cho lược đồ csdl QLBanHang được mô tả như sau:

Trang 79

79

01-2014 504009 – Ngôn ngữ SQL nâng cao

Bài tập chương III (tt)

– Tạo csdl và tạo các bảng, nhập dữ liệu cho các bảng trong csdl – Cho biết mã và tên của các mặt hàng có giá lớn hơn 10 và số

lượng hiện có ít hơn 20 – Cho biết thông tin những khách hàng nào đã mua mặt hàng áo

Việt Tiến – Cho biết thông tin những mặt hàng nào chưa từng được khách

hàng đặt mua?

– Cho biết tổng số lượng bán được của mỗi 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 và ngày chuyển hàng phải sau hoặc bằng với ngày đặt hàng

– Cho biết thông tin những khách hàng có cùng ngày sinh

– Thống kê số lượng hóa đơn đã lập của mỗi nhân viên

Trang 80

Bài tập chương III (tt)

• Viết trigger thực hiện các công việc sau trên

– Đảm bảo khi chèn thêm một nhân viên hay cập nhật lương của nhân viên thì đảm bảo lương của nhân viên không lớn hơn lương của trưởng phòng đó

– Khi thông tin nhân viên làm việc cho một dự án thay đổi, nếu tổng số giờ làm việc của nhân viên cho các

dự án lớn hơn 40h/tuần hoặc nhỏ hơn 20h/tuần thì hiển thị thông báo

– Khi một nhân viên bị xóa, hãy xóa các thông tin về việc tham gia dự án và các thân nhân của nhân viên

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

HÌNH ẢNH LIÊN QUAN

• Khi  đó,  phép  kết  nối  ngoài  trái  2  bảng  trên  cho  kết  quả sau: - Bài giảng cơ sở dữ liệu  chương III   ths  lương thị ngọc khánh
hi đó, phép kết nối ngoài trái 2 bảng trên cho kết quả sau: (Trang 28)
• Phép  kết  nối  ngoài  đầy  đủ  2  bảng  trên  cho  kết  quả  sau: - Bài giảng cơ sở dữ liệu  chương III   ths  lương thị ngọc khánh
h ép kết nối ngoài đầy đủ 2 bảng trên cho kết quả sau: (Trang 30)
• Cấu  trúc  2  bảng  INSERTED,  DELETED  tương tự cấu trúc bảng mà trigger tác động - Bài giảng cơ sở dữ liệu  chương III   ths  lương thị ngọc khánh
u trúc 2 bảng INSERTED, DELETED tương tự cấu trúc bảng mà trigger tác động (Trang 68)
Bảng SINHVIEN trước khi chạy INSERT - Bài giảng cơ sở dữ liệu  chương III   ths  lương thị ngọc khánh
ng SINHVIEN trước khi chạy INSERT (Trang 69)
Bảng SINHVIEN trước khi chạy DELETE - Bài giảng cơ sở dữ liệu  chương III   ths  lương thị ngọc khánh
ng SINHVIEN trước khi chạy DELETE (Trang 70)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm