Phan3

38
www.elarion.com CƠ SỞ DỮ LiỆU LARION_TDT@internship_03 Never stop improving quality Phần 3: Ngôn ngữ truy vấn SQL

Transcript of Phan3

Page 1: Phan3

www.elarion.com

CƠ SỞ DỮ LiỆU

LARION_TDT@internship_03

Never stop improving quality

Phần 3: Ngôn ngữ truy vấn SQL

Page 2: Phan3

Giới thiệu ngôn ngữ truy vấn SQL

• Khái niệm:

Là một loại ngôn ngữ máy tính phổ biến dùng dể tạo, thêm, xóa, sửa và lấy dữ liệu từ một hệ quản trị cơ sở dữ liệu .

Do IBM nghiên cứu . Ra đời vào năm 1970.

Được ANSI và ISO tiếp tục phát triển.

• Các phiên bản SQL:

Năm Phiên bản

1986 SQL-86

1992 SQL-92

1999 SQL1999

Page 3: Phan3

Các thao tác trên SQL

• Các thao tác trên SQL:

Mô tả dữ liệu.

Thao tác dữ liệu.

Truy vấn dữ liệu.

Page 4: Phan3

Mô tả dữ liệu

• Mô tả dữ liệu:

Lệnh Tạo CSDL.

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 miền giá trị

Lệnh Tạo ràng buộc duy nhất

Lệnh Tạo chỉ mục

Page 5: Phan3

Lệnh tạo CSDL

• Lệnh tạo CSDL:

Cú pháp: CREATE DATABASE <tên database>

VD: CREATE DATABASE LARION_TDT

Page 6: Phan3

Lệnh tạo bảng

• Lệnh tạo bảng:

Cú pháp: CREATE TABLE <tên bảng>

( <tên cột 1><kiểu dữ liệu 1> [NOT NULL]

…) VD: CREATE TABLE SINHVIEN

(MSSV char(4) not null,

HOLOT varchar(20) not null,

TEN varchar(10) not null,

PHAI bit,

NGAYSINH datetime)

SINHVIEN

MSSV HOLOT TEN PHAI NGAYSINH

Page 7: Phan3

Lệnh xóa bảng & lệnh thêm cột

• Lệnh xóa bảng:

Cú pháp: DROP TABLE <tên bảng>;

VD: DROP TABLE SINHVIEN;

• Lệnh thêm cột:

Cú pháp: ALTER TABLE <tên bảng>

ADD <tên cột> <kiểu dữ liệu> [NOT NULL]; VD:

ALTER TABLE SINHVIEN

ADD DOANVIEN bit;

SINHVIEN

MSSV HOLOT TEN PHAI NGAYSINH DOANVIEN

Page 8: Phan3

Lệnh xóa cột

• Lệnh xóa cột:

Cú pháp:

ALTER TABLE <tên bảng>

DROP COLUMN <tên cột>;

VD: ALTER TABLE SINHVIEN

DROP COLUMN DOANVIEN;

SINHVIEN

MSSV HOLOT TEN PHAI NGAYSINH

Page 9: Phan3

Lệnh sửa cột

• Lệnh sửa cột:

Cú pháp:

ALTER TABLE <tên bảng>

ALTER COLUMN <tên cột> <kiểu dữ liệu>;

VD: ALTER TABLE SINHVIEN

ALTER COLUMN NGAYSINH SmallDateTime;

Page 10: Phan3

Lệnh tạo khóa chính

• Lệnh tạo khóa chính

Cú pháp: ALTER TABLE <tên bảng>

ADD CONTRAINT <tên ràng buộc>

PRIMARY KEY (danh sách cột);

Lưu ý:

Tên ràng buộc là duy nhất. Các cột trong danh sách tên cột phải có thuộc tính NOT

NULL. VD: ALTER TABLE SINHVIEN ADD CONTRAINT KC_SV

PRIMARY KEY (MSSV);

SINHVIEN

MSSV HOLOT TEN PHAI NGAYSINH

Page 11: Phan3

Lệnh tạo khóa ngoại

• Lệnh tạo khóa ngoại:

Cú pháp: ALTER TABLE <tên bảng>

