Trường THPT Thới Bình Tàiliệutựbồidưỡng TRƯỜNG THPT THỚI BÌNH CHƯƠNG TRÌNH BỒIDƯỢNG THƯỜNG XUYÊN NĂM HỌC 2008 - 2009 Lí do: - Vì năm nay mới bắt đầu đưa môn tin học vào lớp 12, và Cơ sở dữ liệu(CSDL) là kiến thức chủ yếu ở lớp 12, do tôi chỉ dạy khối 10 vì thế tôi thấy cần thiết phải tựbồidưỡng thêm kiếm thức về CSDL , vì đợt bồidưỡng chuyên môn vừa qua thời gian và nội dung kiếm thức bồidưỡng về sách GK lớp 12 môn Tin Học còn hơi ít, vì thế tôi thường xuyên bồidưỡng về CSDL để sau này nếu được phân công dạy khối 12 thì tôi sẽ hoàn thành tốt nhiệm vụ. I. MỤC TIÊU CHƯƠNG TRÌNH BỒIDƯỢNG THƯỜNG XUYÊN 1. Về kiến thức - Nắm vững được một số quy ước và cú pháp của SQL và biết một số lệnh chuẩn của SQL đồng thời hiểu một số lệnh truy vấn, đònh nghóa dữ liệu 2. Về kỹ năng - Thao tác trên bảng và truy vẫn CSDL bằng ngôn ngữ SQL - Tự học và sử dụng một số phương tiện kỹ thuật truyền thông vào quá trình tự học, tựbồidưỡng để cập nhật kiến thức và nâng cao trình độ chuyên môn nghiệp vụ. 3. Về thái độ - Rèn luyện thói quen tự học, tự nghiên cứu và tính năng động, sáng tạo nhằm nâng cao trình độ chuyên môn nghiệp vụ - Có ý thức tự học và vận dụng kiến thức, kỹ năng đã học vào thực tiễn dạy học II. NỘI DUNG CHƯƠNG TRÌNH TỰBỒIDƯỢNG THÁNG 09 +10 NĂM 2008 Chuyên Đề: TẠO TRUY VẤN BẰNG NGÔN NGỮ SQL (STRUCTURED QUERY LANGUAGE NGÔN NGỮ CỦA CÁC HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU) A- MỘT SỐ QUY ƯỚC VỀ CÚ PHÁP CỦA SQL %,_ Dấu phần trăm, dấu gạch dưới Đại diện cho nhiều ký tự, đại diện cho 1 ký tự tương ứng với dấu *,? Của Dos ; Dấu chấm phẩy Dứt lệnh của SQL chuẩn GV: Trần Văn Chính Trang 1 Trường THPT Thới Bình Tàiliệutựbồidưỡng , Dấu phẩy Dấu phân cách giữa các chi tiết trong một chuỗi Vd: SELECT col1, col2, … Các từ khoá, tên table, tên field, tên row … không phân biệt chữ hoa, chữ thường Trong chuỗi dạng ký tự phải chỉ đònh chính xác giá trò. “Manager” sẽ khác với “manager” B- MỘT SỐ LỆNH CHUẨN CỦA SQL: Xét về công dụng, những lệnh của SQL được chia ra làm 4 loại: ⇒ Loại lệnh truy vấn dữ liệu (Query) SELECT: Là lệnh SQL phổ dụng nhất trong mọi sản phẩm SQL ⇒ Loại lệnh đònh nghóa dữ liệu ( Data Define language – DLL): CREATE: Đònh nghóa và khởi tạo một Table/View/Index mới ALTER: Hiệu chỉnh một Table đã tồn tại trước đó DROP: Huỷ bỏ nếu xét thấy không cần sử dụng nữa. Những lệnh thuộc loại DLL dùng để đònh nghóa các Table (file lưu trữ dữ liệu), các View (File ảo, file logic), các Index (chỉ mục) . . . Loại lệnh DDL sẽ giúp cho người sử dụng can thiệp vào cách thức lưu trữ, tổ chức về mặt vật lý của cơ sở dữ liệu, làm biến đổi cấu trúc hệ thông dữ liệu. Do đó loại lệnh này thường dành cho các chuyên viên hệ thống thông tin. ⇒ Loại lệnh cập nhật dữ liệu (Data manipulation Language – DML): INSERT : Bổ sung thêm một hoặc nhiều Row vào CSDL. UPDATE: Thay đổi các trường giá trò trong CSDL DELETE: Huỷ bỏ các row ⇒ Loại lệnh kiểm soát dữ liệu (Data Control Language – DCL): GRANT: Giao các quyền khai thác dữ liệu cho người sử dụng. REVOKE: Thu hồi các quyền khai thác dữ liệu. Loại lệnh này nhằm đảm bảo sự an toàn về CSDL dùng chung. 1. MỘT SỐ LỆNH TRUY VẤN ĐỊNH NGHĨA DỮ LIỆU SQL là một ngôn ngữ đònh nghóa dữ liệu, cho phép tạo ra một hệ thống các file dữ liệu, có thể hiệu chỉnh một phần cấu trúc dữ liệu đã có bằng các lệnh khởi tạo, thay đổi hoặc hủy bỏ các table … GV: Trần Văn Chính Trang 2 Trường THPT Thới Bình Tàiliệutựbồidưỡng Với SQL có thể thực hiện dễ dàng những công việc như: − Đònh nghóa table mới. − Thay đổi các cấu trúc của những Table đã có trong máy. − Xoá bỏ field hoặc Table/View/Index đang tồn tại. − Đònh nghóa một Table logic để tăng cường khả năng an toàn dữ liệu. − Đònh nghóa các Index để hệ thống hoạt động nhanh hơn. − Thay đổi thuộc tính khoá (Primary hay Foreign key) Hầu hết các lệnh đònh nghóa dữ liệu của SQL thông qua 3 lệnh chính CREATE, ALTER và DROP. Sau đây ta lần lược làm quen với các lệnh trên: ⇒ Để tạo một câu lệnh SQL trong Microsoft Access chúng ta thực hiện theo các bước sau: − Bước 1: Trong cửa sổ CSDL, chọn phiếu Query→New→Design View→ nhấn chọn Ok − Bước 2: Không cần chọn Table hay Query làm nguồn dữ liệu (vì đã ghi tên bản trong câu lệnh), nhấn chọn nút Close. − Bước 3: Nhấn chọn nút SQL, xuất hiện cửa sổ soạn thảo câu lệnh SQL − Bước 4: Sau khi soạn thảo xong câu lệnh, nhấn chọn nút Run để chạy Query. − Bước 5: Lưu lại Query ⇒ Khởi tạo Table : CREATE TABLE <Tên Table> (<tên field-1><kiểu dữ liệu> [NOT NULL], <tên field-2><kiểu dữ liệu> [NOT NULL], <tên field-3><kiểu dữ liệu> [NOT NULL], . . . . . . . . . . . . <tên field-n><kiểu dữ liệu> [NOT NULL], CONSTRAINT <tên constraint> PRIMARY KEY (tên field), CONSTRAINT <tên constraint> FOREIGN KEY (tên field)REFERENCES(Tên Table 2)); Giải Thích: − Từ khoá CREATE TABLE : Dùng để tạo lập Table − <Tên table> : Đặc table tên gì − <Tên field> <kiểu dữ liệu> : Trong table đó có các Field (Column, cột) nào và kiểu dữ liệu gì. − [NOT NULL] : Có mang giá trò NULL không GV: Trần Văn Chính Trang 3 Trường THPT Thới Bình Tàiliệutựbồidưỡng − PRIMARY KEY : Tên các Column (field) đặc làm khoá chính − FOREIGN KEY (tên các field) REFERENCES (Tên Table 2) : Tên các field nào làm khoá ngoại và nó là khoá chính trong table nào. Ví dụ: Dùng SQL để tạo ra Table Nhân sự có những Fields như sau: Manv, Hoten, Diachi, Ngaysinh, Phai, Mucluong, Ngaycong, Ghichu, Hinh. Có Manv là khoá chính. CREATE TABLE NHANSU (Manv Text(4), Hoten Text(20), Diachi Text(30), Ngaysinh Datetime, Phai YesNo, Mucluong Integer, Ngaycong Byte, Ghichu Memo, HINH OleObject, CONSTRAINT PK_MANV PRIMARY KEY (Manv)); Sau đó các bạn nhập khoảng 10 Record (mẫu tin) vào. Hiệu chỉnh một Table: Việc hiệu chỉnh cấu trúc dữ liệu là một công việc hết sức quan trọng, chỉ nên làm khi thật sự cần thiết. ⇒ Thêm một Column (Filed) ALTER TABLE <tên table> ADD <tên field><kiểu dữ liệu>; Ví dụ: Thêm một Field Luongthang trong Table Nhansu ALTER TABLE Nhansu ADD Luongthang Double; ⇒ Hủy bỏ một field ALTER TABLE <tên Table> DROP <tên field>; Ví dụ: Xoá Field Luongthang trong Table Nhansu ALTER TABLE Nhansu DROP Luongthang; ⇒ Khởi tạo một Index (chỉ mục) ALTER TABLE <Tên Table> ADD CONSTRAINT <Tên Index> UNIQUE (<Tên Field>) hoặc CREATE [UNIQUE] INDEX <Tên INDEX> ON <tên table> (tên các field> [ASC/DESC]); Ví dụ: Tạo chỉ mục cho Field Mucluong, Hoten trong Table Nhansu ALTER TABLE Nhansu ADD CONSTRAINT HT UNIQUE (Hoten); CREATE UNIQUE INDEX ML ON Nhansu (Mucluong); ⇒ Xoá một Index (chỉ mục) GV: Trần Văn Chính Trang 4 Trường THPT Thới Bình Tàiliệutựbồidưỡng ALTER TABLE <tên table> DROP CONSTRAINT <tên Index>; hoặc DROP INDEX <Tên Index> ON <Tên Table> Ví dụ: Xoá chỉ mục cho Field Mucluong, Hoten trong Table Nhansu ALTER TABLE Nhansu DROP CONSTRAINT HT; ⇒ Hủy bỏ một Table DROP TABLE <tên table> Ví dụ: Hủy bỏ Table Nhansu DROP TABLE NHANSU; 2. MỘT SỐ CÂU TRUY VẤN HÀNH ĐỘNG DÙNG SQL ⇒ Truy vấn tạo bảng (MAKE TABLE QUERY) Cú pháp: SELECT field1[,field2[,…]]INTO table mới [IN MDB khác] FROM table nguồn [WHERE điều kiện] [ ORDER BY… field [DESC]]; Giải thích: − field1,field2 :Tên các cột( trong table nguồn) muốn sao chép dữ liệu sang table mới. − Table mới : Tên bảng mới muốn tạo. − Table nguồn : Tên bảng chứa dữ liệu nguồn mà truy vấn sẽ lấy dữ liệu chép qua table mới. − Điều kiện : Là điều kiện sao chép. Ví dụ: Tạo ra một table LUUTRU lưu các chứng từ xuất của table HOADON SELECT * INTO LUUTRU FROM HOADON WHERE LOAIVT="X"; ⇒ Truy vấn cập nhật ( UPDATE QUERY): Công dụng: Dùng để sửa đổi dữ liệu thuộc các cột ở nhiều dòng khác nhau trong table , chỉ sửa dữ liệu thuộc những dòng ( record) thoả mãn điều kiện đã cho. GV: Trần Văn Chính Trang 5 Trường THPT Thới Bình Tàiliệutựbồidưỡng Cú pháp: UPDATE table SET field1= giá trò 1, field2= giá trò 2, … [WHERE điều kiện] Giải thích: − Table : Là tên table muốn sửa đổi dữ liệu − field1 , field2 : Tên các cột trong table muốn thay đổi giá trò − giá trò 1 , giá trò 2 : Các giá trò mới của field1 ,field2 Ví dụ: Tăng tiền lên thêm 50 đồng cho các chứng từ xuất trong Table LUUTRU UPDATE LUUTRU SET DONGIA = DONGIA+50 WHERE LOAIVT="X"; ⇒ Truy vấn thêm (NỐI KẾT - APPEND QUERY) Công dụng: Dùng để thêm dữ liệu mới từ một table khác vào cuối một table , hay chỉ thêm một dòng dữ liệu mới vào cuối table. Cú pháp thêm một dòng: INSERT INTO table( field1[,field2[,…]]) VALUES( giá trò 1[,giá trò 2[,…]]) Cú pháp thêm nhiều dòng: INSERT INTO table đích [IN MDB khác] SELECT field1,[, field2[,…]] FROM table nguồn; [WHERE điều kiện]; Ví dụ: Tạo nối kết các chứng từ nhập từ Table NHAPXUAT vào Table LUUTRU INSERT INTO LUUTRU SELECT * FROM HOADON WHERE LOAIVT="N"; ⇒ Truy vấn xoá ( DELETE QUERY) GV: Trần Văn Chính Trang 6 Trường THPT Thới Bình Tàiliệutựbồidưỡng Công dụng: dùng để xoá dữ liệu trong một table. Cú pháp: DELETE FROM table [WHERE điều kiện]; Ví dụ: Xoá hết các chứng từ nhập trong Table LUUTRU DELETE * FROM LUUTRU WHERE LOAIVT ="N"; ⇒ Truy vấn chọn (Select query) Cú pháp: SELECT [Tính chất] {* |Table.*| [table.]field 1 [, [table.]field 2 [, […]]} [biểu thức As tên cột mới] FROM table 1 [ kiểu kết nối] [, table 2 [on điều kiện]] [WHERE điều kiện] [GROUP BY tên cột] [HAVING điều kiện] [ORDER BY tên cột [DESC]] Giải thích các thành phần của câu lệnh SQL: − Tính chất : Dùng một trong các từ khóa sau: ALL, DISTINCT, DISTINCT ROW, TOP <n>. Với ý nghóa: ALL : Chọn tất cả các dòng trong bảng DISTINCT : Chọn nhưng có lọai bỏ những cột trùng lắp thông tin. DISTINCT ROW : Chọn nhưng có lọai bỏ những dòng trùng lắp thông tin. TOP <n> : Chọn n dòng đầu tiên trong bảng − Table.field : Tên các cột thuộc các bảng muốn lấy dữ liệu − Biễu thức : Ghi biểu thức sinh ra trò cho cột mới − Tên cột mới : Ghi tên cột mới, nếu tên cột mới có chứa ký tự trắng thì phải bao tên cột mới bằng cặp ngoặc vuông [ ]. GV: Trần Văn Chính Trang 7 Trường THPT Thới Bình Tàiliệutựbồidưỡng − Table 1, table 2 :Tên các bảng, table 1 tên bảng trái, table 2 tên bảng phải. − Kiểu kết nối : Dùng một trong 3 kiểu sau: (Thường dùng nhất là INNER JOIN) − INNER JOIN : Là kiểu kết nối chỉ lấy ra các dòng mà dữ liệu thuộc cột quan hệ ở hai bảng là bằng nhau. − LEFT JOIN : Là kiểu kết nối ưu tiên cho bảng bên trái (Table 1), lấy ra tất cả các dòng của bảng bên trái còn với bảng bên phải (table 2) chỉ lấy ra những dòng nào có dữ liệu trên cột quan hệ bằng dữ liệu trên cột quan hệ ở bảng bên trái. − RIGHT JOIN : Là kiểu kết nối ưu tiên cho cho bảng bên phải (Table 2), lấy ra tất cả các dòng của bảng bên phải còn với bảng bên trái (table 1) chỉ lấy ra những dòng nào có dữ liệu trên cột quan hệ bằng dữ liệu trên cột quan hệ ở bảng bên phải. − On điều kiện : Ghi ra điều kiện kết nối. − WHERE điều kiện : Điều kiện lọc dữ liệu − GROUP By tên cột : Nhóm dữ liệu theo cột nào. − HAVING điều kiện : Điều kiện lọc lại dữ liệu nếu đã có nhóm dữ liệu. − ORDER BY tên cột [DESC] : Sắp xếp theo cột nào, thứ tự tăng dần hay giảm dần, ghi DESC: Sắp giảm dần. ⇒ Tạo một truy vấn chéo (Crosstab query Cú pháp: TRANSFORM <Value > // Hàm tính toán thống kê mà ta muốn tính toán thống kê SELECT <Tên các fields> // Tên cột làm tiêu đề dòng (Tối đa là 3 cột) FROM <Tên table> // Tên Table liên quan WHERE <Điều kiện> // điều kiện thực hiện GROUP BY <tên Field> // Tên cột được nhóm PIVOT <tên field> // tên cột mà ta muốn làm tiêu đề cột Ví dụ: Thực hiện những câu truy vấn sau: ⇒ Tạo một Seclect query gồm các chứng từ vật tư là Xuất của kho TD SELECT * FROM HOADON WHERE LOAIVT = "X" AND MAKHO = "TD"; GV: Trần Văn Chính Trang 8 Trường THPT Thới Bình Tàiliệutựbồidưỡng ⇒ Tạo select query chỉ gồm 4 chứng từ nhập trong những ngày gần đây nhất SELECT TOP 4, * FROM HOADON WHERE LOAIVT = "N" ORDER BY NGAY DESC; ⇒ Tạo một Total select query thống kê tổng số lượng vật tư Nhập theo từng Kho: SELECT MAKHO, Sum(SOLUONG) AS [TONG SO LUONG] FROM HOADON WHERE LOAIVT="N" GROUP BY MAKHO ORDER BY MAKHO DESC; ⇒ Tạo một total select query chỉ thống kê những kho có số lượng vật tư nhập trên 25 SELECT MAKHO, Sum(SOLUONG) AS [TONG SO LUONG] FROM HOADON WHERE LOAIVT="N" GROUP BY MAKHO HAVING SUM(SOLUONG)>25; ⇒ Tạo một Crosstab query tính tổng số lượng vật tư nhập theo từng kho TRANSFORM Sum(HOADON.SOLUONG) AS TSL SELECT HOADON.makho, Sum(HOADON.SOLUONG) AS [TONG SO LUONG] FROM HOADON WHERE (((HOADON.LOAIVT)="N")) GROUP BY HOADON.makho PIVOT HOADON.MASP; ⇒ Tạo query lấy dữ liệutừ HOADON và KHO SELECT HOADON.NGAY, HOADON.LOAIVT, HOADON.SOHD, KHO.TENKHO FROM KHO INNER JOIN HOADON ON KHO.MAKHO = HOADON.MAKHO; ⇒ Tạo select query từ 3 table HOADON, KHO và SANPHAM SELECT HOADON.NGAY, HOADON.LOAIVT, KHO.TENKHO, SANPHAM.TENSP, HOADON.SOLUONG, SANPHAM.DONGIA GV: Trần Văn Chính Trang 9 Trường THPT Thới Bình Tàiliệutựbồidưỡng FROM SANPHAM INNER JOIN (KHO INNER JOIN HOADON ON KHO.MAKHO = HOADON.MAKHO) ON SANPHAM.MASP = HOADON.MASP; GV: Trần Văn Chính Trang 10 . Trường THPT Thới Bình Tài liệu tự bồi dưỡng TRƯỜNG THPT THỚI BÌNH CHƯƠNG TRÌNH BỒI DƯỢNG THƯỜNG XUYÊN NĂM HỌC 2008 - 2009 Lí. dữ liệu( CSDL) là kiến thức chủ yếu ở lớp 12, do tôi chỉ dạy khối 10 vì thế tôi thấy cần thiết phải tự bồi dưỡng thêm kiếm thức về CSDL , vì đợt bồi dưỡng