NGÔN NGỮ SQL
1. Ngôn ngữ mô tả dữ liệu 2. Ngôn ngữ thao tác dữ liệu 3. Ngôn ngữ truy vấn dữ liệu
1
CƠ SỞ DỮ LIỆU VÍ DỤ
Cho CSDL gồm các Bảng sau: SINHVIEN (MSSV, HOLOT, TEN, PHAI,
NGAYSINH, QUEQUAN, DIACHI, MALOP) DSLOP (MALOP, TENLOP, SISO, MAKHOA) DSKHOA (MAKHOA, TENKHOA) MONHOC (MAMH, TENMH, SOTC) KETQUA (MSSV, MAMH, DIEM)
2
CƠ SỞ DỮ LIỆU VÍ DỤ
SINHVIEN
MSSV HOLOT TEN PHAI QUEQUAN DIACHI
MALO P NGAY SINH
T001 LE VAN 13/5/81 TU NAM TPHCM 12 LELOI-Q1 – TPHCM T1N
D002 TRAN THI 3/12/82 DIEM NU HANOI 3/1A BAHAT - Q10 D1N
H003 NGUYEN VU 1/6/80 LINH NAM DONGTHAP 25 VOTHISAU - Q3 H1N
K004 CAO VAN 31/7/81 HUNG NAM VINHLONG 33/5 HONG HA – TB K1N
T005 LE TIEN 11/3/84 DUNG NAM DONGNAI 77/8 LE LOI - Q1 T2N
T006 DAO VAN 6/6/79 DUNG NAM HUE 38/4 TAM DAO – Q10 T1N
H007 TRAN MINH 4/8/81 HANH NU HANOI 9 BINHGIA – TB H1N
D008 DINH THI 23/4/82 TUYET NU TPHCM 22 CC MIEUNOI D2N
D009 LY HAI 18/2/81 TRIEU NAM CANTHO F7 NGUYEN OANH D1N
3
K010 HA NGUYEN 16/3/80 XUAN NU ANGIANG 365 CAO THANG K1N
CƠ SỞ DỮ LIỆU VÍ DỤ
DSLOP
TENLOP SISO MAKHOA MALOP
TIN HOC 1 75 TH T1N
TIN HOC 2 68 TH T2N
DIEN TU 1 57 DD D1N
DIEN TU 2 61 DD D2N
HOA HOC 1 123 HH H1N
KINH TE 1 84 KT K1N
DSKHOA
MAKHOA TENKHOA
TH CONG NGHE THONG TIN
DD DIEN – DIEN TU
HH CONG NGHE HOA
4
KT KINH TE
CƠ SỞ DỮ LIỆU VÍ DỤ
MONHOC
MAMH TENMH SOTC
KETQUA MSSV MAMH
DIEM
THCB TIN HOC CAN BAN 4 T001 THVP 6
THVP TIN HOC VAN PHONG 3 T001 CSDL 7
CSDL CO SO DU LIEU 4 D002 THCB 8
LTCB LAP TRINH CAN BAN 5 D002 THVP 5
CTDL CAU TRUC DU LIEU 4 D002 LTCB 3
MANG MANG MAY TINH 3 H003 LTCB 9
H003 CTDL 6
K004 THCB 5
K004 THVP 7
K004 CSDL 9
T005 THCB 1
5
T005 MANG 5
1. Ngôn ngữ mô tả dữ liệu
1.
2.
3.
4.
5.
6.
7.
8.
Lệnh Tạo Bảng Lệnh Xóa Bảng Lệnh Thêm Cột Lệnh Xóa Cột Lệnh Sửa Cột Lệnh Tạo Khóa chính Lệnh Tạo Khóa ngoại Lệnh Tạo ràng buộc về miền giá trị Lệnh Tạo ràng buộc duy nhất
9. 10. Lệnh Tạo chỉ mục 11. Lệnh Xóa chỉ mục
6
1. Ngôn ngữ mô tả dữ liệu
1.Lệnh Tạo Bảng
CREATE TABLE (
[NOT NULL],
[NOT NULL],
…
[NOT NULL]);
NOT NULL : Cột không được phép rỗng
7
1. Ngôn ngữ mô tả dữ liệu
1.Lệnh Tạo Bảng – Ví dụ CREATE TABLE SINHVIEN (
MSSV char(4) not null, HOLOT varchar(20) not null, TEN varchar(7) not null, PHAI bit, NGAYSINH datetime, QUEQUAN varchar(20), DIACHI varchar(50), MALOP char(3) not null);
8
1. Ngôn ngữ mô tả dữ liệu
2.Lệnh Xóa Bảng
DROP TABLE ;
Ví dụ: DROP TABLE SINHVIEN;
9
1. Ngôn ngữ mô tả dữ liệu
3.Lệnh Thêm Cột
ALTER TABLE
ADD [NOT NULL];
Ví dụ: ALTER TABLE SINHVIEN ADD DOANVIEN bit;
10
1. Ngôn ngữ mô tả dữ liệu
4.Lệnh Xóa Cột
ALTER TABLE
DROP COLUMN ;
Ví dụ: ALTER TABLE SINHVIEN DROP COLUMN DOANVIEN;
11
1. Ngôn ngữ mô tả dữ liệu
5.Lệnh Sửa Cột
ALTER TABLE
ALTER COLUMN ;
Ví dụ: ALTER TABLE SINHVIEN ALTER COLUMN Ngaysinh SmallDatetime;
12
1. Ngôn ngữ mô tả dữ liệu
6.Lệnh Tạo Khóa chính
ALTER TABLE
ADD CONSTRAINT
PRIMARY KEY (DS tên cột);
Lưu ý: -Tên ràng buộc là duy nhất -Các cột trong DS tên cột phải có thuộc tính NOT NULL
13
1. Ngôn ngữ mô tả dữ liệu
6.Lệnh Tạo Khóa chính - Ví dụ: ALTER TABLE SINHVIEN
ADD CONSTRAINT Kc_Sv PRIMARY KEY (mssv);
ALTER TABLE KETQUA
ADD CONSTRAINT Kc_Kq PRIMARY KEY (mssv,mamh);
14
1. Ngôn ngữ mô tả dữ liệu
7.Lệnh Tạo Khóa ngoại
ALTER TABLE
ADD CONSTRAINT
FOREIGN KEY (DS tên cột)
REFERENCES (DS tên cột);
Lưu ý: -Tên ràng buộc là duy nhất
15
1. Ngôn ngữ mô tả dữ liệu
7.Lệnh Tạo Khóa ngoại - Ví dụ: ALTER TABLE SINHVIEN
ADD CONSTRAINT Kn_Sv FOREIGN KEY(malop) REFERENCES DSLOP (malop);
ALTER TABLE KETQUA
ADD CONSTRAINT Kn_Kq1 FOREIGN KEY (mssv) REFERENCES SINHVIEN (mssv);
16
1. Ngôn ngữ mô tả dữ liệu
8.Lệnh Tạo ràng buộc về miền giá trị
ALTER TABLE
ADD CONSTRAINT
CHECK (Điều kiện);
Lưu ý: -Tên ràng buộc là duy nhất
17
1. Ngôn ngữ mô tả dữ liệu
8.Lệnh Tạo ràng buộc miền giá trị - Ví dụ:
ALTER TABLE KETQUA
ADD CONSTRAINT Kt_Kq CHECK (Diem between 0 AND 10);
ALTER TABLE DSLOP
ADD CONSTRAINT Kt_Dslop CHECK (Siso >= 50);
18
1. Ngôn ngữ mô tả dữ liệu
9.Lệnh Tạo ràng buộc duy nhất
ALTER TABLE
ADD CONSTRAINT
UNIQUE (DS Tên cột);
Lưu ý: -Tên ràng buộc là duy nhất
19
1. Ngôn ngữ mô tả dữ liệu
9.Lệnh Tạo ràng buộc duy nhất – Ví dụ Tên môn học không được trùng nhau: ALTER TABLE MONHOC ADD CONSTRAINT Dn_Mh UNIQUE (TenMH);
20
1. Ngôn ngữ mô tả dữ liệu
10.Lệnh Tạo chỉ mục
CREATE INDEX
ON (, , ...) ;
Ngữ nghĩa: Tạo chỉ mục để lưu thứ tự sắp xếp các bản ghi theo giá trị tăng dần của các cột được cho trong danh sách.
Ghi chú: Chỉ nên tạo chỉ mục cho các bảng có nhiều bản ghi và ít được cập nhật, và chỉ nên tạo trên các cột mà thông tin của nó thường xuyên được tham khảo tới.
21
1. Ngôn ngữ mô tả dữ liệu
10.Lệnh Tạo chỉ mục – Ví dụ: CREATE INDEX Cm_sv1 ON SINHVIEN (Ten);
CREATE INDEX Cm_mh1 ON MONHOC (TenMH);
22
1. Ngôn ngữ mô tả dữ liệu
11.Lệnh Xóa chỉ mục
DROP INDEX ;
Ví dụ: DROP INDEX Cm_sv1
DROP INDEX Cm_mh1
23
2. Ngôn ngữ thao tác dữ liệu
1.
2.
3.
Lệnh Thêm mẫu tin Lệnh Xóa mẫu tin Lệnh cập nhật mẫu tin
24
2. Ngôn ngữ thao tác dữ liệu
1.Lệnh thêm mẫu tin (1)
INSERT INTO (, ...)
VALUES (, , ...);
Lưu ý:
-Kiểu dữ liệu -Chiều dài -Các ràng buộc toàn vẹn: khóa chính, khóa ngoại, kiểm
tra, duy nhất
25
2. Ngôn ngữ thao tác dữ liệu 1.Lệnh thêm mẫu tin (1) – Ví dụ
Thêm 1 Sinh viên mới: INSERT INTO SINHVIEN (MSSV, HOLOT, TEN, PHAI,
NGAYSINH, QUEQUAN, DIACHI, MALOP) VALUES (‘T005’,’LE TIEN’,’DUNG’,1,’3/18/84’, ’DONGNAI’,’77/8 LE LOI – Q1’,’T2N’);
Thêm 1 Môn học mới: INSERT INTO MONHOC (MAMH, TENMH, SOTC) VALUES (‘CSDL’,’CO SO DU LIEU’,4);
26
2. Ngôn ngữ thao tác dữ liệu 1.Lệnh thêm mẫu tin (2) Nếu các biểu thức sau từ khoá VALUES hoàn toàn phù hợp về thứ tự với các cột trong bảng danh sách các cột sau từ khóa INTO có thể được bỏ qua
INSERT INTO
VALUES (, , ...);
27
2. Ngôn ngữ thao tác dữ liệu 1.Lệnh thêm mẫu tin (2) – Ví dụ
Thêm 1 Sinh viên mới: INSERT INTO SINHVIEN
VALUES (‘T005’,’LE TIEN’,’DUNG’,1,’3/18/84’, ’DONGNAI’,’77/8 LE LOI – Q1’,’T2N’);
Thêm 1 Môn học mới: INSERT INTO MONHOC
VALUES (‘CSDL’,’CO SO DU LIEU’,4);
28
2. Ngôn ngữ thao tác dữ liệu 1.Lệnh thêm mẫu tin (3) Ngoài ra ta có thể thêm (các) mẫu tin vào bảng từ câu
lệnh truy vấn (Select)
INSERT INTO (, ...)
hoặc
INSERT INTO
29
2. Ngôn ngữ thao tác dữ liệu 1.Lệnh thêm mẫu tin (3) – Ví dụ
Thêm Sinh viên mới từ 1 danh sách: INSERT INTO SINHVIEN SELECT * FROM DSSV_NEW ;
Lưu ý: -DSSV_New có cùng cấu trúc với SINHVIEN
30
2. Ngôn ngữ thao tác dữ liệu 2.Lệnh Xóa mẫu tin Việc loại bỏ mẫu tin khỏi 1 bảng trong CSDL là 1 trong những thao tác cập nhật dữ liệu được tiến hành một cách thường xuyên Cú pháp:
DELETE FROM
[WHERE <điều kiện>];
Ngữ nghĩa: Các mẫu tin thoả mãn điều kiện sau WHERE sẽ bị xoá khỏi bảng. Nếu không có mệnh đề WHERE thì tất cả các mẫu tin của bảng sẽ bị xóa khỏi bảng.
31
2. Ngôn ngữ thao tác dữ liệu 2.Lệnh Xóa mẫu tin – Ví dụ: Xóa Sinh viên có Mã số là T005 DELETE FROM SINHVIEN WHERE MSSV=‘T005’;
Xóa tất cả các môn học có 5 tín chỉ DELETE FROM MONHOC WHERE SOTC = 5;
32
2. Ngôn ngữ thao tác dữ liệu
3.Lệnh cập nhật mẫu tin
Cú pháp
UPDATE
SET
= ,
= ,
...
=
[WHERE <điều kiện>];
33
2. Ngôn ngữ thao tác dữ liệu
3.Lệnh cập nhật mẫu tin
Ngữ nghĩa: Giá trị của các field có tên trong danh sách
, ... của những mẫu tin thoả
mãn điều kiện sau WHERE sẽ được sửa đổi thành
giá trị của các , ... tương
ứng.
Nếu không có mệnh đề WHERE thì tất cả các mẫu tin
của bảng sẽ được sửa đổi.
34
2. Ngôn ngữ thao tác dữ liệu 3.Lệnh cập nhật mẫu tin Ví dụ: Tăng cho tất cả sinh viên 1 điểm môn THCB
UPDATE KETQUA
SET DIEM = DIEM +1 WHERE MAMH = ‘THCB’;
Cập nhật sĩ số lớp T2N thành 90
UPDATE DSLOP
SET SISO = 90
WHERE MALOP = ‘T2N’;
35
3. Ngôn ngữ truy vấn dữ liệu
Cú pháp tổng quát
1. 2. Dạng đơn giản 3. Dấu * 4. Mệnh đề WHERE 5. Mệnh đề ORDER BY 6. Mệnh đề GROUP BY 7. Mệnh đề HAVING Phát biểu Select với AS 8. 9. Phát biểu Select với TOP N 10. Phát biểu Select với DISTINCT 11. Truy vấn từ nhiều Bảng 12. Truy vấn con
36
3. Ngôn ngữ truy vấn dữ liệu
1.Cú pháp tổng quát
SELECT
FROM
WHERE
GROUP BY
HAVING <Điều kiện dựa trên GROUP BY>
ORDER BY
37
3. Ngôn ngữ truy vấn dữ liệu
2.Dạng đơn giản
SELECT
FROM
Trích ra một số cột trong 1 Bảng nào đó
Ví dụ: Lấy ra MAMH, TENMH từ bảng MONHOC SELECT MAMH, TENMH FROM MONHOC;
38
3. Ngôn ngữ truy vấn dữ liệu
3.Dấu * Dấu * đại diện cho tất cả các cột
SELECT *
FROM
Ví dụ: Lấy ra danh sách các môn học SELECT *
FROM MONHOC;
39
3. Ngôn ngữ truy vấn dữ liệu
4.Mệnh đề WHERE
Dùng để đặt điều kiện trích dữ liệu
SELECT
FROM
WHERE
Ví dụ: Lấy ra MSSV, HOTEN của Sinh viên quê quán ‘HA NOI’ SELECT MSSV, HOLOT, TEN
FROM SINHVIEN WHERE QUEQUAN = ‘HA NOI’;
40
3. Ngôn ngữ truy vấn dữ liệu
4.Mệnh đề WHERE Các phép toán trong mệnh đề WHERE -So sánh: >, <. >=, <=, =, <> -Logic: And, Or, Not Ví dụ: Lấy ra MSSV, HOTEN của Sinh viên lớp T2N quê quán
‘HA NOI’
SELECT MSSV, HOLOT, TEN FROM SINHVIEN WHERE QUEQUAN = ‘HA NOI’ AND MALOP=
‘T2N’;
41
3. Ngôn ngữ truy vấn dữ liệu
4.Mệnh đề WHERE Toán tử Between: nằm trong 1 miền
Ví dụ: Trích ra danh sách Sinh viên sinh năm 1982
SELECT * FROM SINHVIEN WHERE NGAYSINH Between
‘1/1/1982’ And
’12/31/1982’;
42
3. Ngôn ngữ truy vấn dữ liệu
4.Mệnh đề WHERE Toán tử LIKE: phép toán so sánh gần giống, sử dụng dấu các ký tự đại diện như _ (1 ký tự), % (1 chuỗi bất kỳ)
Ví dụ: Trích ra danh sách Sinh viên Họ ‘Phan’
SELECT * FROM SINHVIEN WHERE HOLOT LIKE ‘Phan%’;
43
3. Ngôn ngữ truy vấn dữ liệu 4.Mệnh đề WHERE Toán tử IN: phép toán so sánh trong 1 tập hợp, 1 danh
sách
Ví dụ: Trích ra danh sách Sinh viên quê quán ở các tỉnh
‘Cần Thơ’, ‘An Giang’, ‘Kiên Giang’
SELECT * FROM SINHVIEN WHERE QUEQUAN IN (‘Cần Thơ’, ‘An Giang’,
‘Kiên Giang’);
44
3. Ngôn ngữ truy vấn dữ liệu
4.Mệnh đề WHERE IS NULL ( IS NOT NULL ): kiểm tra 1 giá trị có rỗng
hay không (kết quả: TRUE – FALSE)
Ví dụ: Trích ra danh sách Sinh viên chưa có địa chỉ
SELECT * FROM SINHVIEN WHERE DIACHI IS NULL;
45
3. Ngôn ngữ truy vấn dữ liệu
4.Mệnh đề WHERE Toán tử Exists: trả về TRUE nếu có ít nhất 1 mẫu tin tồn
tại
Ví dụ: Cho biết có sinh viên nào Quê quán ‘Nha Trang’
không?
If Exists (SELECT * FROM SINHVIEN WHERE QUEQUAN = ‘Nha Trang’) Print ‘Co sinh vien’;
46
3. Ngôn ngữ truy vấn dữ liệu
5.Mệnh đề ORDER BY Sắp xếp kết quả theo thứ tự mong muốn
ORDER BY [ASC | DESC]
Ví dụ: Trích ra danh sách sinh viên nữ, sắp theo tên tăng
dần?
SELECT MSSV, HOLOT, TEN, MALOP FROM SINHVIEN WHERE PHAI= 0 ORDER BY TEN ASC
47
3. Ngôn ngữ truy vấn dữ liệu
6.Mệnh đề GROUP BY Nhóm dữ liệu lại theo từng nhóm để thực hiện các
phép toán thống kê
GROUP BY
Ví dụ: Cho biết số lượng sinh viên từng lớp SELECT MALOP, COUNT(*) AS SOSV FROM SINHVIEN GROUP BY MALOP
48
3. Ngôn ngữ truy vấn dữ liệu
6.Mệnh đề GROUP BY Một số Hàm thông dụng:
-AVG: giá trị trung bình -MIN: giá trị nhỏ nhất -MAX: giá trị lớn nhất -COUNT: đếm số phần tử -SUM : Tổng các phần tử
49
3. Ngôn ngữ truy vấn dữ liệu
7.Mệnh đề HAVING Đặt điều kiện chọn sau khi đã nhóm dữ liệu bằng mệnh
đề GROUP BY
Ví dụ: Trích ra Danh sách các lớp có trên 20 sinh viên
SELECT MALOP, COUNT(*) AS SOSV FROM SINHVIEN GROUP BY MALOP HAVING COUNT(*) > 20 ;
50
3. Ngôn ngữ truy vấn dữ liệu
8.Phát biểu Select với AS Đặt lại tên Field khi hiển thị kết quả Ví dụ: Trích ra Danh sách các lớp có trên 20 sinh viên
SELECT MALOP AS ML, COUNT(*) AS SOSV FROM SINHVIEN GROUP BY MALOP HAVING COUNT(*) > 20 ;
51
3. Ngôn ngữ truy vấn dữ liệu
9.Phát biểu Select với TOP N Cho phép lấy ra chỉ một số mẫu tin nào đó theo 1 tiêu
chuẩn nào đó.
Ví dụ: Trích ra Danh sách 10 sinh viên đầu tiên.
SELECT TOP 10 * FROM SINHVIEN;
52
3. Ngôn ngữ truy vấn dữ liệu
10.Phát biểu Select với DISTINCT Nếu kết quả truy vấn có nhiều mẫu tin trùng nhau, để chỉ
lấy 1 mẫu tin ta dùng DISTINCT
Ví dụ: Trong Danh sách Sinh viên, cho biết có những
lớp nào
SELECT DISTINCT MALOP FROM SINHVIEN;
53
3. Ngôn ngữ truy vấn dữ liệu
11.Truy vấn từ nhiều bảng Khi thông tin cần lấy ra có từ nhiều bảng khác nhau, cần
thực hiện truy vấn từ nhiều bảng
SELECT
FROM
WHERE
54
3. Ngôn ngữ truy vấn dữ liệu
11.Truy vấn từ nhiều bảng
Lưu ý: Cần kết các bảng lại với nhau. Với n bảng cần có n-1
điều kiện kết.
Các tên cột cùng có ở nhiều bảng cần ghi rõ theo
dạng [Tên Bảng].[Tên cột]
55
3. Ngôn ngữ truy vấn dữ liệu
11.Truy vấn từ nhiều bảng
Ví dụ: Trích ra MSSV, HOTEN, MALOP,TENLOP của
những sinh viên tên ‘NAM’
SELECT MSSV, HOLOT, TEN, DSLOP.MALOP, TENLOP
FROM SINHVIEN, DSLOP WHERE SINHVIEN.MALOP = DSLOP.MALOP
AND TEN=‘NAM’;
56
3. Ngôn ngữ truy vấn dữ liệu
11.Truy vấn từ nhiều bảng -Có thể sử dụng tên tắt của các Bảng
Ví dụ: Trích ra MSSV, HOTEN, MALOP, TENLOP của
những sinh viên khoa CNTT
SELECT MSSV, HOLOT, TEN, L.MALOP, TENLOP FROM SINHVIEN S, DSLOP L, DSKHOA K WHERE S.MALOP = L.MALOP
AND L.MAKHOA = K.MAKHOA AND TENKHOA=‘Cong nghe thong tin’;
57
3. Ngôn ngữ truy vấn dữ liệu
12.Truy vấn con -Đôi khi ta cần sử dụng kết quả của 1 câu truy vấn để làm điều kiện cho 1 câu truy vấn khác, khi đó ta gọi là truy vấn con.
-Khi thực hiện, truy vấn con sẽ được thực hiện trước, rồi
lấy kết quả để thực hiện truy vấn lớn
58
3. Ngôn ngữ truy vấn dữ liệu
12.Truy vấn con Dạng tổng quát:
SELECT
( SELECT
59
3. Ngôn ngữ truy vấn dữ liệu
12.Truy vấn con Ví dụ: Trích ra DS những SV có điểm môn THVP cao
nhất
SELECT S.MSSV,HOLOT,TEN,MAMH,DIEM FROM SINHVIEN S, KETQUA K WHERE S.MSSV = K.MSSV
AND MAMH=‘THVP’ AND DIEM = ( SELECT MAX(DIEM)
FROM KETQUA WHERE MAMH=‘THVP’)
60
From --> Where --> Group By --> Having -->
Select --> Order
61