Tài liệu tham khảo - CITD - Bến Tre Bai 5_Ngon ngu SQL tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập...
Trang 1NGÔN NGỮ SQL
Tổng số tiết: 17
Mục tiêu bài học
Có khả năng dùng SQL để tạo bảng và xoá
bảng
Có khả năng dùng SQL để thêm, sửa, xoá
dữ liệu
Có thể thống kê, tổng hợp dữ liệu bằng SQL
3
Tài liệu tham khảo
[1] Lê Tiến Vương (2000), “Nhập môn cơ sở dữ
liệu quan hệ”, NXB Thống Kê.
[2] Nguyễn Đăng Tỵ và Đỗ Phúc (2009), “Giáo
trình Cơ sở dữ liệu”, NXB Đại Học Quốc Gia
Thành phố Hồ Chí Minh, chương 6, trang 97
[3] Nguyễn Thị Ngọc Mai (2007), “Lý thuyết cơ
sở dữ liệu”, tập 1, NXB Lao Động Xã Hội
Nội dung
Giới thiệu
Nhóm lệnh định nghĩa và cập nhật sơ đồ CSDL
Tạo bảng
Xoá bảng
Nhóm lệnh cập nhật dữ liệu
Thêm
Sửa
Xoá
Nhóm lệnh truy vấn dữ liệu
Truy vấn lựa chọn
Truy vấn nhóm
Truy vấn con
Giải một số bài tập
Tổng kết chương
ĐỌC THÊM
Lệnh đổi tên bảng, thêm cột, xoá cột, đổi tên cột
Lệnh tạo khoá chính
Lệnh tạo mối quan hệ giữa
2 bảng
Lệnh thiết lập các ràng buộc toàn vẹn
…
Trang 2Giới thiệu
Các hệ quản trị CSDL cần có ngôn ngữ giao tiếp
giữa người sử dụng với CSDL, gồm:
Ngôn ngữ định nghĩa và cập nhật sơ đồ CSDL (Data
Definition Language – DDL): Cho phép định nghĩa và thay
đổi cấu trúc các bảng
Ngôn ngữ thao tác dữ liệu (Data Manipulation Language –
DML): Cho phép thêm, sửa, xoá dữ liệu
Ngôn ngữ truy vấn dữ liệu (Structured Query Language –
SQL): Cho phép truy vấn các thông tin trong CSDL
6
Năm 1975, hãng IBM lần đầu tiên đưa ra HQT CSDL
quan hệ System-R với ngôn ngữ giao tiếp là SEQUEL
Năm 1976 ngôn ngữ SEQUEL được cải tiến thành
SEQUEL2
Năm 1978-1979 SEQUEL2 được cải tiến và đổi thành
ngôn ngữ truy vấn có cấu trúc (Structured Query
Language – SQL)
Năm 1986 Viện Tiêu Chuẩn Quốc gia Mỹ (Ameriacan
National Standards Institute – ANSI) đã công nhận và
chuẩn hoá ngôn ngữ SQL Sau đó Tổ chức Tiêu chuẩn
quốc tế (International Standards Organization – ISO)
cũng đã công nhận ngôn ngữ này Đó là chuẩn SQL-86
7
Tới nay SQL đã qua 3 lần chuẩn hoá (1989,
1992, 1996) nhằm mở rộng các phép toán và tăng cường khả năng bảo mật, tính toàn vẹn
dữ liệu
Trong tài liệu này, chúng ta tìm hiểu ngôn
ngữ truy vấn dữ liệu dựa trên chuẩn SQL-92
8
Ngôn ngữ định nghĩa và cập nhật sơ đồ CSDL
Tạo bảng
CREATE TABLE tên_bảng(tên_cột KDL(độ lớn), tên_cột KDL,…)
KDL (Kiểu dữ liệu) có thể là:
Char(w): Kiểu ký tự
Number(w,s): Kiểu số có kích thước tối đa w ký
tự, trong đó có s chữ số sau dấu chấm thập phân
Date: Kiểu ngày tháng năm
Logical: Kiểu logic 1 byte có giá trị hoặc đúng
(True), hoặc sai (False)
Trang 3 Ví dụ: Tạo bảng SV(maSV, ht, phai, ns)
CREATE TABLE Sv(maSV Char(4), ht Char(30), phai
Logical, ns Date)
CREATE TABLE Sv(maSV Char(4) Primary Key, ht
Char(30) Not Null, phai Logical Default True, ns Date)
(tham khảo thêm về cú pháp câu lệnh trong tài liệu)
Xoá bảng
DROP TABLE tên_bảng;
Ví dụ: Xoá bảng SV đã được tạo ở trên
Drop Table Sv
11
Ngôn ngữ thao tác dữ liệu
Chỉnh sửa dữ liệu
UPDATE tên_bảng SET <tên_cột = biểu thức> ,…
WHERE <điều_kiện_cập_nhật>;
Ví dụ 1: Cập nhật số tiết môn CSDL lên 60 tiết
Update Monhoc Set sotiet = 60 Where tenMH=“Cơ sở dữ liệu”
Tất cả các ví dụ phía sau sẽ thao tác trên CSDL “Quản lý sinh viên” có cấu trúc như sau:
Khoa(maK, tenK) Sinhvien(maSV, hoSV, tenSV, phai, ns, que,maK) Ketqua(maSV, maMH, diem)
Monhoc(maMH, tenMH, st)
Trang 4 Ví dụ 2: Tăng số tiết cho tất cả các môn lên
5%
Update Monhoc
Set sotiet = sotiet + sotiet*5%
Ví dụ 3: Đổi số tiết môn TRR thành 90 tiết và
tên môn thành Toán rời rạc
Update Monhoc
Set sotiet=90, tenMH=“Toán rời rạc”
Where maMH=“TRR”
14
Xoá dữ liệu (xoá các dòng thoả điều kiện)
DELETE FROM tên_bảng
WHERE điều_kiện_xoá
Ví dụ 1: Xoá các môn học có số tiết lớn hơn
100
Delete from Monhoc
Where st > 100
15
Ví dụ 2: Xoá môn CSDL
Delete from Monhoc Where tenMH=“Cơ sở dữ liệu”
16
Thêm 1 dòng
INSERT INTO tên_bảng(cột_1, cột_2,…, cột_n) VALUES (giá_trị_1, giá_trị2,…, giá_trị_n);
Ví dụ: Thêm môn (“LSD”, “Lịch sử Đảng”, 90) vào quan hệ Monhoc
Insert Into Monhoc(maMH, tenMH, st) Values (“LSD”, “Lịch Sử Đảng”, 90)
Trang 5Truy vấn dữ liệu
Truy vấn lựa chọn (đơn giản)
SELECT [DISTINCT] danh_sách_các_cột | *
FROM danh_sách_các_bảng
WHERE [điều_kiện_kết AND điều_kiện_lọc]
ORDER BY cộtsx [ASC | DESC]
Điều_kiện_kết: Được dùng khi ở mệnh đề
FROM có từ 2 bảng trở lên
Ví dụ: Liệt kê danh sách sinh viên gồm họ tên,
ngày sinh và tên khoa
Select hoSv, tenSV, ns, tenK
From Sinhvien, Khoa
Where sinhvien.maK = khoa.maK
19
Điều_kiện_lọc: Có các dạng sau:
<trường> ss <biểu thức>
Ví dụ: diem >=5
masv= ‘A01’
<trường> [NOT] BETWEEN <gtrị đầu> AND
<gtrị cuối>
Ví dụ: diem BETWEEN 5 and 7 Lọc các dòng
có điểm từ 5 đến 7
Yêu cầu sv làm cách khác tương đương
<trường> [NOT] IN (tập giá trị)
Ví dụ: diem IN (6,7,8) Lọc các dòng có điểm là
6, 7,8
Yêu cầu sv làm cách khác tương đương
Trang 6 <trường> [NOT] LIKE “chuỗi”
“chuỗi”: Trong phần “chuỗi”, có thể dùng dấu * đại
diện cho 1 chuỗi ký tự bất kỳ, ? Đại diện cho một
ký tự bất kỳ
Ví dụ: tenSV LIKE “T*” Tìm các sv có tên bắt
đầu là ký tự T
22
Các hàm xử lý ngày
Day(ngày): Trả về ngày
Month(ngày): Trả về tháng
Year(ngày): Trả về năm
getDate(): Trả về ngày tháng năm hiện hành
Các hàm tính toán
Sum(bthức): Tính tổng
Avg(bthức): Tính trung bình
Count(bthức): Đếm số dòng
Max(bthức): Trả về giá trị lớn nhất trong <bthức>
Min(bthuc): Trả về giá trị nhỏ nhất trong <bthuc>
23
Ví dụ 1: Cho ds kết quả học tập của các sinh viên gồm
mã sinh viên, họ tên, tên khoa, tên môn, điểm
Select maSV, hoSV, tenSV, tenK, tenMH, diem From khoa, sinhvien, ketqua, monhoc
Where khoa.maK = sinhvien.maK and
Sinhvien.maSV = ketqua.maSV and Ketqua.maMH = monhoc.maMH
24
Ví dụ 2: Liệt kê các sinh viên học ở khoa công nghệ thông tin
Select maSV, h oSV, tenSV From Khoa, sinhvien Where khoa.maK = sinhvien.maK and
tenK = “Công nghệ thông tin”
Ví dụ 3: Liệt kê các sinh viên họ Trần Select maSV, h oSV, tenSV From sinhvien Where h oSV LIKE “Trần*”
Trang 7 Ví dụ 4: Liệt kê các sinh viên thi môn CSDL từ 8 đến
10 điểm
Select maSV, ht From sinhvien, ketqua, monhoc
Where sinhvien.maSV=ketqua.maSV and
ketqua.maMH=monhoc.maMH and tenMH=“Cơ sở dữ
liệu” and diem between 8 and 10
Ví dụ 5: Liệt kê các sinh viên học ở khoa
CNTT, sư phạm, và kinh tế
Select maSV, ht from sinhvien
Where maK IN (“CNTT”, “SP”, “KT”)
Ví du 6: Liệt kê các sinh viên 18, 21 và 25
tuổi
Select maSV, ht from sinhvien
Where year(now())-year(ns) IN (18,21,25)
27
Ví dụ 7: Cho danh sách sinh viên được sắp xếp theo họ tăng dần
Select * from sinhvien Order by ht
Truy vấn nhóm
Cú pháp
SELECT danh_sách_các_cột FROM danh_sách_các_bảng WHERE <điều_kiện_kết> AND
<điều_kiện_lọc_trên_dòng>
GROUP BY cột_phân_nhóm,…
HAVING điều_kiện_lọc_trên_nhóm;
Trang 8 Ví dụ 1: Cho biết điểm trung bình của từng
sinh viên
Select maSV, avg(diem) from ketqua
Group by maSV
Ví dụ 2: Cho biết điểm cao nhất của từng
môn học
Select maMH, max(diem) from ketqua
Group by maMH
30
Ví dụ 3: Cho danh sách sinh viên (maSV) có điểm
trung bình lớn hơn hoặc bằng 5
Select maSV from ketqua
Group by masv
Having avg(diem) >=5
Ví dụ 4: Cho mã sinh viên có điểm trung bình cao
nhất
Select top 1 maSV, avg(diem)
From ketqua
Group by maSV
Order by avg(diem) DESC
31
Ví dụ 5: Cho tổng số sinh viên hiện có
Select count(maSV) from sinhvien
Ví dụ 6: Cho biết tổng số sinh viên theo từng khoa
Select maK, count(maSV) from sinhvien Group by maK
Ví dụ 7: Cho biết điểm cao nhất theo từng môn của sinh viên khoa CNTT
Select maMH, max(diem) From ketqua
Where maK=“CNTT”
Group by maMH
32
Bài tập
Liệt kê các sv khoa kinh tế có điểm trung bình lớn hơn 8
Select sinhvien.masv, hoSV, tenSV, avg(diem) as diemtb
From ketqua, sinhvien, khoa Where ketqua.masv = sinhvien.masv and sinhvien.mak = khoa.mak and tenK =‘kinh tế’
Group by sinhvien.masv, hoSV, tenSV Having avg(diem) > 8
Trang 9 Liệt kê các môn có trên 5 sinh viên thi
Liệt kê các sv nữ, khoa công nghệ thông tin
thi trên 3 môn
Liệt các sv có điểm trung bình từ 5 trở lên
Liệt kê các sv chưa từng thi rớt môn nào
Select masv
From ketqua
Group by masv
Having min(diem)>=5
35
Liệt kê các sv thi rớt môn CSDL
Cho biết điểm trung bình của từng sinh viên
Select sinhvien.maSV, hoSv, tenSV, avg(diem) as DTB
From ketqua, sinhvien Where ketqua.masv = sinhvien.masv Group by sinhvien.masv, hoSV, tenSV
Truy vấn con
Cú pháp
SELECT danh_sách_các_cột FROM danh_sách_các_bảng
WHERE cột so_sánh (SELECT… FROM…)
[GROUP BY cột_phân_nhóm,…
HAVING cột so_sánh (SELECT… FROM…)];
Trang 10 Ví dụ 1: Liệt kê các khoa không có sv
Phân tích đề:
Tập hợp
tất cả các
khoa
Các khoa
có sv học
-Các khoa không có
sv học Select mak
from sinhvien
Select mak, tenk
from khoa
Select mak, tenk
From Khoa
Where mak NOT IN (Select mak From Sinhvien)
38
Ví dụ 2: Cho ds các sv chưa thi môn nào
Select maSV, hoSV, tenSV from sinhvien
Where maSV NOT IN (select maSV from ketqua)
Tập hợp
tất cả các
sv
Các sv đã từng dự thi
-Các sv chưa thi môn nào
39
Tổng kết bài