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 FROM WHERE … < Tên cột > IN ( NOT IN, =, <>, …)

( SELECT FROM WHERE )

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