Professional Documents
Culture Documents
Co So Du Lieu C3
Co So Du Lieu C3
Chương 3
Chương 3 - Ngôn ngữ định nghĩa và
thao tác dữ liệu đối với mô hình quan hệ
NỘI DUNG:
• Các cách tiếp cận đối với thiết kế ngôn ngữ của
CSDL quan hệ
– Giới thiệu một số ngôn ngữ và phân loại
➢So sánh và đánh giá
• Một số ngôn ngữ dữ liệu mức cao
– QBE (Query By Example)
– SQL (Structured Query Language)
• Kết luận
2
Ví dụ
Student
• Tìm các sinh viên đăng Id Name Suburb
ký khoá học có mã số 1108 Robert Kew
4
Ngôn ngữ đại số quan hệ
• Gồm các phép toán tương ứng với các thao tác trên
các quan hệ
• Mỗi phép toán
– Đầu vào: một hay nhiều quan hệ
– Đầu ra: một quan hệ
• Biểu thức đại số quan hệ = chuỗi các phép toán
• Kết quả thực hiện một biểu thức đại số là một quan
hệ
• Được cài đặt trong phần lớn các hệ CSDL hiện nay
5
Các phép toán đại số quan hệ
• Phép toán quan hệ
– Phép chiếu (projection)
– Phép chọn (selection)
– Phép kết nối (join)
– Phép chia (division)
• Phép toán tập hợp
– Phép hợp (union)
– Phép giao (intersection)
– Phép trừ (difference)
– Phép tích đề-các (cartesian product)
6
Phép toán tập hợp
• Định nghĩa: Quan hệ khả hợp
Hai quan hệ r và s được gọi là khả hợp nếu chúng
được xác định trên cùng một miền giá trị
r xác định trên D1x D2 x…x Dn
s xác định trên D’1x D’2 x…x D’m
→ Di = D’i và n=m
7
Phép hợp
• Đ/n: gồm các bộ thuộc ít nhất một trong hai quan hệ
đầu vào
• Hai quan hệ đầu vào phải là khả hợp
• Cú pháp: R = R1 R2
R1
R1 R2 R2
Subject1 Subject2 Kết quả
Name Course
Name Course Systems BCS
Systems BCS Name Course Database BCS
DataMining MCS
Database
Database
BCS
MCS
Writing BCS
Database MCS
Algebra MCS
Algebra MCS DataMining MCS
Writing BCS
8
8
Phép giao
• Đ/n: gồm các bộ thuộc cả hai quan hệ đầu vào
• Hai quan hệ đầu vào phải là khả hợp
• Cú pháp: R1 R2
R1 R2 R1
R2
Subject1 Subject2
Name Course Name Course Kết quả
Systems BCS DataMining MCS Name Course
Database BCS Database MCS Systems BCS
Database MCS Systems BCS Database MCS
Algebra MCS Writing BCS
9
Phép trừ
• Đ/n: gồm các bộ thuộc quan hệ thứ nhất nhưng không
thuộc quan hệ thứ hai
– Hai quan hệ phải là khả hợp
• Cú pháp: R1 \ R2 hoặc R1 - R2
R1 \ R2 R1
R2
Subject1 Subject2
Name Course Name Course Kết quả
Systems BCS DataMining MCS Name Course
Database BCS \ Database MCS Database BCS
Database MCS Systems BCS Algebra MCS
Algebra MCS Writing BCS 10
Phép tích Đề-các
• Đ/n: là kết nối giữa từng bộ của quan hệ thứ
nhất với mỗi bộ của quan hệ thứ hai
• Cú pháp: R = R1 x R2
a x
a y
a
x b x
b
c
X y b y
c x
d
c y
d x
d y
11
Student Sport
Id Name Suburb SportID Sport
1108 Robert Kew 05 Swimming
X
3936 Glen Bundoora 09 Dancing
8507 Norman Bundoora
8452 Mary Balwyn
Student_Sport
Id Name Suburb SportID Sport
1108 Robert Kew 05 Swimming
1108 Robert Kew 09 Dancing
3936 Glen Bundoora 05 Swimming
3936 Glen Bundoora 09 Dancing
8507 Norman Bundoora 05 Swimming
8507 Norman Bundoora 09 Dancing
8452 Mary Balwyn 05 Swimming
8452 Mary Balwyn 09 Dancing
12
Phép chiếu
• Đ/n: Lựa chọn một số thuộc tính từ một quan hệ.
• Cú pháp: A1, A2,... ( R)
C1 C2 C3 C4 C5 C2 C5
❖Ví dụ: đưa ra danh sách tên của tất cả các sinh viên
Student Name ( Student )
Id Name Suburb Name
1108 Robert Kew Robert
3936 Glen Bundoora Glen
8507 Norman Bundoora Norman
8452 Mary Balwyn Mary
13
Phép chọn
• Đ/n: Lựa chọn các bộ trong một quan hệ thoả mãn
điều kiện cho trước.
• Cú pháp: condition (R)
R1
R2 R2
R3 R3
R4
15
Ví dụ: chọn và chiếu
Student
Id Name Suburb
1108 Robert Kew Name
3936 Glen Bundoora Glen
8507 Norman Bundoora Norman
8452 Mary Balwyn
16
Phép kết nối (join) hai quan hệ r và s
• Khái niệm ghép bộ: u = (a1,..,an); v=(b1,..,bm)
(u,v) = (a1,..,an,b1,..,bm)
• Phép kết nối hai quan hệ thực chất là phép ghép
các cặp bộ của hai quan hệ thỏa mãn một điều
kiện nào đó trên chúng.
• Biểu thức kết nối là phép hội của các toán hạng,
mỗi toán hạng là một phép so sánh đơn giản giữa
một thuộc tính của quan hệ r và một thuộc tính
của quan hệ s.
• Cú pháp: R1 ⋈<<điều kiện>> R2
17
• Đưa ra danh sách các sinh viên và mã khoá
học mà sinh viên đó tham gia:
Student ⋈Id=SID Enrol
Student Enrol
Id Name Suburb SID Course
1108 Robert Kew 3936 101
Id=SID
3936 Glen Bundoora 1108 113
8507 Norman Bundoora 8507 101
8452 Mary Balwyn
a r r x a r x
b r s y b r x
c v t z null s y
null t z
21
• Đưa ra danh sách các sinh viên và mã khoá
học mà sinh viên đó đăng ký nếu có
Student
Enrol
ID Name Suburb
SID Course
1108 Robert Kew
3936 101
3936 Glen Bundoora
1108 113
8507 Norman Bundoora
8507 101
8452 Mary Balwyn
a x
a y
a z : x
z
a
b x
c y
23
• Ví dụ: Đưa ra môn học được dạy ở tất cả các
khoá học
Subject Course
Kết quả
Name Course Course
Name
Systems BCS : BCS
Database
Database BCS MCS
Database MCS
Algebra MCS
24
Bài tập
• Cho CSDL gồm 3 quan hệ sau: S (Các hãng cung ứng),
P (các mặt hàng), SP (các sự cung ứng).
25
• Biểu diễn các truy vấn sau bằng đại số quan hệ:
– Đưa ra danh sách các mặt hàng màu đỏ
– Cho biết S# của các hãng cung ứng mặt hàng 'P1'
hoặc 'P2'
– Liệt kê S# của các hãng cung ứng cả hai mặt hàng
'P1' và 'P2'
– Đưa ra S# của các hãng cung ứng ít nhất một mặt
hàng màu đỏ
– Đưa ra S# của các hãng cung ứng tất cả các mặt
hàng.
26
Bài tập
• Cho các quan hệ sau:
Supplier SupplyProduct
sid sname size city sid pid quantity
S1 Dustin 100 London S1 P1 500
S2 Rusty 70 Paris S1 P2 400
S3 Lubber 120 London S1 P3 100
S2 P2 200
Product S3 P4 100
pid pname colour S2 P3 155
P1 Screw red
P2 Screw green
P3 Nut red
P4 Bolt blue
27
• Biểu diễn các truy vấn sau bằng biểu thức đại số
quan hệ:
1) Đưa ra {sid,sname,size,city} của các Supplier có trụ sở
tại London
2) Đưa ra {pname} của tất cả các mặt hàng
3) Đưa ra {sid} của các Supplier cung cấp mặt hàng P1
hoặc P2
4) Đưa ra {sname} của các Supplier cung cấp mặt hàng P3
5) Đưa ra {sname} của các hãng cung ứng ít nhất một mặt
hàng màu đỏ
6) Đưa ra {sid} của các hãng cung ứng tất cả các mặt hàng
màu đỏ
7) Đưa ra {sname} của các hãng có cung ứng mặt hàng
màu đỏ hoặc màu xanh
8) Đưa ra {sname} của các hãng cung ứng ít nhất một mặt
hàng màu đỏ và ít nhất một mặt hàng màu xanh
9) Đưa ra {sid} của các hãng không cung ứng mặt hàng
nào
28
Ngôn ngữ QBE
29
QBE (Query-By-Example)
• Là một ngôn ngữ truy vấn dữ liệu
• Các câu truy vấn được thiết lập bởi một giao
diện đồ hoạ
• Phù hợp với các câu truy vấn đơn giản, tham
chiếu đến ít bảng
• Một số sản phẩm: IBM (IBM Query
Management Facility), Paradox, MS. Access,
...
30
Truy vấn trên một quan hệ
• P.~ Print
Student ID Name Suburb
P._x Bundoora
• Sắp xếp
Student ID Name Suburb
P.AO(1) P.AO(2)
33
Các tính toán tập hợp
• Các phép toán: AVG, COUNT, MAX, MIN,
SUM
• G. ~ Grouping
34
Hộp điều kiện
• Được sử dụng để biểu diễn
– Điều kiện trên nhiều hơn một thuộc tính
– Điều kiện trên các trường tính toán tập hợp
• Ví dụ: đưa ra danh sách các thành phố có
nhiều hơn 5 sinh viên
Student ID Name Suburb Condition
_id G.P. COUNT._id > 5
35
Các thao tác thay đổi dữ liệu
• Xóa
Student ID Name Suburb
D. 1108
• Thêm
Student ID Name Suburb
I. 1179 David Evry
• Sửa
Student ID Name Suburb
1179 U.Paris 36
Tính đầy đủ của QBE
• Có thể biểu diễn cả 5 phép toán đại số cơ sở
(,,,\,x)
37
Định nghĩa dữ liệu trong QBE
38
• Các khung nhìn
39
Ngôn ngữ SQL
40
SQL (Structured Query Language)
• 1975: SEQUEL
– System-R
• 1976: SEQUEL2
• 1978/79: SQL
– System-R
• 1986: chuẩn SQL-86
• 1989: chuẩn SQL-89
• 1992: chuẩn SQL-92
• 1996: chuẩn SQL-96
41
Các thành phần của SQL
• Ngôn ngữ định nghĩa dữ liệu (Data Definition Language)
– Cấu trúc các bảng CSDL
– Các mối liên hệ của dữ liệu
– Quy tắc, ràng buộc áp đặt lên dữ liệu
• Ngôn ngữ thao tác dữ liệu (Data Manipulation Language)
– Thêm, xoá, sửa dữ liệu trong CSDL
– Truy vấn dữ liệu
• Ngôn ngữ điều khiển dữ liệu (Data Control Language)
– Khai báo bảo mật thông tin
– Quyền hạn của người dùng trong khai thác CSDL
42
Ngôn ngữ định nghĩa dữ liệu
• Các thông tin được định nghĩa bao gồm
– Sơ đồ quan hệ
– Kiểu dữ liệu hay miền giá trị của mỗi thuộc tính
– Các ràng buộc toàn vẹn
– Các chỉ số đối với mỗi bảng
– Thông tin an toàn và ủy quyền đối với mỗi bảng
– Cấu trúc lưu trữ vật lý của mỗi bảng trên đĩa
➢ Được biểu diễn bởi các lệnh định nghĩa dữ liệu
43
Quy ước đặt tên và kiểu dữ liệu
• Quy ước đặt tên
– 32 ký tự: chữ cái, số, dấu _
• Kiểu dữ liệu (SQL-92)
– char(n)
– varchar(n)
– int
– smallint
– numeric(p,d)
– real, double
– float(n)
– date
– time
44
Cú pháp
• Tạo bảng
CREATE TABLE tên-bảng(
cột-1 kiểu-dữ-liệu-1 [NOT NULL], ...,
cột-2 kiểu-dữ-liệu-2 [NOT NULL], ...,
.....
[CONSTRAINT tên-ràng-buộc kiểu-ràng-buộc]
...
);
• Xoá bảng
DROP TABLE tên-bảng
45
CREATE TABLE Supplier(
sid char(4) NOT NULL,
sname varchar(30) NOT NULL,
size smallint,
city varchar(20),
CONSTRAINT KhoachinhS primary key(sid)
);
47
Kiểu ràng buộc
48
Thêm/xoá/sửa cột của các bảng
• Thêm
ALTER TABLE <tên bảng>
ADD COLUMN <tên cột> <kiểu dữ liệu> [NOT NULL];
• Xoá
ALTER TABLE <tên bảng>
DROP COLUMN <tên cột>;
• Sửa
ALTER TABLE <tên bảng>
CHANGE COLUMN <tên cột> TO <kiểu dữ liệu mới>;
49
• ALTER TABLE SupplyProduct ADD
COLUMN price real NOT NULL;
• ALTER TABLE SupplyProduct DROP
COLUMN price;
• ALTER TABLE Supplier CHANGE
COLUMN sname TO varchar(20);
50
Thêm/xóa các ràng buộc
• Thêm
ALTER TABLE <tên bảng>
ADD CONSTRAINT <tên ràng buộc>
<kiểu ràng buộc>
• Xóa
ALTER TABLE <tên bảng>
DROP CONSTRAINT <tên ràng buộc>
51
Ngôn ngữ thao tác dữ liệu
52
Truy vấn không điều kiện trên một bảng
• Tìm thông tin từ các cột của bảng
➢ SELECT <DS cột>
FROM <Tên bảng>;
➢ SELECT *
FROM <Tên bảng>;
• Ví dụ
SELECT Name
FROM Student;
Student
Id Name Suburb
Name ( Student ) Name
1108 Robert Kew Robert
3936 Glen Bundoora Glen
8507 Robert Bundoora Mary
8452 Mary Balwyn
53
• Đưa ra tên của các mặt hàng
SELECT pname FROM Product;
• Đưa ra tên khác nhau của các mặt hàng
SELECT DISTINCT pname
FROM Product;
• Đưa ra toàn bộ thông tin về các hãng cung ứng
SELECT * FROM Supplier;
• Đưa ra mã số hãng cung ứng, mã mặt hàng được cung ứng và
10 lần số lượng mặt hàng đã được cung ứng
SELECT sid, pid, quantity*10
FROM SupplyProduct;
54
Truy vấn có điều kiện trên một bảng
• Chọn các bản ghi (dòng)
SELECT <DS cột>
FROM <Tên bảng>
WHERE <Điều kiện tìm kiếm>
• Ví dụ
SELECT *
FROM Student
WHERE Suburb='Bundoora' ;
Student
Id Name Suburb Suburb =' Bundoora ' ( Student )
1108 Robert Kew Id Name Suburb
3936 Glen Bundoora 3936 Glen Bundoora
8507 Robert Bundoora 8507 Robert Bundoora
8452 Mary Balwyn
55
• Đưa ra tên của các hãng cung ứng có trụ sở tại
London
SELECT sname FROM Supplier
WHERE city = 'London';
• Đưa ra mã số và tên của các hãng cung ứng
nằm ở London và có số nhân viên lớn hơn 75
SELECT sid, sname FROM Supplier
WHERE city = 'London' AND size > 75;
56
Biểu diễn điều kiện lựa chọn
• Các phép toán quan hệ: =, !=, <, >, <=, >=
• Các phép toán logic: NOT, AND, OR
• Phép toán phạm vi: BETWEEN, IN, LIKE
– Kiểu dữ liệu số
• attr BETWEEN val1 AND val2 ( (attr>=val1) and
(attr<=val2) )
• attr IN (val1, val2, ...) ( (attr=val1) or (attr=val2) or ... )
– Kiểu dữ liệu xâu
• LIKE: sử dụng đối sánh mẫu xâu với các ký tự thay thế
cho 1 ký tự bất kỳ (_, ?), thay thế cho 1 xâu ký tự bất kỳ
(*, %)
(PostGreSQL sử dụng dấu % và dấu _ )
57
• Đưa ra thông tin của các hãng cung ứng có số nhân viên
trong khoảng từ 100 đến 150
SELECT * FROM Supplier
WHERE size BETWEEN 100 AND 150;
• Đưa ra mã số của hãng cung ứng mặt hàng P1 hoặc P2
– Cách 1:
SELECT sid FROM SupplyProduct
WHERE pid = 'P1' OR pid = 'P2';
– Cách 2:
SELECT sid FROM SupplyProduct
WHERE pid IN ('P1', 'P2');
• Đưa ra thông tin của hãng sản xuất có trụ sở đặt tại thành
phố bắt đầu bằng chữ New (New York, New Jersey, New
Mexico, New Hampshire)
SELECT * FROM SUPPLIER
WHERE city LIKE 'New%';
58
Loại trừ các bản ghi trùng nhau
• Từ khoá DISTINCT
SELECT DISTINCT <DS cột>
FROM <DS bảng>
• Ví dụ: đưa ra danh sách tên các khoa (Dept)
tương ứng với các khoá học (Course). Mỗi giá
trị chỉ hiện thị một lần
SELECT DISTINCT Dept
FROM Course
59
Truy vấn có sử dụng phép toán đổi tên
• SQL cho phép đổi tên các bảng và các cột trong một câu
truy vấn (sau mệnh đề SELECT và FROM) sử dụng cấu
trúc:
• <tên cũ> AS <tên mới>
– Đưa ra tên và số nhân viên của các hãng cung ứng ở
Paris
SELECT sname AS HangOParis, size AS SoNhanVien
FROM Supplier
WHERE city = ‘Paris’;
SELECT SID , Stud.Name as SName,
Sub.Name as Subject
FROM Student as Stud,Takes,
Subject as Sub
WHERE (Id=SID) and (SNO = No)
60
Truy vấn phức tạp trên nhiều bảng
61
Kết nối tự nhiên
62
Kết nối hai bảng Kết nối ngoài phải
SELECT <DS cột>
Kết nối ngoài trái FROM A RIGHT JOIN B
SELECT <DS cột> ON A.Key = B.Key
FROM A LEFT JOIN B
ON A.Key = B.Key
63
Kết nối trong Kết nối OUTER JOIN
SELECT <DS cột> SELECT <DS cột>
FROM A INNER JOIN B FROM A FULL OUTER JOIN B
ON A.Key = B.Key ON A.Key = B.Key
65
Tìm kiếm có sắp xếp
• Sắp xếp các bản ghi kết quả theo một thứ tự cho trước
SELECT <DS cột>
FROM <DS bảng>
[WHERE <Điều kiện tìm kiếm>]
ORDER BY <DS cột> [ASC|DESC]
• Ví dụ: đưa ra danh sách tên các sinh viên theo thứ tự
tăng dần
SELECT Name
FROM Student
ORDER BY Name ASC
66
Phân nhóm các bản ghi kết quả
• Phân nhóm các bản ghi kết quả theo giá trị của một hoặc nhiều
thuộc tính
SELECT <DS cột>
FROM <DS bảng>
[WHERE <Điều kiện tìm kiếm>]
[GROUP BY <DS cột>]
• Cột được chỉ ra trong mệnh đề GroupBy được sử dụng làm cơ
sở để chia nhóm. Cột này cũng bắt buộc phải được chỉ ra trong
mệnh đề Select
• Ví dụ đưa ra tên các sinh viên nhóm theo thành phố của sinh
viên đó
SELECT Suburb, Name SELECT Suburb, Count(Id)
FROM Student FROM Student
GROUP BY Suburb GROUP BY Suburb
67
Điều kiện hiển thị các bản ghi kết quả
68
Các phép toán tập hợp:
UNION, MINUS, INTERSECT
• Ví dụ: đưa ra danh sách tên các môn học không có sinh viên
nào tham dự
SELECT DISTINCT Subject.Name
FROM Subject
MINUS
SELECT DISTINCT Subject.Name
FROM Student, Takes, Subject
WHERE Student.Id = Takes.SID and Takes.SNO = Subject.No
• Tìm sid của hãng cung ứng đồng thời 2 mặt hàng P1 và P2
SELECT sid FROM SupplyProduct WHERE pid = ‘P1’
INTERSECT
SELECT sid FROM SupplyProduct WHERE pid = ‘P2’
• Tìm mã số của hãng không cung ứng mặt hàng nào
SELECT sid FROM Supplier
MINUS
SELECT sid FROM SupplyProduct
69
Các câu truy vấn lồng nhau
• Là trường hợp các câu truy vấn (con) được viết lồng
nhau
• Thường được sử dụng để
– Kiểm tra thành viên tập hợp (IN, NOT IN)
– So sánh tập hợp (>ALL, >=ALL, <ALL,<=ALL,=ALL,
NOT IN, SOME, )
• vd: SELECT *
FROM Supplier
WHERE SIZE>=ALL(SELECT SIZE FROM Supplier);
73
Các hàm thư viện
• Hàm tính toán trên nhóm các bản ghi
– MAX/MIN
– SUM
– AVG
– COUNT
• Hàm tính toán trên bản ghi
– Hàm toán học: ABS, SQRT, LOG, EXP, SIGN, ROUND
– Hàm xử lý xâu ký tự: LEN, LEFT, RIGHT, MID
– Hàm xử lý thời gian: DATE, DAY, MONTH, YEAR,
HOUR, MINUTE, SECOND
– Hàm chuyển đổi kiểu giá trị: FORMAT
74
SQL Server
SELECT * FROM GiangVien
WHERE DATEPART(year, GETDATE()) - DATEPART(year,
NgaySinh) > 40
PostGreSQL
SELECT * FROM "GiangVien"
WHERE date_part('year', current_date) - date_part('year',
"NgaySinh") > 40
75
Một số ví dụ với các hàm thư viện
76
Một số truy vấn phức tạp
• Đưa ra tên của hãng S1 và tổng số lượng các mặt hàng mà hãng đó cung ứng
SELECT sname, SUM(quantity)
FROM Supplier S, SupplyProduct SP
WHERE S.sid = SP.sid AND S.sid = ‘S1’
GROUP BY sname;
• Đưa ra mã số các hãng cung ứng và số lượng trung bình các mặt hàng được cung
ứng bởi từng hãng
SELECT sid, AVG(quantity) FROM SupplyProduct
GROUP BY sid;
• Đưa ra mã số các hãng cung ứng mà số lượng mặt hàng trung bình được cung cấp
bởi hãng đó là trong khoảng từ 75 đến 100
SELECT sid, AVG(quantity) FROM SupplyProduct
GROUP BY sid HAVING AVG(quantity) BETWEEN 75 AND 100
77
Thêm bản ghi vào bảng
➢INSERT INTO table[(col1,col2,…)]
VALUES (exp1,exp2,…)
➢INSERT INTO table[(col1,col2,…)]
SELECT col1,col2, …
FROM tab1, tab2, …
WHERE <dieu_kien>
– Ví dụ
➢INSERT INTO Student VALUES ('1179','Jane','California');
➢INSERT INTO Student(Id, Name, Suburb)
VALUES ('1180','David','NewYork');
➢INSERT INTO Student(Name, Id, Suburb)
VALUES ('Mary','1181','Texas');
➢INSERT INTO Student(Id, Name, Suburb)
VALUES ('1182','John','Ohio'), ('1183','Tom','Georgia'),
('1184','Declan','Arizona');
78
Xóa bản ghi trong bảng
• Ví dụ:
DELETE FROM SupplyProduct
WHERE sid = 'S4';
DELETE FROM Student
WHERE Suburb = 'Indiana';
79
Sửa dữ liệu trong bảng
UPDATE <tên bảng>
SET (<Tên cột> = Giá trị mới , …)
[WHERE <Điều kiện sửa đổi>];
• Ví dụ:
– Hãng S1 chuyển tới Milan
UPDATE Supplier
SET city = 'Milan'
WHERE sid = 'S1';
– Tất cả các mặt hàng được cung cấp với số lượng nhỏ hơn
100 đều tăng số lượng lên 1.5 lần
UPDATE SupplyProduct
SET quantity = quantity * 1.5
WHERE quantity < 100;
80