Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 51 5.4.10. Siêu tập hợp Rollup và Cube ðể thêm các dòng tóm tắt bổ sung tham khảo như là các siêu tập hợp, sử dụng các tóan tử Rollup và Cube với mệnh ñề Group By Cú pháp: Tóan tử Rollup sinh ra các dòng siêu kết hợp Ví dụ: Select Sodh,Masp, Sum(SLDat) as TongSLDat From Chitietdh Where Sodh in('00001','00002','00003') Group By sodh,masp With RoLLup Sinh ra một dòng ñối với mỗi ñơn hàng cùng với thông tin tổng hợp các dòng với giá trị Null trong MaSP thể hiển tổng số của tất cả các MaSP. Và sinh ra một dòng tổng cộng cho tất cả các ñơn ñặt hàng Tóan tử Cube sinh ra các dòng siêu kết hợp SELECT <DS các cột> FROM <TênTable> WHERE <ðiều kiện> [Group By <DS Các cột gom nhóm> ] [With ROLLUP | CUBE] This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 52 Giống như tóan tử Rollup tóan tử Cube chẳng những sinh ra các giá trị trung bình và tổng cộng ñộng mà còn trả về các dòng tổng bổ sung. Ví dụ: Select Sodh,Masp, Sum(SLDat) as TongSLDat From chitietDH Where Sodh in('00001','00002') Group By Sodh,Masp With Cube 5.5. TƯƠNG QUAN DỮ LIỆU Cách thực hiện kết nối ñể trích dữ liệu từ 1 hoặc nhiều bảng. Các kết quả sẽ xuất hiện như một bảng ñơn với các cột từ tất cả các bảng ñược chỉ ñịnh trong SELECT Column_List và so khớp với ñiều kiện tìm kiếm. Khi sử dụng nhiều Table nguồn chúng ta cần chú ý ñến mối liên kết giữa các Table nguồn. 5.5.1. Khái niệm Loại kết nối - JoinType Inner Join (Liên kết trong bảng A và B) : Khi chọn các thông tin của bảng A hoặc bảng B thì các thông tin ấy bắt buột phải có mặt ñồng thời trong cả 2 bảng A,B Left Join (Liên kết ngoài bên trái của A với B ): Khi chọn thông tin của A: Thông tin ấy mặc nhiên ñược lấy Khi chọn thông tin của B : Thông tin ấy phải có mặt trong A thì mới lấy ñược Right Join: (Liên kết ngoài bên phải của A với B ): Khi chọn thông tin của A: Thông tin ấy phải có mặt trong B thì mới lấy ñược Khi chọn thông tin của B : Thông tin ấy mặc nhiên ñược lấy Full Join (Liên kết ngoài toàn phần): Khi chọn thông tin của A: Thông tin ấy mặc nhiên ñược lấy Khi chọn thông tin của B : Thông tin ấy mặc nhiên ñược lấy Toán tử kết nối- JoinOperator This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 53 Trong SQL Server 2000 có toán tử kết nối = 5.5.2. Cú pháp kết nối Khi thực hiện kết nối các bảng có thể sử dụng 2 cú pháp: Hoặc Ví dụ: Liệt kê kết quả học tập sinh viên khoa “TH” thông tin gồm : Masv, Hosv, Tensv, Phai, Ngaysinh, Makhoa, Mamh, Diem SELECT Sinhvien.masv, Sinhvien.hosv, Sinhvien.tensv, Sinhvien.phai, Sinhvien.ngaysinh, Sinhvien.makhoa, Ketqua.mamh, Ketqua.diem; FROM sinhvien , Ketqua WHERE sinhvien.masv=ketqua.masv and Sinhvien.makhoa = "TH" Hoặc SELECT Sinhvien.masv, Sinhvien.hosv, Sinhvien.tensv, Sinhvien.phai, Sinhvien.ngaysinh, Sinhvien.makhoa, Ketqua.mamh, Ketqua.diem; FROM sinhvien INNER JOIN ketqua ON Sinhvien.masv = Ketqua.masv; WHERE Sinhvien.makhoa = "TH" Ghi chú: Tập kết quả của 2 cú pháp này sẽ giống nhau. Tuy nhiên có một sự khác nhau Ví dụ: Liệt kê các sản phẩm thuộc loại 1 chưa có ñặt hàng Cú pháp 1: Select MaSp, TenSP, QuiCach From SanPham Where MaLoai=1 and MaSP Not In (Select MaSP From ChitietDH) Cú pháp 2: Select MaSp, TenSP, QuiCach From SanPham Left Join ChiTietDH ON SanPham.MaSP=ChiTietDh.MaSP Where MaLoai=1 Nhận xét: ðối với các câu truy vấn thông thường thì sử dụng cú pháp 1 rõ ràng và dễ hiểu hơn SELECT <Tên Table>.<Tên cột> [, . . .] FROM <DS Các Table> WHERE <Tên Table 1>.<Tên cột> <Toán tử> <Tên Table2>.<Tên cột>[, . .] SELECT <Tên Table>.<Tên cột>[, . . .] FROM <Tên Table 1> [Loại kết nối> <Tên Table 2> ON <Tên Table 1>.<Tên cột>=<Tên Table 2>.<Tên cột> [, . . .] WHERE <BT ði ều kiện> This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 54 ðối câu truy vấn liên kết thì cú pháp 2 ngắn gọn hơn. Tuy nhiên nếu câu truy vấn có nhiều bảng thì sẽ phức tạp hơn. Sử dụng cú pháp nào tùy theo người sử dụng. 5.5.3. Làm việc với các truy vấn con Một truy vấn con có thể trả về một cột ñơn hoặc một giá trị ñơn ở bất kỳ nơi ñâu 1 giá trị ñơn có thể sử dụng. Và có thể ñược so sanh bởi các toá tử so sánh. Các từ khoá In và Exist Ví dụ: Liệt kê các sản phẩm Mã loại là 1 có ñặt hàng Cú pháp 1: Select MaSp, TenSP, QuiCach From SanPham Where MaLoai=1 and MaSP In (Select MaSP From ChitietDH) Cú pháp 2: Select MaSp, TenSP, QuiCach From SanPham Where Exists (Select * From ChiTietDh Whrere MaSP=SanPham.MaSP and MaLoai=1) 5.5.4. Tạo Union Query – Query hợp nhất Danh sách vùng chọn phải giống nhau trong các mệnh ñề SELECT Ví dụ: Lliệt kê ds khách mời dự họp tất niên gồm khách hàng và nhân viên Select TenKH AS TenKM, DiaChiKh As DiaChiKM, DienThoaiKh As DienThoaiKM From KhachHang UNION Select Trim(HoNV)+” “+ Trim(TenNV) , DiaChiNV, DienThoaiNV From NhanVien 5.5.5. Select Into Phát biểu Select InTo cho phép tạo kết quả mới dựa trên kết quả truy vấn. Bảng mới ñược tạo dựa trên các cột xác ñịnh trong danh sách chọn lựa. Cú pháp: SELECT <DS Các cột> FROM <DS Các Table> [WHERE <ðiều kiện>] UNION SELECT <DS Các cột> FROM <DS Các Table> [WHERE <ðiều kiện>] UNION . . . . This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 55 Ví dụ: Select * Into TempKhachHang rom KhachHang Có 2 loại bảng: Bảng thường trực : Sử dụng Select InTo ñịnh nghĩa một bảng và ñưa dữ liệu vào trong ñó Bảng tạm thời : Các bảng này sẽ nằm trong CSDL TempDb Ví dụ: Select * Into #TempKhachHang From KhachHang Ghi chú : Nếu muốn thêm các dòng vào một bảng ñã có ta sử dụng INSERT Hoặc INSERT INTO Ví dụ: INSERT TempKhachHang Select * From KhachHang Select <DS Các cột> Into <Tên Table> From <DS Các Table> [Where <ðiều kiện>] This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 56 Chương 06 VIEW – KHUNG NHÌN Mục tiêu Giới thiệu Tạo View Xoá View ðiều chỉnh View 6.1. GIỚI THIỆU View là phương tiện cho phép ta lưu 1 câu truy vấn thành một ñối tượng trong CSDL sau khi tạo xong ta có thể làm việc với View tương tư như làm việc với Table. Tuy nhiên View chỉ là khung nhìn, dữ liệu thực sự chì chứa trong Table mà thôi. Các View có lợi ích như sau: ðiều khiển người sử dụng vào xem dữ liệu khả năng này hữu ích về an tòan và dễ sử dụng. Người dùng không thể xem dữ liệu mà họ không yêu cầu ðơn giản giao diện người sử dụng bằng cách tạo View cho các câu truy vấn thường sử dụng Các View là ñối tượng rất mạnh và hữu dụng trong thiết kế CSDL là phuơng pháp ưa thích trong vấn ñề chia sẽ thông tin 6.2. TẠO VIEW – BẢNG NHÌN 6.2.1. Sử Dụng Enterprise Manager Tạo View Tại cửa sổ EnterPriseManager chọn mục View Click phải bên cửa sổ phải chọn New View Các thao tác tại cửa sổ Design View Thêm các Table/View vào cửa sổ thiết kế : Chọn AddTable Lọai bớt các Table/View khỏi cửa sổ thiết kế : Chọn Table/ Delete(Nhấn Delete) Thiết lập quan hệ khi cần thiết Chức năng thanh công cụ Chức năng Lưu View Thực thi View Cửa sổ xác ñịnh các thuộc tính Xóa 1 ñối tượng ñược chọn An hiện khung chứa các bảng Cập nhật lại dữ liệu This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 57 An hiện khung lưới chọn lựa thông tin Lọc dữ liệu An hiện khung chứa lệnh SQL Tạo View dạng Group By An hiện khung chứa kết quả Thêm mới Table Các thành phần tại lưới thiết kế View Column : Các cột chọn Alias : Bí danh tên mới cho cột Table : Tên Table chứa cột chọn Output : Hiện hay không hiện cột dữ liệu ñã chọn Sort Type : Chọn lọai sắp xết dữ liệu kết quả Sort Order : Trật tự ưu tiên sắp xếp Criteria : ðiều kiện Or : ðiều kiện hoặc Ví dụ: Tạo View liệt kê các ñơn ñặt hàng trong tháng hiện tại thông tin gồm : (SoDH, NgayDat, NgayGiao, MaKH, TenKH, MaSP, TenSP, DonGia, SLDat, ThanhTien) Biết : ThanhTien=SLDat x DonGia 6.2.2. Sử Dụng SQL Analyzer Tạo View Tại cửa sổ Query Analyzer thực hiện các câu lệnh theo cú pháp This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 58 Ví dụ 1: CREATE VIEW VIEW02 As SELECT D.SoDH, D.NgayDat, D.NgayGiao, K.MaKH, K.TenKH, C.MaSp, S.TenSP, S.DonGia, C.SLDat, C.SLDat*S.DonGia As ThanhTien FROM ChiTietDH C INNER JOIN DonDatHang D ON C.SoDH = D.SoDH INNER JOIN KhachHang K ON D.MaKH = K.MaKH INNER JOIN SanPham S ON C.MaSp = S.MaSP WHERE MONTH(D.NgayDat) = MONTH(GETDATE()) AND YEAR(D.NgayDat) = YEAR(GETDATE()) ORDER BY D.SoDH, D.NgayDat DESC Ví dụ 2: CREAT VIEW SanPhamGiaCao AS SELECT * FROM SanPham WHERE DonGia > 1000000 Ví dụ 3: CREAT VIEW ThongKe (MaLoai, SoSP) AS SELECT MaLoai,Count(*) FROM SanPham GROUP BY MaLoai 6.3. XÓA VIEW 6.3.1 Sử dụng công cụ Enterprise Manager Tại cửa sổ EnterPrise Manager chọn tên View cần xóa Chọn Delete (Hoặc nhấn Delete) Chọn Drop All 6.3.2 Sử dụng công cụ Query Analyzer CREATE VIEW <TênView> [(Cột 1[, . . .)] AS Select . . . . From . . . . This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 59 Tại cửa sổ QueryAnalyzer thực hiện câu lệnh theo cú pháp Ví dụ: Drop View View02 6.4 ðIỀU CHỈNH VIEW 6.4.1 Sử dụng công cụ Enterprise Manager Tại cửa sổ EnterPrise Manager chọn tên View cần ñiều chỉnh Chọn Action/Design View (Hoặc Click phải chọn Design View) 6.4.2 Sử dụng công cụ Query Analyzer Tại cửa sổ QueryAnalyzer thực hiện câu lệnh theo cú pháp Ví dụ 1: ALTER VIEW NVLuongCao AS SELECT * FROM NhanVien WHERE Luong > 2000000 ALTER VIEW <Tên View>[(Column1[, . . .)] AS Select . . . . From . . . DROP VIEW <TênView> This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 60 Chương 07 STORED PROCEDURE - THỦ TỤC LƯU TRỮ Mục tiêu Giới thiệu Tạo Stored Procedure sử dụng ngôn ngữ SQL Tạo Stored Procedure sử dụng Enterprise Manager 7.1. GIỚI THIỆU Stored Procedure là tập các phát biểu SQL lưu trữ trên Server. Là phương pháp hiệu quả cho phép thực hiện lại các phát biểu ñó. Bao gồm: Các nhóm phát biểu và gọi các thủ tục khác Chấp nhận tham số truyền vào SQL hộ trợ 5 loại Stored Procedure + System :Nằm trong CSDL Master dùng cho các công việc Quản trị hệ thống + Temporary : Nằm trong CSDL Tempdb và tự ñộng bị xóa + User_Define : Tạo trong CSDL người dùng + Remote: ðược gọi từ Server từ xa hoặc các client kết nối với Server từ xa + Extended: Dữ LIệUL bên ngoài môi truờng SQL ñược hiểu như Stored Procedure mở rộng 7.2. TẠO STORED PROCEDURE SỬ DỤNG NGÔN NGỮ SQL 7.2.1. Tạo mới Stored Procedure Ví dụ 1: CREATE PROCEDURE NhanVienLuong AS Select * From NhanVien Where LuongCB>300000 Ví dụ 2: CREATE PROC NhanVien @MaNV Char(2) CREATE PROC [ EDURE ] <Tên thủ tục> [ @<Tham số> <Kiểu DL>] [ , n ] AS <Các câu lệnhSQL> This is trial version www.adultpdf.com . chọn An hiện khung chứa các bảng Cập nhật lại dữ liệu This is trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net. trial version www.adultpdf.com Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 53 Trong SQL Server 2000 có toán tử kết nối = 5.5.2 Bài Giảng Hệ Quản Trị Cơ Sở Dữ Liệu SQLServer 2000 Biên soạn: Dương Thành Phết – http://www.thayphet.net Trang 51