Là ngôn ngữ chuẩn để truy vấn và thao tác trên CSDL quan hệ Là ngôn ngữ phi thủ tục Khởi nguồn của SQL là SEQUEL Structured English Query Language, năm 1974) Các chuẩn SQL SQL89 SQL92 (SQL2) SQL99 (SQL3)
CHƯƠNG Ngôn ngữ SQL (Structured Query Language) Giới thiệu SQL Là ngôn ngữ chuẩn để truy vấn thao tác CSDL quan hệ Là ngôn ngữ phi thủ tục Khởi nguồn SQL SEQUEL - Structured English Query Language, năm 1974) Các chuẩn SQL SQL89 SQL92 (SQL2) SQL99 (SQL3) Nội dung chính Ngôn ngữ định nghĩa liệu: tạo bảng, sửa cấu trúc bảng̣, xóa bảng Ngôn ngữ thao tác liệu: thêm, xóa, sửa dữ liệu, và truy vấn dữ liệu Ngôn ngữ điều khiển liệu: cấp quyền và thu hồi quyền sử dụng sở dữ liệu Tương quan giữa SQL và ngôn ngữ ĐSQH Ngôn ngữ định nghĩa dữ liệu Ngôn ngữ định nghĩa liệu (DDL– Data Definition Language) Bao gồm: Lệnh tạo bảng (CREATE ) Lệnh sửa cấu trúc bảng (ALTER ) Lệnh xóa bảng (DROP ) Ngôn ngữ thao tác dữ liệu Ngôn ngữ thao tác liệu (DML – Data Manipulation Language) Bao gồm: Lệnh thêm dữ liệu (INSERT ) Lệnh sửa dữ liệu (UPDATE ) Lệnh xóa dữ liệu (DELETE ) Truy vấn dữ liệu (SELECT ) Ngôn ngữ điều khiển dữ liệu Ngôn ngữ điều khiển liệu (DCL – Data Control Language) Bao gồm: Lệnh cấp quyền cho người sử dụng sở dữ liệu (GRANT ) Lệnh thu hồi quyền hạn của người sử dụng sở dữ liệu (REVOKE ) Ngôn ngữ định nghĩa liệu Tạo bảng (1) Cú pháp CREATE TABLE tên_bảng ( tên_cột1 kiểu_dữ_liệu [not null], tên_cột2 kiểu_dữ_liệu [not null], … tên_cộtn kiểu_dữ_liệu [not null], khai báo khóa chính, khóa ngoại, ràng buộc toàn vẹn ) Ngôn ngữ định nghĩa liệu Tạo bảng (2) Các kiểu liệu SQL Server Chuỗi ký tự varchar(n), char(n), Text Số tinyint,smallint,int numeric, decimal, float, real smalldatetime, datetime Ngày tháng Oracle varchar2(n), nchar(n), nvarchar2(n) number(n), number(n,m) date Ngôn ngữ định nghĩa liệu Tạo bảng (3) Cho lược đồ CSDL “quản lý đề án cty” sau NHANVIEN (MaNV, HoNV, TenLot, TenNV, Phai, Luong, Phong, NgaySinh, DiaChi, Ma_NQL) PHONGBAN (MaPHG, TenPHG, TrPHG, NG_NhanChuc) DEAN (MaDA, TenDA, DDIEM_DA, Phong) PHANCONG (MaNV, MaDA, ThoiGian) DIADIEM_PHG (MaPHG, DIADIEM) THANNHAN (MaNV, TenTN, Phai, NGSinh,QuanHe) Ngôn ngữ định nghĩa liệu Tạo bảng (4) Ví dụ: câu lệnh để tạo một bảng nhân viên CREATE TABLE NHANVIEN ( MANV varchar(10) NOT NULL, HONV varchar(50) NOT NULL, TENLOT varchar(50) NOT NULL, TENNV varchar(50) NOT NULL, NGAYSINH datetime, PHAI varchar(3) NOTNULL, DIACHI varchar(100), MA_NQL varchar(10), PHONG varchar(10), LUONG numeric, CONSTRAINT PK_NV PRIMARY KEY (MANV), CONSTRAINT FK_NV_PB FOREIGN KEY PHONG REFERENCES PHONGBAN (MAPHG) ) 10 Ngôn ngữ thao tác liệu Toán tử truy vấn (5) Toán tử LIKE So sánh chuỗi tương đối Cú pháp: s LIKE p, p chứa % _ % : thay chuỗi ký tự _ : thay ký tự Ví dụ SELECT * FROM NHANVIEN WHERE HONV LIKE ‘Nguyen%’ 26 Ngôn ngữ thao tác liệu Toán tử truy vấn (6) Toán tử IN Ví dụ a SELECT * FROM NHANVIEN WHERE PHONG IN (‘NC’,’QL’,’DH’) b SELECT MANV, TENNV, DIACHI FROM NHANVIEN WHERE MANV NOT IN (SELECT MANV FROM PHANCONG) 27 Ngôn ngữ thao tác liệu Toán tử truy vấn (7) Toán tử EXISTS Ví dụ a SELECT p.TENPHG FROM PHONGBAN p, DEAN d WHERE p.MAPHG = d.PHONG AND d.MA_DA=’TH001’ AND EXISTS (SELECT MADA FROM PHANCONG) b SELECT * FROM NHANVIEN n WHERE NOT EXISTS (SELECT * FROM DEAN d WHERE NOT EXISTS (SELECT * FROM PHANCONG p WHERE n.MANV=p.MANV AND d.MADA=p.MADA)) 28 Ngôn ngữ thao tác liệu Mệnh đề GROUP BY (1) Mệnh đề GROUP BY Chia dòng thành nhóm dựa tập thuộc tính Tất thành viên nhóm thỏa thuộc tính Mỗi nhóm mô tả dòng thuộc tính, giới hạn bởi: Các thuộc tính chung tất thành viên thuộc nhóm (được liệt kê mệnh đề GROUP BY) Các phép toán nhóm 29 nhóm Ngôn ngữ thao tác liệu Mệnh đề GROUP BY (2) a a b b c c c c c d d d Chia dòng thành nhóm dựa tập thuộc tính Các thuộc tính GROUP BY 30 Ngôn ngữ thao tác liệu Mệnh đề GROUP BY (3) Các hàm SQL COUNT: Đếm số liệu thuộc tính MIN: Tính giá trị nhỏ MAX: Tính giá trị lớn AVG: Tính giá trị trung bình SUM: Tính tổng giá trị liệu 31 Ngôn ngữ thao tác liệu Mệnh đề GROUP BY (4) Ví dụ: tìm tổng lương, lương lớn nhất, lương lương trung bình nhân viên SELECT SUM(LUONG), MAX(LUONG), MIN(LUONG), AVG(LUONG) FROM NHANVIEN ; Ví dụ: tìm tổng lương, lương lớn nhất, lương lương trung bình nhân viên phòng “Nghiên cứu” SELECT SUM(LUONG), MAX(LUONG), MIN(LUONG), AVG(LUONG) from NHANVIEN , PHONGBAN WHERE MAPHG=PHONG AND TENPHG='Nghien cuu'; Ví dụ: cho biết số lượng nhân viên SELECT COUNT(*) FROM NHANVIEN; 32 Ngôn ngữ thao tác liệu Mệnh đề GROUP BY (5) Ví dụ SELECT n.MANV, n.TENNV, n.PHONG, MIN(p.THOIGIAN) thap_nhat, MAX (p.THOIGIAN) cao_nhat, AVG(p.THOIGIAN) trung_binh, SUM (p.THOIGIAN) tong_so_gio FROM NHANVIEN n, PHANCONG p WHERE n.MANV=p.MANV GROUP BY n.MANV, n.HOTEN, n.PHONG 33 Ngôn ngữ thao tác liệu Mệnh đề HAVING Mệnh đề HAVING Lọc kết theo điều kiện, sau gom nhóm Điều kiện HAVING thuộc tính danh sách GROUP BY phép tính toán khác 34 Ngôn ngữ thao tác liệu Mệnh đề HAVING Ví dụ: cho biết tên từng phòng ban và tổng số nhân viên, mức lương trung bình SELECT p.TENPHG, COUNT(*) so_luong_nv, AVG(n.LUONG) luong_tb FROM NHANVIEN n, PHONGBAN p WHERE n.PHONG = p.MAPHG GROUP BY p.TENPHB HAVING AVG(n.LUONG) > 2000 35 Ngôn ngữ thao tác liệu Truy vấn (Subquery) Subquery Các mệnh đề SELECT lồng vào Kết câu SELECT điều kiện câu SELECT khác Các mệnh đề SELECT nối với phép so sánh ,,=,>=,= ALL (SELECT SUM(THOIGIAN) FROM PHANCONG GROUP BY (MANV) 37 Tương quan SQL ĐSQH • Phép chọn: σ() tương ứng mệnh đề WHERE SQL • Phép chiếu: Π () tương ứng mệnh đề SELECT SQL • Các phép toán tập hợp: Hợp tương ứng mệnh đề UNION SQL • Tích Descartes (R × S: tên khác ) tương ứng mệnh đề FROM SQL • Kết (theta): liên từ điều kiện – Equi-join: Tất phép so sánh – Natural Join: Kết thuộc tính có tên – Outer Join: 1) kết o fr and s, 2) r, not s, 3) s, not r 38 Tương quan SQL ĐSQH • Phép chia: R/S, tìm thể R thỏa tất S Ví dụ: SELECT C.TENNV FROM NHANVIEN C WHERE C.MANV = ‘001’ Cách tiếp cận: –Mệnh đề FROM tạo tích Descartes bảng liệt kê 39 Tương quan SQL ĐSQH – Mệnh đề WHERE gán dòng vào C theo trình tự tạo bảng chứa dòng thỏa điều kiện – Mệnh đề SELECT lưu lại cột liệt kê – Tương đương với: πTenNVσMaNV=‘001’(NhanVien) 40 [...]... UNIQUE (CMND) 14 Ngôn ngữ định nghĩa dữ liệu Sửa cấu trúc bảng (5) Xóa ràng buộc toàn vẹn ALTER TABLE tên_bảng DROP CONSTRAINT tên_ràng_buộc Ví dụ ALTER TABLE NHANVIEN DROP CONSTRAINT FK_NV_PB 15 Ngôn ngữ định nghĩa dữ liệu Xóa bảng Cú pháp DROP TABLE tên_bảng Ví dụ: xóa bảng (table) nhân viên DROP TABLE NHANVIEN Ví dụ: xóa bảng (table) phân công DROP TABLE PHANCONG 16 Ngôn ngữ thao tác dữ... thành viên thuộc nhóm (được liệt kê trong mệnh đề GROUP BY) Các phép toán trên nhóm 29 nhóm Ngôn ngữ thao tác dữ liệu Mệnh đề GROUP BY (2) a a b b c c c c c d d d Chia các dòng thành các nhóm dựa trên tập con của các thuộc tính Các thuộc tính GROUP BY 30 Ngôn ngữ thao tác dữ liệu Mệnh đề GROUP BY (3) Các hàm SQL cơ bản COUNT: Đếm số bộ dữ liệu của thuộc tính MIN: Tính giá trị nhỏ nhất MAX: Tính.. .Ngôn ngữ định nghĩa dữ liệu Sửa cấu trúc bảng (1) Thêm thuộc tính ALTER TABLE tên_bảng ADD tên_cột kiểu_dữ_liệu Ví dụ: thêm cột Ghi_chú vào bảng nhân viên ALTER TABLE NHANVIEN ADD GHI_CHU varchar(20) Sửa kiểu dữ liệu thuộc tính ALTER TABLE tênbảng ALTER COLUMN tên_cột kiểu_dữ_liệu_mới 11 Ngôn ngữ định nghĩa dữ liệu Sửa cấu trúc bảng (2) ... (‘001’, ‘Vuong Ngoc Quyen’, ’01/01/1977’, ’450 Trung Vuong, Ha Hoi’, ‘QL’) 17 Ngôn ngữ thao tác dữ liệu Sửa dữ liệu của bảng Cú pháp UPDATE tên_bảng SET cột_1 = giá_trị_1, cột_2 = giá_trị_2 [WHERE điều_kiện] Ví dụ: Sửa họ nhân viên có mã số ‘001’ thành ‘Nguyen’ UPDATE NHANVIEN SET HONV = ‘Nguyen’ WHERE MANV=‘001’ 18 Ngôn ngữ thao tác dữ liệu Sửa dữ liệu của bảng Cú pháp Ví dụ: Sửa họ tên của... ‘Nguyen’, TENLOT = ‘Thanh’, TENNV = Tung’, NGAYSINH=‘1/1/1978’ WHERE MANV=‘001’ 19 Ngôn ngữ thao tác dữ liệu Xóa dữ liệu trong bảng Cú pháp DELETE FROM tên_bảng [WHERE điều_kiện] Ví dụ: xóa nhân viên có mã số ‘001’ DELETE FROM NHANVIEN WHERE MANV=‘001’ Ví dụ: xóa toàn bộ nhân viên DELETE FROM NHANVIEN 20 Ngôn ngữ thao tác dữ liệu Câu truy vấn SELECT Câu truy vấn tổng quát SELECT [DISTINCT]... tổng quát SELECT [DISTINCT] tên_cột | hàm FROM bảng [WHERE điều_kiện] [GROUP BY cột] [HAVING điều_kiện] [ORDER BY cột ASC | DESC] 21 Ngôn ngữ thao tác dữ liệu Toán tử truy vấn (1) Toán tử so sánh = > < >=