Báo cáo được xem như một phần không thể thiếu được trong các ứng dụng, với một lượng lớn báo cá thì việc cài đặt, quản trị sẽ khó khăn và tốn kém. Vào năm 2004 MS SQL Server 2000 đã giới thiệu SSRS như một công cụ trong việc xây dựng, quản trị và phát triển báo cáo cho doanh nghiệp
Trang 1Câu lệnh :
CREATE TABLE SINH_VIEN
( ma_sv NUMBER(5) PRIMARY KEY,
ho_ten VARCHAR(25) NOT NULL, ng_sinh DATE,
gioi_tinh VARCHAR (3) DEFAULT ' Nam', ma_lop CHAR (3) ,
diem_tb DECIMAL (4,2), FOREIGN KEY ma_lop REFERENCES LOP
);
Trang 2);
Trang 33 Bổ sung -xoá một cột trong bảng
a Bổ sung một cột :
ALTER TABLE < tên bảng>
ADD <tên cột> < kiểu dữ liệu > <
kích thước>;
VD : Thêm cột số điện thoại vào bảng
SINH_VIEN ở trên
ALTER TABLE SINH_VIEN
ADD dien_thoai NUMBER(10);
Trang 54 Xoá một bảng khỏi CSDLDROP TABLE < tên bảng>;
VD : Xoá bảng SINH_VIEN trong CSDL
DROP TABLE SINH_VIEN;
Khi đó toàn bộ thông tin về bảng SINH_VIEN( gồm cả lược đồ và các bản ghi ) đều bị xoá, khác với lệnh
DELETE FROM SINH_VIEN ; chỉ xoá các bản ghi trong bảng, vẫn giữ lại cấu trúc (lược đồ ) của bảng
Trang 6III Các câu lệnh truy vấn
1 Truy vấn theo câu hỏi đơn giản
Cấu trúc cơ sở của một biểu thức hỏi ( còn gọi là biểu thức truy vấn) SQL gồm :
SELECT [ DISTINCT | ALL] {* | <cột> AS [<tên mới>], }
FROM < tên bảng> [ < bí danh >],
[WHERE < điều kiện chọn>]
[GROUP BY < ds tên cột>] [HAVING <điều kiện>]
[ORDER BY < ds cột> ];
Trang 7Trong đó :
- Từ khoá DISTINCT : để loại bỏ sự trùng lặp ( các bộ trùng lặp chỉ giữ lại một bộ)
- < biểu thức cột>: là tên của một cột hoặc của biểu thức
- < tên bảng >: là tên của một bảng trong CSDL hay một khung nhìn mà ta có thể truy cập vào
- GROUP BY : dùng để gộp nhóm các bộ cùng giá trị tương ứng
ở các cột xuất hiện trong ds tên cột.
- HAVING: dùng để lọc các nhóm thoả điều kiện
- ORDER BY : quy định thứ tự trong các cột trả ra gồm : ASC
( tăng dần) và DESC ( giảm dần) Mặc định là ASC
Trang 8Ví dụ 1:
Tìm tên các dự án và mã các phòngquản lý dự án tương ứng
SELECT ten_da, ma_p
FROM DU_AN;
Kết quả tra ra :
P1Giáo trình điện tử
P3Mạng B
P2Phần mềm A
Ma_p Ten_da
Trang 10b. Trong bảng kết quả, nếu muốn ta
có thể đặt tên mới cho cột sau từ khoá As
Ví dụ3 : Cho biết tên và lương mới của mỗi nhânviên biết họ được tăng 10%
Trang 12Ví dụ 4:Tìm các nhân viên thuộc phòng có mã phòng là P2 và có lương >=2tr.
SELECT ma_nv, ho_ten, ma_p, luong
FROM NHAN_VIEN
WHERE ma_p= 'P2' AND
luong>=2000000;
Trang 14d Tìm kiếm có xử lý xâu kí tự
SQL dùng toán tử LIKE để so sánh xâu.
SQL sử dụng kí tự ' %' để thay thế chomột xâu con, dấu phân cách '_' để thay
Trang 15Ví dụ 6: Cho biết mã và tên các dự án mà địa điểm có chứa từ UBND:
SELECT ma_da, ten_da
FROM DU_AN
WHERE dia_diem_da LIKE
'%UBND%';
Trang 16e SQL cho phép sử dụng các giá trị NULL đểchỉ sự thiếu vắng thông tin về giá trị của một bộtại một thuộc tính Với từ khoá IS NULL, SQL cho phép kiểm tra xem một giá trị có là NULL hay không ?
Ví dụ 7: Cho biết tên và mã số dự án màcột địa điểm có giá trị là NULL
SELECT ma_da, ten_da
WHERE dia_diem_da IS NULL;
Trang 17f Truy vấn có sắp xếp thứ tự
Kết quả của câu truy vấn SQL có thểđược sắp theo thứ tự tăng dần (ASC ) hoặc giảm dần (DESC) bởi khoá
ORDER BY. Mặc định là tăng dần
Trang 18 Việc sắp thứ tự có thể được thực hiện trên nhiều thuộc tính
Ví dụ 9 : Hiển thị các thông tin chấm
công của các dự án có mã thuộc tập D1, D2, D8 theo thứ tự tăng dần của
số giờ và giảm dần của mã dự án:
Trang 202 Các hàm thư viện
SQL có 5 hàm kết tập được cài sẵn :
- COUNT :đếm số giá trị
- SUM : tính tổng các giá trị trong một cột
- MAX : tính giá trị lớn nhất trong một cột
- MIN : tính giá trị nhỏ nhất trong một cột
- AVG : tính giá trị trung bình của một cột
Chú ý : Các hàm sum và avg chỉ áp dụng cho các cột có kiểu số
Trang 21Ví dụ 1: Tìm lương cao nhất, lương thấp nhất, và trung bình cộng lương toàn cơ quan
SELECT MAX (luong) AS max, MIN
(luong) AS min, AVG (luong) AS tb
FROM NHAN_VIEN;
Kết quả câu truy vấn này trả ra như sau :
23500001200000
3000000
tb min
max
Trang 22Ví dụ 2: Cho biết số nhân viên thực hiện dự
Trang 23- Dùng từ khoá DISTINCT ngay trước tên cột được áp dụng hàm, khi cần loại bỏ các bộ trùng nhau.
Ví dụ 3: Đếm số tỉnh có sinh viên theo học
SELECT COUNT (DISTINCT Que)
FROM SINHVIEN;
Trang 254 Tìm kiếm có sử dụng mệnh đề HAVING
Mệnh đề HAVING thường sử dụng cùng mệnh
đề GROUP BY Sau HAVING là biểu thức điều kiện Biểu thức này không tác động vào toàn bảng mà chỉ tácđộng vào từng nhóm các bản ghi đã chỉ ra tại mệnh đề
Trang 265 Tìm kiếm với câu hỏi phức tạp
Tìm kiếm với nhiều bảng qua việc sử dụng ánh xạlồng nhau hoặc qua phép kết nối
Trang 27Câu lệnh :
SELECT TDT, CN, KP FROM DT, SD
WHERE SD.DT# = DT.DT#;
Chú ý : Trong câu truy vấn có hơn mộtbảng, nếu tên cột là không duy nhất thì bắt buộcphải viết tên cột dạng tường minh
Trang 30 Tìm kiếm có sử dụng lường từ ANY và
Trang 32[ câu hỏi con]
Có thể bổ sung vào một tập các bản ghi là kết quả xử lý của một câu hỏi nào đó
VD: Chèn vào bảng SVG các sinh viên giỏi trong bảng SV.
INSERT INTO SVG SELECT *
FROM SV WHERE HL >= 8.0;
Trang 33[FROM { Tên_bảng / Tên_ view}]
[WHERE Biểu_ thức _điều _kiện]
Ví dụ : Xoá những sinh viên có điểm HL kém (HL<=3.5):
DELETE FROM SV WHERE HL<=3.5;
Trang 343 Sửa đổi dữ liệu
Sửa đổi các giá trị của các bản ghi theo một điều kiện nàođó:
Dạng tổng quát :
UPDATE [ tên_bảng]
SET [ tên_cột = biểu_thức, ]
FROM tên _ bảng WHERE Biểu _ thức _điều _kiện
Ví dụ : Sửa điểm học lực của bạn Phan Ngọc Hà thành 8.5
UPDATE SV SET HL = 8.5 WHERE HT=‘ Phan Ngọc Hà’;
Trang 354 Tạo chỉ mục.
Việc tạo chỉ mục là tạo ra một bảng lưu trữ vị trí cácbản ghi dựa trên giá trị tăng dần của một ( hay một số) cột nào đó Việc này có tác dụng làm tăng tốc độ tìm
kiếm thông tin trong CSDL
Dạng tổng quát :
CREATE INDEX tên_bảng_chỉ_mục
ON Tên_bảng ( tên _cột [ASC | DESC]);
Bỏ chỉ mục thì sử dụng mệnh đề :
DROP INDEX tên_chỉ_mục;
Trang 375 Tạo View của người sử dụng
Tạo ra một khung nhìn của người sử dụng :
CREATE VIEW DSSVG ( Hoten, NS, GT)
AS SELECT HT , NS, GT
FROM SV WHERE HL >= 8.0;
Trang 386 SQL nhúng
Có thể truy cập vào CSDL từ một ngôn ngữ lậptrình bậc cao nếu có SQL "nhúng" trong ngôn ngữ
này Một ngôn ngữ trong đó các câu hỏi được SQL
được nhúng vào gọi là ngôn ngữ chủ, còn các cấu trúccủa SQL được phép trong ngôn ngữ này làm thành
SQL nhúng
- Sơ đồ xử lý các chương trình có nhúng câu lệnh SQL:
Trang 39Biên dịch ngôn ngữ chủ Thư viện SQL Chương trình ngôn ngữ chủ
+
Trang 40Bài 6 RÀNG BUỘC TOÀN VẸN
để định nghĩa các điều kiện đảm bảo
cho CSDL ở trạng thái an toàn
ngăn ngừa việc đưa dữ liệu không hợp
lệ vào CSDL
các điều kiện bất biến không được vi
phạm trong một CSDL
Trang 41 RBTV còn được gọi là các quy tắc
quản lý được áp đặt lên các đối
tượng của thế giới thực
VD :
- Mỗi sinh viên có một mã sinh viên duy nhất để phân biệt với các sinh viên khác
- Điểm HL của mỗi sv không được nhỏ hơn0 và lớn hơn 10.
- Mỗi SV phải thuộc một lớp nào đó.
Trang 42 Các hệ quản trị CSDL thường có các cơ chế tự động kiểm tra RBTV
- Kiểm tra định kỳ hay đột xuất
Trang 443 Điều kiện của RBTV
Điều kiện của RBTV là sự mô tả và biểu diễn hình thức và nội dung của nó.
Được biểu diễn bằng ngôn ngữ tự
nhiên, thuật giải, ngôn ngữ quan hệ hoặc bằng các phụ thuộc hàm ,v.v
VD:
Trang 45 R1: Mỗi sinh viên có một mã sinh viên duy nhất không trùng với các sinh
Trang 464 Bối cảnh của RBTV
Bối cảnh của một RBTV là tập các quan hệ mà khi thao tác trên các
quan hệ đó có khả năng làm cho
ràng buộc toàn vẹn bị vi phạm.
Có thể chia RBTV thành hai loại
chính theo bối cảnh RBTV :
Trang 47 RBTV có bối cảnh trên 1 quan hệ
RBTV có bối cảnh trên nhiều quan hệ
Trang 484.1 RBTV có bối cảnh 1 quan hệ
RBTV miền giá trị.
RBTV liên bộ
RBTV liên thuộc tính
Trang 49 RBTV miền giá trị qui định tập giá trị mà một thuộc tính có thể nhận.
VD:
DOM(PHAI) = {‘Nam’, ‘Nữ’}
Trang 51Bảng tầm ảnh hưởng (TAH) gồm 4 cột:
Cột 1 chứa tên các quan hệ liên quan tới RBTV
3 cột tiếp theo là tên các thao tác : Thêm / Sửa / Xoá
Nếu RBTV cần được kiểm tra nguy cơ dẫn tới vi phạm dấu gạch chéo (x) hoặc dấu cộng (+) ;
Có thể chỉ rõ các thuộc tính nào nếu được cập nhật mới dẫn đến vi phạm bằng cách liệt kê chúng dưới dấu (x) hoặc dấu (+)
Nếu không có nguy cơ bị vi phạm thì đánh dấu trừ (-)
Nếu không bị vi phạm vì không được phép sửa đổi thì kí hiệu là trừ với dấu * : (- (*) )
Trang 52• Bảng TAH của R2:
+(GT) -
+
NHANVIEN
SửaXóa
ThêmR2
Trang 53• p1, p2 PHONGBAN: p1 p2
p1.MAP p2.MAP
• Bối cảnh: quan hệ PHONGBAN
Trang 54• Bảng tầm ảnh hưởng:
-(*) -
+
PHONGBAN
SửaXóa
ThêmR4
Trang 55• d DEAN, d[NGBD_DK] <= d[NGKT_DK]
Trang 56• Bối cảnh: quan hệ DEAN
• Bảng tầm ảnh hưởng:
+(NGBD_DK, NGKT_DK)
+
-DEAN
SửaXóa
ThêmR6
Trang 574.2 RBTV có bối cảnh trên nhiều
quan hệ
RBTV tham chiếu
RBTV liên bộ, liên quan hệ
RBTV liên thuộc tính, liên quan hệ
RBTV do thuộc tính tổng hợp
RBTV do chu trình trong lược đồ biểudiễn quan hệ
Trang 58a RBTV tham chiếu
RBTV tham chiếu là ràng buộc quy
định giá trị của thuộc tính trong một
bộ của quan hệ R phải thuộc tập giá trị của thuộc tính khóa trong quan hệ S khác.
RBTV tham chiếu còn gọi là ràng
buộc phụ thuộc tồn tại hay ràng buộc khóa ngoại
Trang 59 Ví dụ 10 : Xét các lược đồ quan hệ
PHONGBAN (MAP, TENP, TRP, NGNC)
NHANVIEN (MANV, HT, NS, GT, LUONG)
Trang 60• Bối cảnh: NHANVIEN, PHONGBAN
• Bảng tầm ảnh hưởng:
- (*) +
-NHANVIEN
+(TRP) -
+
PHONGBA
N
SửaXóa
ThêmR9
Trang 61b RBTV liên bộ, liên quan hệ
RBTV liên bộ, liên quan hệ là điều kiện giữa các bộ trên nhiều quan hệ khác nhau
Ví dụ 11 : Xét các lược đồ quan hệ
PHONGBAN (MAP, TENP, TRP, NGNC)
DIADIEMPHG (MAP, DIADIEM)
Trang 62• Bối cảnh: PHONGBAN, DIADIEM_PHG
• Bảng tầm ảnh hưởng:
+ (MAP) +
-DIADIEM_PHG
-
-PHONGBAN
SửaXóa
ThêmR10
Trang 63c RBTV liên thuộc tính, liên quan hệ
RBTV liên thuộc tính, liên quan hệ là điều kiện giữa các thuộc tính trên nhiều quan hệ khác nhau.
Ví dụ 12 :Xét các lược đồ quan hệ
DATHANG(MADH, MAKH, NGAYDH)
GIAOHANG(MAGH, MADH, NGAYGH)
Trang 64• Bối cảnh: DATHANG, GIAOHANG
• Bảng tầm ảnh hưởng:
+ (NGAYGH) -
+
GIAOHANG
+ (MGAYDH) -
-DATHANG
SửaXóa
ThêmR11
Trang 65d RBTV do thuộc tính tổng hợp
Thuộc tính tổng hợp là thuộc tính được tính toán từ giá trị của các thuộc tính khác hoặc trạng thái của CSDL.
Khi có thuộc tính tổng hợp, cần phải có RBTV để đảm bảo mối quan hệ giữa nó
và nguồn mà nó được tính toán từ đó.
Ví dụ 13 : Xét các lược đồ quan hệ
• PXUAT(SOPHIEU, NGAY, TT)
• CTIET_PX(SOPHIEU, MAHANG, SL, DG)
Trang 66• Xét RBTV R12:
• Nội dung:
• Tổng trị giá của 1 phiếu xuất phải bằng
tổng trị giá các chi tiết xuất.
pxPXUAT,
px.TT = (ct CTIET_PX ct.SOPHIEU = px.SOPHIEU) ct.SL
* ct.DG
• Bối cảnh: PXUAT,CTIET_PX
Trang 67• Bảng tầm ảnh hưởng:
• (*): Ở thời điểm thêm một bộ vào PXUAT, giá trị bộ đó tại TT là trống
+ (SL,DG) +
+
CTIET_P
X
+ (TT) +
-(*)
PXUAT
SửaXóa
ThêmR12
Trang 68e RBTV do có chu trình
• NHANVIEN (MANV, HT,NS ,GT, PHONG, LUONG)
• DEAN (MADA, TENDA, DD, PHONG)
• PHANCONG (NV#, SODA, THOIGIAN)
• Xét RBTV R14:
• Nội dung:
Nhân viên chỉ được phân công vào các đề
án do phòng mình phụ trách
Trang 69 pc PHANCONG, nvda (NHANVIEN
⋈ PHG=PHONG DEAN): (nvda.MANV = pc.NV#
nvda.MADA = pc.SODA)
Hay: PHANCONG[MA_NVIEN,SODA]
(NHANVIEN DEAN) [MANV,MADA]
Bối cảnh: NHANVIEN, DEAN, PHANCONG
Trang 70 Bảng tầm ảnh hưởng
-(*)+
DEAN
(*)+
NHANVIEN
-+ (NV#, SODA) -
+ PHANCONG
SửaXóa
ThêmR14
Trang 71Bài 7 PHỤ THUỘC DỮ LIỆU TRONG
t1[X]= t2[X] thì t1[Y] = t2[Y]
Trang 72 Ví dụ : Trong quan hệ SV, mỗi thuộc tính
DIACHI, NS, KETQUA đều phụ thuộc hàm (pth ) vàothuộc tính SV# Mỗi giá trị SV# xác định duy nhất
một giá trị tương ứng đối với từng thuộc tính đó Khi
đó , có thể viết :
SV# DIACHI SV# NS
SV# KETQUA
Nếu Y X thì hiển nhiên X Y
Trang 732 Hệ tiên đề cho phụ thuộc hàm
2.1 K/n bao đóng của một tập phụ thuộc hàm
• Tập tất cả các pth được suy diễn logic từ F được gọi
là bao đóng của F Kí hiệu là F +
• Nếu F + = F thì F là họ đầy đủ của các pth
Trang 75 Hệ tiên đề Amstrong được chứng minh
là đúng đắn và đầy đủ thông qua 3 bổ
hệ r
Trang 76 Bổ đề 2: Từ hệ tiên đề Amstrong ta suy
ra một số luật sau đây:
Trang 77 Khái niệm bao đóng của tập các thuộc tính đối với tập các phụ thuộc hàm.
Gọi F là tập các pth trên tập thuộc
tính U, X U X + là bao đóng của X (đối với F ) được định nghĩa như sau :
X + = { A | X A F+ } Nói cụ thể : X + là tập tất cả các
thuộc tính A mà pth XA có thể được suy diễn logic từ F nhờ hệ tiên đề
Amstrong