ADD CONSTRAINT <tên ràng buộc>

FOREIGN KEY (danh sách cột)

REFERENCES <tên bảng> (danh sách cột);

VD: ALTER TABLE SINHVIEN ADD CONSTRAINT KN_SV FOREIGN KEY (MSSV) REFERENCES DSLOP(MSSV)

SINHVIEN

MSSV HOLOT TEN PHAI NGAYSINH MALOP

DSLOP

MALOP TENLOP NIENKHOA

Page 12: Phan3

Lệnh tạo ràng buộc về miền giá trị

• Lệnh tạo ràng buộc về miền giá trị:

Cú pháp: ALTER TABLE <tên bảng>

ADD CONSTRAINT <tên ràng buộc> CHECK (điều kiện);

VD: ALTER TABLE SINHVIEN ADD CONSTRAINT KT_NGAYSINH CHECK (YEAR(NGAYSINH) BETWEEN 1980 AND 1990);

Khi thêm bộ:

hệ thống sẽ báo lỗi do có ràng buộc năm sinh .

SINHVIEN

MSSV HOLOT TEN PHAI NGAYSINH

080091T Nguyễn Tiến Thành 1 09/09/1990

0900501 Huỳnh Phúc Điền 1 07/07/1991

070021T Nguyễn Ngọc Bình 0 24/12/1979

Page 13: Phan3

Lệnh tạo ràng buộc duy nhất

• Lệnh tạo ràng buộc duy nhất:

Cú pháp:ALTER TABLE <tên bảng>

ADD CONSTRAINT <tên ràng buộc>UNIQUE (danh sách tên cột);

VD: ALTER TABLE SINHVIEN

ADD CONSTRAINT DN_NGAYSINH UNIQUE (NGAYSINH);

Khi thêm bộ

Hệ thống sẽ báo lỗi do đã có ràng buộc ngày sinh

SINHVIEN

MSSV HOLOT TEN PHAI NGAYSINH

080091T Nguyễn Tiến Thành 1 09/09/1990

090025T Đặng Hồng Hạnh 0 07/07/1991

0900501 Huỳnh Phúc Điền 1 07/07/1991

Page 14: Phan3

Lệnh tạo chỉ mục

• Lệnh tạo chỉ mục:

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ác cột

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

Cú pháp: CREATE INDEX <tên index>

ON <tên bảng> (<cột 1,<cột 2>,..);

VD: CREATE INDEX CM_HOLOT

ON SINHVIEN (HOLOT);

CREATE INDEX CM_TENON SINHVIEN (TEN);

Page 15: Phan3

Lệnh xóa chỉ mục

• Lệnh xóa chỉ mục:

Dùng xóa một chỉ mục đã tạo trước đó.

Cú pháp: DROP INDEX <tên index>;

VD:

DROP INDEX CM_HOLOT;

DROP INDEX CM_HOLOT;

Page 16: Phan3

Thao tác với dữ liệu

• Các thao tác với dữ liệu:

Lệnh thêm mẫu tin

Lệnh xóa mẫu tin

Lệnh cập nhật mẫu tin

Page 17: Phan3

Lệnh thêm mẫu tin

• Lệnh thêm mẫu tin:

Cú pháp: INSERT INTO <tên bảng>(<tên cột 1>,..)

VALUES (<biểu thức 1>,…);

Nếu các biểu thức sau VALUES đúng thứ tự trong bảng thì các cột sau INTO có thể được bỏ qua.

VD:INSERT INTO SINHVIEN (MSSV,HOLOT,TEN,PHAI,NGAYSINH) VALUES (’080099T’,’Hồ Thái’,’Bảo’,’1’,’06/01/1990’);

hoặc INSERT INTO SINHVIEN VALUES (’080099T’,’Hồ Thái’,’Bảo’,’1’,’06/01/1990’);

SINHVIEN

MSSV HOLOT TEN PHAI NGAYSINH

080099T Hồ Thái Bảo 1 06/01/1990

Page 18: Phan3

Lệnh xóa mẫu tin (1/2)

• Lệnh xóa mẫu tin:

Cú pháp: DELETE FROM <tên bảng>

