Bài giảng môn Cơ sở dữ liệu - Chương 4: Ngôn ngữ truy vấn SQL
Ngôn ngữ ĐSQH
– Cách thức truy vấn dữ liệu
Khó khăn cho người sử dụng
SQL (Structured Query Language)
– Ngôn ngữ cấp cao
– Người sử dụng chỉ cần đưa ra nội dung cần truy vấn
– Được phát triển bởi IBM (1970s)
– Được gọi là SEQUEL (Structured English Query Language)
– Được ANSI công nhận và phát triển thành chuẩn
• SQL-86
• SQL-92
• SQL-99
SQL gồm
– Định nghĩa dữ liệu (DDL)
– Thao tác dữ liệu (DML)
– Định nghĩa khung nhìn
– Ràng buộc toàn vẹn
– Phân quyền và bảo mật
– Điều khiển giao tác
SQL sử dụng thuật ngữ
– Bảng ~ quan hệ
– Cột ~ thuộc tính
– Dòng ~ bộ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn Cơ sở dữ liệu - Chương 4: Ngôn ngữ truy vấn SQL", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng môn Cơ sở dữ liệu - Chương 4: Ngôn ngữ truy vấn SQL
1CƠ SỞ DỮ LIỆU Khoa Công nghệ thông tin – Đại học Sài Gòn NGÔN NGỮ TRUY VẤN SQL Chương 4 Khoa CNTT – Đại học Sài Gòn 3 Nội dung chi tiết 1. Giới thiệu 2. Định nghĩa dữ liệu 3. Truy vấn dữ liệu 4. Cập nhật dữ liệu 5. Khung nhìn (view) 6. Chỉ mục (index) Khoa CNTT – Đại học Sài Gòn 4 1. Giới thiệu Ngôn ngữ ĐSQH – Cách thức truy vấn dữ liệu Khó khăn cho người sử dụng SQL (Structured Query Language) – Ngôn ngữ cấp cao – Người sử dụng chỉ cần đưa ra nội dung cần truy vấn – Được phát triển bởi IBM (1970s) – Được gọi là SEQUEL (Structured English Query Language) – Được ANSI công nhận và phát triển thành chuẩn • SQL-86 • SQL-92 • SQL-99 2Khoa CNTT – Đại học Sài Gòn 5 1. Giới thiệu SQL gồm – Định nghĩa dữ liệu (DDL) – Thao tác dữ liệu (DML) – Định nghĩa khung nhìn – Ràng buộc toàn vẹn – Phân quyền và bảo mật – Điều khiển giao tác SQL sử dụng thuật ngữ – Bảng ~ quan hệ – Cột ~ thuộc tính – Dòng ~ bộ Lý thuyết : Chuẩn SQL-92 Ví dụ : SQL Server Khoa CNTT – Đại học Sài Gòn 6 1. Giới thiệu SQL thao tác trên mô hình vật lý của Cơ sở dữ liệu. Mô hình vật lý có cấu trúc tương tự với mô hình dữ liệu quan hệ, trong đó gồm các khái niệm: – Bảng ~ quan hệ – Cột ~ thuộc tính – Dòng ~ bộ Với mô hình vật lý, ta cần xác định cụ thể kiểu dữ liệu của từng thuộc tính. Khoa CNTT – Đại học Sài Gòn 7 Giới thiệu Microsoft SQL Server Là chương trình giúp tạo, quản lý và truy xuất cơ sở dữ liệu do Microsoft phát hành. Sử dụng mô hình CSDL quan hệ. Ngôn ngữ truy xuất dữ liệu là ANSI-SQL. Không phân biệt chữ hoa với chữ thường. Có kèm tài liệu tham khảo với tên gọi Books Online: – Hỗ trợ xem thông tin các lệnh. – Tìm kiếm từ khóa. – Đầy đủ cấu trúc các lệnh SQL. – Có ví dụ tham khảo. Khoa CNTT – Đại học Sài Gòn 8 Giao diện đăng nhập 3Khoa CNTT – Đại học Sài Gòn 9 Giao diện làm việc Khoa CNTT – Đại học Sài Gòn 10 Giao diện truy vấn Khoa CNTT – Đại học Sài Gòn 11 Các thao tác cơ bản Muốn chạy một lệnh nào đó: – Chọn lệnh cần chạy. – Nhấn F5 hoặc nhấn nút Execute. – Nếu chạy thành công: Xem các đối tượng đang quản lý trong hệ thống: – Mở rộng các đối tượng tương ứng bên cửa sổ Object Explorer – Có thể click phải chuột để hiện menu ngữ cảnh. Khoa CNTT – Đại học Sài Gòn 12 Lệnh GO Lệnh GO (GO command) không phải là một từ khóa của SQL (SQL statement). GO là một lệnh được nhận bởi trình biên dịch MS SQL code editor. GO đánh dấu kết thúc 1 tập lệnh SQL (batch) Mỗi tập lệnh SQL sẽ được thực thi đồng thời, nếu xảy ra lỗi ở bất kì lệnh nào sẽ hủy bỏ toàn bộ lệnh của tập lệnh đó. 4Khoa CNTT – Đại học Sài Gòn 13 Lệnh GO Phân biệt: drop database test create database test use test drop database test GO create database test GO use test GO Khoa CNTT – Đại học Sài Gòn 14 2. Định nghĩa dữ liệu Là ngôn ngữ mô tả (DDL) – Tạo CSDL – Lược đồ cho mỗi quan hệ – Miền giá trị tương ứng của từng thuộc tính – Ràng buộc toàn vẹn – Chỉ mục trên mỗi quan hệ Gồm – CREATE TABLE (tạo bảng) – DROP TABLE (xóa bảng) – ALTER TABLE (sửa bảng) – CREATE DOMAIN (tạo miền giá trị) – CREATE DATABASE – Khoa CNTT – Đại học Sài Gòn 15 a. Kiểu dữ liệu Số (numeric) – INTEGER – SMALLINT – NUMERIC, NUMERIC(p), NUMERIC(p,s) – DECIMAL, DECIMAL(p), DECIMAL(p,s) – REAL – DOUBLE PRECISION – FLOAT, FLOAT(p) Khoa CNTT – Đại học Sài Gòn 16 a. Kiểu dữ liệu Chuỗi ký tự (character string) – CHARACTER, CHARACTER(n) – CHARACTER VARYING(x) Chuỗi bit (bit string) – BIT, BIT(x) – BIT VARYING(x) Ngày giờ (datetime) – DATE gồm ngày, tháng và năm – TIME gồm giờ, phút và giây – TIMESTAMP gồm ngày và giờ 5Khoa CNTT – Đại học Sài Gòn 17 b. Tạo CSDL Mỗi CSDL (trong MS SQL Server) có tên duy nhất. Mỗi CSDL gồm 2 tập tin vật lý: – Tập tin .MDF: lưu trữ nội dung CSDL – Tập tin .LDF: lưu trữ log Sau khi chạy, đọc thông báo thành công hay thất bại trong cửa sổ Message. Dựa vào thông báo lỗi để biết được nguyên nhân lỗi. Sau khi chạy lệnh tạo CSDL, nhớ refresh Database. Khoa CNTT – Đại học Sài Gòn 18 b. Tạo CSDL CREATE DATABASE database_name [ ON [ PRIMARY ] [ [ ,...n ] [ , [ ,...n ] ] [ LOG ON { [ ,...n ] } ] ] [ COLLATE collation_name ] [ WITH ] ] [;] Khoa CNTT – Đại học Sài Gòn 19 b. Tạo CSDL ::= { ( NAME = logical_file_name , FILENAME = 'os_file_name' [ , SIZE = size [ KB | MB | GB | TB ] ] [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ] ) [ ,...n ] } Khoa CNTT – Đại học Sài Gòn 20 b. Tạo CSDL Tạo CSDL đơn giản không tham số: Tạo CSDL chỉ định đường dẫn nơi chứa CSDL: CREATE DATABASE TEST CREATE DATABASE QLNV ON ( NAME = 'QLNV_Data', FILENAME = 'D:\QLNV_Data.mdf', SIZE = 10MB, MAXSIZE = UNLIMITED, FILEGROWTH = 5MB) LOG ON ( NAME = 'QLNV_Log', FILENAME = 'D:\QLNV_Log.ldf', SIZE = 5MB, MAXSIZE = UNLIMITED, FILEGROWTH = 2MB) 6Khoa CNTT – Đại học Sài Gòn 21 c. Chỉnh sửa CSDL Lệnh chỉnh sửa chung thường là ALTER + Loại + Tên đối tượng: Ví dụ: ALTER DATABASE database_name { | | | MODIFY NAME = new_database_name | COLLATE collation_name } [;] ALTER DATABASE AdventureWorks MODIFY FILE ( NAME = Test1dat2, FILENAME = N'c:\t1dat2.ndf‘ ); Khoa CNTT – Đại học Sài Gòn 22 d. Xóa CSDL Lệnh xóa chung thường là DROP + Loại + Tên đối tượng Ví dụ: DROP DATABASE DROP DATABASE test Khoa CNTT – Đại học Sài Gòn 23 e. Lệnh tạo bảng Để định nghĩa một bảng – Tên bảng – Các thuộc tính • Tên thuộc tính • Kiểu dữ liệu • Các RBTV trên thuộc tính Cú pháp CREATE TABLE ( [], [], [] ) Khoa CNTT – Đại học Sài Gòn 24 Ví dụ - Tạo bảng CREATE TABLE NHANVIEN ( MANV CHAR(9), HONV VARCHAR(10), TENLOT VARCHAR(20), TENNV VARCHAR(10), NGSINH DATETIME, DCHI VARCHAR(50), PHAI CHAR(3), LUONG INT, MA_NQL CHAR(9), PHG INT ) 7Khoa CNTT – Đại học Sài Gòn 25 e. Lệnh tạo bảng – NOT NULL – NULL – UNIQUE (Khóa chỉ định) – DEFAULT – PRIMARY KEY – FOREIGN KEY / REFERENCES – CHECK Đặt tên cho RBTV CONSTRAINT Khoa CNTT – Đại học Sài Gòn 26 Ví dụ - Tạo bảng có kèm RBTV CREATE TABLE NHANVIEN ( HONV VARCHAR(10) NOT NULL, TENLOT VARCHAR(20) NOT NULL, TENNV VARCHAR(10) NOT NULL, MANV CHAR(9) PRIMARY KEY, NGSINH DATETIME, DCHI VARCHAR(50), PHAI CHAR(3) CHECK (PHAI IN (‘Nam’, ‘Nu’)), LUONG INT DEFAULT (10000), MA_NQL CHAR(9), PHG INT ) Khoa CNTT – Đại học Sài Gòn 27 Ví dụ - Tạo bảng có kèm RBTV CREATE TABLE PHONGBAN ( TENPB VARCHAR(20) UNIQUE, MAPHG INT NOT NULL, TRPHG CHAR(9), NG_NHANCHUC DATETIME DEFAULT (GETDATE()) ) CREATE TABLE PHANCONG ( MA_NVIEN CHAR(9) FOREIGN KEY (MA_NVIEN) REFERENCES NHANVIEN(MANV), SODA INT REFERENCES DEAN(MADA), THOIGIAN DECIMAL(3,1) ) Khoa CNTT – Đại học Sài Gòn 28 Ví dụ - RBTV có đặt tên CREATE TABLE NHANVIEN ( HONV VARCHAR(10) CONSTRAINT NV_HONV_NN NOT NULL, TENLOT VARCHAR(20) NOT NULL, TENNV VARCHAR(10) NOT NULL, MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY, NGSINH DATETIME, DCHI VARCHAR(50), PHAI CHAR(3) CONSTRAINT NV_PHAI_CHK CHECK (PHAI IN (‘Nam’, ‘Nu’)), LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT (10000), MA_NQL CHAR(9), PHG INT ) 8Khoa CNTT – Đại học Sài Gòn 29 Ví dụ - RBTV có đặt tên CREATE TABLE PHANCONG ( MA_NVIEN CHAR(9), SODA INT, THOIGIAN DECIMAL(3,1), CONSTRAINT PC_MANVIEN_SODA_PK PRIMARY KEY (MA_NVIEN, SODA), CONSTRAINT PC_MANVIEN_FK FOREIGN KEY (MA_NVIEN) REFERENCES NHANVIEN(MANV), CONSTRAINT PC_SODA_FK FOREIGN KEY (SODA) REFERENCES DEAN(MADA) ) Khoa CNTT – Đại học Sài Gòn 30 f. Lệnh sửa bảng Được dùng để – Thay đổi cấu trúc bảng – Thay đổi RBTV Thêm cột Xóa cột Mở rộng cột ALTER TABLE ADD [] ALTER TABLE DROP COLUMN ALTER TABLE ALTER COLUMN Khoa CNTT – Đại học Sài Gòn 31 f. Lệnh sửa bảng Thêm RBTV Xóa RBTV ALTER TABLE ADD CONSTRAINT , CONSTRAINT , ALTER TABLE DROP Khoa CNTT – Đại học Sài Gòn 32 Ví dụ - Thay đổi cấu trúc bảng ALTER TABLE NHANVIEN ADD NGHENGHIEP CHAR(20) ALTER TABLE NHANVIEN DROP COLUMN NGHENGHIEP ALTER TABLE NHANVIEN ALTER COLUMN NGHENGHIEP CHAR(50) 9Khoa CNTT – Đại học Sài Gòn 33 Ví dụ - Thay đổi RBTV CREATE TABLE PHONGBAN ( TENPB VARCHAR(20), MAPHG INT NOT NULL, TRPHG CHAR(9), NG_NHANCHUC DATETIME ) ALTER TABLE PHONGBAN ADD CONSTRAINT PB_MAPHG_PK PRIMARY KEY (MAPHG), CONSTRAINT PB_TRPHG FOREIGN KEY (TRPHG) REFERENCES NHANVIEN(MANV), CONSTRAINT PB_NGNHANCHUC_DF DEFAULT (GETDATE()) FOR (NG_NHANCHUC), CONSTRAINT PB_TENPB_UNI UNIQUE (TENPB) Khoa CNTT – Đại học Sài Gòn 34 Ví dụ - Thay đổi RBTV khóa ngoại CREATE TABLE NHANVIEN ( MANV VARCHAR(20) PRIMARY KEY, HOTEN NVARCHAR(50) ) ALTER TABLE PHONGBAN ADD TRGPHG VARCHAR(20) ALTER TABLE PHONGBAN ADD CONSTRAINT PB_TRGPHG_FK FOREIGN KEY (TRGPHG) REFERENCES NHANVIEN(MANV) ON DELETE CASCADE Khoa CNTT – Đại học Sài Gòn 35 g. Lệnh xóa bảng Được dùng để xóa cấu trúc bảng – Tất cả dữ liệu của bảng cũng bị xóa Cú pháp Ví dụ DROP TABLE DROP TABLE NHANVIEN DROP TABLE PHONGBAN DROP TABLE PHANCONG Khoa CNTT – Đại học Sài Gòn 36 Trình tự xóa bảng như sau: 1. ALTER TABLE PHONGBAN DROP COLUMN TRPHG Hay ALTER TABLE PHONGBANDROP fk_PHONGBAN 2. DROP TABLE NHANVIEN 3. DROP TABLE PHONGBAN g. Lệnh xóa bảng NHANVIEN PHONGBAN TRPHGTENPHG MAPHG NG_NHANCHUC TENNVHONV TENLOT MANV NGSINH DCHI PHAI LUONG MA_NQL PHG 1 2 3 10 Khoa CNTT – Đại học Sài Gòn 37 k. Lệnh tạo miền giá trị Tạo ra một kiểu dữ liệu mới kế thừa những kiểu dữ liệu có sẳn Cú pháp Ví dụ CREATE DOMAIN AS CREATE DOMAIN Kieu_Ten AS VARCHAR(30) Khoa CNTT – Đại học Sài Gòn 38 3. Truy vấn dữ liệu Là ngôn ngữ rút trích dữ liệu thỏa một số điều kiện nào đó Dựa trên – Cho phép 1 bảng có nhiều dòng trùng nhau Phép toán ĐSQH Một số bổ sung Khoa CNTT – Đại học Sài Gòn 39 a. Truy vấn cơ bản Gồm 3 mệnh đề – • Tên các cột cần được hiển thị trong kết quả truy vấn – • Tên các bảng liên quan đến câu truy vấn – • Biểu thức boolean xác định dòng nào sẽ được rút trích • Nối các biểu thức: AND, OR, và NOT • Phép toán: , , , , , , LIKE và BETWEEN SELECT FROM WHERE Khoa CNTT – Đại học Sài Gòn 40 a. Truy vấn cơ bản SQL và ĐSQH SELECT FROM WHERE SELECT L FROM R WHERE C L (C (R)) 11 Khoa CNTT – Đại học Sài Gòn 41 Ví dụ SELECT * FROM NHANVIEN WHERE PHG=5 AND PHAI='Nam' Lấy tất cả các cột của quan hệ kết quả PHG=5PHAI=‘Nam’ (NHANVIEN) TENNVHONV NGSINH DCHI PHAI LUONG PHG TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 5 HungNguyen 09/15/1962 Ba Ria VT Nam 38000 5 333445555 987987987 MANV MA_NQL 888665555 333445555 TENLOT Thanh Manh Khoa CNTT – Đại học Sài Gòn 42 Mệnh đề SELECT SELECT MANV, HONV, TENLOT, TENNV FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ MANV,HONV,TENLOT,TENNV(PHG=5 PHAI=‘Nam’ (NHANVIEN)) TENNVHONV TungNguyen HungNguyen TENLOT Thanh Manh 333445555 987987987 MANV Khoa CNTT – Đại học Sài Gòn 43 Mệnh đề SELECT SELECT MANV, HONV AS HO, TENLOT AS ‘TEN LOT’, TENNV AS TEN FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ MANV,HO,TEN LOT,TEN( MANV,HONV,TENLOT,TENNV(PHG=5PHAI=‘Nam’(NHANVIEN))) TENHO TungNguyen HungNguyen TEN LOT Thanh Manh 333445555 987987987 MANV Tên bí danh Khoa CNTT – Đại học Sài Gòn 44 Mệnh đề SELECT SELECT MANV, HONV + ‘ ’ + TENLOT + ‘ ’ + TENNV AS ‘HO TEN’ FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ MANV,HO TEN( MANV,HONV+TENLOT+TENNV(PHG=5PHAI=‘Nam’(NHANVIEN))) HO TEN Nguyen Thanh Tung Nguyen Manh Hung 333445555 987987987 MANV Mở rộng 12 Khoa CNTT – Đại học Sài Gòn 45 Mệnh đề SELECT SELECT MANV, LUONG*1.1 AS ‘LUONG10%’ FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ MANV,LUONG10%( MANV,LUONG*1.1(PHG=5PHAI=‘Nam’(NHANVIEN))) LUONG10% 33000 27500 333445555 987987987 MANV Mở rộng Khoa CNTT – Đại học Sài Gòn 46 Mệnh đề SELECT SELECT LUONG FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ Loại bỏ các dòng trùng nhau - Tốn chi phí - Người dùng muốn thấy LUONG 30000 25000 25000 38000 38 DISTINCT LUONG Khoa CNTT – Đại học Sài Gòn 47 Ví dụ Cho biết MANV và TENNV làm việc ở phòng ‘Nghien cuu’ SELECT FROM WHERE R1 NHANVIEN PHG=MAPHG PHONGBAN KQ MANV, TENNV (TENPHG=‘Nghien cuu’(R1)) MANV, TENNV NHANVIEN, PHONGBAN TENPHG=‘Nghien cuu’ PHG=MAPHGAND Khoa CNTT – Đại học Sài Gòn 48 Mệnh đề WHERE SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG Biểu thức luận lý TRUE TRUE 13 Khoa CNTT – Đại học Sài Gòn 49 Mệnh đề WHERE SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND PHG=MAPHG Độ ưu tiên Khoa CNTT – Đại học Sài Gòn 50 Mệnh đề WHERE SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG>20000 AND LUONG<30000 BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG BETWEEN 20000 AND 30000 Khoa CNTT – Đại học Sài Gòn 51 Mệnh đề WHERE NOT BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG NOT BETWEEN 20000 AND 30000 Khoa CNTT – Đại học Sài Gòn 52 Mệnh đề WHERE SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘Nguyen _ _ _ _’ LIKE SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘Nguyen %’ Chuỗi bất kỳ Ký tự bất kỳ 14 Khoa CNTT – Đại học Sài Gòn 53 Mệnh đề WHERE SELECT MANV, TENNV FROM NHANVIEN WHERE HONV LIKE ‘Nguyen’ NOT LIKE SELECT MANV, TENNV FROM NHANVIEN WHERE HONV NOT NOT LIKE ‘Nguyen’ Khoa CNTT – Đại học Sài Gòn 54 Mệnh đề WHERE Escape SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’ ‘Nguyen_’ Khoa CNTT – Đại học Sài Gòn 55 Mệnh đề WHERE Ngày giờ SELECT MANV, TENNV FROM NHANVIEN WHERE NGSINH BETWEEN ‘1955-12-08’ AND ‘1966-07-19’ YYYY-MM-DD MM/DD/YYYY ‘1955-12-08’ ’12/08/1955’ ‘December 8, 1955’ HH:MI:SS’17:30:00’ ’05:30 PM’ ‘1955-12-08 17:30:00’ Khoa CNTT – Đại học Sài Gòn 56 Mệnh đề WHERE – Sử dụng trong trường hợp • Không biết (value unknown) • Không thể áp dụng (value inapplicable) • Không tồn tại (value withheld) – Những biểu thức tính toán có liên quan đến giá trị NULL sẽ cho ra kết quả là NULL • x có giá trị là NULL • x + 3 cho ra kết quả là NULL • x + 3 là một biểu thức không hợp lệ trong SQL – Những biểu thức so sánh có liên quan đến giá trị NULL sẽ cho ra kết quả là UNKNOWN • x = 3 cho ra kết quả là UNKNOWN • x = 3 là một so sánh không hợp lệ trong SQL NULL 15 Khoa CNTT – Đại học Sài Gòn 57 Mệnh đề WHERE NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NOT NULL Khoa CNTT – Đại học Sài Gòn 58 Mệnh đề WHERE Khi không có mệnh đề WHERE Tương đương với WHERE (mệnh đề luôn đúng) SELECT * FROM PHONGBAN WHERE 1=1 Khoa CNTT – Đại học Sài Gòn 59 Mệnh đề WHERE WHERE TRUE SELECT MANV, MAPHG FROM NHANVIEN, PHONGBAN MAPHG 1 4 333445555 333445555 MANV 5 1987987987 987987987 333445555 4 5987987987 Khoa CNTT – Đại học Sài Gòn 60 Mệnh đề FROM Điều kiện kết của phép kết cũng được thể hiện thông qua mệnh đề WHERE còn các quan hệ trong phép kết được thể hiện trong mệnh đề FROM. Ví dụ: Với mỗi phòng ban hãy cho biết các địa điểm của phòng ban đó PHONGBAN(TENPHG, MAPHG, TRPHG, NG_NHANCHUC) DIADIEMPHG(MAPHG, DIADIEM) KQ PHONGBAN MAPHG=MAPHG DIADIEMPHG SELECT * FROM PHONGBAN, DIADIEMPHG WHERE PHONGBAN.MAPHG=DIADIEMPHG.MAPHG 16 Khoa CNTT – Đại học Sài Gòn 61 Mệnh đề FROM SELECT TENPHG, DI ... FROM NHANVIEN NV2 WHERE NV2PHG=4 AND NV1.LUONG>NV2.LUONG) Khoa CNTT – Đại học Sài Gòn 88 Ví dụ 10 Tìm những trưởng phòng có tối thiểu một thân nhân SELECT * FROM NHANVIEN WHERE EXISTS ( SELECT * FROM THANNHAN WHERE MANV=MA_NVIEN ) AND EXISTS ( SELECT * FROM PHONGBAN WHERE MANV=TRPHG ) 23 Khoa CNTT – Đại học Sài Gòn 89 IN và EXISTS IN – IN – Thuộc tính ở mệnh đề SELECT của truy vấn con phải có cùng kiểu dữ liệu với thuộc tính ở mệnh đề WHERE của truy vấn cha EXISTS – Không cần có thuộc tính, hằng số hay biểu thức nào khác đứng trước – Không nhất thiết liệt kê tên thuộc tính ở mệnh đề SELECT của truy vấn con – Những câu truy vấn có = ANY hay IN đều có thể chuyển thành câu truy vấn có EXISTS Khoa CNTT – Đại học Sài Gòn 90 Phép chia trong SQL RS là tập các giá trị ai trong R sao cho không có giá trị bi nào trong S làm cho bộ (ai, bi) không tồn tại trong R A B a a a a a a a a C D a b a a b a b b E 1 3 1 1 1 1 1 1 R D E a S b 1 1 A B C a a RS aibi Khoa CNTT – Đại học Sài Gòn 91 Phép chia trong SQL Sử dụng NOT EXISTS để biểu diễn SELECT R1.A, R1.B, R1.C FROM R R1 WHERE NOT EXISTS ( SELECT * FROM S WHERE NOT EXISTS ( SELECT * FROM R R2 WHERE R2.D=S.D AND R2.E=S.E AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C )) Khoa CNTT – Đại học Sài Gòn 92 Ví dụ 12 Tìm tên các nhân viên được phân công làm tất cả các đồ án – Tìm tên các nhân viên mà không có đề án nào là không được phân công làm – Tập bị chia: PHANCONG(MA_NVIEN, SODA) – Tập chia: DEAN(MADA) – Tập kết quả: KQ(MA_NVIEN) – Kết KQ với NHANVIEN để lấy ra TENNV 24 Khoa CNTT – Đại học Sài Gòn 93 Ví dụ 12 SELECT NV.TENNV FROM NHANVIEN NV, PHANCONG PC1 WHERE NV.MANV=PC1.MA_NVIEN AND NOT EXISTS ( SELECT * FROM DEAN DA WHERE NOT EXISTS ( SELECT * FROM PHANCONG PC2 WHERE PC2.SODA=DA.MADA AND PC1.MA_NVIEN=PC2.MA_NVIEN )) Khoa CNTT – Đại học Sài Gòn 94 c. Hàm kết hợp COUNT – COUNT(*) đếm số dòng – COUNT() đếm số giá trị khác NULL của thuộc tính – COUNT(DISTINCT ) đếm số giá trị khác nhau và khác NULL của thuộc tính MIN MAX SUM AVG Các hàm kết hợp được đặt ở mệnh đề SELECT Khoa CNTT – Đại học Sài Gòn 95 Ví dụ 13 Tìm tổng lương, lương cao nhất, lương thấp nhất và lương trung bình của các nhân viên SELECT SUM(LUONG), MAX(LUONG), MIN(LUONG), AVG(LUONG) FROM NHANVIEN Khoa CNTT – Đại học Sài Gòn 96 Ví dụ 14 Cho biết số lượng nhân viên của phòng ‘Nghien cuu’ SELECT COUNT(*) AS SL_NV FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG AND TENPHG=‘Nghien cuu’ 25 Khoa CNTT – Đại học Sài Gòn 97 Ví dụ 15 Cho biết số lượng nhân viên của từng phòng ban SL_NV 5 4 3 3 PHG 1 1 TENNVHONV NGSINH DCHI PHAI LUONG PHG TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 5 HungNguyen 09/15/1962 Ba Ria VT Nam 38000 5 333445555 987987987 MANV MA_NQL 888665555 333445555 TENLOT Thanh Manh TamTran 07/31/1972 543 MTL Q1 Nu 25000 5 HangBui 07/19/1968 33 NTH Q1 Nu 38000 4 453453453 999887777 333445555 987654321 Thanh Ngoc NhuLe 07620/1951 219 TD Q3 Nu 43000 4987654321 888665555Quynh QuangTran 04/08/1969 980 LHP Q5 Nam 25000 4 VinhPham 11/10/1945 450 TV HN Nam 55000 1 987987987 888665555 987654321 NULL Hong Van Khoa CNTT – Đại học Sài Gòn 98 d. Gom nhóm Cú pháp SELECT FROM WHERE GROUP BY Khoa CNTT – Đại học Sài Gòn 9999 Khoa CNTT – Đại học Sài Gòn 100 Ví dụ 16 Cho biết số lượng nhân viên của từng phòng ban SELECT PHONG, COUNT(*) AS SL_NV FROM NHANVIEN GROUP BY PHONG SELECT TENPHG, COUNT(*) AS SL_NV FROM NHANVIEN, PHONGBAN WHERE PHONG=MAPHG GROUP BY TENPHG 26 Khoa CNTT – Đại học Sài Gòn 101 Ví dụ 17 Với mỗi nhân viên cho biết mã số, họ tên, số lượng đề án và tổng thời gian mà họ tham gia SODA THOIGIAN 1 32.5 2 7.5 123456789 123456789 MA_NVIEN 2 10.0 3 10.0 333445555 333445555 10 10.0333445555 20 20.0 10 35.0 888665555 987987987 30 5.0987987987 30 20.0987654321 20 15.0987654321 1 20.0453453453 2 20.0453453453 SELECT MA_NVIEN, COUNT(*) AS SL_DA, SUM(THOIGIAN) AS TONG_TG FROM PHANCONG GROUP BY MA_NVIEN SELECT HONV, TENNV, COUNT(*) AS SL_DA, SUM(THOIGIAN) AS TONG_TG FROM PHANCONG, NHANVIEN WHERE MA_NVIEN=MANV GROUP BY MA_NVIEN, HONV, TENNV Khoa CNTT – Đại học Sài Gòn 102 Ví dụ 18 Cho biết những nhân viên tham gia từ 2 đề án trở lên SODA THOIGIAN 1 32.5 2 7.5 123456789 123456789 MA_NVIEN 2 10.0 3 10.0 333445555 333445555 10 10.0333445555 20 20.0 10 35.0 888665555 987987987 30 5.0987987987 30 20.0987654321 20 15.0987654321 1 20.0453453453 2 20.0453453453 bị loại ra Khoa CNTT – Đại học Sài Gòn 103 e. Điều kiện trên nhóm Cú pháp SELECT FROM WHERE GROUP BY HAVING Khoa CNTT – Đại học Sài Gòn 104 Ví dụ 18 Cho biết những nhân viên tham gia từ 2 đề án trở lên SELECT MA_NVIEN FROM PHANCONG GROUP BY MA_NVIEN HAVING COUNT(*) >= 2 27 Khoa CNTT – Đại học Sài Gòn 105 Ví dụ 19 Cho biết những phòng ban (TENPHG) có lương trung bình của các nhân viên lớn lơn 20000 SELECT PHONG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHONG HAVING AVG(LUONG) > 20000 SELECT TENPHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN, PHONGBAN WHERE PHONG=MAPHG GROUP BY TENPHG HAVING AVG(LUONG) > 20000 Khoa CNTT – Đại học Sài Gòn 106 Nhận xét Mệnh đề GROUP BY – Các thuộc tính trong mệnh đề SELECT (trừ những thuộc tính trong các hàm kết hợp) phải xuất hiện trong mệnh đề GROUP BY Mệnh đề HAVING – Sử dụng các hàm kết hợp trong mệnh đề SELECT để kiểm tra một số điều kiện nào đó – Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện lọc trên từng bộ – Sau khi gom nhóm điều kiện trên nhóm mới được thực hiện Khoa CNTT – Đại học Sài Gòn 107 Nhận xét Thứ tự thực hiện câu truy vấn có mệnh đề GROUP BY và HAVING – (1) Chọn ra những dòng thỏa điều kiện trong mệnh đề WHERE – (2) Những dòng này sẽ được gom thành nhiều nhóm tương ứng với mệnh đề GROUP BY – (3) Áp dụng các hàm kết hợp cho mỗi nhóm – (4) Bỏ qua những nhóm không thỏa điều kiện trong mệnh đề HAVING – (5) Rút trích các giá trị của các cột và hàm kết hợp trong mệnh đề SELECT Khoa CNTT – Đại học Sài Gòn 108 Ví dụ 20 Tìm những phòng ban có lương trung bình cao nhất SELECT PHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHG HAVING MAX(AVG(LUONG)) LUONG_TB FR M NHANVIEN G UP BY PHG HAVING AVG(LUONG) >= ALL ( SELECT AVG(LUONG) FROM NHANVIEN GROUP BY PHG) 28 Khoa CNTT – Đại học Sài Gòn 109 Ví dụ 21 Tìm tên các nhân viên được phân công làm tất cả các đồ án SELECT MANV, TENVN FROM NHANVIEN, PHANCONG WHERE MANV=MA_NVIEN GROUP BY MANV, TENNV HAVING COUNT(*) = ( SELECT COUNT(*) FROM DEAN ) Khoa CNTT – Đại học Sài Gòn 110 f. Một số dạng truy vấn khác Truy vấn con ở mệnh đề FROM Điều kiện kết ở mệnh đề FROM – Phép kết tự nhiên – Phép kết ngoài Cấu trúc CASE Khoa CNTT – Đại học Sài Gòn 111 Truy vấn con ở mệnh đề FROM Kết quả trả về của một câu truy vấn phụ là một bảng – Bảng trung gian trong quá trình truy vấn – Không có lưu trữ thật sự Cú pháp SELECT FROM R1, R2, () AS tên_bảng WHERE Khoa CNTT – Đại học Sài Gòn 112 Ví dụ 22 Cho biết những phòng ban (TENPHG) có lương trung bình của các nhân viên lớn hơn 20000 SELECT PHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHG HAVING AVG(LUONG) > 20000 SELECT PHG, TENPHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY PHG, TENPHG HAVING AVG(LUONG) > 20000 29 Khoa CNTT – Đại học Sài Gòn 113 Ví dụ 22 Cho biết những phòng ban (TENPHG) có lương trung bình của các nhân viên lớn hơn 20000 SELECT TENPHG, TEMP.LUONG_TB FROM PHONGBAN, (SELECT PHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHG HAVING AVG(LUONG)> 20000 ) AS TEMP WHERE MAPHG=TEMP.PHG Khoa CNTT – Đại học Sài Gòn 114 Điều kiện kết ở mệnh đề FROM Kết bằng Kết ngoài SELECT FROM R1 [INNER] JOIN R2 ON WHERE SELECT FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON WHERE Khoa CNTT – Đại học Sài Gòn 115 Ví dụ 23 SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG SELECT MANV, TENNV FROM NHANVIEN INNER JOIN PHONGBAN ON PHONG=MAPHG WHERE TENPHG=‘Nghien cuu’ 115 Tìm mã và tên các nhân viên làm việc tại phòng ‘Nghien cuu’ Khoa CNTT – Đại học Sài Gòn 116 Ví dụ 24 Tìm họ tên các nhân viên và tên các đề án nhân viên tham gia nếu có SELECT NV.TENNV, NV.TENDA FROM (PHANCONG PC JOIN DEAN DA ON SODA=MADA) LEFT JOIN NHANVIEN NV ON PC.MA_NVIEN=NV.MANV NHANVIENPHANCONG join DEAN MA_NVIEN=MANV mở rộng 30 Khoa CNTT – Đại học Sài Gòn 117 Cấu trúc CASE Cho phép kiểm tra điều kiện và xuất thông tin theo từng trường hợp Cú pháp CASE WHEN THEN WHEN THEN [ELSE ] END Khoa CNTT – Đại học Sài Gòn 118 Ví dụ 25 Cho biết họ tên các nhân viên đã đến tuổi về hưu (nam 60 tuổi, nữ 55 tuổi) SELECT HONV, TENNV FROM NHANVIEN WHERE YEAR(GETDATE()) – YEAR(NGSINH) >= ( CASE PHAI WHEN 'Nam' THEN 60 WHEN 'Nu' THEN 55 END ) Khoa CNTT – Đại học Sài Gòn 119 Ví dụ 26 Cho biết họ tên các nhân viên và năm về hưu SELECT HONV, TENNV (CASE PHAI WHEN 'Nam' THEN YEAR(NGSINH) + 60 WHEN 'Nu‘ THEN YEAR(NGSINH) + 55 END ) AS NAMVEHUU FROM NHANVIEN Khoa CNTT – Đại học Sài Gòn 120 Kết luận SELECT FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ] 31 Khoa CNTT – Đại học Sài Gòn 121 4. Cập nhật dữ liệu Cập nhật dữ liệu gồm các lệnh: – Thêm (insert) – Xóa (delete) – Sửa (update) Khoa CNTT – Đại học Sài Gòn 122 a. Lệnh INSERT Dùng để thêm 1 hay nhiều dòng vào bảng Để thêm dữ liệu – Tên quan hệ – Danh sách các thuộc tính cần thêm dữ liệu – Danh sách các giá trị tương ứng Cú pháp (thêm 1 dòng) INSERT INTO () VALUES () Khoa CNTT – Đại học Sài Gòn 123 Ví dụ INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV) VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’) INSERT INTO NHANVIEN VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, ’12/30/1952’, ’98 HV’, ‘Nam’, ‘37000’, 4) INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV, DCHI) VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, NULL) Khoa CNTT – Đại học Sài Gòn 124 a. Lệnh INSERT Nhận xét – Thứ tự các giá trị phải trùng với thứ tự các cột – Có thể thêm giá trị NULL ở những thuộc tính không là khóa chính và NOT NULL – Câu lệnh INSERT sẽ gặp lỗi nếu vi phạm RBTV • Khóa chính • Tham chiếu • NOT NULL - các thuộc tính có ràng buộc NOT NULL bắt buộc phải có giá trị 32 Khoa CNTT – Đại học Sài Gòn 125 a. Lệnh INSERT Cú pháp (thêm nhiều dòng) INSERT INTO () Khoa CNTT – Đại học Sài Gòn 126 Ví dụ CREATE TABLE THONGKE_PB ( TENPHG VARCHAR(20), SL_NV INT, LUONG_TC INT ) INSERT INTO THONGKE_PB(TENPHG, SL_NV, LUONG_TC) SELECT TENPHG, COUNT(MANV), SUM(LUONG) FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY TENPHG Khoa CNTT – Đại học Sài Gòn 127 b. Lệnh DELETE Dùng để xóa các dòng của bảng Cú pháp DELETE FROM [WHERE ] Khoa CNTT – Đại học Sài Gòn 128 Ví dụ DELETE FROM NHANVIEN WHERE HONV=‘Tran’ DELETE FROM NHANVIEN WHERE MANV=‘345345345’ DELETE FROM NHANVIEN Xóa đi những nhân viên ở phòng ‘Nghien cuu’ DELETE FROM NHANVIEN WHERE PHG IN ( SELECT MAPHG FROM PHONGBAN WHERE TENPHG=‘Nghien cuu’) 33 Khoa CNTT – Đại học Sài Gòn 129 b. Lệnh DELETE Nhận xét – Số lượng số dòng bị xóa phụ thuộc vào điều kiện ở mệnh đề WHERE – Nếu không chỉ định điều kiện ở mệnh đề WHERE, tất cả các dòng trong bảng sẽ bị xóa – Lệnh DELETE có thể gây ra vi phạm RB tham chiếu • Không cho xóa • Xóa luôn những dòng có giá trị đang tham chiếu đến • Đặt NULL cho những giá trị tham chiếu Khoa CNTT – Đại học Sài Gòn 130 c. Lệnh UPDATE Dùng để thay đổi giá trị của thuộc tính cho các dòng của bảng Cú pháp UPDATE SET =, =, [WHERE ] Khoa CNTT – Đại học Sài Gòn 131 Ví dụ UPDATE NHANVIEN SET NGSINH=’08/12/1965’ WHERE MANV=‘333445555’ 131 Với đề án có mã số 10, hãy thay đổi nơi thực hiện đề án thành ‘Vung Tau’ và phòng ban phụ trách là phòng 5 UPDATE DEAN SET DIADIEM_DA=’Vung Tau’, PHONG=5 WHERE MADA=10 Khoa CNTT – Đại học Sài Gòn 132 c. Lệnh UPDATE Nhận xét – Những dòng thỏa điều kiện tại mệnh đề WHERE sẽ được cập nhật giá trị mới – Nếu không chỉ định điều kiện ở mệnh đề WHERE, tất cả các dòng trong bảng sẽ bị cập nhật – Lệnh UPDATE có thể gây ra vi phạm RB tham chiếu • Không cho sửa • Sửa luôn những dòng có giá trị đang tham chiếu đến 34 Khoa CNTT – Đại học Sài Gòn 133 5. Khung nhìn Bảng là một quan hệ được tổ chức lưu trữ vật lý trong CSDL Khung nhìn cũng là một quan hệ – Không được lưu trữ vật lý (bảng ảo) – Không chứa dữ liệu – Được định nghĩa từ những bảng khác – Có thể truy vấn hay cập nhật thông qua khung nhìn Khoa CNTT – Đại học Sài Gòn 134 5. Khung nhìn Tại sao phải sử dụng khung nhìn? – Che dấu tính phức tạp của dữ liệu – Đơn giản hóa các câu truy vấn – Hiển thị dữ liệu dưới dạng tiện dụng nhất – An toàn dữ liệu Khoa CNTT – Đại học Sài Gòn 135 Định nghĩa khung nhìn Cú pháp Bảng ảo này có – Danh sách thuộc tính trùng với các thuộc tính trong mệnh đề SELECT – Số dòng phụ thuộc vào điều kiện ở mệnh đề WHERE – Dữ liệu được lấy từ các bảng ở mệnh đề FROM CREATE VIEW AS DROP VIEW Khoa CNTT – Đại học Sài Gòn 136 Ví dụ CREATE VIEW NV_P5 AS SELECT MANV, HONV, TENLOT, TENVN FROM NHANVIEN WHERE PHG=5 CREATE VIEW TONGLNG_SLNV_PB AS SELECT MAPHG, TENPB, COUNT(*) AS SLNV, SUM(LUONG) AS TONGLNG FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY TENPHG 35 Khoa CNTT – Đại học Sài Gòn 137 Truy vấn trên khung nhìn Tuy không chứa dữ liệu nhưng có thể thực hiện các câu truy vấn trên khung nhìn SELECT TENNV FROM NV_P5 WHERE HONV LIKE ‘Nguyen’ NV_P5 MANV,HONV, TENLOT, TENNV (PHG=5 (NHANVIEN)) TENNV (HONV=‘Nguyen’ (NV_P5)) Khoa CNTT – Đại học Sài Gòn 138 Truy vấn trên khung nhìn Có thể viết câu truy vấn dữ liệu từ khung nhìn và bảng SELECT HONV, TENVN, TENDA, THOIGIAN FROM NV_P5, PHANCONG, DEAN WHERE MANV=MA_NVIEN AND SODA=MADA Khoa CNTT – Đại học Sài Gòn 139 Cập nhật trên khung nhìn Có thể dùng các câu lệnh INSERT, DELETE và UPDATE cho các khung nhìn đơn giản – Khung nhìn được xây dựng trên 1 bảng và có khóa chính của bảng Không thể cập nhật dữ liệu nếu – Khung nhìn có dùng từ khóa DISTINCT – Khung nhìn có sử dụng các hàm kết hợp – Khung nhìn có mệnh đề SELECT mở rộng – Khung nhìn được xây dựng từ bảng có RB trên cột – Khung nhìn được xây dựng từ nhiều bảng Khoa CNTT – Đại học Sài Gòn 140 Cập nhật trên khung nhìn Sửa lại họ cho nhân viên mã ‘123456789’ ở phòng 5 là ‘Pham’ UPDATE NV_P5 SET HONV=‘Pham’ WHERE MANV= ‘123456789’ 36 Khoa CNTT – Đại học Sài Gòn 141 6. Chỉ mục Chỉ mục trên thuộc tính A là một cấu trúc dữ liệu làm cho việc tìm kiếm mẫu tin có chứa A hiệu quả hơn SELECT * FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nu’ Bảng NHANVIEN có 10.000 bộ Có 200 nhân viên làm việc cho phòng 5 Đọc 10.000 bộ Đọc 200 bộ Đọc 70 bộ Khoa CNTT – Đại học Sài Gòn 142 6. Chỉ mục Cú pháp Ví dụ CREATE INDEX ON () CREATE INDEX PHG_IND ON NHANVIEN(PHG) CREATE INDEX PHG_PHAI_IND ON NHANVIEN(PHG, PHAI) DROP INDEX Khoa CNTT – Đại học Sài Gòn 143 6. Chỉ mục Nhận xét – Tìm kiếm nhanh trong trường hợp so sánh với hằng số và phép kết – Làm chậm đi các thao tác thêm, xóa và sửa – Tốn chi phí • Lưu trữ chỉ mục • Truy xuất đĩa nhiều Chọn lựa cài đặt chỉ mục hợp lý??? Thank you!
File đính kèm:
- bai_giang_mon_co_so_du_lieu_chuong_4_ngon_ngu_truy_van_sql.pdf