“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ụn
Trang 1TRƯỜ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í 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ồi dưỡng thêm kiếm thức về CSDL , vì đợt bồi dưỡng chuyên môn vừa qua thời gian và nội dung kiếm thức bồi dưỡ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ồi dưỡ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ỒI DƯỠ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ồi dưỡ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ỒI DƯỠ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
Trang 2, 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 …
Trang 3Vớ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 QueryNewDesign 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ì
Trang 4 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)
Trang 5ALTER 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
Trang 6Cú 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)
Trang 7Cô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 [ ]
Trang 8 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";
Trang 9 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ệu từ 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
Trang 10FROM SANPHAM INNER JOIN (KHO INNER JOIN HOADON ON KHO.MAKHO = HOADON.MAKHO) ON SANPHAM.MASP = HOADON.MASP;