WHERE <điều kiện>;

Ngữ nghĩa: các mẫu tin thỏa mệnh đề where sẽ bị xóa khỏi bảng. Nếu không có where thì tất cả mẫu tin sẽ bị xóa

VD: cho Table Môn học

MONHOC

MAMON TENMON KHOAHOC

TH101 Tin học đại cương 2008

TH308 Cấu trúc dữ liệu 2009

DA102 Đồ án 1 2009

Page 19: Phan3

Lệnh xóa mẫu tin (2/2)

Yêu cầu: xóa các môn học có KHOAHOC là 2008.

Câu lệnh: DELETE FROM MONHOC

WHERE KHOAHOC=‘2008’;

Kết quả:

MONHOC

MAMON TENMON KHOAHOC

TH308 Cấu trúc dữ liệu 2009

DA102 Đồ án 1 2009

TH101 Tin học đại cương 2008

Page 20: Phan3

Lệnh cập nhật mẫu tin (1/2)

• Lệnh cập nhật mẫu tin:

Cú pháp: UPDATE <tên bảng>

SET <tên cột 1> = <biểu thức 1>,

WHERE <điều kiện>;

Giá trị các cột của các mẫu tin thỏa điều kiện WHERE sẽ được thay thế bằng các giá trị <biểu thức 1>,… tương ứng.

Nếu không có WHERE thì tất cả các mẫu tin của bảng sẽ được sửa đổi.

VD: <Xem trang sau>

Page 21: Phan3

Lệnh cập nhật mẫu tin (2/2)

VD: cho bảng BANGDIEM môn Automat như sau:

Yêu cầu : tăng cho sinh viên mỗi người 1 điểm

Câu lệnh: UPDATE BANGDIEM SET DIEM=DIEM+1;

Kết quả:

BANGDIEM

MSSV DIEM

070011T 5

080130T 6

081307T 6

BANGDIEM

MSSV DIEM

070111T 6

080130T 7

081307T 7

Page 22: Phan3

Truy vấn dữ liệu

• Truy vấn dữ liệu:

Cú pháp tổng quát

Phát biểu SELECT với *

Phát biểu SELECT với AS

Phát biểu SELECT với TOP N

Phát biểu SELECT với DISTINCT

Mệnh đề WHERE

Mệnh đề ORDER BY

Mệnh đề GROUP BY

Mệnh đề HAVING

Truy vấn từ nhiều bảng

Truy vấn con

Page 23: Phan3

Cú pháp tổng quát

• Cú pháp tổng quát:

SELECT <danh sách cột>

FROM <danh sách bảng>

WHERE <điều kiện>

GROUP BY <tên cột>

HAVING <điều kiện cho GROUP BY>

ORDER BY <danh sách cột>

Page 24: Phan3

Phát biểu SELECT *

• Phát biểu SELECT với * :

Dấu * dùng để đại diện cho tất cả các cột

Cú pháp: SELECT * FROM <tên bảng>;

VD: 2 câu truy vấn sau cho cùng kết quả:

Câu tổng quát: SELECT MSSV,DIEM

FROM BANGDIEM; Câu có dấu * : SELECT * FROM BANGDIEM;

BANGDIEM

MSSV DIEM

070011T 5

080130T 6

Page 25: Phan3

Phát biểu SELECT với AS

• Phát biểu SELECT với AS:

Dùng đặt lại tên cột khi hiển thị kết quả

Cú pháp: SELECT <tên cột> AS <tên muốn hiển thị>

VD: Yêu cầu đổi tên hiển thị của cột DIEM thành DIEMTHI

Câu lệnh: SELECT DIEM AS DIEMTHI FROM BANGDIEM

BANGDIEM

MSSV DIEM

070011T 5

080130T 6

MSSV DIEMTHI

070011T 5

080130T 6

Page 26: Phan3

Phát biểu SELECT với TOP N

• Phát biểu SELECT với TOP N:

Cho phép lấy ra N mẫu tin từ một bảng.

Cú pháp: SELECT TOP <N> * FROM <tên bảng>

VD: Cho bảng sau, lấy ra 2 mẫu tin đầu tiên.

