Tải bản đầy đủ (.pdf) (10 trang)

Tài liệu tham khảo - CITD - Bến Tre Bai 5_Ngon ngu SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (158.2 KB, 10 trang )

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.

NGÔN NGỮ SQL
Tổng số tiết:
Lý thuyết:
Thực hành:

17
8
9

1

Mục tiêu bài học






3

Nội dung



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



Giới thiệu
Nhóm lệnh định nghĩa và
cập nhật sơ đồ CSDL





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





2

Tạo bảng
Xoá bảng

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
 …

4


1


Giớ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.



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

5

7

Ngôn ngữ định nghĩa và cập
nhật sơ đồ CSDL






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




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à:






6

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)
8

2


Ngôn ngữ thao tác dữ liệu


Ví dụ: Tạo bảng SV(maSV, ht, phai, ns)




UPDATE tên_bảng
SET <tên_cột = biểu thức> ,…
WHERE <điều_kiện_cập_nhật>;

CREATE TABLE Sv(maSV Char(4), ht Char(30), phai
Logical, ns Date)


Chỉnh sửa dữ liệu

Hoặc
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)



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”

9




Xoá bảng
DROP TABLE tên_bảng;



Ví dụ: Xoá bảng SV đã được tạo ở trên
Drop Table Sv

11



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)

10

12

3




Ví dụ 2: Tăng số tiết cho tất cả các môn lên

5%



Delete from Monhoc
Where tenMH=“Cơ sở dữ liệu”

Update Monhoc
Set sotiet = sotiet + sotiet*5%


Ví dụ 2: Xoá môn CSDL

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”
13



Xoá dữ liệu (xoá các dòng thoả điều kiện)

15



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);


DELETE FROM tên_bảng
WHERE điều_kiện_xoá



Thêm 1 dòng



Ví dụ 1: Xoá các môn học có số tiết lớn hơn
100

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)

Delete from Monhoc
Where st > 100

14

16

4


Truy 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]

Đ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’

ORDER BY cộtsx [ASC | DESC]

17





Điều_kiện_kết: Được dùng khi ở mệnh đề
FROM có từ 2 bảng trở lên

19




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



<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ị)



18

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
20


5




<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

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

21




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ụ 2: Liệt kê các sinh viên học ở khoa công nghệ
thông tin
Select maSV, hoSV, 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, hoSV, tenSV From sinhvien
Where hoSV LIKE “Trần*”






22

24

6




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ụ 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

25


27

Truy vấn nhóm


Ví dụ 5: Liệt kê các sinh viên học ở khoa
CNTT, sư phạm, và kinh tế



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;

Select maSV, ht from sinhvien
Where maK IN (“CNTT”, “SP”, “KT”)


Cú pháp

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)
26


28

7






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ụ 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ụ 2: Cho biết điểm cao nhất của từng
môn học


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

Select maMH, max(diem) from ketqua
Group by maMH

29

31

Bài tập


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


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

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
30

32

8







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 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

33

35

Truy vấn con
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





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…)];

34

36

9




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

-

Select mak, tenk
from khoa

Các khoa
có sv học

Tổng kết bài

Các khoa

không có
sv học

Select mak
from sinhvien

Select mak, tenk
From Khoa
Where mak NOT IN (Select mak From Sinhvien)



37

39

Ví dụ 2: Cho ds các sv chưa thi môn nào

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


Select maSV, hoSV, tenSV from sinhvien
Where maSV NOT IN (select maSV from ketqua)
38

10



×