Đề tài QL Công trình thực hành trên SQL
Trang 1Đại học Tin Học 5 Trang 1
MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU - 3
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT - 4
1 CÁC PHÉP TOÁN ĐẠI SỐ QUAN HỆ - 4
2 NGÔN NGỮ SQL - 7
2.1 Cú pháp - 7
2.2 Các phép toán - 7
CHƯƠNG 3: BÀI TẬP ĐSQH VÀ SQL - 14
1 LƯỢC ĐỒ CSDL QUAN HỆ - 14
1.1 Lược đồ và Tân từ - 14
1.2 Các ràng buộc toàn vẹn - 14
1.3 Scrip CSDL - 15
2 BÀI TẬP ĐSQH - 16
2.1 Câu 1: - 16
2.2 Câu 2: - 16
2.3 Câu 3: - 16
2.4 Câu 4: - 16
2.5 Câu 5: - 16
2.6 Câu 6: - 117
2.7 Câu 7: - 117
2.8 Câu 8: - 117
2.9 Câu 9: - 117
2.10 Câu 10: - 117
2.11 Câu 11: - 117
2.12 Câu 12: - 117
2.13 Câu 13: - 117
2.14 Câu 14: - 117
2.15 Câu 15: - 18
2.16 Câu 16: - 18
3 BÀI TẬP SQL - 118
3.1 Câu 1: - 118
3.2 Câu 2: - 118
3.3 Câu 3: - 118
3.4 Câu 4: - 18
3.5 Câu 5: - 19
3.6 Câu 6: - 19
3.7 Câu 7: - 19
3.8 Câu 8: - 19
3.9 Câu 9: - 20
3.10 Câu 10: - 20
3.11 Câu 11: - 20
3.12 Câu 12: - 20
3.13 Câu 13: - 21
3.14 Câu 14: - 21
3.15 Câu 15: - 21
Trang 2Đại học Tin Học 5 Trang 2
3.16 Câu 16: - 21
3.17 Câu 17: - 22
3.18 Câu 18: - 22
3.19 Câu 19: - 22
3.20 Câu 20: - 22
3.21 Câu 21: - 22
3.22 Câu 22: - 22
3.23 Câu 23: - 23
3.24 Câu 24: - 23
3.25 Câu 25: - 23
3.26 Câu 26: - 23
CHƯƠNG 4: KẾT LUẬN VÀ ĐỀ NGHỊ - 24
Trang 3Đại học Tin Học 5 Trang 3
CHƯƠNG 1: GIỚI THIỆU
Cơ sở dữ liệu là một tập hợp các dữ liệu về các đối tượng cần quản lý, được thiết kế để đáp ứng nhu cầu thông tin của một tổ chức, được lưu trữ trên các thiết bị lưu trữ của máy tính và được quản lý theo một cơ chế thống nhất của hệ quản trị cơ
sở dữ liệu nhằm thực hiện ba chức năng: mô tả dữ liệu, cập nhật dữ liệu, tìm kiếm
dữ liệu Cơ sở dữ liệu được ứng dụng rộng rãi trong cuộc sống như ngân hàng, hàng không, đại học, các phương tiện giao thông, bán hàng, …
Hệ quản trị cơ sở dữ liệu là một hệ thống phần mềm (các chương trình) cho phép người dùng định nghĩa, tạo và duy trì cơ sở dữ liệu đồng thời cung cấp dịch vụ truy cấp đến cơ sở dữ liệu này một cách có quản lý.Một số hệ quản trị cơ sở dữ liệu thông dụng: Microsofts Access, Visual Foxpro, Microsoft SQL Server, MySQL, Oracle, …
Hệ cơ sở dữ liệu là môn học giúp cho sinh viên có kiến thức về ngôn ngữ SQL và thực hiện truy vấn thành thạo các câu lệnh trên CSDL Bài tập Hệ CSDL giúp chúng
ta tạo, xóa cơ sở dữ liệu tạo các ràng buộc toàn vẹn các khóa chính và sao lưu , phục hồi cơ sở dữ liệu Môn học này cũng giúp các sinh viên thành thạo các thao tác như: tạo CSDL, tạo bảng, tạo các ràng buộc cho bảng, các câu lệnh, các phép toán SQL giúp các sinh viên có cơ hội thực hành và hoàn thiện hơn về kiến thức quản lý cơ sở
dữ liệu trong môn hệ cơ sở dữ liệu
Trang 4Đại học Tin Học 5 Trang 4
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
1 CÁC PHÉP TOÁN ĐẠI SỐ QUAN HỆ
1.1 Định nghĩa Đại số quan hệ
- Đại số quan hệ là một bộ α = <M, P> trong đó:
M là tập các quan hệ cho trước
P là tập các phép toán cơ bản sau đây:
6 Phép chia (Division) ÷ hay /
7 Phép kết nối tự nhiên (Natural Join) *
8 Phép tích Đề-các (Dacastersian) x
9 Phép θ kết nối (delta-join)
- Ví dụ : Cho lược đồ cơ sở dữ liệu như sau :
SV (MASV, HOTEN_SV, NAMS_SV, DCHI_SV, TENLOP)
MON (MAMH, TENMON, SO_TC, LOAI_MON)
GV (MAGV, HOTEN_GV, NAMS_GV, HOCVI)
HOC (MASV, MAMH, STT_HK, NKHOA, LANTHI, K_QUA)
DAY (MA_GV, MAMH, STT_HK, NKHOA)
102 Le Thanh Ha 1991 Vinh Long XD5
Trang 5Đại học Tin Học 5 Trang 5
R: Danh sách lớp: S: Danh sách môn học:
P = R[X] = {t.X | t R }
Ví dụ: Tìm mã số, họ tên sinh viên có địa chỉ ‘Can Tho’
SV MASV HOTEN_SV NAMS_SV DCHI_SV TENLOP
101 Tran Van An 1990 Can Tho TH5
102 Le Thanh Ha 1991 Vinh Long XD5
103 Phan Thi Mo 1992 Can Tho DL5
- Nếu U V Ø thì phải đổi tên các thuộc tính trùng nhau
Ví dụ: Cho hai quan hệ R(U) và S(V):
1.1.4 Phép θ - kết nối: kí hiệu
Định nghĩa:
Cho hai quan hệ R(U) và S(V) Gọi θ là một phép toán logic liên quan tới các thuộc tính của U và V (thường thuộc trong các phép so sánh <, ≤, >, =, ≠) Phép
θ kết nối giữa quan hệ R với quan hệ S, là một quan hệ P với tập thuộc tính U
V, được định nghĩa như sau:
P = R S = { <u, v> | u R v S u [U] θ v [V] }
Chú ý:
MAMH TH333 TH555
Trang 6Đại học Tin Học 5 Trang 6
GV.NAMS_GV < SV.MANS_SV
Phép kết nối này chỉ thực hiện được khi θ thực hiện được giữa các thuộc tính của
U và V Nếu không dựa trên θ và UV = Ø, thì R S trở thành tích Đề-các của R và S Nếu θ là phép so sánh “=”, thì gọi là kết nối bằng Nếu kết nối bằng được thực hiện tại tất cả các thuộc tính cùng tên của hai quan hệ R và S thì đây
là phép kết nối tự nhiên
Ví dụ: Tìm thông tin giáo viên nhỏ tuổi hơn một sinh viên nào đó
MAGV HOTEN_GV NAMS_GV CTU123 Trần Thành Nhân 1985 CTU345 Lê Văn Lịnh 1988 CTU554 Huỳnh Thị Thùy Linh 1989
Hợp của hai quan hệ tương thích R(U) và S(V) là quan hệ P với tập thuộc tính U
và các bộ thuộc một trong hai quan hệ cho trước
P = R S = R + S = {t|t R t S}
MASV HOTEN_SV NAMS_SV
101 Trần Thu Thảo 1988
102 Nguyễn Thị Thu 1990
103 Phan Pham Chuc 1988
MAGV HOTEN_GV NAMS_GV MASV HOTEN_SV NAMS_SV CTU554 Huỳnh Thị Thùy Linh 1989 101 Trần Thu Thảo 1988 CTU554 Huỳnh Thị Thùy Linh 1989 103 Phan Pham Chuc 1988
GV
SV
Trang 7Đại học Tin Học 5 Trang 7
Ví dụ: Liệt kê danh sách mã sinh viên và mã môn học
Giao của hai quan hệ tương thích R(U) và S(V) là quan hệ P với tập thuộc tính U
và các bộ đồng thời có mặt trong hai quan hệ cho trước
Hiệu của hai quan hệ tương thích R(U) và S(V) là quan hệ P với tập thuộc tính U
và các bộ đồng thời có trong R nhưng không có trong S
Cú pháp của lệnh SQL được giới thiệu theo dạng mở rộng của ký hiệu BNF:
- Chữ hoa đại diện cho từ khóa
- Chữ thường đại diện cho các từ của người dùng định nghĩa
- Dấu | chỉ sự lựa chọn
- Dấu { chỉ phần tử bắt buộc phải có
- Dấu [ chỉ phần tử tùy chọn (không bắt buộc)
- Dấu … chỉ thành phần có thể lặp lại từ 0 đến nhiều lần
2.2 Các phép toán
Ví dụ : Cho lược đồ cơ sở dữ liệu như sau :
KTRUCSU(MA_KTS, HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KTS)
CHUTHAU(ID_THAU, TEN_THAU, TEL, DCHI_THAU)
CHUNHAN(ID_CHU, TEN_CHU, DCHI_CHU)
CONGNHAN(MA_CN, HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON) CGTRINH(STT_CTR, TEN_CTR, DCHI_CTR, TINH_THANH, KINH_PHI,
ID_CHU, ID_THAU, NGAY_BD)
Trang 8Đại học Tin Học 5 Trang 8
THAMGIA(MA_CN, STT_CTR, NGAY_TGIA, SO_NGAY)
THIETKE(MA_KTS, STT_CTR, THU_LAO)
2.2.1 Truy vấn đơn giản:
- Truy vấn dữ liệu từ một bảng, có thể định thứ tự xuất hiện các cột:
SELECT [DISTINC | ALL]
- Sắp xếp kết quả theo một hay nhiều cột:
+) Sử dụng mệnh đề ORDER BY ở cuối lệnh SELECT
ORDER BY <tên cột | STT cột> [ASC | DESC]
[,<tên cột | STT cột> [ASC | DESC], …]
Ví dụ: Sắp xếp kết quả theo cột kinh phí công trình:
SELECT KINH_PHI FROM CGTRINH ORDER BY KINH_PHI
Ví dụ: Hiện thị mã và năm sinh của kiến trúc sư Lê Thanh Tùng:
SELECT MA_KTS, NAMS_KTS FROM KTRUCSU
WHERE HOTEN_KTS = ‘LE THANH TUNG’
+) Dạng 2: so sánh giá trị của các thuộc tính với nhau <cột 1> so sánh <cột 2>
+) Dạng 3: so sánh giá trị thuộc tính với hằng có kiểu tương thích <cột> so sánh
Trang 9Đại học Tin Học 5 Trang 9
+) Dạng 6: tìm kiếm theo mẫu dạng chuỗi <cột> [NOT] LIKE <chuỗi>
+) Dạng 7: tìm kiếm theo trị thống NULL <cột> IS [NOT] NULL
2.2.4 Kết nối ngoại (outer join)
- Cho phép giữ lại những dòng không thỏa điều kiện kết nối
- Có 3 loại kết nối:
FROM <bảng 1> LEFT JOIN <bảng 2> ON <điều kiện kết nối>
FROM <bảng 1> RIGHT JOIN <bảng 2> ON <điều kiện kết nối>
FROM <bảng 1> FULL JOIN <bảng 2> ON <điều kiện kết nối>
Ví dụ: Hãy liệt kê tên thầu, tên công trình, tỉnh thành kể cả những tên thầu có tỉnh thành trùng với nhau:
SELECT TEN_THAU, TEN_CTR, TINH_THANH FROM CHUTHAU A LEFT JOIN CGTRINH B
Bước đầu tiên để tạo một CSDL là tạo bảng Lệnh CREATE TABLE
dùng tạo bảng với cú pháp như sao:
CREATE TABLE<tên bảng>
(<tên cột 1><loại dữ liệu>[NOT NULL], (<tên cột 2><loại dữ liệu>[NOT NULL],
(<tên cột n><loại dữ liệu>[NOT NULL])
Từ khóa NOT NULL co nghĩa là bắt buộc phải có giá trị trong cột này
Ví dụ: Tạo bảng có tên là chủ nhân:
CREATE TABLE CHUNHAN(
ID_CHU INT NOT NULL, TEN_CHU CHAR(20), DCHI_CHU CHAR(30))
Trang 10Đại học Tin Học 5 Trang 10
INSERT KTRUCSU (MA_KTS, HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KTS)
VALUES(‘19’, ‘PHAN THANH HAI’, ‘1876’, ‘NAM’, ‘TP BAC LIEU’, ’23 CAO VAN LAU’)
2.2.7 LỆNH TRUY VẤN SELECT
- Để thi hành một truy vấn đơn giản chúng ta có thể dùng lệnh gồm hai thành phần được gọi là mệnh đề như sau:
SELECT tên cột,danh sách các cột,hay *
FROM tên bảng, hay danh sách các bảng
- Mệnh đề SELECT luôn luôn phải có và sau đó phải kèm theo mệnh đề FROM
2.2.7.1 Hiển thị toàn bộ bảng
Một cách sử dụng SQL đơn giản là hiển thị nội dung của một bảng như lệnh sau đây
SELECT *
FROM tên bảng
Dấu hoa thị (*)thay thế tất cả các cột trong bảng
Ví dụ: Hiện thị toàn bộ nội dung của bảng công nhân:
SELECT*
FROM CONGNHAN
2.2.7.2 Lưu kết quả câu hỏi
ta sử từ khóa INTO<nơi kết xuất> để lưu kết quả câu hỏi.nếu không có INTO, kết quả có thể in ra màn hình,máy in, tập tin nơi kết xuất có thể là:
TABLE<tên của table>
DBF<tên của dbf>
ARRAY<tên bảng>
CURSOR<tên cursor>
Ví dụ: Lưu kết quả câu hỏi của bảng công nhân:
SELECT* INTO DBF TAM FROM CONGNHAN
Trang 11Đại học Tin Học 5 Trang 11
Bảng các hàm nội tại trong SQL
Ví dụ: Cho biết kinh phí trung bình của các công trình:
SELECT AVG(KINH_PHI) AS KPHITB FROM CGTRINH
Ví dụ: Cho biết tổng kinh phí các công trình:
SELECT SUM(KINH_PHI) AS TONGKP FROM CGTRINH
Ví dụ: Cho biết kinh phí nhỏ nhất của bảng công trình:
SELECT MIN(KINH_PHI) AS KPHINN FROM CGTRINH
Ví dụ: Cho biết kinh phí lớn nhất của bảng công trình:
SELECT MAX(KINH_PHI) AS KPHILN FROM CGTRINH
2.2.9 TRUY VẤN CON
Truy vấn con là kết hợp nhiều truy vấn thứ nhất (truy vấn con) được tự động chuyển qua truy vấn cấp sau (truy vấn chính) và chính truy vấn này sẽ cho ra kết quả sau cùng Thành phần WHERE của truy vấn chính sẽ chứa truy vấn con, cú pháp thông thường như sau:
Truy vấn SELECT <các tên cột>
chính FROM <các tên bảng>
WHERE <điều kiện> AND <tên cột><toán tử>
Truy vấn con (SELECT <các tên cột>
FROM <tên bảng>
[WHERE <điều kiện>])
Các dạng điều kiện nối với truy vấn con:
- <tên cột> <so sánh> ALL (<select con>): điều kiện đúng khi giá trị của cột
so sánh đúng với giá trị trả về từ select con
- <tên cột> <so sánh> ANY | SOME (<select con >): Điều kiện đúng khi giá
trị của cột so sánh đúng với bất kỳ một giá trị nào trả về từ select con
- <tên cột> [NOT] IN (<select con >): Điều kiện đúng khi giá trị của cột nằm
trong tập hợp các giá trị trả về của select con
- [NOT] EXISTS (<select con>): Điều kiện đúng khi kết quả trả về của select
con
Ví dụ: Hiển tên các kiến trúc sư có cùng phái với Lê Kim Dung:
SELECT HOTEN_KTS, PHAI FROM KTRUCSU
Trang 12Đại học Tin Học 5 Trang 12
WHERE HOTEN_KTS = ‘LE KIM DUNG’)
2.2.10 GOM NHÓM CÁC DÒNG
Phần này, chúng ta sẽ làm quen với đặc thù rất mạnh của SQL là khái niệm gom nhóm Đặc tính gom nhóm cho phép chúng ta thực hiện các chức năng trên một nhóm các dòng như là một dòng riêng biệt
Thành phần GROUP BY cho phép gom nhóm các dòng có liên quan Cú pháp như sau:
SELECT<các tên cột>,<hàm-nội-tại(thông-số)>
FROM <tên bảng>
GROUP BY <các tên cột>
Ví dụ: Hiển thị kinh phí trung bình của bảng công trình:
SELECT STT_CTR, AVG(KINH_PHI) FROM CGTRINH
HAVING <điều kiện chọn trên nhóm>
Ví dụ: Tìm các công trình có kinh phí lơn hơn 200:
SELECT STT_CTR, AVG(KINH_PHI) AS KINHPHI FROM CGTRINH
GROUP BY STT_CTR HAVING AVG(KINH_PHI) >200
2.2.11 Sử dụng bí danh cho bảng:
Trang 13Đại học Tin Học 5 Trang 13
Ta cũng có thể sử dụng bí danh cho bảng trong mệnh đề WHERE Nếu bạn
đã sử dụng bí danh cho bảng, bạn phải sử dụng bí danh này trong toàn bộ lệnh SELECT
Ví dụ: Hãy cho biết tên và địa chỉ các công trình do chủ thầu Lê Văn Sơn thi công:
SELECT TEN_CTR, DCHI_CTR FROM CGTRINH A, CHUTHAU B WHERE A.ID_THAU = B.ID_THAU AND TEN_T'HAU =‘LE VAN SON’
2.2.12 CẬP NHẬT CSDL
2.2.12.1 Lệnh INSERT
Một trong hình thức khác của lệnh INSERT là sử dụng chúng trong lệnh SELECT là sử dụng chúng trong lệnh SELECT để thêm giá trị từ một bảng vào bảng khác
Ví dụ: Chép các kiến trúc sư là nữ vào bảng biểu dương:
INSERT INTO BIEUDUONG SELECT MA_KTS, HOTEN_KTS, NAMS_KTS, NOI_TN
FROM KTRUCSU WHERE PHAI =‘NU’
- Chú ý: Với ví dụ trước khi sao chép dữ liệu từ bảng kiến trúc sư qua bảng biểu dương thì trước hết ta phải tạo bảng biểu dương
Trang 14Đại học Tin Học 5 Trang 14
CHƯƠNG 3: BÀI TẬP ĐSQH VÀ SQL
1 LƯỢC ĐỒ CSDL QUAN HỆ
1.1 Lược đồ và Tân từ (Relation Schema & Predicate)
- Lược đồ quan hệ là tên quan hệ theo sau bởi 1 tập hợp gồm các tập thuộc tính và tên miền giá trị của chúng
- Tân từ là đoạn văn bản để mô tả ngữ nghĩa của lược đồ quan hệ
Ví dụ: CHUNHAN(ID_CHU, TEN_CHU, DCHI_CHU) +) Tân từ: Mỗi chủ nhân của một công trình đều có một ID chủ nhân phân biệt, tên chủ nhân và một địa chỉ
1.2 Các ràng buộc toàn vẹn
Ràng buộc toàn vẹn (RBTV) là điều kiện ràng buộc trên các giá trị của các thuộc tính Các ràng buộc này sẽ được kiểm tra trên từng bộ hoặc trên toàn quan hệ trước khi một bộ nào đó thuộc về quan hệ Có 4 loại:
- Ràng buộc về khóa hay ràng buộc thực thể: định nghĩa của mỗi dòng là một thực thể duy nhất của bảng
+) Ví dụ: Trong bảng kiến trúc sư (KTRUCSU) thì mỗi dòng là một kiến trúc
sư phân biệt nhau
- Ràng buộc về miền trị: định nghĩa là một tập hợp các giá trị cho phép mà thuộc tính có thể nhận
+) Ví dụ: Các công nhân vào làm không được nhỏ hơn 18 tuổi:
NAMS_CN < ngày hiện tại – 18
- Ràng buộc về tham chiếu: quy định giá trị của các thuộc tính khóa ngoại phải tồn tại trong thuộc tính khóa chính của bảng tương ứng
+) Ví dụ: Tham chiếu giữa hai bảng công nhân và tham gia
CONGNHAN(MA_CN, HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON)
THAMGIA(MA_CN, STT_CTR, NGAY_TGIA, SO_NGAY)
- Ràng buộc về luận lý: Định nghĩa các luật kinh doanh phức tạp của tổ chức
và không rơi vào các ràng buộc trên
+) Ví dụ: Một chủ thầu nào đó không hoàn thành công trình đầu tiên thì không cho thi công tiếp công trình sau
- Ràng buộc khác
Cho lược đồ CSDL gồm các quan hệ sau:
KTRUCSU(MA_KTS, HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KTS)
Trang 15Đại học Tin Học 5 Trang 15
CHUTHAU(ID_THAU, TEN_THAU, TEL, DCHI_THAU)
CHUNHAN(ID_CHU, TEN_CHU, DCHI_CHU)
CONGNHAN(MA_CN, HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON) CGTRINH(STT_CTR, TEN_CTR, DCHI_CTR, TINH_THANH, KINH_PHI,
ID_CHU, ID_THAU, NGAY_BD)
THAMGIA(MA_CN, STT_CTR, NGAY_TGIA, SO_NGAY)
-CREATE TABLE KTRUCSU(MA_KTS INT PRIMARY KEY,
HOTEN_KTS NVARCHAR(40) NOT NULL, NAMS_KTS INT, PHAI CHAR(5),
NOI_TN NVARCHAR(30), DCHI_LL_KTS NVARCHAR(50))
-CREATE TABLE CHUTHAU(ID_THAU INT PRIMARY KEY,
TEN_THAU NVARCHAR(40) NOT NULL, TEL VARCHAR(10),
DCHI_THAU NVARCHAR(40))
-
CREATE TABLE CHUNHAN (ID_CHU INT PRIMARY KEY,
TEN_CHU NVARCHAR(40) NOT NULL, DCHI_CHU
NVARCHAR(40))
-CREATE TABLE CONGNHAN(MA_CN INT PRIMARY KEY,
HOTEN_CN NVARCHAR(40) NOT NULL, NAMS_CN INT,
NAM_VAO_N INT, CH_MON NVARCHAR(30))
-
CREATE TABLE CGTRINH(STT_CTR INT PRIMARY KEY IDENTITY,
TEN_CTR NVARCHAR(40), DCHI_CTR NVARCHAR(40),
TINH_THANH NVARCHAR(30), KINH_PHI INT,
ID_CHU INT REFERENCES CHUNHAN NOT NULL, ID_THAU INTREFERENCES CHUTHAU NOT NULL,
NGAY_BD DATETIME CHECK (NGAY_BD <= GETDATE()),
CONSTRAINT FK_CGTRINH_CHUNHAN FOREIGN KEY (ID_CHU)
REFERENCES CHUNHAN(ID_CHU) ON UPDATE CASCADE,
CONSTRAINT FK_CGTRINH_CHUTHAU FOREIGN KEY (ID_THAU)
REFERENCES CHUTHAU(ID_THAU) ON UPDATE CASCADE)