i
ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG
NGUYỄN THỊ THU NGA
TIỀN TỐI ƢU CÁC CÂU SQL TỪ
CHƢƠNG TRÌNH NGUỒN
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY
TÍNH
THÁI NGUYÊN - 2014
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
ii
ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG
NGUYỀN THỊ THU NGA
TIỀN TỐI ƢU CÁC CÂU SQL TỪ
CHƢƠNG TRÌNH NGUÔN
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số
: 60 48 01
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY
TÍNH
Giáo viên hƣớng dẫn: PGS.TS. LÊ HUY THẬP
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
iii
LỜI CAM ĐOAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi.
Các số liệu, kết quả nêu trong luận văn là trung thực và chƣa từng đƣợc
ai công bố trong bất kỳ công trình nào khác.
Qua đây em xin chân thành cảm ơn toàn thể các thầy cô trong khoa đào
tạo sau đại học trƣờng Đại học Công nghệ Thông tin và Truyền thông và đặc
biệt là Thầy PGS.TS. Lê Huy Thập, đã tạo điều kiện thuận lợi và hƣớng dẫn
em để hoàn thành luận văn này.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
iv
MỤC LỤC
LỜI CAM ĐOAN .............................................................................................. i
MỤC LỤC ........................................................................................................ iv
DANH MỤC CÁC KÝ HIỆU ......................................................................... vi
DANH MỤC CÁC CHỮ VIẾT TẮT .............................................................. vi
DANH MỤC BẢNG BIỂU ........................................................................... viii
DANH MỤC HÌNH ẢNH ............................................................................... ix
LỜI MỞ ĐẦU ................................................................................................... 1
CHƢƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ SQL ...................................... 3
1.1. Nghiên cứu ngôn ngữ SQL và một số dạng câu vấn tin SQL cơ bản... 3
1.1.1. Giới thiệu ngôn ngữ SQL ............................................................... 3
1.1.2. Câu vấn tin SQL (Structured Query Language) ............................ 4
1.1.2.1. Thao tác với bảng. .................................................................. 4
1.1.2.2. Khối lệnh Select ...................................................................... 5
1.1.2.3. Tìm kiếm theo câu hỏi đơn giản ............................................. 6
1.1.2.4. Các hàm thƣ viện .................................................................... 8
1.1.2.5. Tìm nhờ mệnh đề GROUP BY ............................................... 9
1.1.2.6. Tìm kiếm và câu hỏi phức tạp .............................................. 10
1.2. Nghiên cứu thuật toán Ingres và System tập trung ............................. 12
1.2.1. Thuật toán Ingres .......................................................................... 12
1.2.2. Thuật toán System ........................................................................ 20
1.3. Kết luận chƣơng .................................................................................. 25
CHƢƠNG 2: TIỀN TỐI ƢU CÁC CÂU SQL TỪ CHƢƠNG TRÌNH
NGUỒN .......................................................................................................... 26
2.1. Phƣơng pháp phân rã SQL .................................................................. 26
2.1.1 Phƣơng pháp phân rã SQL. ........................................................... 26
2.1.2 Những ƣu và nhƣợc điểm của phƣơng pháp phân rã SQL ........... 32
2.1.3 Ứng dụng của phƣơng pháp phân rã SQL: ................................... 33
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
v
2.2. Phƣơng pháp thay thế SQL ................................................................. 34
2.2.1 Phƣơng pháp thay thế SQL ........................................................... 34
2.2.2 Những ƣu và nhƣợc điểm của của phƣơng pháp thay thế SQL.... 36
2.2.3 Ứng dụng của phƣơng pháp thay thế SQL ................................... 37
2.3. Thuật toán xử lý tiền tối ƣu câu SQL ................................................. 37
2.4. Kết luận chƣơng .................................................................................. 42
CHƢƠNG 3 CHƢƠNG TRÌNH THỬ NGHIỆM ......................................... 43
3.1 Mô tả bài toán........................................................................................ 43
3.2 Thử nghiệm tiền tối ƣu câu lệnh SQL................................................... 48
3.2.1 Xây dựng chƣơng trình thử nghiệm. .............................................. 48
3.2.2. Thực hiện thử nghiệm. .................................................................. 49
KẾT LUẬN ..................................................................................................... 56
HƢỚNG PHÁT TRIỂN .................................................................................. 56
TÀI LIỆU THAM KHẢO ............................................................................... 57
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
vi
DANH MỤC CÁC KÝ HIỆU
Phép giao
Phép hợp
∈
Ký hiệu thuộc
Ký hiệu không thuộc
-
Phép trừ
X
Tích đề các
⨝
Phép nối
π
Phép chiếu
θ
Tê ta
*
Kết nối tự nhiên
>
Phép so sánh lớn hơn
<
Phép so sánh bé hơn
÷
Phép chia
⨝
Phép và
⨝
Phép hoặc
Tập rỗng
¬
Phủ định
=
Phép bằng
=>
Lớn hơn hoặc bằng
<=
Nhỏ hơn hoặc bằng
σ
Phép chọn
Π
Pi
DANH MỤC CÁC CHỮ VIẾT TẮT
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
vii
AQL
Algebraic Query Language (Ngôn ngữ vấn tin đại số)
CSDL
Cơ sở dữ liệu
CPU
Central Processing Unit (Bộ xử lý trung tâm)
OOP
Object Oriented Programming (Lập trình hướng đối tượng)
QEP
Query Executtion Plan (Chiến lược thực thi vấn tin)
SQL
Structured Query Language (Ngôn ngữ truy vấn có cấu trúc)
OVQP
One Variable Query processor (thể xử lý truy vấn một biến)
ORQ
Đơn quan hệ
MRQ
Đa quan hệ
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
viii
DANH MỤC BẢNG BIỂU
Bảng 1.1. Bảng nhân viên ............................................................................... 15
Bảng 1.2.Bảng phân nhiệm ............................................................................. 15
Bảng 1.3. Bảng dự án ...................................................................................... 15
Bảng 1.4. Bảng Trả lƣơng ............................................................................... 16
Bảng 2.1. Số liệu của quan hệ DanhHieu ....................................................... 29
Bảng 2.2. Số liệu quan hệ ThamGiaCM ......................................................... 29
Bảng 2.3. Số liệu quan hệ KhenThuong ......................................................... 30
Bảng 2.2.1 Kết quả danh sách ngƣời nhận huân chƣơng................................ 36
Bảng 2.2.2. Số liệu của quan hệ DanhHieu .................................................... 39
Bảng 2.2.3 Số liệu quan hệ ThamGiaCM ....................................................... 39
Bảng 2.2.4. Số liệu quan hệ KhenThƣởng ...................................................... 40
Bảng 2.2.5 Kết quả sau khi thực hiện thuật toán tối ƣu .................................. 42
Bảng 3.1: Bảng sinh viên ................................................................................ 44
Bảng 3.2: Bảng lớp.......................................................................................... 44
Bảng 3.3: Bảng môn học ................................................................................. 45
Bảng 3.4: Bảng điểm ....................................................................................... 45
Bảng 3.5: Bảng điểm rèn luyện ....................................................................... 45
Bảng 3.6: Bảng đối tƣợng ............................................................................... 46
Bảng 3.7: Bảng gia đình .................................................................................. 46
Bảng 3.8: Bảng học kỳ .................................................................................... 46
Bảng 3.9: Bảng quan hệ .................................................................................. 47
Bảng 3.10: Bảng thành viên gia đình .............................................................. 47
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
ix
DANH MỤC HÌNH ẢNH
Hình 1.1. Đồ thị kết nối của câu truy vấn ....................................................... 23
Hình 1.2 Các thứ tự kết nối lựa chọn ............................................................. 24
Hình 3.1: Giao diện chính chƣơng trình ......................................................... 48
Hình 3.2: Giao diện phần chèn dữ liệu tự động .............................................. 49
Hình 3.3: Thực hiện truy vấn lấy danh sách điểm sinh viên........................... 50
Hình 3.4 Thực hiện truy vấn lấy danh sách điểm sinh viên sau khi tối ƣu SQL....52
Hình 3.5 Thực hiện truy vấn lấy thông tin sinh viên ...................................... 53
Hình 3.6 Thực hiện truy vấn lấy thông tin sinh viên sau khi tối ƣu SQL ....... 55
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
1
LỜI MỞ ĐẦU
Trong tình hình hiện nay, các tổ chức, doanh nghiệp có nhiều chi nhánh
và đặt ở nhiều nơi với khối lƣợng dữ liệu lớn và đa ngƣời dùng, thƣờng sử
dụng cơ sở dữ liệu. Do đó các phần mềm máy tính hỗ trợ nghiệp vụ của các tổ
chức, doanh nghiệp cũng phải đƣợc tổ chức và phân tán một cách hợp lý. Tuy
nhiên, tốc độ xử lý của các phần mềm quản lý có dữ liệu lớn và nằm phân tán
sẽ trở nên vô cùng chậm, không đáp ứng đƣợc các yêu cầu của ngƣời dùng.
Điều này đòi hỏi các nhà phát triển phần mềm không những phải không ngừng
xây dựng đƣợc những phần mềm lớn đa ngƣời dùng mà còn phải nghiên cứu và
đƣa ra các giải pháp tối ƣu hóa câu lệnh, nhằm từng bƣớc nâng cao tốc độ xử lý
và giảm giá thành của phần mềm.
Qua tìm hiểu và nghiên cứu một số quy trình xây dựng phần mềm thì
quá trình tối ƣu hóa câu lệnh của các hệ chƣơng trình rất có ý nghĩa vì kinh phí
đầu tƣ của các tổ chức, doanh nghiệp cho các thiết bị phần cứng bƣớc đầu còn
rất hạn chế. Cho nên giải pháp tối ƣu hóa đến từng câu lệnh càng trở nên quan
trọng hơn. Điều này luôn có ý nghĩa lớn ngay cả khi các thiết bị phần cứng đáp
ứng đƣợc yêu cầu.
Nếu câu vấn tin SQL (Structured Query Language) đã đƣợc tối ƣu
trƣớc khi thực hiện truy vấn sẽ nâng cao hiệu quả của chƣơng trình và tiết
kiệm chi phí. Cũng chính vì vậy, học viên quyết định chọn đề tài “Tiền tối ưu
các câu SQL từ chương trình nguồn”. Trong phạm vi luận văn của mình,
học viên tìm hiểu câu lệnh truy vấn SQL, nghiên cứu phƣơng pháp tối ƣu câu
SQL để nâng cao hiệu quả của chƣơng trình. Trong quá trình nghiên cứu học
viên đã đề xuất phƣơng pháp phân rã và thay thế câu lệnh SQL.
Câu truy vấn đã đƣợc tối ƣu sẽ nâng cao hiệu quả nếu nó thỏa mãn
một số tiêu chuẩn cho trƣớc nào đó. Một số phƣơng pháp phân tích và tối
ƣu hóa các câu truy vấn dạng SQL đã đƣợc một số tác giả trong và ngoài
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
2
nƣớc nghiên cứu. Một số thuật toán cũng đã đƣợc công bố. Tuy nhiên tất
cả đều dựa trên giả thuyết các câu vấn tin dạng SQL đƣợc lấy trực tiếp từ
một chƣơng trình nguồn hay ngƣời lập trình viết khi lập trình và tối ƣu hóa
một cách thủ công. Một vấn đề đặt ra là một chƣơng trình nguồn dạng tuần
tự mà trong đó có nhiều lệnh SQL có thể thỏa mãn điều kiện song song hóa
và chỉ đƣợc song song hóa và tối ƣu hóa bởi phƣơng pháp song song tự
động. Điều đó gây nhiều bất cập trong ứng dụng. Việc tìm kiếm trong
chƣơng trình nguồn các lệnh SQL để hỗ trợ tối ƣu hóa vấn tin là một vấn đề
thời sự và cần thiết. Trong khuôn khổ của luận văn các vấn đề sẽ lần lƣợt
trình bày trong các chƣơng.
Chƣơng 1: Sẽ trình bày các kiến thức cơ bản về một số phần mềm
tìm kiếm, tổng quan ngôn ngữ SQL, một số dạng câu vấn tin SQL, quá trình tối
ƣu hóa.
Chƣơng 2: Sẽ trình bày các thuật toán tiền tối ƣu câu SQL từ chƣơng
trình nguồn.
Chƣơng 3: xây dựng chƣơng trình demo tìm các câu vấn tin SQL từ
một chƣơng trình nguồn .
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
3
CHƢƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ SQL
1.1. Nghiên cứu ngôn ngữ SQL và một số dạng câu vấn tin SQL cơ bản
1.1.1. Giới thiệu ngôn ngữ SQL
Ngôn ngữ SQL (Structured Query Language) là ngôn ngữ truy vấn
mang tính cấu trúc, đƣợc sử dụng trong hầu hết các hệ quản trị cơ sở dữ liệu
để truy vấn và sửa đổi cơ sở dữ liệu. Ngôn ngữ SQL hỗ trợ các truy vấn dựa
trên các phép toán đại số quan hệ, đồng thời cũng chứa các lệnh sửa đổi cơ sở
dữ liệu và mô tả lƣợc đồ cơ sở dữ liệu.
SQL trƣớc kia đƣợc gọi là SEQUEL, là một ngôn ngữ phi thủ tục đƣợc
IBM phát triển ở San Jose, mục đích để sử dụng rộng rãi trong hệ thống cơ sở
dữ liệu thử nghiệm là System R. Ngày nay, nó đƣợc sử dụng trong rất nhiều
hệ thống CSDL thƣơng mại, và trong một số trƣờng hợp, toàn bộ hệ thống cơ
sở dữ liệu đƣợc thƣơng mại hoá với tên SQL.
Tƣơng tự các ngôn ngữ bậc cao khác, SQL đƣợc xây dựng dựa trên
các chữ cái, các chữ số, các ký tự (ký hiệu phép toán, và các ký tự đặc biệt)
và một tập các từ khóa. Ngôn ngữ SQL có thể sử dụng theo hai kiểu: kiểu
trực tiếp và lập trình. SQL trực tiếp cho phép thực hiện một truy vấn và nhận
đƣợc kết quả ngay tức khắc. SQL lập trình cho phép sử dụng SQL trong một
chƣơng trình viết bằng ngôn ngữ lập trình bậc cao khác (nhƣ C#, Java,..),
hoặc viết các chƣơng trình con.
Ngôn ngữ SQL đƣợc chia thành ba nhóm:
Ngôn ngữ định nghĩa dữ liệu dùng để mô tả cấu trúc của cơ sở
dữ liệu (các bảng, các khung nhìn, các thuộc tính, các chỉ mục, ...)
Ngôn ngữ thao tác dữ liệu cho phép thực hiện các thao tác trên cơ
sở dữ liệu nhƣ: cập nhật cơ sở dữ liệu và truy vấn, lấy ra các thông tin từ cơ
sở dữ liệu.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
4
Ngôn ngữ kiểm soát dữ liệu bao gồm các lệnh dùng để quản lý các
thao tác, các quyền truy cập dữ liệu, kết nối với server.
1.1.2. Câu vấn tin SQL (Structured Query Language)
Đây là một loại ngôn ngữ con dữ liệu quan hệ đƣợc xác nhận là rất
mạnh. Phép toán cơ bản trong SQL là phép ánh xạ, đƣợc mô tả về cú pháp
nhƣ là khối SELECT - FROM - WHERE.
Mệnh đề SELECT nghĩa là chọn các thuộc tính ra, hay còn gọi là thuộc
tính kết quả, nếu không chỉ ra thuộc tính thì dùng dấu * có nghĩa là tất cả các
thuộc tính của quan hệ đang đƣợc chỉ ra sau mệnh đề FROM. Mệnh đề
FROM để chỉ ra quan hệ cần cho việc xử lý. Sau mệnh đề WHERE là một
biểu thức điều kiện lọc dữ liệu (hay còn gọi là biểu thức logic).
Chú ý: Từ đây về sau chúng ta đồng nhất; quan hệ với bảng, thuộc tính
với cột (columns) hay trƣờng (field), bộ (tupe) với bản ghi (record) hay hàng
(Rows)
1.1.2.1. Thao tác với bảng.
Tạo bảng
Create Table TênBảng (TênCột1 LoạiDữLiệu[(ĐộRộng)] [Not null],
TênCột2,...)
Với Not null là ngầm định
Ví dụ
Create Table S
( S# Integer Not null,
Sname VarChar(8) Not Null,
Status Integer Not Null,
City VarChar (30) Not Null)
Create Table P
( P# Integer Not null,
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
5
Pname VarChar(10) Not Null,
Weight Integer Not Null,
Color VarChar ( 10) Not Null
)
Create Table SP
( S# Integer Not null,
P# Integer Not null,
Qty Integer,
Sdate Date Not Null,
Price Decimal (8,2)
)
Xóa bảng
Cú pháp
Drop Table TênBảng
Nhập dữ liệu
Insert Into S(S#, Sname, Status, City) Values (1011, „Việt Tiên‟, 40,
„TP. Hà Nội‟) Nêu vị trí các cột là cố định thì viết:
Insert Into S Values (1011, „Việt Tiến‟, 40, „TP. Hà Nội‟)
Nếu quên vị trí các cột là cố định thì viết tên cột và các giá trị theo vị trí
tƣơng ứng Chẳng hạn:
Insert Into S (Status, s#, City, Sname ) Values (40, 1011, „TP. Hà Nội‟,
„Việt Tiến‟, 40)
Chú ý: Đây là lệnh thêm dữ liệu nhƣng cũng đƣợc dùng để nhập dữ
liệu.
1.1.2.2. Khối lệnh Select
Cú pháp nhƣ một khối select - from - where
select: Xác định nội dung của các cột cần đƣa ra kết quả.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
6
from: Xác định các bảng cần lấy thông tin ra
where: Lọc các bản ghi thoả yêu cầu để đƣa ra kết quả.
Ngoài ra, để mở rộng khả năng của ngôn ngữ, khối select - from where còn đƣợc bổ sung thêm các mệnh đề groupe by, having, order by. Các
hàm mẫu và một số phần mềm còn thêm cả mệnh đề contpute, for browse.
Dạng tổng quát của khối select đuợc biểu diễn nhƣ sau:
SELECT [* | DISTINCT] danh-sách-chiếu
FROM danh_sách_tên_bảng | tên_các_View
[WHERE biểu_thức_điều_kiện]
[GROUPE BY danh_sách_tên_cột ]
[ HAVING biểu_thức_điều_kiện]
[ ORDER BY {tên_cột | số thứ_tự_cột | biểu_thức}
[ ASC | DESC ]]
Trong đó mệnh đề where dƣợc biểu diễn dạng:
WHERE [NOT] BiểuThức PhépSoSánh BiểuThức
WHERE [NOT] tên_cột [ NOT] LIKE xâu_ký_tự
WHERE [NOT] biểu_thức [NOT] BETWEEN biểu_thức AND
biểu_thức
WHERE [NOT] BiểuThức [NOT] IN ({danhSách | CâuHỏiCon})
WHERE EXISTS (CâuHỏiCon)
WHERE [NOT] BiểuThức PhépSoSánh { ANY | ALL (CâuHỏiCon)}
WHERE [NOT] TênCột phépKếtNối TênCột
WHERE [NOT] biểu_thức_logic
WHERE [NOT] biểu_thức { AND | OR } [NOT] biểu_thức
1.1.2.3. Tìm kiếm theo câu hỏi đơn giản
Không điều kiện và câu hỏi chỉ liên quan tới 1 bảng.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
7
Trong mệnh đề select có danh sách chiếu. Danh sách này xác định tên
các cột cần có trong bảng kết quả. Nếu xuất hiện là chọn hết các cột của bảng.
Cho biết danh sách các nhà cung cấp.
SELECT *
FROM S
Các cách kết sau đây là hoàn toàn phù hợp trong SQL
SELECT P#, (7 + 3 ) * QTY
Để bảng kết quả đúng là một quan hệ (không có bộ trùng nhau ), trong
mệnh đề select cần thêm từ khoá distinct
Cho biết các mặt hàng khác nhau đã đƣợc cung cấp
SELECT DISTINCT PName FROM SP
Tìm kiếm với điều kiện đơn giản
Tìm mã số những nhà cung cấp đã cung cấp mật hàng P2.
SELECT S#
FROM SP
WHERE P# = 'P2 '
Trong SQL- các phép so sánh đƣợc sử dụng bao gồm >, <, >= , <=, =
và <>. Các phép tính trên dùng cho mọi loại dữ liệu.
Tìm kiếm có xử lý xâu ký tự
Trong trƣờng hợp ngƣời sử dụng, không nhớ rõ tên ngƣời hoặc địa
danh... ví dụ là Hoa hay Hoan khi đó có thể viết:
SELECT *
FROM S
WHERE SNAME LIKE 'HOA%'
Trong đó ký hiệu ' % ' là thay thế cho một xâu con, dấu phân cách để
thay thế cho một ký tự.
A%B: xâu ký tự bất kỳ bắt đầu bằng chữ A và kết thúc bảng chữ B %A
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
8
: xâu ký tự bất kỳ có ký tự kết thúc là A
A_B : xâu gồm ba ký tự có ký tự thứ hai là bất kỳ
A_: xâu gồm hai ký tự có ký đầu là A.
Xử lý ngày tháng
Ngoài các phép tính thông thƣờng SQL còn có thể xử lý dữ liệu dạng
ngày tháng.
Ví dụ: Tìm những mã mặt hàng bán trƣớc ngày 04-04-11 là 10 ngày.
SELECT P#
FROM SP
WHERE „04-04-11' - sdate = 10
Tìm kiếm sử dụng IN và BETWEEN
Tìm mã nhƣng mặt hàng đã cung cấp có giá từ 1000 đến 2000
SELECT P#
FROM SP
WHERE PRICE BETWEEN 1000 AND 2000
Tìm mã số các nhà cung cấp dã cung cấp ít nhất một trong các mặt
hàng có mã P1, P2, P3.
SELECT S#
FROM SP
WHERE P# IN („P1‟ , „P2‟, „P3‟)
1.1.2.4. Các hàm thư viện
Trong SQL có các hàm mẫu gồm count, max, min, sum, avg. Riêng
hàm count khi có đối số là “*” là chỉ đếm số bản ghi thỏa yêu cầu tìm kiếm
mà không cần quan tâm tới bất kỳ cột nào
Cho biết số lần mặt hàng P2 đã đƣợc cung cấp.
SELECT COUNT ( * )
FROM SP
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
9
WHERE P# = „P2‟
Tìm hiệu số mặt hàng P1 bán một lần nhiều nhất và một lần ít nhất
của hãng S1.
SELECT MAX(QTY ) - MIN(QTY)
FROMSP
WHERE S# = 'Sl' AND P# = 'P1‟
Cho biết danh sách mã số mặt hàng đã đƣợc cung cấp.
SELECT COUNT ( DISTINCT p# )
FROM SP
Chú ý rằng đối số của các hàm có thể là một biểu thức sổ học bất kỳ
1.1.2.5. Tìm nhờ mệnh đề GROUP BY
Tìm mà sổ các mặt hàng mà mỗi nhà cung cấp đã cung cấp cho khách
hàng.
SELECT S#,P#
FROM SP
GROUP BY S#
Sau mệnh đề này bảng SP đƣợc ấy ra sau đó phân thành nhóm theo mã
số S#, có nghĩa là các hộ có cùng giá trị S# đƣợc sắp xếp liên tiếp nhau, hết
nhóm này đến nhóm khác.
Tìm kiếm sử dụng mệnh đề HAVING .
HAVING thƣờng đƣợc sử dụng cùng group by. Sau HAVING là biểu
thức điều kiện. Biểu thức điều kiện này không tác động vào toàn bảng đƣợc
chỉ ra sau from mà chỉ tác động lần lƣợt từng nhóm các bản ghi đã chỉ ra tại
mệnh đề group by.
Ví dụ: Tìm mã số những nhà cung cấp đã cung cấp ít nhất hơn hai mặt
hàng.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
10
SELECT S#
FROM SP
GROUPE BY S#
HAVING COUNT(DISTINCT P#) > 2
Tìm kiếm có sắp xếp
Tìm tên các mặt hàng mầu đỏ và sắp xếp theo thứ tự giảm dần của mã
số mặt hàng.
SELECT PNAME, P#
FROM P
WHERE COLOUR = ' ĐỎ ‟
ORDER BY P# ASC
Sau order by là tên cột rồi đến chiều sắp xếp tăng hoặc giảm ( ASC
hoặc DESC ). Có thế sắp xếp nhiều cột và nếu không chỉ ra chiều sắp xếp thi
hệ thống ngầm định là ASC.
Mệnh đề order By nếu đứng sau group by thì miền tác động của sắp xếp
là trong từng nhóm của cột đƣợc chỉ ra trong group by. Nếu cột sắp xếp có ở
mệnh đề select thì trong mệnh đề order by có thể chỉ cần chỉ ra số thứ tự của
cột đó trong danh sách chiếu là đủ.
Ví dụ trên có thể viết:
SELECT PNAME, P#
FROM P
WHERE COLOUR = 'ĐỎ'
ORDER BY 2 ASC
1.1.2.6. Tìm kiếm và 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.
Tìm những nhà cung cấp đã cung cấp ít nhất một mặt hàng nào đó.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
11
SELECT *
FROM S
WHERE EXISTS
(SELECT *
FROM SP
WHERE SP.S# = S.S# )
hoặc:
SELECT *
FROM S
WHERE 0 < (SELECT COUNT (*) FROM SP WHERE SP.S # =
S.S# )
Tìm kiếm có sử dụng lƣợng từ ANY và ALL
Tìm tên những mặt hàng có mã số là mặt hàng mà hãng có mã sổ S1 đã
bán.
SELECT PNAME
FROM P
WHERE P# = ANY (SELECT P# FROM SP WHERE S# = 'S1 ‟)
Tìm tên những hãng cung cấp ít nhất một mặt hàng màu đỏ.
SELECT SNAME
FROM S *
WHERE S# = ANY SELECT S#
FROM SP, S
WHERE S.S# = SP.S# AND P.P# = SP.P#
AND COLOUR = 'Đỏ‟
Tìm mã số những hãng cung cấp số lƣợng một lần một mặt hàng nào đó
lớn hơn hoặc bằng số lƣợng mỗi lần cung cấp của các hãng.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên
http://www.lrc-tnu.edu.vn/
- Xem thêm -