Câu lệnh: SELECT TOP 2 * FROM BANGDIEM

BANGDIEM

MSSV DIEM

070111T 6

080130T 7

081307T 7

MSSV DIEM

070111T 6

080130T 7

Page 27: Phan3

Phát biểu SELECT với DISTINCT

• Phát biểu SELECT với DISTINCT:

Khi kết quả trả về có nhiều mẫu tin trùng nhay, để chỉ lấy 1 mẫu tin ta dùng DISTINCT.

Cú pháp: SELECT DISTINCT <tên cột> FROM <tên bảng>

VD: Cho bảng sau cho biết có những lớp nào

Câu lệnh: SELECT DISTINCT MALOP FROM DANHSACHSV

Kết quả:

DANHSACHSV

MSSV MALOP TENSV

080206K 08KK1D Hồ Hoài Anh

080016Q 08QT1D Lưu Hương Giang

080123Q 08QT1D Hoàng Thùy Linh

MALOP

08KK1D

08QT1D

Page 28: Phan3

Mệnh đề WHERE (1/2)

• Mệnh đề WHERE:

Dùng để đặt điều kiện trích dữ liệu.

Các toán tử của mệnh đề WHERE:

So sánh: >, <, >=, <=, =, <>Logic: And, Or, NotBETWEEN … AND …: lấy giá trong 1 vùng.LIKE: so sánh gần giống IN: phép so sánh trong 1 tập hơp, danh sách. IS NULL (IS NOT NULL) : kiểm tra giá trị có rỗng hay

khôngEXISTS: trả về TRUE nếu có ít nhất 1 mẫu tin tồn tại

VD: <Xem trang sau>

Page 29: Phan3

Mệnh đề WHERE (2/2)

VD: Cho bảng sau, Tìm các sinh viên có ngày sinh từ 01/06/1990 đến 31/12/1990

Câu lệnh: SELECT * FROM SINHVIEN WHERE NGAYSINH BETWEEN ‘01/06/1990’ AND ’31/12/1990’;

SINHVIEN

MSSV HOTEN NGAYSINH QUEQUAN

080777K Nguyễn Quốc Đạt 20/10/1990 Đồng Tháp

080302A Nguyễn Lan Anh 01/01/1990 Vũng Tàu

080096T Cao Minh Tiến 03/10/1990 Hồ Chí Minh

MSSV HOTEN NGAYSINH QUEQUAN

080777K Nguyễn Quốc Đạt 20/10/1990 Đồng Tháp

Page 30: Phan3

Mệnh đề ORDER BY

• Mệnh đề ORDER BY:

Sắp xếp kết quả theo thứ tự mong muốn Cú pháp: ORDER BY <danh sách cột> [ASC|DESC] Với ASC sắp tăng dần hoặc DESC sắp xếp giảm dần. VD: Cho bảng sau:

Yêu cầu: Trích ra danh sách sinh viên sắp xếp tăng dần Câu lệnh: SELECT * FROM SINHVIEN ORDER BY MSSV ASC

MSSV HOTEN NGAYSINH QUEQUAN

080777K Nguyễn Quốc Đạt 20/10/1990 Đồng Tháp

080096T Cao Minh Tiến 03/10/1990 Hồ Chí Minh

MSSV HOTEN NGAYSINH QUEQUAN

080096T Cao Minh Tiến 03/10/1990 Hồ Chí Minh

080777K Nguyễn Quốc Đạt 20/10/1990 Đồng Tháp

Page 31: Phan3

Mệnh đề GROUP BY (1/2)

• Mệnh đề GROUP BY:

Nhóm dữ liệu theo từng nhóm để thực hiện các phép toán thống kê

Cú pháp: GROUP BY <danh sách tên cột>

Một số hàm thông dụng dùng với GROUP BY:

AVG: tính giá trị trung bình.MIN: tính giá trị nhỏ nhất.MAX: tính giá trị lớn nhất.COUNT: đếm số phần tử.SUM: tính tổng các phần tử

VD: <Xem trang sau>

Page 32: Phan3

Mệnh đề GROUP BY (2/2)

VD: Cho bảng sau, cho biết số lượng sinh viên từng lớp

Câu lệnh:

SELECT MALOP, COUNT(*) AS SOLUONG

FROM SINHVIEN

GROUP BY MALOP Kết quả:

DANHSACHKHENTHUONG

MSSV MALOP TENSV PHAI XEPLOAI

080010A 08AV1D Bùi Long Hải Nam Giỏi

080120Q 08QT2D Hồ Minh Tâm Nữ Giỏi

080133Q 08QT2D Đoàn Thế Vinh Nam Khá

080361T 08TN1D Đặng Long Đế Nam Khá

MALOP SOLUONG

08AV1D 1

08QT2D 2

08TN1D 1

Page 33: Phan3

Mệnh đề HAVING

• Mệnh đề HAVING:

Đặt điều kiện sau khi đã nhóm dữ liệu bằng mệnh đề GROUP BY

VD: trích danh sách các lớp có từ 2 sinh viên được thưởng

Câu lệnh:

SELECT MALOP, COUNT(*) AS SOSV

FROM SINHVIEN

GROUP BY MALOP

HAVING COUNT (*)>=2;

DANHSACHKHENTHUONG

MALOP MSSV TENSV PHAI XEPLOAI

08AV1D 080010A Bùi Long Hải Nam Giỏi

08QT2D 080120Q Hồ Minh Tâm Nữ Giỏi

08QT2D 080133Q Đoàn Thế Vinh Nam Khá

MALOP SOSV

08QT2D 2

Page 34: Phan3

Truy vấn từ nhiều bảng (1/2)

• Truy vấn từ nhiều bảng:

Khi thông tin cần lấy ra có từ nhiều bản khác nhau cần thực hiện truy vấn từ nhiều bảng.

Nếu cần kết n bảng thì 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 theo dạng [Tên bảng].[Tên cột]

Có thể sử dụng tên tắt của các bản.

VD: Trích ra MSSV,HOTEN,MALOP,TENLOP của các sinh viên .

<Xem tiếp trang sau>

Page 35: Phan3

Truy vấn từ nhiều bảng (2/2)

Câu lệnh:

SELECT MSSV,TENSV,MALOP,TENLOP

FROM SINHVIEN S, LOP L

WHERE S.MALOP = L.MALOP; Kết quả:

SINHVIEN

MSSV TENSV PHAI MALOP

080010A Bùi Long Hải Nam 08AV1D

080120Q Hồ Minh Tâm Nữ 08QT1D

080133Q Đoàn Thế Vinh Nam 08QT1D

LOP

MALOP TENLOP

08AV1D Anh Văn

08QT1D Quản Trị

08TH1D Tin Học

08KK1D Kế Toán

MSSV TENSV MALOP TENLOP

080010A Bùi Long Hải 08AV1D Anh Văn

080120Q Hồ Minh Tâm 08QT1D Quản Trị

080133Q Đoàn Thế Vinh 08QT1D Quản Trị

Page 36: Phan3

Truy vấn con (1/2)

• Truy vấn con:

Được sử dụng khi cần kết quả từ một câu truy vấn khác 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.

Cú pháp:

SELECT <danh sách cột>

FROM <danh sách bảng>

WHERE <điều kiện>

… <tên cột>IN (NOT IN, =, <>,…)

(SELECT <danh sách cột>

FROM <danh sách bảng>

WHERE <điều kiện>);

Page 37: Phan3

Truy vấn con (2/2)

VD: Lấy ra danh sách những sinh viên có điểm toán cao nhất

Câu lệnh:

SELECT MSSV,TENSV,DIEM

FROM DIEMTOAN

WHERE DIEM=( SELECT MAX(DIEM)

FROM DIEMTOAN);

DIEMTOAN

MSSV TENSV DIEM

080010A Bùi Long Hải 9

080120Q Hồ Minh Tâm 10

080133Q Đoàn Thế Vinh 9

MSSV TENSV DIEM

080120Q Hồ Minh Tâm 10

Page 38: Phan3

Tài liệu tham khảo

• Giáo trình CSDL , ThS.Lê Thị Ngọc Thảo - ĐH Tôn Đức Thắng.