ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Chanthiva MANIVONG
TỐI ƢU MỘT SỐ CÂU LỆNH TRUY VẤN
SQL VÀ ỨNG DỤNG
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
THÁI NGUYÊN - 2015
Số hóa bởi Trung tâm Học liệu – ĐHTN
Số hóa bởi Trung tâm Học liệu – ĐHTN
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Chanthiva MANIVONG
TỐI ƢU MỘT SỐ CÂU LỆNH TRUY VẤN
SQL VÀ ỨNG DỤNG
Chuyên ngành: Khoa học máy tính
Mã số: 60 48 01 01
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Ngƣời hƣớng dẫn khoa học: TS.VŨ ĐỨC THÁI
THÁI NGUYÊN - 2015
Số hóa bởi Trung tâm Học liệu – ĐHTN
Số hóa bởi Trung tâm Học liệu – ĐHTN
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
TỐI ƢU MỘT SỐ CÂU LỆNH TRUY VẤN
SQL VÀ ỨNG DỤNG
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 60 48 01 01
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Ngƣời hƣớng dẫn khoa học
TS. VŨ ĐỨC THÁI
Học viên thực hiện
Chanthiva MANIVONG
Thái nguyên – 2015
Số hóa bởi Trung tâm Học liệu – ĐHTN
i
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 TS.Vũ Đức Thái, đã 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.
Thái Nguyên, tháng 12 năm 2015
Tác giả
Chanthiva MANIVONG
Số hóa bởi Trung tâm Học liệu – ĐHTN
ii
LỜI CẢM ƠN
Để hoàn thành chƣơng trình cao học và viết luận văn, tôi đã nhận đƣợc
sự hƣớng dẫn, giúp đỡ góp ý nhiệt tình của quý thầy cô trƣờng Đại học Công nghệ
Thông tin và Truyền thông – Đại học Thái Nguyên.
Tôi xin chân thành cảm ơn đến quý thầy cô trƣờng Đại học Công nghệ
Thông tin và Truyền thông - Đại học Thái Nguyên, quý thầy cô Viện CNTT, đặc
biệt là những thầy cô đã tận tình dạy bảo cho tôi trong suốt thời gian học tập tại
trƣờng.
Tôi xin gửi lời cảm ơn sâu sắc đến TS. VŨ ĐỨC THÁI đã dành rất nhiều
thời gian và tâm huyết, chỉ bảo tận tình hƣớng dẫn nghiên cứu và giúp tôi hoàn
thành luận văn này.
Nhân đây, tôi xin chân thành cảm ơn Ban giám hiệu, Phòng Đào tạo Sau
Đại học trƣờng Đại học Công nghệ Thông tin và Truyền thông - Đại học Thái
Nguyên đã tạo mọi điều kiện để tôi học tập và hoàn thành tốt khóa học.
Mặc dù đã cố gắng hoàn thành luận văn bằng tất cả sự nhiệt tình tâm
huyết và năng lực của mình. Tuy nhiên, luận văn không thể tránh những thiếu sót,
tôi rất mong nhận đƣợc những đóng góp quý báu của quý thầy cô và các bạn.
Lời cảm ơn sau cùng tôi xin dành cho gia đình và những ngƣời bạn đã
hết lòng quan tâm giúp đỡ, tạo điều kiện tốt nhất để tôi hoàn thành luận văn tốt
nghiệp này.
Tôi xin chân thành cảm ơn!
Thái Nguyên, tháng 12 năm 2015
Học viên thực hiện
Chanthiva MANIVONG
Số hóa bởi Trung tâm Học liệu – ĐHTN
iii
MỤC LỤC
LỜI CAM ĐOAN ................................................................................................... i
MỤC LỤC .............................................................................................................. ii
DANH MỤC CÁC KÝ HIỆU................................................................................ v
DANH MỤC CÁC CHỮ VIẾT TẮT ................................................................... vi
DANH MỤC BẢNG BIỂU ................................................................................. vii
DANH MỤC HÌNH ẢNH .................................................................................. viii
LỜI NÓI ĐẦU ....................................................................................................... 1
CHƢƠNG 1. NHỮNG VẤN ĐỀ CƠ BẢN VỀ CSDL VÀ CÂU LỆNH SQL..... 2
1.1. Cơ sở dữ liệu quan hệ ................................................................................. 2
1.1.1. Vai trò của hệ thống thông tin ............................................................. 2
1.1.2 Các chức năng của một hệ quản trị CSDL ........................................... 3
1.1.3. Các thành phần của một hệ QTCSDL ................................................. 4
1.2. Giới thiệu ngôn ngữ SQL ........................................................................... 4
1.3. Ngôn ngữ định nghĩa dữ liệu ...................................................................... 5
1.4. Ngôn ngữ truy vấn dữ liệu SQL (Structured Query Language) ................ 6
CHƢƠNG 2. CÁC GIẢI PHÁP VÀ THUẬT TOÁN TỐI ƢU CÂU LỆNH SQL .... 14
2.1. Tối ƣu hóa câu lệnh SQL .......................................................................... 14
2.2. Một số nguyên tắc trong tối ƣu ................................................................. 14
2.3. Một số chiến lƣợc tối ƣu ........................................................................... 16
2.4. Một số thuật toán ...................................................................................... 18
2.4.1.Thuật toán Ingres ................................................................................ 18
2.4.2. Thuật toán INGRES- QOA ............................................................... 25
2.4.3. Thuật toán System ............................................................................. 25
2.4.4. Thuật toán R-QOA ............................................................................ 27
2.5. Phƣơng pháp phân rã SQL ........................................................................ 30
2.5.1. Nôi dung của phƣơng pháp phân rã SQL. ......................................... 30
2.5.2. Những ƣu và nhƣợc điểm của phƣơng pháp phân rã SQL ................ 35
2.5.3. Ứng dụng của phƣơng pháp phân rã SQL ......................................... 36
2.6. Phƣơng pháp thay thế SQL ....................................................................... 37
2.6.1. Bản chất của vấn đề thay thế SQL..................................................... 37
Số hóa bởi Trung tâm Học liệu – ĐHTN
iv
2.6.2. Những ƣu và nhƣợc điểm của của phƣơng pháp thay thế SQL ........ 38
2.6.3. Ứng dụng của phƣơng pháp thay thế SQL ........................................ 40
2.7. Thuật toán xử lý tiền tối ƣu câu SQL ....................................................... 41
2.8. Một số kỹ thuật tối ƣu ............................................................................... 46
2.8.1. Nguyên nhân làm giảm tốc độ xử lý ................................................. 46
2.8.2. Các câu truy vấn đƣợc viết nghèo nàn và một só cách khắc phục: ... 46
CHƢƠNG 3. CHƢƠNG TRÌNH THỬ NGHIỆM TỐI ƢU MỘT SỐ CÂU
LỆNH ................................................................................................................... 53
3.1. Mô tả bài toán ........................................................................................... 53
3.2. Thiết kế các bảng dữ liệu cho hệ thống .................................................... 54
3.3 Thử nghiệm tiền tối ƣu câu lệnh SQL ....................................................... 57
3.3.1 Xây dựng chƣơng trình thử nghiệm. .................................................. 57
3.3.2. Thực hiện thử nghiệm........................................................................ 58
KẾT LUẬN .......................................................................................................... 67
TÀI LIỆU THAM KHẢO .................................................................................... 68
Số hóa bởi Trung tâm Học liệu – ĐHTN
v
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
Số hóa bởi Trung tâm Học liệu – ĐHTN
vi
DANH MỤC CÁC CHỮ VIẾT TẮT
AQL Algebraic Query Language (Ngôn ngữ vấn tin đại số)
CSDLCơ sở dữ liệu
CPUCentral Processing Unit (Bộ xử lý trung tâm)
OOPObject 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)
SQLStructured Query Language (Ngôn ngữ truy vấn có cấu trúc)
OVQPOne 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 – ĐHTN
vii
DANH MỤC BẢNG BIỂU
Bảng 2.1. NHAN VIEN ....................................................................................... 20
Bảng 2.2. PHAN NHIEM VU.............................................................................. 20
Bảng 2.3. Du An................................................................................................... 22
Bảng 2.4. LUONG ............................................................................................... 22
Bảng 2.5. Số liệu của quan hệ DanhHieu ............................................................ 32
Bảng 2.6. Số liệu quan hệ ThamGiaCM .............................................................. 33
Bảng 2.7. Số liệu quan hệ KhenThuong .............................................................. 33
Bảng 2.8. Kết quả danh sách ngƣời nhận huân chƣơng ....................................... 38
Bảng 2.9. Số liệu của quan hệ DanhHieu ............................................................ 42
Bảng 2.10. Số liệu quan hệ ThamGiaCM ............................................................ 42
Bảng 2.11. Số liệu quan hệ KhenThƣởng ............................................................ 44
Bảng 2.12. Kết quả sau khi thực hiện thuật toán tối ƣu ....................................... 46
Bảng 3.1. Sinh viên ............................................................................................. 54
Bảng 3.2 Lớp ........................................................................................................ 55
Bảng 3.3. Môn học ............................................................................................... 55
Bảng 3.4. Điểm .................................................................................................... 56
Bảng 3.5. Điểm rèn luyện .................................................................................... 56
Bảng 3.6. Điểm học kỳ......................................................................................... 56
Số hóa bởi Trung tâm Học liệu – ĐHTN
viii
DANH MỤC HÌNH ẢNH
Hình 2.1. Đồ thị kết nối của câu truy vấn ............................................................ 29
Hình 2.2 Các thứ tự kết nối lựa chọn .................................................................. 29
Hình 3.1. Cơ sở dữ liệu thực nghiệm ................................................................... 57
Hình 3.2. Giao diện chính chƣơng trình............................................................... 57
Hình 3.3. Giao diện phần chèn dữ liệu tự động ................................................... 58
Hình 3.4. Thực hiện truy vấn lấy danh sách điểm sinh viên đã học môn Toán cao cấp 1 59
Hình 3.5. Thực hiện truy vấn lấy danh sách điểm sinh viên sau khi tối ƣu ........ 61
Hình 3.6 Thực hiện truy vấn lấy thông tin lý lịch sinh viên ................................ 61
Hình 3.7. Thực hiện truy vấn lấy thông tin sinh viên sau khi tối ƣu SQL ........... 62
Số hóa bởi Trung tâm Học liệu – ĐHTN
1
LỜI NÓI ĐẦ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. Ngƣời dùng cũng phân tán nhiều địa
điểm với khoảng cách không gian lớn tần suất truy cập sử dụng cơ sở dữ liệu
khác nhau. Do đó 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 chƣơng trình rất có ý nghĩa vì kinh phí đầu
tƣ của 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ế. Để tối ƣu câu lênh trong chƣơng trình phần mềm ta cần thử nghiệm các câu
lệnh đơn lẻ đảm bảo các yêu cầu sau đó mới có thể áp dụng cho một chƣơng
trình tổng hợp. Các giải pháp, thuật toán tối ƣu hóa đến từng câu lệnh cần đƣợc
nghiên cứu phân tích và thử nghiệm cẩn thận.
Nếu câu vấn tin SQL (Structured Query Language) đã đƣợc tối ƣu trƣớc
khi thực hện truy vấn sẽ nâng cao hiệu quả của chƣơng trình và tiết kiệm chi phí.
Nhận thấy đƣợc mức độ cấp thiết của vấn đề và đƣợc sự gợi ý của thầy giáo
hƣớng dẫn em đã chọn đề tài: “Tối ƣu một số câu lệnh truy vấn SQL và ứng
dụng” làm luận văn tốt nghiệp của mình.
Trong phạm vì 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. Nội dung luận văn gồm 03 chƣơng:
Chƣơng 1: Giới thiệu vấn đề cơ bản về CSDL và câu lệnh truy vấn SQL
Chƣơng 2: Các giải pháp và thuật toán tối ƣu cân lệnh SQL
Chƣơng 3: Xây dựng chƣơng trình thử nghiệm
Trong đó, tập trung vào các thuật toán đƣợc thử nghiệm phân tích ở
chƣơng 2. Sau khi thử nghiệm thành công có thể khuyến khích các lập trình viên
sử dụng linh hoạt trong các bài toán cụ thể. Từ đó khi xây dựng các phần mềm
ứng dụng các nhà phát triển có thể ứng dụng để chọn lựa sử dụng trong một
chƣơng trình cụ thể để có thể tối ƣu cho nhiều đoạn mã tƣơng tự.
Số hóa bởi Trung tâm Học liệu – ĐHTN
2
CHƢƠNG 1
NHỮNG VẤN ĐỀ CƠ BẢN VỀ CSDL VÀ CÂU LỆNH SQL
1.1. Cơ sở dữ liệu quan hệ
1.1.1. Vai trò của hệ thống thông tin
Mọi hoạt động kinh doanh của một doan nghiệp đều phải lƣu trữ chứng từ,
tài liệu, số liệu phục vụ công tác kinh doanh, hạch toán kinh tế, theo dõi quá trình
kinh doanh đảm bảo hiệu quả. Những thông tin đó gọi là cơ sở dữ liệu kinh
doanh. Trƣớc khi có công nghệ thông tin hỗ trợ, các nhà doanh nghiệp phải lƣu
trữ, xử lý thông tin bằng các công cụ thủ công, hoặc bán thủ công. Khi công nghệ
thông tin với máy tính điện tử phát triển hỗ trợ việc xử lý dữ liệu đóng góp to
lớn vào hiệu quả kinh doanh của doanh nghiệp. Những thông tin phục vụ kinh
doanh có những biến đổi quann trọng với những cấu trúc phức tạp, tinh vi, khối
lƣợng lớn, chất lƣợng cao ngày càng có giá trị trong hoạt động kinh doanh.
Từ những thông tin, tài liệu thô sơ ban đầu đã hình thành nên hệ cơ sở dữ
liệu bao gồm thiết bị phần cứng để lƣu trữ, xử lý, truyền thông và cung cấp thông
tin đến dữ liệu và các phần mềm thao tác dữ liệu với nhiều mô hình đa dạng
phong phú có nhiều quy mô, nhiều lớp.
Mọi doanh nghiệp đều có chức năng kinh doanh để thực hiện những công
việc sinh ra lợi nhuận. Để thực hiện chức năng kinh doanh hiệu quả doanh
nghiệp cần xử lý các thông tin liên quan đến quá trình kinh doanh. Nếu tổ chức
tốt thông tin việc kinh doanh của doanh nghiệp sẽ có hiệu quả, ổn định và giúp
doanh nghiệp phát triển. Thông tin phục vụ cho kinh doanh chính là cơ sở dữ liệu
về toàn bộ quá trình kinh doanh đƣợc lƣu trữ theo một cấu trúc thích hợp, đáp
ứng mọi thông tin cho việc điều hành, ra quyết định và định hƣớng cho doanh
nghiệp.
Mô hình khái niệm có vai trò rất lớn để xây dựng nên một cơ sở dữ liệu
nhất là trƣờng hợp doanh nghiệp bắt đầu hoạt động. Nó mô tả đầy đủ chính xác
thông tin cần cho doanh nghiệp, tránh đƣợc sự nhầm lẫn thiếu hụt thông tin có
thể dự phòng cho sự phát triển của doanh nghiệp trong một tƣơng lai lâu dài. Là
nền tảng vững chắc cho việc cài đặt thực thi vận hành. Việc xây dựng mô hình
Số hóa bởi Trung tâm Học liệu – ĐHTN
3
khái niệm tốt sẽ mang lại hiệu quả cao vì mọi thiệt hại ở giai đoạn này không tốn
kém việc thay đổi chỉnh sửa rất dễ dàng. Nếu khi lắp đặt hệ thống đã chi phí thiết
bị, phầnm mềm mà thay đổi sẽ kéo theo những thiệt hại lớn
Một hệ cơ sở dữ liệu bao gồm cơ sở dữ liệu đƣợc tổ chức theo một mô
hình chuẩn và lƣu trữ trên hệ thống các thiết bị lƣu trữ vật lý có các công cụ và
các dịch vụ để tạo lập và sử dụng trích xuất thông tin đáp ứng nhu cầu kinh
doanh của doanh nghiệp. Do sự phát triển của công nghệ việc lƣu trữ vật lý cũng
có nhiều giải pháp nhƣ lƣu trữ tập trung, lƣu trữ phân tán, kho dữ liệu…Khi xây
dựng hệ cơ sở dữ liệu phải đạt đƣợc những yêu cầu sau:
- Lƣu trữ đƣợc đầy đủ, chính xác thông tin cần thiết cho quá trình quản lý
kinh doanh
- Mô hình khái niệm phải đƣợc phân tích rõ ràng, hoàn chỉnh trƣớc khi
thực thi cài đặt cơ sở dữ liệu trên thiết bị vật lý.
- Dữ liệu không đƣợc lƣu trữ dƣ thừa trong mô hình vì nếu lƣu trữ trùng
lặp khi cập nhật sẽ phát sinh sự không nhất quán ngƣời dùng không biết dữ liệu
nào là chính xác để sử dụng. Đồng thời cũng không lƣu trữ dữ liệu kết xuất nghĩa
là đƣợc suy dẫn từ dữ liệu khác.
- Hệ cơ sở dữ liệu phải có tính mở, nghĩa là có vị trí lƣu trữ dự phòng cho
sự phát triển trong tƣơng lai sao cho vẫn đảm bảo tính liên kết, lô gic trong lƣu
trữ vật lý.
Để thực hiện xây dựng một hệ CSDL, các nhà cung cấp dịch vụ xây dựng
nên các Hệ quản trị CSDL là công cụ để thực thi cài đặt CSDL và cung cấp các
thao tác tạo lập và truy xuất vào CSDL lấy ra thông tin.
1.1.2 Các chức năng của một hệ quản trị CSDL
Một hệ quản trị CSDL thực hiện các chức năng sau:
+ Tạo cấu trúc dữ liệu tƣơng ứng với mô hình dữ liệu đƣợc chọn.
+ Đảm bảo tính độc lập dữ liệu.
+ Cho phép cập nhật dữ liệu.
+ Kết xuất ra đƣợc các báo cáo từ các dữ liệu trong CSDL.
+ Đảm bảo tính an toàn và toàn vẹn dữ liệu trong CSDL.
+ Cung cấp các tiện ích sao lƣu phục hồi dữ liệu.
Số hóa bởi Trung tâm Học liệu – ĐHTN
4
+ Cung cấp các thủ tục điều khiển tƣơng tranh.
1.1.3. Các thành phần của một hệ QTCSDL
Một hệ quản trị thông thƣờng có các thành phần chính sau:
+ Ngôn ngữ định nghĩa dữ liệu (Data Definition Language).
+ Ngôn ngữ thao tác dữ liệu (Data Manipulation Language).
+ Ngôn ngữ hỏi đáp dữ liệu (Query Language).
+ Bộ viết báo cáo.
+ Từ điển dữ liệu.
+ Bộ phát sinh đồ hoạ.
1.2. 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, ...)
Số hóa bởi Trung tâm Học liệu – ĐHTN
5
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.
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.3. Ngôn ngữ định nghĩa dữ liệu
Lệnh 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,
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)
)
Số hóa bởi Trung tâm Học liệu – ĐHTN
6
Lệnh xóa bảng
Cú pháp
Drop Table Tên bảng
Lệnh 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.4. Ngôn ngữ truy vấn dữ liệu 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 (column) hay trƣờng (field), bộ (tupe) với bản ghi (record) hay hàng (row)
Cú pháp
select: Xác định nội dung của các cột cần đƣa ra kết quả.
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:
Số hóa bởi Trung tâm Học liệu – ĐHTN
7
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
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.
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
Số hóa bởi Trung tâm Học liệu – ĐHTN
8
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 :
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
Số hóa bởi Trung tâm Học liệu – ĐHTN
9
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‟)
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
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ỳ
Mệnh đề GROUP BY
Mệnh đề GROUP BY thực thi nhiệm vụ sau khi truy vấn nhóm các bộ vào
thành nhóm theo tiêu chí tác động trong nhóm.
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ố hóa bởi Trung tâm Học liệu – ĐHTN
10
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.
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
Số hóa bởi Trung tâm Học liệu – ĐHTN
11
Số hóa bởi Trung tâm Học liệu – ĐHTN
12
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 đó.
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à công ty 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.
SELECT S#
FROM SP
WHERE QTY >= ALL (SELECT QTY FROM SP)
Số hóa bởi Trung tâm Học liệu – ĐHTN