CHƯƠNG 3 NGÔN NGỮ ĐỊNH NGHĨA VÀ THAO TÁC DỮ LIỆU
1. Ngôn ngữ định nghĩa dữ liệu
Cho phép định nghĩa: Sơ đồ đối với mỗi bảng Kiểu dữ liệu hay miền giá trị Các ràng buộc toàn vẹn Tập các chỉ dẫn Thông tin an toàn và ủy quyền đối với từng bảng Cấu trúc lưu trữ vật lý
Thi-Lan Le, MICA HUST
52
1. Ngôn ngữ định nghĩa dữ liệu
Kiểu dữ liệu:
Dữ liệu xâu ký tự: – Char(n) – Varchar (n) : Độ dài thay đổi
Dữ liệu số:
– Int or Integer (từ -2,147,483,648 đến 2,147,483,647) – Smallint (từ -32,768 đến 32,767) – Numeric (p,s) – Real, double precision – Float (n)
Dữ liệu ngày tháng
– Date: YYYY-MM-DD – Time: HH:MM.SS.MMMM
Thi-Lan Le, MICA HUST
53
1. Ngôn ngữ định nghĩa dữ liệu
Tạo bảng trong CSDL:
CREATE TABLE (
Thi-Lan Le, MICA HUST
54
[NOT NULL], [CONSTRAINT
1. Ngôn ngữ định nghĩa dữ liệu
Tạo bảng – Xác định khóa chính
Thi-Lan Le, MICA HUST
55
1. Ngôn ngữ định nghĩa dữ liệu
Thêm - Xóa cột trong bảng
Thi-Lan Le, MICA HUST
56
1. Ngôn ngữ định nghĩa dữ liệu
Xóa bảng: Cú pháp: DROP TABLE relation_name Ví dụ: DROP TABLE branch
Thi-Lan Le, MICA HUST
57
2. Ngôn ngữ thao tác dữ liệu
SELECT, ALL / DISTINCT, *, AS, FROM, WHERE
General Structure
IN, BETWEEN, LIKE "% _"
Comparison
Grouping
GROUP BY, HAVING, COUNT( ), SUM( ), AVG( ), MAX( ), MIN( )
Display Order ORDER BY, ASC / DESC
AND, OR, NOT
Logical Operators
Output
INTO TABLE / CURSOR TO FILE [ADDITIVE], TO PRINTER, TO SCREEN
UNION
Union
Thi-Lan Le, MICA HUST
58
Một số từ khóa
2. Ngôn ngữ thao tác dữ liệu
Ví dụ: Bảng student lưu các thông tin về sinh viên
Thuộc tính Kiểu dữ liệu Độ rộng Giải thích
id name dob sex class hcode dcode remission mtest
numeric character date character character character character logical numeric
4 10 8 1 2 1 3 1 2
Số hiệu sinh viên Tên sinh viên Ngày tháng năm sinh Giới tính (M / F) Tên lớp Mã nhà (R, Y, B, G) Mã quận Quyền nhập học (T, F) Điểm thi toán
Thi-Lan Le, MICA HUST
59
2. Ngôn ngữ thao tác dữ liệu
Dữ liệu trong bảng student
id name 9801 Peter 9802 Mary 9803 Johnny 9804 Wendy 9805 Tobe : :
dob sex 06/04/86 M 01/10/86 F 03/16/86 M 07/09/86 F 10/17/86 M :
:
class 1A 1A 1A 1B 1B :
mtest 70 92 91 84 88 :
hcode R Y G B R :
dcode remission .F. SSP HHM .F. .T. SSP YMT .F. YMT .F. :
:
Thi-Lan Le, MICA HUST
60
2. Ngôn ngữ thao tác dữ liệu
Thêm một bộ dữ liệu (~ 1 dòng) vào 1 bảng trong
CSDL Cách 1:
INSERT INTO Table_name VALUES (value 1, value 2, …, value n)
Cách 2:
INSERT INTO Table_name (column 1, column 2, …, column n) VALUES (value 1, value 2, …, value n) Câu hỏi: Đánh giá đặc điểm cũng như ưu, nhược
Thi-Lan Le, MICA HUST
61
điểm của từng cách
2. Ngôn ngữ thao tác dữ liệu
SELECT [ALL / DISTINCT] expr1 [AS col1], expr2 [AS col2] ; FROM tablename WHERE condition
Truy vấn lựa chọn các dòng trên các bảng có tên tablename
• một cột hoặc • một biểu thức gồm các hàm và các trường
col1, col2 là tên các cột trong bảng kết quả DISTINCT: bỏ hết các bộ lặp trong kết quả trong khi từ khóa
ALL thì dữ lại toàn bộ các bộ lặp
condition có thể là :
Thi-Lan Le, MICA HUST
• Toán tử so sánh >, <, = hoặc • Toán tử so sánh xâu • Toán từ logic AND, OR, NOT
62
và trả kết quả dưới dạng bảng Biểu thức expr1, expr2 có thể :
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 1: Liệt kê tất cả sinh viên Câu truy vấn:
SELECT * FROM student
Kết quả
id name 9801 Peter 9802 Mary 9803 Johnny 9804 Wendy 9805 Tobe : :
dob sex 06/04/86 M 01/10/86 F 03/16/86 M 07/09/86 F 10/17/86 M :
:
class 1A 1A 1A 1B 1B :
mtest 70 92 91 84 88 :
hcode R Y G B R :
dcode remission .F. SSP HHM .F. .T. SSP YMT .F. YMT .F. :
:
Thi-Lan Le, MICA HUST
63
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 2: Liệt kê tên , mã nhà và lớp của sinh viên
lớp 1A
SELECT name, hcode, class FROM student
WHERE class=‘1A’
Câu truy vấn:
Kết quả
hcode name R Peter Y Mary Johnny G Luke G Bobby B R Aaron : :
class 1A 1A 1A 1A 1A 1A :
Thi-Lan Le, MICA HUST
64
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 3: Liệt kê mã quận của sinh viên có mã nhà
là R (Red house)
SELECT DISTINCT dcode FROM student
WHERE hcode=‘R’
Câu truy vấn:
Kết quả
Nhận xét: Tại sao cần từ khóa DISTINCT dcode HHM KWC MKK SSP TST YMT
Thi-Lan Le, MICA HUST
65
2. Ngôn ngữ thao tác dữ liệu
SELECT name FROM student WHERE class=‘1B’ AND sex=‘F’
Yêu cầu 4: Liệt kê tên của các nữ sinh lớp 1B Câu truy vấn:
Kết quả
name Janet Sandy Mimi
Bài tập: 1) Liệt kê tên nữ sinh của lớp 1A và 1B 2) Liệt kê tên nữ sinh của lớp 1 A và nam sinh lớp 1 B
Thi-Lan Le, MICA HUST
66
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 5: Liệt kê tên, id của sinh viên không được
miễn phí đăng ký của lớp 1A
SELECT name, id, class FROM student WHERE class=‘1A’ AND NOT remission
Câu truy vấn:
Kết quả
name Peter Mary Luke Bobby Aaron Ron Gigi :
id 9801 9802 9810 9811 9812 9813 9824 :
class 1A 1A 1A 1A 1A 1A 1A :
Thi-Lan Le, MICA HUST
67
2. Ngôn ngữ thao tác dữ liệu
expr IN ( value1, value2, value3) expr BETWEEN value1 AND value2 expr LIKE "%_"
Thi-Lan Le, MICA HUST
68
Các tác tử so sánh:
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 6: Liệt kê các sinh viên sinh vào thứ tư hoặc
thứ bảy
SELECT name, class, CDOW(dob) AS bdate FROM student WHERE DOW(dob) IN (4,7)
Câu truy vấn:
Week)
Trong đó: CDOW (): trả về tên ngày trong tuần của 1 ngày DOW (): trả về thứ của 1 ngày trong tuần dưới dạng số (Day of
Kết quả
Thi-Lan Le, MICA HUST
69
name Peter Wendy Kevin Luke Aaron :
class 1A 1B 1C 1A 1A :
bdate Wednesday Wednesday Saturday Wednesday Saturday :
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 7: Liệt kê các sinh viên không sinh vào
tháng 1, 2, 5, 6 và 9
MONTH(dob) NOT IN (1,3,6,9)
Trong đó: MONTH (): trả về tháng
Câu truy vấn: SELECT name, class, dob FROM student WHERE
Kết quả
Bài tập: Viết lại câu truy vấn trên sử dụng toán tử IN
name Wendy Tobe Eric Patty Kevin Bobby Aaron :
class 1B 1B 1C 1C 1C 1A 1A :
dob 07/09/86 10/17/86 05/05/87 08/13/87 11/21/87 02/16/86 08/02/86 :
Thi-Lan Le, MICA HUST
70
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 8: Liệt kê sinh viên lớp 1A có điểm kiểm tra
toán từ 80 đến 90
SELECT name, mtest FROM student WHERE class=‘1A’ AND mtest BETWEEN 80 AND 90
Câu truy vấn:
Kết quả
name Luke Aaron Gigi
mtest 86 83 84
Thi-Lan Le, MICA HUST
71
2. Ngôn ngữ thao tác dữ liệu
SELECT ...... FROM ...... WHERE condition ; GROUP BY groupexpr [HAVING requirement]
Các hàm của nhóm:
COUNT( ), SUM( ), AVG( ), MAX( ), MIN( )
Nhóm dữ liệu:
groupexpr xác định các dòng liên quan sẽ được nhóm lại
WHERE condition xác định điều kiện cho từng dòng trước khi nhóm
HAVING requirement xác định điều kiện tương đương đến toàn bộ nhóm
Thi-Lan Le, MICA HUST
72
2. Ngôn ngữ thao tác dữ liệu
SELECT class, COUNT(*) as NumberofStudent FROM student GROUP BY class
Yêu cầu 9: Xác định tổng số sinh viên của mỗi lớp Câu truy vấn:
class
Kết quả
1A 1B 1C 2A 2B 2C
NumberofStudent 10 9 9 8 8 6
Thi-Lan Le, MICA HUST
73
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 10: Liệt kê điểm toán trung bình của từng
lớp
Câu truy vấn:
SELECT class, AVG(mtest) FROM student GROUP BY class
Kết quả
class 1A 1B 1C 2A 2B 2C
avg_mtest 85.90 70.33 37.89 89.38 53.13 32.67
Thi-Lan Le, MICA HUST
74
2. Ngôn ngữ thao tác dữ liệu
Tính điểm trung bình của nữ sinh của tất cả các lớp Tính điểm trung bình của nữ sinh của từng lớp
Thi-Lan Le, MICA HUST
75
Bài tập:
2. Ngôn ngữ thao tác dữ liệu
SELECT dcode, COUNT(*) FROM student WHERE sex=‘F’ GROUP BY dcode
Yêu cầu 11: Xác định số sinh viên nữ của từng quận Câu truy vấn:
cnt
Kết quả
dcode HHM KWC MKK SSP TST YMT
6 1 1 5 4 8
Thi-Lan Le, MICA HUST
76
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 12: Xác định điểm kiểm tra cao nhất và thấp
nhất của sinh viên ở từng quận
SELECT MAX(mtest), MIN(mtest), dcode FROM student GROUP BY dcode
Câu truy vấn:
Kết quả
max_mtest min_mtest dcode HHM MKK SSP TST TSW YMT
36 19 31 36 75 38
92 91 91 92 75 88
Thi-Lan Le, MICA HUST
77
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 13: Xác định điểm toán trung bình của nam sinh viên trong mỗi lớp với điều kiện lớp đó có ít nhất 3 nam sinh viên
SELECT AVG(mtest), class FROM student WHERE sex=‘M’ GROUP BY class HAVING COUNT(*) >= 3
Câu truy vấn:
Kết quả
avg_mtest class 1A 1B 1C 2A 2B
86.00 77.75 35.60 86.50 56.50
Thi-Lan Le, MICA HUST
78
Đưa ra tên lớp, điểm toán trung bình của nam sinh
Thi-Lan Le, MICA HUST
79
viên trong mỗi lớp, số sinh viên nam của lớp với điều kiện lớp đó có ít nhất 3 nam sinh viên
2. Ngôn ngữ thao tác dữ liệu
SELECT ...... FROM ...... WHERE ...... ORDER BY colname [ASC / DESC]
Thi-Lan Le, MICA HUST
80
Sắp xếp kết quả trả về: ASC: chiều tăng dần DESC: chiều giảm dần Mặc định: là ASC
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 14: Liệt kê nam sinh viên của lớp 1 A theo
tên
SELECT name, id FROM student
WHERE sex=‘M’ AND class=‘1A’ ORDER BY name
Câu truy vấn:
Kết quả
ORDER BY
name
name Peter Johnny Luke Bobby Aaron Ron
id 9801 9803 9810 9811 9812 9813
name Aaron Bobby Johnny Luke Peter Ron
id 9812 9811 9803 9810 9801 9813
Thi-Lan Le, MICA HUST
81
2. Ngôn ngữ thao tác dữ liệu
SELECT name, id, class, dcode FROM student WHERE class=‘2A’ ORDER BY dcode
Yêu cầu 15: Liệt kê sinh viên lớp 2A theo mã quận Câu truy vấn:
class
Kết quả
name Jimmy Tim Samual Rosa Helen Joseph Paula Susan
id 9712 2A 9713 2A 9714 2A 9703 2A 9702 2A 9715 2A 9701 2A 9704 2A
dcode HHM HHM SHT SSP TST TSW YMT YMT
Thi-Lan Le, MICA HUST
82
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 16: Liệt kê số lượng sinh viên của mỗi quận
theo chiều giảm dần
Câu truy vấn: SELECT COUNT(*) AS cnt, dcode FROM student GROUP BY dcode ORDER BY cnt DESC
cnt
Kết quả
11 10 10 9 5 2 1 1 1
docode YMT HHM SSP MKK TST TSW KWC MMK SHT
Thi-Lan Le, MICA HUST
83
Yêu cầu: Liệt kê theo thứ tự giảm dần về điểm của
Thi-Lan Le, MICA HUST
84
sinh viên nữ có điểm thi lớn hơn điểm trung bình của các sinh viên nữ
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 17: Liệt kê nam sinh viên trong một nhà theo
trật tự mã quận và tên lớp
Thi-Lan Le, MICA HUST
85
Câu truy vấn: SELECT name, class, hcode FROM student WHERE sex=‘M’ ORDER BY hcode, class
2. Ngôn ngữ thao tác dữ liệu
Blue House
Trật tự theo class
Green House
Trậ tự theo hcode
name Bobby Teddy Joseph Zion Leslie Johnny Luke Kevin George :
hcode class B B B B B G G G G :
1A 1B 2A 2B 2C 1A 1A 1C 1C :
Thi-Lan Le, MICA HUST
86
2. Ngôn ngữ thao tác dữ liệu
Hợp của A và B (AB)
Hợp, giao và hiệu của các bảng
A
B
Một bảng bao gồm tất cả các dòng của A và B.
Thi-Lan Le, MICA HUST
87
2. Ngôn ngữ thao tác dữ liệu
Giao của A và B (AB)
Hợp, giao và hiệu của các bảng
A
B
Một bảng bao gồm các dòng vừa tồn tại trong A vừa tồn tại trong B
Thi-Lan Le, MICA HUST
88
2. Ngôn ngữ thao tác dữ liệu
Hiệu của A và B
Hợp, giao và hiệu của các bảng
A
B
Bảng bao gồm các dòng ở trong A nhưng không ở trong B
Thi-Lan Le, MICA HUST
89
2. Ngôn ngữ thao tác dữ liệu
Bảng lưu trữ các thành viên của Bridge và Chess có
cùng cấu trúc như sau:
Thuộc tính Kiểu dữ liệu Độ rộng numeric id character name character sex character class
4 10 1 2
Ý nghĩa Mã hiệu sv Tên Giới tính (M / F) Lớp
Bridge [A]
Chess [B]
id
name
sex
class
id
name
sex
class
1 2 3 4 5
1 2 3 4 5
9812 Aaron M M Peter 9801 9814 Kenny M F Kitty 9806 9818 Edmond M : :
:
1A 1A 1B 1B 1C :
9802 F Mary 9801 M Peter 9815 Eddy M Kenny M 9814 9817 George M : :
:
1A 1A 1B 1B 1C :
Thi-Lan Le, MICA HUST
90
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 17: Xác định hợp của 2 câu lạc bộ Câu truy vấn:
SELECT ...... FROM ...... WHERE ...... ; UNION ; SELECT ...... FROM ...... WHERE ......
Thi-Lan Le, MICA HUST
91
SELECT * FROM bridge UNION SELECT * FROM chess ORDER BY class, name
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 18: In danh sách các sinh viên tham gia cả 2
câu lạc bộ Câu truy vấn:
SELECT ...... FROM table1 ; WHERE col IN ( SELECT col FROM table2 )
Thi-Lan Le, MICA HUST
92
SELECT * FROM bridge WHERE id IN ( SELECT id FROM chess)
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 19: Xác định danh sách các sinh viện tham gia câu lạc bộ Bridge nhưng không tham gia câu lạc bộ Chess Câu truy vấn:
SELECT ...... FROM table1 ; WHERE col NOT IN ( SELECT col FROM table2 )
Thi-Lan Le, MICA HUST
93
SELECT * FROM bridge WHERE id NOT IN (SELECT id FROM chess )
2. Ngôn ngữ thao tác dữ liệu
Bảng Music lưu trữ thông tin về nhạc cụ của sinh
viên
Thuộc tính Kiểu dữ liệu Độ rộng Ý nghĩa id type
numeric character
4 10
mã hiệu sinh viên kiểu nhạc cụ
Thi-Lan Le, MICA HUST
94
2. Ngôn ngữ thao tác dữ liệu
Kết nối tự nhiên (Natural Join) hay (Inner joint): là một thao
tác kết nối 2 bảng bằng các cột chung.
Kết nối ngoài (outer join):
LEFT OUTER JOIN (thường viết LEFT JOIN) lựa chọn tất cả các dòng ở trong bảng đầu tiên sau FROM ngay cả khi nó không có trong bảng thứ hai.
RIGHT OUTER JOIN
Thi-Lan Le, MICA HUST
95
Kết nối:
2. Ngôn ngữ thao tác dữ liệu
Kết nối tự nhiên: Cú pháp 1:
SELECT a.comcol, a.col1, b.col2, expr1, expr2 FROM table1 a JOIN table2 b ON a.comcol = b.comcol
Cú pháp 2:
Thi-Lan Le, MICA HUST
96
SELECT a.comcol, a.col1, b.col2, expr1, expr2 FROM table1 a, table2 b WHERE a.comcol = b.comcol
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 20: Xác định danh sách các sinh viên và
nhạc cụ sinh viên đó học
SELECT s.class, s.name, s.id, m.type FROM student s, music m WHERE s.id=m.id ORDER BY class, name
Câu truy vấn:
Kết quả
Thi-Lan Le, MICA HUST
97
class name Aaron 1A Bobby 1A Gigi 1A Jill 1A Johnny 1A Luke 1A Mary 1A : :
id type 9812 Piano 9811 Flute 9824 Recorder 9820 Piano 9803 Violin 9810 Piano 9802 Flute :
:
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 20: Xác định số sinh viên học piano trong
mỗi lớp
SELECT s.class, COUNT(*) FROM student s, music m WHERE s.id=m.id AND m.type=‘Piano’ GROUP BY class ORDER BY class
Câu truy vấn:
Join
Student
Điều kiện
Nhóm theo lớp
m.type= "Piano"
Kết quả
Music
class 1A 1B 1C
cnt 4 2 1
Thi-Lan Le, MICA HUST
98
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 21: Xác định danh sách sinh viên chưa lựa
SELECT class, name, id FROM student WHERE id NOT IN ( SELECT id FROM music ) ORDER BY class, name
chọn nhạc cụ Câu truy vấn:
Kết quả
class name 1A 1B 1B 1C 1C :
Mandy Kenny Tobe Edmond George :
id 9821 9814 9805 9818 9817 :
Thi-Lan Le, MICA HUST
99
2. Ngôn ngữ thao tác dữ liệu
Yêu cầu 22: Tạo danh sách các sinh viên với danh sách nhạc cụ sinh viên đó học. Danh sách này phải bao gồm cả sinh viên chưa đăng ký nhạc cụ
SELECT s.class, s.name, s.id, m.type
FROM student s, music m WHERE s.id=m.id
Câu truy vấn:
UNION SELECT class, name, id, ""
FROM student WHERE id NOT IN ( SELECT id FROM music ) ORDER BY 1, 2
Sinh viên tự đề xuất các câu truy vấn khác để thực hiện yêu cầu 22
Thi-Lan Le, MICA HUST
100
2. Ngôn ngữ thao tác dữ liệu
class name Aaron 1A Bobby 1A Gigi 1A Jill 1A Johnny 1A Luke 1A Mary 1A : :
id type 9812 Piano 9811 Flute 9824 Recorder 9820 Piano 9803 Violin 9810 Piano 9802 Flute :
:
class name 1A 1B 1B 1C 1C :
Mandy Kenny Tobe Edmond George :
id 9821 9814 9805 9818 9817 :
class 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1B 1B 1B 1B :
name Aaron Bobby Gigi Jill Johnny Luke Mandy Mary Peter Ron Eddy Janet Kenny Kitty :
type id Piano 9812 Flute 9811 Recorder 9824 9820 Piano 9803 Violin 9810 Piano 9821 Flute 9802 Piano 9801 9813 Guitar Piano 9815 9822 Guitar 9814 9806 :
Recorder :
Thi-Lan Le, MICA HUST
101
Bài tập
Viết câu truy vấn liệt kê tên khách hàng và tổng số tiền mà họ đã sử dụng
Thi-Lan Le, MICA HUST
102
Cho bảng thông tin: