Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
4,03 MB
Nội dung
Chương 3: Transact-SQL GVPT: NGUYỄN THỊ MỸ DUNG SỐ TC: SỐ TIẾT: LT: 20; TH: 20 Biên soạn: Nguyễn Thị Mỹ Dung Chương 1: Tổng quan SQL Server (LT: 2) Chương 2: Tạo quản trị CSDL (LT: 6; TH: 6) Chương 3: Transact-SQL truy vấn liệu (LT: 6: TH: 8) Chương 4: Lập trình với Transact-SQL (LT: 4: TH: 4) Chương 5: Bảo Mật Phân Quyền (LT: 2; TH: 2) Chương 6: Kết nối CSDL (Tự học) Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER Chương 3: Transact-SQL I Ngôn ngữ xử lý liệu (DML - Data Manipulation Language): thêm, sửa, xóa II Tìm kiếm bảng III Tìm kiếm nhiều bảng IV Truy vấn lồng V Sắp xếp VI Nhóm liệu thống kê Bài tập chương Biên soạn: Nguyễn Thị Mỹ Dung Thêm liệu vào bảng Dạng 1: Thêm dịng liệu INSERT INTO [(ds_thuộc_tính)] VALUES (, , …, ) Dạng 2: Thêm nhiều dòng liệu INSERT INTO [(ds_thuộc_tính)] SELECT , …, FROM [WHERE ] Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER Chương 3: Transact-SQL Ví dụ 1: INSERT INTO SV_DT (Masv, MaDT, KQ) VALUES (‘SV001’, ‘DT08’, 8) Ví dụ 2: Thêm liệu sinh viên SV005 thực tất đề tài INSERT INTO SV_DT SELECT ‘SV005’,MADT, N‘Đồng Tháp’, FROM DETAI Biên soạn: Nguyễn Thị Mỹ Dung Nhận xét: - Thứ tự giá trị phải trùng với thứ tự cột, - Có thể thêm giá trị NULL thuộc tính khơng khóa NOT NULL, - Các giá trị thuộc tính khóa khơng trùng, - Câu lệnh INSERT gặp lỗi vi phạm RBTV (Khóa chính, tham chiếu, trùng tên,…), thuộc tính có ràng buộc NOT NULL bắt buộc phải có giá trị Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER Chương 3: Transact-SQL Cập nhật (Sửa) liệu UPDATE SET = ,…, = , [FROM ] [WHERE ] Ví dụ 2: 1: UPDATE UPDATE DE_TAI SINHVIEN SET SET KINHPHI HOCLUC = KINHPHI = 6.2, NAMSINH +2 = 1991 WHERE MASV = ‘SV006’ Biên soạn: Nguyễn Thị Mỹ Dung Xóa liệu bảng Dạng 1: Xóa số từ bảng DELETE FROM Nếu đk có bảng khác [FROM FROM ] [WHERE ] Dạng 2: Xóa tất từ bảng TRUNCATE TABLE VD1: Xóa mơn học 20 tiết DELETE FROM MON WHERE SOTIET < 20 Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER Chương 3: Transact-SQL VD2: Xóa bảng điểm sinh viên khoa Tin học có điểm bé DELETE FROM KETQUA FROM SINHVIEN S INNER JOIN KHOA K O N S.MAKH = K.MAKH WHERE S.MASV = KETQUA.MASV AND TENKH LIKE N'TIN HỌC' AND DIEM = VD3: Xóa tất kết sinh viên TRUNCATE TABLE KETQUA Biên soạn: Nguyễn Thị Mỹ Dung VD4: Xóa tất sinh viên chưa tham gia học tập môn học DELETE FROM SINHVIEN WHERE MASV NOT IN (SELECT MASV FROM SV_DT) Lưu ý: - Câu lệnh Delete xóa tất liệu bảng FROM gần nhất - Nếu có nhiều FROM câu lệnh Delete Bảng FROM gần Delete khơng đặt bí danh danh Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 10 Chương 3: Transact-SQL Nhận xét: - Các lệnh UPDATE, DELETE gây vi phạm RBTV (khơng cho sửa, xóa, xóa ln dịng liệu tham chiếu liệu tham chiếu Null) - Điều kiện mệnh đề WHERE thực cho dịng thỏa điều kiện, khơng có mệnh đề WHERE tồn bảng có ảnh hưởng - Tránh vi phạm RBTV xóa, nên xóa liệu bảng nhiều trước, sau xóa bảng Biên soạn: Nguyễn Thị Mỹ Dung 11 Select khơng có điều kiện SELECT * | FROM Ví dụ 1: In thông tin chi tiết tất sviên SELECT * FROM sinhvien Ví dụ 2: In mã số, họ tên tất sinh viên SELECT masv, hoten FROM sinhvien Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 12 Chương 3: Transact-SQL 2/ Select có điều kiện SELECT * | FROM WHERE [;] [HAVING ] Ví dụ: In mã số, họ tên tất sinh viên từ 21 tuổi trở lên SELECT MASV, HOTEN, NAMSINH FROM SINHVIEN WHERE (YEAR(GETDATE())-NAMSINH)>21 Biên soạn: Nguyễn Thị Mỹ Dung 13 Select với Distinct | All - Distinct: loại bỏ phần tử trùng - ALL: lấy tất kể phần tử trùng SELECT DISTINCT | All FROM [WHERE ]; VD1: in mã đề tài sinh viên thực SELECTALL MADT FROM SV_DT VD2: in mã đề tài có nơi áp dụng ‘Dong Thap’ SELECT DISTINCT MADT FROM SV_DT WHERE NOIA_D = 'DONG THAP' Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 14 Chương 3: Transact-SQL Ghi chú: - Mệnh đề WHERE kết hợp với toán tử: AND, OR: kết hợp nhiều điều kiện [NOT] LIKE: so sánh chuỗi BETWEEN …AND…: so sánh khoảng IS [NOT] NULL: tìm (khơng) rỗng [NOT] IN: tìm trong/ ngồi danh sách - Các ký tự so sánh đại diện chuỗi: ‘%’ (nhiều ký tự), ‘_’ (một ký tự) - Khi so sánh ký tự có dấu, đặt ‘N N’ trước chuỗi so sánh: N‘chuỗi’ Biên soạn: Nguyễn Thị Mỹ Dung 15 Select nhiều bảng SELECT * | FROM [bídanh1] [bídanh2] ON [WHERE[AND|OR] Trong : INNER JOIN: kết (thường sử dụng) LEFT [OUTER] JOIN: kết trái RIGHT [OUTER] JOIN: kết phải FULL [OUTER] JOIN: kết đầy đủ CROSS JOIN JOIN:: kết liên bảng cho phép kết tất có (tương tự phép kết tích đề đề các), khơng cần điều kiện kết nối nào Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 16 Chương 3: Transact-SQL Ví dụ 1: Tìm họ tên sinh viên thực tên đề tài, kết từ trở lên Cách 1: SELECT HOTENSV, TENDT,KETQUA FROM SINHVIEN S,DETAI D, SV_DT SD WHERE S.MASV = SD.MASV AND SD.MADT= D.MADT AND KETQUA >= 9; Cách 2: SELECT HOTENSV, TENDT,KETQUA FROM ((SINHVIEN S INNER JOIN SV_DT SD ON S.MASV = SD.MASV) INNER JOIN DETAI D ON SD.MADT = D.MADT) WHERE KETQUA >= 9; Biên soạn: Nguyễn Thị Mỹ Dung 17 Ví dụ 2: Tìm họ tên tất sinh viên thực đề tài (có thể có sinh viên không thực đề tài) gồm, họ tên sinh viên, mã đề tài, kết SELECT HOTENSV, MADT, KETQUA FROM SINHVIEN S LEFT JOIN SV_DT SD ON S.MASV = SD.MASV Hoặc: SELECT HOTENSV, MADT, KETQUA FROM SINHVIEN S FULL JOIN SV_DT SD ON S.MASV = SD.MASV Ghi chú:: SV thực phép kết Right Join Join,, Inner Join,, Cross Join để so sánh kết hiển thị SQL Join Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 18 Chương 3: Transact-SQL SELECT với INTO INTO tạo bảng với thuộc tính chọn từ SELECT… FROM… SELECT , , INTO FROM [WHERE ] VD: Tạo bảng SV với thông tin MaSV, HotenSV, hocluc từ bảng SINHVIEN ketqua thực đề tài từ bảng SV_DT SELECT MASV, HOTENSV, HOCLUC, KQ INTO SV FROM SINHVIEN S INNER JOIN SV_DT SD ON S.MASV = SD.MASV Biên soạn: Nguyễn Thị Mỹ Dung Các phép toán tập hợp Union [ALL]() SELECT FROM [WHERE ] UNION SELECT FROM [WHERE ] Ví dụ: Tìm tất họ tên chủ nhiệm sinh viên USE QLDETAISV SELECT CHUNHIEM FROM DE_TAI UNION SELECT HOTENSV FROM SINHVIEN Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 19 20 10 Chương 3: Transact-SQL Intersect [ALL] () SELECT FROM [WHERE ] INTERSECT Ví dụ: Tìm MASV có quê quán với nơi áp dụng đề tài USE QLDETAISV SELECT MASV, QUEQUAN SELECT FROM SINHVIEN FROM INTERSECT [WHERE (SELECT AVG(DIEM) FROM KETQUA) Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 28 14 Chương 3: Transact-SQL Thực phép chia với truy vấn lồng Sử dụng toán tử NOT EXISTS để thực hiện: Cú pháp: SELECT * FROM R WHERE NOT EXISTS (SELECT * FROM S WHERE NOT EXISTS (SELECT * FROM R_S WHERE R_S.C1 = S.C1 AND R_S.C2 = R.C2)) Biên soạn: Nguyễn Thị Mỹ Dung 29 Ví dụ: Tìm thơng tin sinh viên thực tất đề tài SELECT * FROM SINHVIEN WHERE NOT EXISTS (SELECT * FROM DETAI WHERE NOT EXISTS (SELECT * FROM SV_DT WHERE SV_DT.MADT = DETAI.MADT AND SV_DT.MASV = SINHVIEN.MASV)) Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 30 15 Chương 3: Transact-SQL Cho phép xếp dòng kết câu truy vấn theo thứ tự tăng dần (hoặc giảm dần) dựa nhiều trường làm tiêu chí Cú pháp: SELECT FROM [WHERE ] [GROUP BY ] ORDER BY ASC|DESC ASC: giá trị mặc nhiên, xếp kết theo thứ tự tăng dần DESC: xếp kết theo thứ tự giảm dần Biên soạn: Nguyễn Thị Mỹ Dung 31 Ví dụ: In thơng tin gồm mã số, họ tên kết tương ứng sinh viên thực đề tài có nơi áp dụng Đồng Tháp Danh sách thứ tự giảm dần theo kết thực SELECT Sinhvien.MaSV, Hoten, KQ FROM Sinhvien INNER JOIN SV_DT ON Sinhvien.MaSV = SV_DT.MaSV WHERE NoiA_D = N‘Đồng Tháp’ ORDER BY KQ DESC Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 32 16 Chương 3: Transact-SQL Sử dụng ORDER BY với TOP Mệnh đề TOP dùng để hạn chế số truy vấn Cú pháp: SELECT TOP FROM WHERE ORDER BY ASC|DESC Ví dụ: Tìm đề tài có kinh phí cao nhì SELECT TOP MADT FROM SV_DT ORDER BY kinhphi DESC Biên soạn: Nguyễn Thị Mỹ Dung 33 Sử dụng ORDER BY với hàm RANK() Hàm RANK() dùng để xếp hạng theo ORDER BY Cú pháp: SELECT RANK() OVER (ORDER BY [ASC | DESC]) AS , FROM [WHERE ] Ví dụ: Xếp hạng sinh viên theo kết thực đề tài từ cao đến thấp SELECT RANK() OVER (ORDER BY KQ DESC) AS XEPHANG, HOTENSV, KQ FROM SINHVIEN S INNER JOIN SV_DT SD ON S.MASV = SD.MASV Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 34 17 Chương 3: Transact-SQL Sử dụng ORDER BY với hàm ROW_NUMBER() Hàm ROW_NUMBER() dùng để đánh số thứ tự dòng theo ORDER BY Cú pháp: SELECT ROW_NUMBER() OVER (ORDER BY (SELECT )) AS , FROM [WHERE ] Ví dụ: Thêm cột số thứ tự cho truy vấn SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS STT, HOTENSV, KQ FROM SINHVIEN S INNER JOIN SV_DT SD ON S.MASV = SD.MASV Biên soạn: Nguyễn Thị Mỹ Dung 35 Thống kê với hàm kết tập Cú pháp: SELECT [,] FROM [WHERE ] [GROUP BY ] [HAVING ] Các hàm kết tập bao gồm: SUM, MAX, MIN, AVG COUNT Đặt lại tên trường: Trong số trường hợp tên trường kết truy vấn không phù hợp ta cần đặt lại tên trường Cú pháp: AS Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 36 18 Chương 3: Transact-SQL Cách sử dụng hàm: a Hàm SUM (): Trả tổng giá trị tất dòng trường kiểu số Ví dụ: Tính tổng kinh phí tất đề tài SELECT SUM (Kinhphi) as Tong_KP FROM Detai; b Hàm MAX (): Trả giá trị lớn tất dịng trường Ví dụ: Tìm kinh phí lớn tất đề tài SELECT MAX(Kinhphi) AS KP_MAX FROM Detai Biên soạn: Nguyễn Thị Mỹ Dung 37 c Hàm MIN (): Trả giá trị nhỏ tất dịng trường Ví dụ: Tìm kinh phí nhỏ tất đề tài SELECT MIN(Kinhphi) AS KP_MIN FROM Detai d Hàm AVG (): Trả giá trị trung bình cộng tất dịng trường kiểu số Ví dụ: Tính trung bình cộng kinh phí tất đề tài SELECT AVG(Kinhphi) AS TBC_KP FROM Detai Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 38 19 Chương 3: Transact-SQL e Hàm COUNT (): Đếm dòng bảng theo trường Ví dụ 1: In số lượng đề tài mà thầy Lê Đức Phúc làm chủ nhiệm SELECT COUNT(MaDT) AS So_DT FROM Detai WHERE Chunhiem = ‘Lê Đức Phúc’ Ví dụ 2: In họ tên giáo viên chủ nhiệm từ đề tài trở lên SELECT Chunhiem, COUNT(MaDT) AS SoLG FROM Detai GROUP BY Chunhiem HAVING COUNT(MaDT) >= Biên soạn: Nguyễn Thị Mỹ Dung 39 Gom nhóm sử dụng Compute, Compute By Các mệnh đề Compute Compute By sinh dịng chi tiết dịng tổng Compute By sử dụng giống Group By Thứ tự Compute By giống thứ tự Order By Cú pháp: SELECT , FROM WHERE [ORDER BY ] [COMPUTE ] [BY ] Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 40 20 Chương 3: Transact-SQL VD1: Liệt kê bảng điểm chi tiết sinh viên cho biết điểm trung bình lớp SELECT S.MASV, (HOSV+' '+TENSV) AS HTSV, DIEM FROM SINHVIEN S INNER JOIN KETQUA K ON S.MASV = K.MASV COMPUTE AVG(DIEM) VD 2: Liệt kê bảng điểm chi tiết sinh viên cho biết điểm trung bình sinh viên SELECT S.MASV, (HOSV+' '+TENSV) AS HTSV, DIEM FROM SINHVIEN S INNER JOIN KETQUA K ON S.MASV = K.MASV ORDER BY S.MASV COMPUTE AVG(DIEM) BY S.MASV Biên soạn: Nguyễn Thị Mỹ Dung 41 Gom nhóm tổng hợp với Rollup, Cube Để thêm dòng thống kê nhóm, thêm tốn tử Rollup Cube với mệnh đề Group by Cú pháp: SELECT FROM [WHERE ] [GROUP BY ] [WITH ROLLUP | CUBE] Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 42 21 Chương 3: Transact-SQL VD 1: Liệt kê bảng điểm chi tiết sinh viên cho biết điểm trung bình sinh viên SELECT S.MASV, (HOSV+' '+TENSV) AS HOTENSV, MAMH, AVG(DIEM) AS ĐTB FROM SINHVIEN S INNER JOIN KETQUA K ON S.MASV = K.MASV GROUP BY S.MASV, HOSV, TENSV, MAMH WITH ROLLUP VD2: SV thực yêu cầu VD1 với câu lệnh với CUBE để so sánh kết thực Biên soạn: Nguyễn Thị Mỹ Dung 43 - Ngôn ngữ xử lý liệu (Insert, Update, Delete) - Truy vấn liệu nhiều bảng (select … from… where…) - Truy vấn liệu tập hợp (UNION UNION, INTERSECT, EXCEPT INTERSECT EXCEPT), truy vấn lồng - Truy vấn sử dụng hàm kết tập (SUM, MAX, MIN, AVG, COUNT) - Truy vấn xếp liệu (ORDER BY, TOP, RANK, ROW_NUMBER,…) - Truy vấn thống kê nhóm (GROUP BY, ROLLUP, CUBE, COMPUTE, COMPUTE BY) Biên soạn: Nguyễn Thị Mỹ Dung BG_SQL_SERVER 44 22 ... phải có giá trị Biên soạn: Nguyễn Thị Mỹ Dung BG _SQL_ SERVER Chương 3: Transact -SQL Cập nhật (Sửa) liệu UPDATE SET = ,…, = ,... Join Join,, Inner Join,, Cross Join để so sánh kết hiển thị SQL Join Biên soạn: Nguyễn Thị Mỹ Dung BG _SQL_ SERVER 18 Chương 3: Transact -SQL SELECT với INTO INTO tạo bảng với thuộc tính chọn từ... (SELECT s.c FROM s) Cách3 Cách 3: SELECT * FROM r WHERE NOT EXISTS (SELECT * FROM s WHERE s.c=r.c) Biên soạn: Nguyễn Thị Mỹ Dung BG _SQL_ SERVER 24 12 Chương 3: Transact -SQL Truy vấn câu lệnh SELECT