Professional Documents
Culture Documents
(Information Management)
Bài giảng 2
1
Các ngôn ngữ truy vấn CSDL
SQL
Xquery, Xpath
Crystal Report
Bài giảng:IM
2
Bài giảng 2
(Môn: Quản lý thông tin)
Phần 1: SQL
3
1. SQL
Nhắc lại các nhóm lệnh
Truy vấn dữ liệu
Lập trình với cơ sở dữ liệu
4
Các nhóm lệnh
Nhóm định nghĩa dữ liệu (DDL)
Gồm các lệnh tạo, thay đổi cấu trúc các
bảng dữ liệu (Create, Drop, Alter, …)
Nhóm thao tác dữ liệu (DML)
Gồm các lệnh làm thay đổi dữ liệu lưu trong
bảng (Insert, Delete, Update, …)
Nhóm điều khiển dữ liệu (DCL)
Gồm các lệnh quản lý quyền truy cập vào dữ
liệu và các bảng (Grant, Revoke, …)
5
Truy vấn dữ liệu
Giới thiệu
Phép kết trên nhiều bảng
Truy vấn lồng (Sub query)
Một số dạng truy vấn khác
Hàm kết hợp, gom nhóm
Khung nhìn (View)
6
Giới thiệu
SQL (Structured Query Language)
Ngôn ngữ cấp cao
Người sử dụng chỉ cần đưa ra nội dung cần
truy vấn
Được IBM phát triển (1970s)
Được gọi là SEQUEL
Được ANSI công nhận và phát triển thành
chuẩn SQL-86, SQL-92, SQL-99
7
Phép kết trên nhiều bảng
Phép kết, kết tự nhiên
Mệnh đề WHERE chỉ ra điều kiện kết giữa
các thuộc tính của các bảng
Hoặc dùng từ khóa Inner Join (hoặc
Join) trong mệnh đề FROM
Phép kết trái, phải, ngoài
Dùng Half Outer Join (Left join, Right
Join), Full Outer Join trong mệnh đề
FROM
8
NHANVIEN (HONV, TENLOT, TENNV, MANV,
NGSINH, DCHI, PHAI, LUONG, MA_NQL, PHG)
PHONGBAN ( TENPHG, MAPHG, TRPHG, NG_NC)
DIADIEM_PHG (MAPHG, DIADIEM)
THANNHAN (MA_NVIEN, TENTN, PHAI, NGSINH,
QUANHE)
DEAN (TENDA, MADA, DDIEM_DA, PHONG)
PHANCONG (MA_NVIEN, SODA, THOIGIAN)
9
Phép kết trên nhiều bảng
1. In danh sách mã số, họ tên nhân viên
và tên thân nhân của nhân viên đó.
2. In danh sách mã số, họ tên của tất
cả các nhân viên và tên thân nhân
của nhân viên đó (nếu có).
10
Truy vấn lồng
Giới thiệu
In và Not In
Exists và Not Exists
Any/Some và All
Phân loại
Một số dạng truy vấn khác
Các phép toán trên tập hợp
11
Giới thiệu
Các câu lệnh SELECT có thể lồng
nhau ở nhiều mức
Các câu truy vấn con thường trả về
một tập các giá trị
Các câu truy vấn con được kết hợp
bằng phép nối logic với câu truy vấn
cha.
12
In và Not In
Cú pháp:
<thuộc tính> (NOT) IN (<truy vấn con>)
Lưu ý:
Thuộc tính ở mệnh đề SELECT của truy vấn con
phải có cùng kiểu dữ liệu với thuộc tính ở mệnh đề
WHERE của truy vấn cha
Ví dụ:
3. Tìm nhân viên chưa được phân công thực hiện đề án nào
SELECT manv, honv+’ ‘+tenlot+’ ‘+tennv as hoten
FROM Nhanvien
Where manv NOT IN
(SELECT distinct ma_nvien FROM Phan cong)
13
Any/Some và All
Cú pháp:
<thuộc tính> <phép so sánh> Any/Some/All (<truy vấn con>)
Lưu ý:
Thuộc tính ở mệnh đề SELECT của truy vấn
con phải có cùng kiểu dữ liệu với thuộc tính ở
mệnh đề WHERE của truy vấn cha
Any/Some: so sánh với bất kỳ giá trị nào đó
trong tập hợp.
All: so sánh với tất cả các giá trị trong tập
hợp.
14
SELECT manv, honv+’ ‘+tenlot+’ ‘+tennv as hoten
FROM Nhanvien
Vd 4
Where luong >= ALL
(SELECT luong FROM Nhanvien)
15
Exists và Not Exists
Cú pháp:
(NOT) EXISTS (<câu truy vấn con>)
Lưu ý:
Không cần có thuộc tính, hằng số hay biểu
thức nào khác đứng trước
Không nhất thiết liệt kê tên thuộc tính ở
mệnh đề SELECT của truy vấn con
Những câu truy vấn có điều kiện “= ANY”
hay “IN” đều có thể chuyển thành câu truy
vấn có EXISTS
16
SELECT manv, honv+’ ‘+tenlot+’ ‘+tennv as hoten
FROM Nhanvien
Vd 7
Where manv NOT IN
(SELECT distinct ma_nvien FROM Phancong)
17
Phân loại
Lồng phân cấp
Mệnh đề WHERE của truy vấn con không tham chiếu
đến thuộc tính của các quan hệ trong mệnh đề FROM ở
truy vấn cha
Khi thực hiện, câu truy vấn con sẽ được thực hiện trước
Lồng tương quan
Mệnh đề WHERE của truy vấn con tham chiếu ít nhất
một thuộc tính của các quan hệ trong mệnh đề FROM
ở truy vấn cha
Khi thực hiện, câu truy vấn con sẽ được thực hiện
nhiều lần, mỗi lần tương ứng với một bộ của truy vấn
cha
18
Lồng phân cấp
Vd 10
SELECT manv, honv+’ ‘+tenlot+’ ‘+tennv as hoten
FROM Nhanvien, Thannhan
Where manv=ma_nvien AND quanhe=‘Con trai’
19
Lồng tương quan
Vd 12
SELECT manv, honv+’ ‘+tenlot+’ ‘+tennv as hoten
FROM Nhanvien, Thannhan
Where manv=ma_nvien AND quanhe=‘Con trai’
Vd 13
20
Vd 14
SELECT manv, honv+’ ‘+tenlot+’ ‘+tennv as hoten
FROM Nhanvien
Where manv NOT IN
(SELECT distinct ma_nvien FROM PHANCONG)
Vd 15
21
Một số dạng truy vấn khác
Câu truy vấn con không chỉ xuất hiện
ở mệnh đề WHERE mà có thể xuất
hiện ở những nơi khác (SELECT,
FROM, HAVING,…)
Kết quả trả về của câu truy vấn con
Là một bảng trung gian trong quá trình
truy vấn
Bảng này không có lưu trữ thật sự
22
Vd: Cho biết số lượng nhân viên Nam (phai=‘Nam’), nhân
viên Nữ (phai=‘Nu’) trong từng phòng ban.
Vd 16
23
SELECT MAPHG, TENPHG,
FROM PHONGBAN
Vd 17
24
Các phép toán trên tập hợp
SQL có cài đặt các phép toán
Hội (UNION)
Giao (INTERSECT)
Trừ (EXCEPT)
Kết quả trả về là tập hợp
Loại bỏ các bộ trùng nhau
Để giữ lại các bộ trùng nhau
UNION ALL
INTERSECT ALL
EXCEPT ALL
25
Các phép toán trên tập hợp
Cú pháp:
SELECT <các thuộc tính> FROM <các bảng> WHERE <các điều kiện>
UNION [ALL]
SELECT <các thuộc tính> FROM <các bảng> WHERE <các điều kiện>
SELECT < các thuộc tính> FROM <các bảng> WHERE <các điều kiện>
INTERSECT [ALL]
SELECT <các thuộc tính> FROM <các bảng> WHERE <các điều kiện>
SELECT <các thuộc tính> FROM <các bảng> WHERE <các điều kiện>
EXCEPT [ALL]
SELECT <các thuộc tính> FROM <các bảng> WHERE <các điều kiện>
26
Các phép toán trên tập hợp
Tuy nhiên, chúng ta có thể sử dụng IN, NOT
IN, EXISTS, NOT EXISTS, … để thực hiện các
phép toán hội, giao trừ trên tập hợp.
Đối với phép chia: sử dụng NOT EXISTS.
Ví dụ:
1. Tìm họ tên nhân viên được phân công thực hiện tất
cả các đề án.
2. Tìm tên các đề án được phân công cho tất cả các
nhân viên thuộc phòng số 5 thực hiện
27
Các phép toán trên tập hợp
Vd 18
SELECT manv, honv, tenlot, tennv
FROM Nhanvien
Where NOT EXISTS
(SELECT * FROM Dean WHERE NOT EXISTS
(SELECT * FROM Phancong WHERE manv=ma_nvien
AND mada=soda))
SELECT tenda
FROM Dean
Where NOT EXISTS
(SELECT * FROM Nhanvien WHERE phg=5 AND NOT EXISTS
29
Hàm kết hợp
MIN, MAX, SUM, AVG
TÊN HÀM(<tên thuộc tính>)
COUNT
COUNT(*) đếm số dòng
COUNT(<tên thuộc tính>) đếm số dòng
thuộc tính có giá trị khác NULL
COUNT(DISTINCT <tên thuộc tính>) đếm số
dòng thuộc tính có giá trị khác nhau và khác
NULL
30
Ví dụ
20.Tính lương thấp nhất, cao nhất, trung
bình và tổng lương của nhân viên
21.Có tất cả bao nhiêu nhân viên
22.Có bao nhiêu nhân viên được quản lý
trực tiếp bởi người khác
23.Có tất cả bao nhiêu người quản lý
24.Có bao nhiêu nhân viên không có người
quản lý trực tiếp
31
SELECT min(luong) as CN, max(luong) as TN, avg(luong) as TB,
Vd 20 sum(luong) as TONG
FROM Nhanvien
32
Top N
Trả về N dòng kết quả đầu tiên của câu
truy vấn
Cú pháp: TOP N
với N là số nguyên dương
Nên sử dụng ORDER BY để sắp xếp kết
quả
SELECT TOP 1 luong as CN
Vd 25
FROM Nhanvien
ORDER BY luong DESC
33
Gom nhóm
Cú pháp:
SELECT <các thuộc tính>
FROM <các bảng>
[WHERE <các điều kiện>]
GROUP BY <các thuộc tính gom nhóm>
[HAVING <các điều kiện>]
Trong đó:
Điều kiện ở WHERE thực hiện trước khi gom nhóm
Điều kiện ở HAVING thực hiệu sau khi gom nhóm
Các thuộc tính sau GROUP BY dùng để gom nhóm và
phải có đầy đủ các thuộc tính sau SELECT (trừ những
thuộc tính trong những hàm kết hợp)
34
Ví dụ
26.Tìm số lượng nhân viên của từng phòng ban
27.Tìm số lượng nhân viên Nam (phai=‘Nam’) của
từng phòng ban
28.Tìm phòng ban có từ 2 nhân viên Nam
(phai=‘Nam’) trở lên
29.Tìm phòng ban có đông nhân viên nhất
30.Tìm đề án có ít nhân viên Nữ (phai=‘Nu’) tham
gia nhất
31.Tìm 3 nhân viên thuộc phòng số 4 (phg=4) có
lương thấp nhất
35
Khung nhìn (View)
Giới thiệu
Mục đích
Định nghĩa View
Truy vấn trên View
Cập nhật trên View
36
Giới thiệu
Bảng (Table) là một quan hệ được tổ
chức lưu trữ vật lý trong CSDL
Khung nhìn (View) cũng là một quan
hệ
Là bảng ảo (không được lưu trữ vật lý)
Không chứa dữ liệu
Được định nghĩa từ những bảng khác
Có thể truy vấn hay cập nhật thông qua
View
37
Mục đích
Che dấu tính phức tạp của dữ liệu
Đơn giản hóa các câu truy vấn
Hiển thị dữ liệu dưới dạng tiện dụng
nhất
An toàn dữ liệu
38
Định nghĩa View
Cú pháp CREATE VIEW <tên khung nhìn> AS
Tạo View: <câu truy vấn>
39
CREATE VIEW DEAN_P5 AS
SELECT MADA, TENDA, DDIEM_DA
Vd 32
FROM DEAN
WHERE PHONG=5
40
Truy vấn trên View
Không chứa dữ liệu nhưng được truy
xuất như một bảng
Vd 34 SELECT * FROM DEAN_P5 WHERE DDIEM_DA=‘TP HCM’
41
Cập nhật trên View
Đối với View đơn giản được xây dựng trên 1
bảng và có khóa chính của bảng: có thể
dùng các câu lệnh INSERT, DELETE và
UPDATE
Không thể cập nhật trên View nếu View:
dùng từ khóa DISTINCT
sử dụng các hàm kết hợp
có mệnh đề SELECT mở rộng
được xây dựng từ bảng có ràng buộc trên cột
được xây dựng từ nhiều bảng
42
Bài giảng 2
(Môn: Quản lý thông tin)
43
2. Xquery, Xpath
Giới thiệu
Xpath
Xquery
44
Giới thiệu
Xpath và Xquery
là hai ngôn ngữ có rất nhiều mặt giống
nhau, hỗ trợ tìm kiếm thông tin trong tài
liệu XML.
có thể xem Xpath là tập hợp con của
Xquery.
Xquery sử dụng Xpath như là một ngôn
ngữ chính để định hướng tìm kiếm thay
vì dùng đệ qui để duyệt cây.
45
XPath
XML Path language (gọi tắt là Xpath)
là một chuẩn để xử lý tài liệu XML
(cũng như SQL là một chuẩn để làm
việc với csdl)
Dùng để xử lý nhiều kiểu truy vấn
trong tài liệu XML
Là ngôn ngữ rất phổ biến
Tiết kiệm thời gian trích xuất dữ liệu
46
Ví dụ 36:
1. <users>
2. <user>
3. <name>
4. <first>Lola</first>
15. <visits>
5. <last>Solis</last>
16. <first>2008-01-15</first>
6. </name>
17. <last>2008-02-15</last>
7. <age>2</age>
18. </visits>
8. </user>
19. </user>
9. <user>
20. <user>
10. <name>
21. <name>
11. <first>Nina</first>
22. <first>Tracy</first>
12. <last>Serafina</last>
23. <last>Keller</last>
13. </name>
24. </name>
14. <age>4</age>
25. <age>35</age>
26. </user>
27. </users>
47
Đoạn Xpath sau: tìm tên của người dùng
dưới 18 tuổi
1. /user[age lt 18]/name/last/text()
2.
3. (: Result
4. Solis
5. Serafina
6. :)
50
Biểu thức FLWOR
Biểu thức FLWOR dùng để liên kết các
tiêu chí rút trích dữ liệu và chuyển đổi
tập kết quả trả về của câu truy vấn.
FLWOR là viết tắt của các từ for, let,
where, order by và return
Bắt đầu bằng một biểu thức for hoặc
let và kết thúc bằng một biểu thức
return
51
Biểu thức FLWOR đơn giản
Tìm tên của người dùng dưới 18 tuổi, có sắp xếp
kết quả tăng dần
1. let $xml:= _XML from Vidu36
2. for $user in $xml//user[age lt 18]
3. order by $user/name/last
4. return $user/name/last/text()
5. (: Result
6. Serafina
7. Solis
8. :)
Để ngắn gọn thay đoạn XML trong Ví dụ 36
bằng Vidu36
52
Biểu thức FLWOR đơn giản
Kết quả truy vấn trả về 1 đoạn HTML, danh
sách có đánh số thứ tự
53
Sử dụng mệnh đề where
Chuyển đoạn biểu thức mô tả điều
kiện vào mệnh đề where
1. let $xml:= _XML from Vidu36
2. return
3. <ol>{
4. for $user in $xml//user
5. where $user/age lt 18
6. order by $user/name/last
7. return <li>{$user/name/last/text()}</li>
8. }</ol>
9. (: Result
10. <ol><li>Serafina</li><li>Solis</li></ol>
11.:)
54
Sử dụng các hàm và đệ quy
Xquery
cung cấp các hàm, các phép toán được xây
dựng sẳn và cho phép định nghĩa các hàm
riêng.
hỗ trợ đệ quy: tiện lợi khi làm việc với XML
(có thể chứa các node lồng nhau tùy ý)
Ví dụ 37: Định nghĩa hàm transform-
names dùng để thay đổi tên các node
trong bất kỳ tài liệu XML nào.
55
1. (: Part 1 :)
2. define function transform-names($node as node()) as node() {
3. element{replace(name($node), "_", "-")} {
4. $node/text(), for $subnode in $node/* return transform-names($subnode)
5. }
6. }
56
7. (: Part 2 :)
8. let $xml:=
9. <item>
10. <item_type>book</item_type>
11. <contributors>
12. <author>
13. <first_name>Charles</first_name>
14. <last_name>Edward</last_name>
15. <home_address>
16. <home_street>206 S. Solomon St.</home_street>
17. <home_city>New Orleans</home_city>
18. <home_state>LA</home_state>
19. <home_zip>70119</home_zip>
20. </home_address>
21. </author>
22. <artist>
23. <last_name>Salinas</last_name>
24. </artist>
25. </contributors>
26.</item>
27.return transform-names($xml) 57
7. (: Result
8. <item>
9. <item-type>book</item-type>
10. <contributors>
11. <author>
12. <first-name>Charles</first-name>
13. <last-name>Edward</last-name>
14. <home-address>
15. <home-street>206 S. Solomon St.</home-street>
16. <home-city>New Orleans</home-city>
17. <home-state>LA</home-state>
18. <home-zip>70119</home-zip>
19. </home-address>
20. </author>
21. <artist>
22. <last-name>Salinas</last-name>
23. </artist>
24. </contributors>
25. </item>
26.:) 58
Diễn tả các phép nối
Xquery còn cung cấp phương tiện để
nối các node XML trong một câu truy
vấn (giống như diễn tả các phép nối
bảng trong câu truy vấn của SQL)
59
Bài giảng 2
(Môn: Quản lý thông tin)
60
3. Crystal Report
Giới thiệu
Cài đặt
Hướng dẫn sử dụng
61
Giới thiệu
Crystal Report là công cụ thiết kế báo
cáo cho phép tạo ra những báo cáo (từ
đơn giản đến phức tạp) bằng cách tìm
và định dạng dữ liệu từ một hay nhiều
nguồn dữ liệu khác nhau.
Hỗ trợ các chức năng in ấn, kết xuất
sang các định dạnh khác: PDF, Excel,
Word…
62
Cài đặt
Crystal Report được tích hợp sẵn trong
bộ Visual Studio Team System và
Professional (không có trong phiên bản
VS Express)
Ngoài ra, có thể download Crystal
Report và sử dụng công cụ này như một
phần mềm chuyên dùng để thiết kế báo
cáo.
63
Hướng dẫn sử dụng
Các thành phần của một Report
Các bước xây dựng Report
Tích hợp Report vào ứng dụng
64
Các thành phần của Report
Mỗi Report gồm 5 Sections
Section là một vùng hiển thị trong
Report. Mỗi Section được biểu thị
bởi một đầu đề (header) và một
cuối đề (footer) (trừ section chi tiết
bên trong trang (Section Detail)
65
66
1. Report Header: chứa các dòng chữ hay
hình ảnh xuất hiện ở đầu của mỗi report
như : tên report, logo, …
2. Page Header: chứa các thông tin hiện
diện ở đầu mỗi trang, ví dụ như tên
danh mục cần hiển thị từ cơ sở dữ liệu.
67
3. Details: chứa phần dữ liệu của Report.
- Liên kết với các fields trong CSDL để hiển thị các
dòng (data rows), các rows này có thể gom nhóm
theo một số tiêu chí nào đó (column gom nhóm), khi
đó sẽ xuất hiện phần Group By nằm trong Section
“Details”.
- Trong phần Section “Details”, Group by cũng có
Group Header và Group Footer.
- Ta có thể thêm Field tính toán cho cuối mỗi Group
này bằng cách click chuột từ thanh công cụ của
Crystal Report để Insert một Summary.
68
4. Page Footer: chứa các thông tin nằm ở cuối
mỗi trang như số trang…
5. Report Footer: chứa các thông tin xuất hiện
ở cuối mỗi report: tổng kết, số lượng mẫu tin
trong báo cáo, địa chỉ , người ký, chức vụ,
ngày ký,.…..
69
Report Header
Page Header
Detail
Page Footer
Report Footer
70
Các bước xây dựng một Report
Thiết kế Report
Chuẩn bị nguồn dữ liệu
Sử dụng công cụ để xây dựng Report
theo thiết kế
Tích hợp Report vào ứng dụng
71
Thiết kế Report
Xác định các thông tin cần hiển thị,
cách bố trí, tổ chức thông tin
Thiết kế theo mẫu sẳn có hoặc theo đề
nghị của người dùng.
Yêu cầu:
Đáp ứng mục tiêu nghiệp vụ, phù hợp với
yêu cầu thực tế của người dùng.
Dữ liệu hiển thị vừa đủ, có sắp xếp, gom
nhóm hợp lý.
72
Chuẩn bị nguồn dữ liệu
Tạo cơ sở dữ liệu, các câu truy vấn, các
hàm … để hỗ trợ hiển thị dữ liệu theo
yêu cầu của Report.
Có thể dùng crystal report hiển thị kết
quả thực thi của một store procedure.
Store procedure phải thực thi một câu lệnh
SELECT
Các field trả về của câu select này được xem
là các database field.
73
Sử dụng công cụ
Phân loại Report
Các đối tượng dữ liệu của Report
74
Phân loại Report
Không có tham số: là những report
đơn giản, các yêu cầu hiển thị dữ liệu
không thay đổi.
Có tham số: các yêu cầu hiển thị dữ
liệu có thay đổi và giá trị của tham số
phải do người dùng ấn định khi thực
thi.
75
Các đối tượng dữ liệu
Database fields
Formula fields
SQL Expression field
Parameter fields
Group Name Field
Running Total Field
Special fields
76
Database fields:
Trường thuộc dạng csdl (có thể là Table,
Stored Procedure, SQL command).
Thường được hiển thị trong phần Details
của Report.
Cách thêm database field từ Stored
Procedure
77
78
Formula fields:
Dùng để thiết lập các công thức.
Tạo mới đối tượng này bằng cách dùng
Formula Editor hoặc Formula Expert.
79
80
SQL Expression Fields:
Dữ liệu được tính toán từ những trường
khác (dùng hàm count, sum, … hay công
thức tính toán bất kỳ).
Được đưa về xử lý ở database và trả kết
quả về report qua SQL Expression field.
Group Name Fields: chứa các thuộc
tính dùng để gom nhóm dữ liệu trong
report.
81
Parameters Fields:
Là trường tham số
Do ta tự khai báo hoặc Crystal Report tự
động thêm vào khi ta đưa 1 stored
procedure có tham số vào trong
database field.
Khi thực thi report trong Crystal Report,
những trường tham số sẽ được hỏi giá
trị, ta cần nhập vào để hiển thị tạm thời.
82
Running Total Fields:
chứa giá trị tổng hợp
(aggregate) như max,
min, sum, count, …
Special Fields: là trường
đặc biệt, có sẳn của
Crystal Report như số
trang, ngày hiện tại, …
83
84
Tích hợp Report vào ứng dụng
Sử dụng control Crystal Report Viewer.
Cấu hình thuộc tính ReportSource
85
Nếu Report
(có tham số) được lấy
dữ liệu từ
Stored Procedure thì
tham số của sp được
xem là tham số của
control
Crystal Report Viewer
86