Nội dung chính của Giáo trình Mô hình client/server trên SQL server (Nghề Lập trình máy tính): Phần 2 được biên soạn nhằm cung cấp cho bạn những kiến thức về lập trình trên SQL server và kết nối ứng dụng với cơ sở dữ liệu. Mời các bạn tham khảo!
BÀI LẬP TRÌNH TRÊN SQL SERVER MÃ BÀI: ITPRG3-17.6 Giới thiệu: Hệ quản trị sở liệu SQL Server cung cấp cho ta công cụ mạnh cho phép người quản trị lập trình quản lý liệu SQL nhờ ngôn ngữ SQL, người ta gọi ngơn ngữ truy vấn có cấu trúc Việc lập trình SQL Server cho phép thực cơng việc có hiệu hơn, chẳng hạn ràng buộc chặc chẽ toàn vẹn hơn, thao tác bảo mật hơn, … Mục tiêu thực hiện: Học xong học viên có khả năng: - Sử dụng câu lệnh SQL Analysis - Sử dụng tập tin batch - Sử dụng thủ tục lưu trữ lập trình ứng dụng - Tạo Trigger cho bảng sở liệu Nội dung: 6.1 Các câu lệnh SQL Server 6.2 Tập tin batch 6.3 Stored Procedure 6.4 Trigger 62 6.1 Các câu lệnh SQL Server 6.1.1 Truy xuất liệu với câu lệnh SELECT Câu lệnh SELECT sử dụng để truy xuất liệu từ dòng cột hay nhiều bảng, khung nhìn Câu lệnh dùng để thực phép chọn (tức truy xuất tập dòng hay nhiều bảng), phép chiếu (tức truy xuất tập cột hay nhiều bảng) phép nối (tức liên kết dòng hai hay nhiều bảng để truy xuất liệu) Ngồi ra, câu lệnh cịn cung cấp khả thực thao tác truy vấn thống kê liệu phức tạp khác Cú pháp chung câu lệnh SELECT có dạng: SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn [INTO tên_bảng_mới] FROM danh_sách_bảng/khung_nhìn [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] [ORDER BY cột_sắp_xếp] [COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]] 1) Mệnh đề FROM Mệnh đề FROM câu lệnh SELECT sử dung nhằm định bảng khung nhìn cần truy xuất liệu Sau FROM danh sách tên bảng khung nhìn tham gia vào truy vấn, tên bảng khung nhìn phân cách dấu phẩy Ví dụ 2.2: Câu lệnh hiển thị danh sách khoa trường SELECT * FROM khoa 2) Danh sách chọn câu lệnh SELECT Danh sách chọn câu lệnh SELECT sử dụng để định trường, biểu thức cần hiển thị cột kết truy vấn Các trường, biểu thức định sau từ khoá SELECT phân cách dấu phẩy a Chọn tất cột bảng 63 Ví dụ: Câu lệnh SELECT * FROM lop b Tên cột danh sách chọn Ví dụ: Câu lệnh SELECT malop,tenlop,namnhaphoc,khoa FROM lop Lưu ý: Nếu truy vấn thực nhiều bảng/khung nhìn bảng/khung nhìn có trường trùng tên tên trường xuất danh sách chọn phải viết dạng: tên_bảng.tên_trường Ví dụ: SELECT malop, tenlop, lop.makhoa, tenkhoa FROM lop, khoa WHERE lop.malop = khoa.makhoa c Thay đổi tiêu đề cột Ta sử dụng cách viết: tiêu_đề_cột = tên_trường hoặc: tên_trường AS tiêu_đề_cột hoặc: tên_trường tiêu_đề_cột Ví dụ: Câu lệnh đây: SELECT 'Mã lớp'= malop,tenlop 'Tên lớp',khoa AS 'Khoá' FROM lop d Sử dụng cấu trúc CASE danh sách chọn Cấu trúc có cú pháp sau: CASE biểu_thức WHEN biểu_thức_kiểm_tra THEN kết_quả [ ] [ELSE kết_quả_của_else] END hoặc: CASE WHEN điều_kiện THEN kết_quả 64 [ ] [ELSE kết_quả_của_else] END Ví dụ: Để hiển thị mã, họ tên giới tính (nam nữ) sinh viên, ta sử dụng câu lệnh SELECT masv,hodem,ten, CASE gioitinh WHEN THEN 'Nam' ELSE 'Nữ' END AS gioitinh FROM sinhvien hoặc: SELECT masv,hodem,ten, CASE WHEN gioitinh=1 THEN 'Nam' ELSE 'Nữ' END AS gioitinh FROM sinhvien Kết hai câu lệnh e Hằng biểu thức danh sách chọn Ví dụ: câu lệnh cho biết tên số tiết môn học SELECT tenmonhoc,sodvht*15 AS sotiet FROM monhoc Nếu danh sách chọn có xuất giá trị giá trị xuât cột kết truy vấn tất dịng Ví dụ: Câu lệnh SELECT tenmonhoc,'Số tiết: ',sodvht*15 AS sotiet FROM monhoc f Loại bỏ dòng liệu trùng kết truy vấn Ta định thêm từ khóa DISTINCT sau từ khố SELECT Ví dụ: Hai câu lệnh SELECT khoa FROM lop 65 và: SELECT DISTINCT khoa FROM lop g Giới hạn số lượng dòng kết truy vấn Ta định thêm mệnh đề TOP trước danh sách chọn câu lệnh SELECT Ví dụ: Câu lệnh hiển thị họ tên ngày sinh sinh viên danh sách: SELECT TOP hodem,ten,ngaysinh FROM sinhvien Ngoài cách định cụ số lượng dòng cần hiển thị kết truy vấn, ta định số lượng dòng cần hiển thị theo tỷ lệ phần trăm cách sử dụng thêm từ khoá PERCENT ví dụ Ví dụ: Câu lệnh hiển thị họ tên ngày sinh 10% số lượng sinh viên có bảng SINHVIEN SELECT TOP 10 PERCENT hodem,ten,ngaysinh FROM sinhvien 3) Chỉ định điều kiện truy vấn liệu Mệnh đề WHERE câu lệnh SELECT sử dụng nhằm xác định điều kiện việc truy xuất liệu Sau mệnh đề WHERE biểu thức logic dòng liệu thoả mãn điều kiện định hiển thị kết truy vấn * Trong mệnh đề WHERE thường sử dụng: + Các toán tử kết hợp điều kiện (AND, OR) + Các toán tử so sánh + Kiểm tra giới hạn liệu (BETWEEN/ NOT BETWEEN)o Danh sách + Kiểm tra khuôn dạng liệu + Các giá trị NULL a Các toán tử so sánh Toán tử ý nghĩa = Bằng > Lớn 66 < Nhỏ >= Lớn Không lớn !< Không nhỏ b Kiểm tra giới hạn liệu Để kiểm tra xem giá trị liệu nằm (ngoài) khoảng đó, ta sử dụng tốn tử BETWEEN (NOT BETWEEN) sau: Cách sử dụng Ý nghĩa giá_trị BETWEEN a AND b a ≤ giá_trị ≤ b giá_trị NOT BETWEEN a AND b (giá_trị < a) AND (giá_trị>b) Ví dụ: Câu lệnh cho biết họ tên tuổi sinh viên có tên Bình có tuổi nằm khoảng từ 20 đến 22 SELECT hodem,ten,year(getdate())-year(ngaysinh) AS tuoi FROM sinhvien WHERE ten='Bình' AND YEAR(GETDATE())-YEAR(ngaysinh) BETWEEN 20 AND 22 c Danh sách (IN NOT IN) Ví dụ: Để biết danh sách mơn học có số đơn vị học trình 2, 5, thay sử dụng câu lệnh SELECT * FROM monhoc WHERE sodvht=2 OR sodvht=4 OR sodvht=5 ta sử dụng câu lệnh SELECT * FROM monhoc WHERE sodvht IN (2,4,5) d Toán tử LIKE ký tự đại diện 67 Từ khoá LIKE (NOT LIKE) sử dụng câu lệnh SELECT nhằm mô tả khuôn dạng liệu cần tìm kiếm Chúng thường kết hợp với ký tự đại diện sau đây: % :Chuỗi ký tự gồm không nhiều ký tự _ : Ký tự đơn [] Ký tự đơn giới hạn định (ví dụ [a-f]) hay tập (ví dụ [abcdef]) [^] Ký tự đơn không nằm giới hạn định ( ví dụ [^a-f] hay tập (ví dụ [^abcdef]) Ví dụ: Câu lệnh SELECT hodem,ten FROM sinhvien WHERE hodem LIKE 'Lê%' Câu lệnh: SELECT hodem,ten FROM sinhvien WHERE hodem LIKE 'Lê%' AND ten LIKE '[AB]%' e Giá trị NULL: giá trị đặc biệt SQL Server dùng để giá trị liệu không chứa 4) Tạo bảng liệu từ kết câu lệnh SELECT Câu lệnh SELECT INTO có tác dụng tạo bảng có cấu trúc liệu xác định từ kết truy vấn Bảng tạo có số cột số cột định danh sách chọn số dòng số dòng kết truy vấn Ví dụ: SELECT hodem,ten,YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi INTO tuoisv FROM sinhvien Lưu ý: Nếu danh sách chọn có biểu thức biểu thức phải đặt tiêu đề 5) Sắp xếp kết truy vấn Câu lệnh ví dụ viết lại sau: SELECT hodem,ten,gioitinh, 68 YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi FROM sinhvien WHERE ten='Bình' ORDER BY 3, 6) Phép hợp Cú pháp sau: Câu_lệnh_1 UNION [ALL] Câu_lệnh_2 [UNION [ALL] Câu_lệnh_3] [UNION [ALL] Câu_lệnh_n] [ORDER BY cột_sắp_xếp] [COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]] Trong Câu_lệnh_1 có dạng SELECT danh_sách_cột [INTO tên_bảng_mới] [FROM danh_sách_bảng|khung_nhìn] [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] Câu_lệnh_i (i = 2, ,n) có dạng SELECT danh_sách_cột [FROM danh_sách_bảng|khung_nhìn] [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] 7) Phép nối Khi cần thực yêu cầu truy vấn liệu từ hai hay nhiều bảng, ta phải sử dụng đến phép nối Một câu lệnh nối kết hợp dòng liệu bảng khác lại theo nhiều điều kiện hiển thị chúng kết truy vấn Xét hai bảng sau đây: 69 Bảng KHOA Bảng LOP o Chọn dịng bảng KHOA có tên khoa Khoa Cơng nghệ Thơng tin, từ xác định mã khoa (MAKHOA) DHT02 o Tìm kiếm bảng LOP dịng có giá trị trường MAKHOA DHT02 (tức MAKHOA tương ứng bảng KHOA) đưa dòng vào kết truy vấn Như vậy, để thực yêu cầu truy vấn liệu trên, ta phải thực phép nối hai bảng KHOA LOP với điều kiện nối MAKHOA KHOA với MAKHOA LOP a) Sử dụng phép nối Ví dụ: Câu lệnh hiển thị danh sách sinh viên với thông tin: mã sinh viên, họ tên, mã lớp, tên lớp tên khoa SELECT masv,hodem,ten,sinhvien malop, tenlop, tenkhoa FROM sinhvien,lop,khoa WHERE sinhvien.malop = lop.malop AND lop.makhoa=khoa.makhoa b) Các loại phép nối Phép nối phép nối tự nhiên Ví dụ: Câu lệnh thực phép nối hai bảng LOP KHOA SELECT * FROM lop,khoa WHERE lop.makhoa=khoa.makhoa Ví dụ: Để thực phép nối tự nhiên, câu lệnh ví dụ viết lại sau SELECT malop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE lop.makhoa=khoa.makhoa viết dạng ngắn gọn hơn: SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa 70 WHERE lop.makhoa=khoa.makhoa 8) Thống kê liệu với GROUP BY Ngoài khả thực yêu cầu truy vấn liệu thông thường (chiếu, chọn, nối,…) đề cập phần trước, câu lệnh SELECT cho phép thực thao tác truy vấn tính tốn thống kê liệu như: cho biết tổng số tiết dạy giáo viên, điểm trung bình mơn học sinh viên,… Mệnh đề GROUP BY sử dụng câu lệnh SELECT nhằm phân hoạch dòng liệu bảng thành nhóm liệu, nhóm liệu thực tính tốn giá trị thống kê tính tổng, tính giá trị trung bình, Các hàm gộp sử dụng để tính giá trị thống kê cho tồn bảng nhóm liệu Chúng sử dụng cột danh sách chọn câu lệnh SELECT xuất mệnh đề HAVING, không phép xuất mệnh đề WHERE SQL cung cấp hàm gộp đây: Hàm gộp Chức SUM([ALL | DISTINCT] biểu_thức) Tính tổng giá trị AVG([ALL | DISTINCT] biểu_thức) Tính trung bình giá trị COUNT([ALL | DISTINCT] biểu_thức) Đếm số giá trị biểu thức COUNT(*) Đếm số dịng chọn MAX(biểu_thức) Tính giá trị lớn MIN(biểu_thức) Tính giá trị nhỏ Trong đó: o Hàm SUM AVG làm việc với biểu thức số o Hàm SUM, AVG, COUNT, MIN MAX bỏ qua giá trị NULL tính tốn o Hàm COUNT(*) khơng bỏ qua giá trị NULL Ví dụ: Để thống kê trung bình điểm lần tất môn học, ta sử dụng câu lệnh sau: SELECT AVG(diemlan1) FROM diemthi câu lệnh cho biết tuổi lớn nhất, tuổi nhỏ độ tuổi trung bình tất 71 Response.write(“rs.Fields(“NgaySinh”) & “– ”) Response.write(“rs.Fields(“Luong”) & “”) rs.MoveNext Loop rs.Close set rs = nothing %> Chú ý: Ở ví dụ trên, đoạn lệnh VB Script đặt cặp dấu 7.3 Data Environment Trong phần tìm hiểu cách sử dụng mơi trường liệu (Data Environment) để xây dựng ứng dụng Visual Basic 6.0 kết nối đến sở liệu SQL, hệ quản trị sở liệu khác có cách làm tương tự Trước tiên, chắn thiết kế sở liệu QuanLyNhanVien Các bước thực sau cho phép sử dụng đối tượng Textbox để điều khiển ghi bảng NHANVIEN sở liệu: Trong môi trường Visual Basic, vào menu Prọect Add Data Environment: Hình 7.1:Add Data Environment 110 đối tượng Data Environment bổ sung vào có tên DataEnvironment1 dối tượng Connection có tên Connection1 tạo sẵn hình sau: Hình 7.2: Data Environment Để với tên mặc định thay đổi cách nhắp chuột phải lên đối tượng Rename để đổi tên lại bạn muốn Tạo kết nối cho đối tượng Connection1 cách nhắp chuột phải lện tên Connection1 Properties, cửa sổ xuất hiện: Hình 7.3:Properties 111 Ở chung ta muốn kết nối tới sở liệu SQL Server nên chọn chuỗi kết nối Microsoft OLE DB Provider for SQL Server hình trên, lưu ý sử dụng sở liệu khác dùng chuỗi kết nối khác danh sách tương ứng Nhấn Next để tiếp tục chọn tên sở liệu hình đây: Hình 7.4:Connection and select database - Nếu muốn hạn chế quyền truy cập chọn vào tab Advanced thiết lập hình đây: 112 Hình 7.5: Advanced access permissions Nhấn OK để hồn tất Nhắp chuột phải lên tên đối tượng Connection1 Add Command để bổ sung vào đối tượng Command1: Hình 7.6:Add Command 113 Hình 7.7:Command Tiếp theo, nhắp chuột phải lên tên đối tượng Command1 Properties: Hình 7.8:Properties Một cửa sổ sau ra: 114 Hình 7.9:General command properties Đặt tên cho lệnh, giả sử đặt tên NHANVIEN, Source of Data, chọn Database Object Table, chọn Object Name NHANVIEN hình sau: Hình 7.10:Object Name Nhấn OK để hoàn tất, thấy xuất bảng NHANVIEN môi trường liệu sau: 115 Hình 7.11:bảng mơi trường liệu Kết gán trường cho trường liệu vào Form cách nhắp chuột vào trường tương ứng thả vị Form: Hình 7.12:Tạo Form Sau hồn tất, nhấn F5 để chạy thử chương trình, thấy chương trình hiển thị sau: 116 Hình 7.13: chương trình hiển thi Quả đơn giản, hiển thị liệu bảng nhân viên, thay đổi thơng tin liệu cập nhật sở liệu Và dĩ nhiên thay đổi ghi hành, ví dụ ghi đầu tiên, muốn di chuyển đến ghi khác dùng phương thức MoveNext, MovePrevious,… đối tượng Recordset DataEnvironment1: Private Sub cmdLui_Click() DataEnvironment1.rsNHANVIEN.MovePrevious End Sub Private Sub cmdToi_Click() DataEnvironment1.rsNHANVIEN.MoveNext End Sub Lưu ý, đoạn lệnh sử dụng đối tượng Recordset mặc định tên rsNHANVIEN để trỏ đến bảng NHANVIEN môi trường tự động sinh Đoạn lệnh thủ tục kiện hai nút lệnh Lui Tới 117 7.4 OLE_DB Phần lớn nhà lập trình khơng tương tác trực tiếp với OLE DB Thay vào họ lập trình với đối tượng ADO, nhiên cần phải biết mơ hình đối tượng cung cấp giao diện với OLE DB Chúng ta tham khảo ba mơ hình sau để có nhìn sâu OLE DB: Client Workstation Client Application Remote Data Objects ActiveX Data Objects ODBC Driver OLE DB Data Provider ODBC Driver Maager OLE DB Document Server Email Server Relational Database Mơ hình 1: Sử dụng ADO OLE DB truy cập thông tin sở liệu 118 Client Workstation Client Application ActiveX Data Objects OLE DB ODBC Provider ODBC Driver ODBC Driver Maager OLE DB Relational Database Mơ hình 2: Cấu trúc truy cập sở liệu ODBC dùng trình cung cấp ODBC OLE DB Máy chủ Trình duyệt Web HTTP Internet Information Sever (IIS) Ứng dụng Client DCOM ActiveX Server (DDL EXE) ADO OLE DB Database Mơ hình 3: Cấu trúc sử dụng thành phần chương trình ActiveX chung với trình duyệt Web ứng dụng Client 119 7.5 Lập trình đối tượng RecordSet Như số ví dụ trên, làm quen với đối tượng Recordset Bây tìm hiểu rõ phương thức, thuộc tính đối tượng Recordset * Các phương thức đối tượng Recordset: PHƯƠNG THỨC DIỄN GIẢI AddNew Tạo ghi Cancel Hủy bỏ thao tác thực thi CancelBatch Hủy bỏ cập nhật bị treo CancelUpdate Hủy bỏ thay đổi với ghi hành Clone Tạo đối tượng Recordset Close Đóng đối tượng Recordset đối tượng liên quan CompareBookmarks So sánh chổ đánh dấu Delete Xóa ghi hay tập ghi hành Find Tìm ghi thỏa điều kiện GetRows Lấy nhiều ghi đưa vào mảng GetString Trả recordset dạng chuổi Move Di chuyển vị trí ghi hành MoveFirst Đưa vị trí ghi hành đến ghi Recordset MoveLast Đưa vị trí ghi hành đến ghi cuối Recordset MoveNext Đưa vị trí ghi hành đến ghi Recordset MovePrevious Đưa vị trí ghi hành đến ghi trước Recordset NextRecordset Xóa đối tượng recordset hành trả đối tượng recordset Open Mở Recordset Requery Cập nhật lại liệu cách thực thi lại câu truy vấn ban đầu Resync Refresh lại liệu đối tượng Recordset hành Save Lưu recordset xuống file Seek Tìm mục Recordset Supports Xác định xem đối tượng recordset có hổ trợ chức đặc biệt Update Lưu thay đổi UpdateBatch Lưu khối thay đổi xuống đĩa 120 * Các thuộc tính đối tượng Recordset: THUỘC TÍNH DIỄN GIẢI Trả giá trị TRUE vị trí ghi thời nằm phía trước ghi BOF đầu tiên, ngược lại FALSE Trả giá trị TRUE vị trí ghi thời nằm phía sau ghi EOF cuối cùng, ngược lại FALSE RecordCount Trả số ghi Recordset Sort Sẵp xếp Để thấy rõ lợi ích tính khả thi đối tượng Recordset thao tác liệu, xem xét cách thức kết nối thao tác sở liệu SQL Server Trong thực tế, người ta thực việc kết nối trực tiếp qua đối tượng Recordset mà thường thông qua đối tượng kết nối sở liệu gọi đối tượng Connection nhằm tăng tính linh động hiệu cho ứng dụng Website Chuỗi kết nối OLE DB hệ quản trị sở liệu SQL Server cung cấp sau: “Data Source = tên_server; Initial Catalog = tên_cơ_sở_dữ_liệu; User ID = tên_sử_dụng; Password = mật_khẩu” Ví dụ sau dùng đối tượng Connection kết nối liệu, dùng đối tượng Recordset hiển thị thông tin nhân viên: BÀI TẬP THỰC HÀNH Xây dựng ứng dụng WEB ngôn ngữ VB Script kết nối đến sở liệu SQL Server QuanLyNhanVien thực công việc sau: - Hiển thị danh sách nhân viên đơn vị - Bổ sung nhân viên đơn vị - Sửa đổi thông tin nhân viên đơn vị dựa vào mã nhân viên, mã đơn vị - Xóa nhân viên đơn vị dựa vào mã nhân viên, mã đơn vị 122 CÁC THUẬT NGỮ CHUYÊN MÔN Database: Cơ sở liệu Server: Máy chủ Client: Máy khách 123 TÀI LIỆU THAM KHẢO Giáo trình SQL Server – Trần Nguyên Phong – Trường Đại học Khoa học Huế Website: http://vovisoft.com ASP.NET- Kỹ thuật ứng dụng – Nhà xuất thống kê 2002 124 ... mơ hình One-Tier driver đảm nhiệm vai trò SQL Database Engine, thực xử lý tất câu lệnh SQL (parse, optimize, execute) - Mơ hình Two-Tier Ðây mơ hình kinh điển kiến trúc Client /Server Các Two-Tier... năng: - Tạo sử dụng ODBC - Sử dụng ADO - Sử dụng Data Environment - Sử dụng OLE_DB - Lập trình đối tượng RecordSet Nội dung: 7.1 ODBC, JDBC 7 .2 ADO 7.3 Data Environment 7.4 OLE_DB 7.5 Lập trình. .. Intranet Mơ hình Three-Tier: Trong mơ hình Three-Tier, u cầu JDBC-Net driver gửi tới middle-tier qua giao thức độc lập với DBMS, sau qua giao thức đặc biệt middle-tier gửi câu lệnh SQL tới DBMS