Bài giảng Cơ sở dữ liệu - Chương 6: Ngôn ngữ SQL - Đỗ Thị Mai Hường

Giới thiệu • Ngôn ngữ Đại số quan hệ – 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 – Đượ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ộ

pdf136 trang | Chia sẻ: thanhle95 | Lượt xem: 683 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Cơ sở dữ liệu - Chương 6: Ngôn ngữ SQL - Đỗ Thị Mai Hường, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lý thuyết CSDL 1 GIÁO VIÊN: ĐỖ THỊ MAI HƯỜNG BỘ MÔN: CÁC HỆ THỐNG THÔNG TIN KHOA: CÔNG NGHỆ THÔNG TIN Email: dohuong@gmail.com CƠ SỞ DỮ LIỆU Lý thuyết CSDL 2 CHƯƠNG 6 Ngôn ngữ SQL Lý thuyết CSDL 3 Nội dung chi tiết • Giới thiệu • Định nghĩa dữ liệu • Truy vấn dữ liệu • Cập nhật dữ liệu • Tính đầy đủ của SQL • Khung nhìn (view) Lý thuyết CSDL 4 Giới thiệu • Ngôn ngữ Đại số quan hệ – 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 – Được ANSI công nhận và phát triển thành chuẩn • SQL-86 • SQL-92 • SQL-99 Lý thuyết CSDL 5 Giới thiệu (tt) • 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 Lý thuyết CSDL 6 Nội dung chi tiết • Giới thiệu • Định nghĩa dữ liệu – Kiểu dữ liệu – Các lệnh định nghĩa dữ liệu • Truy vấn dữ liệu • Cập nhật dữ liệu • Tính đầy đủ của SQL • Khung nhìn (view) Lý thuyết CSDL 7 Định nghĩa dữ liệu • Là ngôn ngữ mô tả – 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 / CREATE TYPE (tạo miền giá trị) – CREATE DATABASE – Lý thuyết CSDL 8 Kiểu dữ liệu • Số (numeric) – INTEGER – SMALLINT – NUMERIC – DECIMAL – REAL – DOUBLE PRECISION – FLOAT Lý thuyết CSDL 9 Kiểu dữ liệu (tt) • Chuỗi ký tự (character string) – CHARACTER, CHARACTER(n) • Chuỗi bit (bit string) – BIT, BIT(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ờ Lý thuyết CSDL 10 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 ràng buộc toàn vẹn trên thuộc tính (RBTV) • Cú pháp CREATE TABLE ( [], [], [] ) Lý thuyết CSDL 11 Ví dụ CSDL • Cho cơ sở dữ liệu CÔNGTY gồm các lược đồ: – NHANVIEN(MANV, HONV, TENNV, NS, GT, DCHI, LUONG, MA_NQL, PHONG) – PHONGBAN(MAPHONG, TENPHONG, TRPHONG, NG_NHANCHUC) – DEAN(MADA, TENDA, DD_DA, PHONG) – THANNHAN(MANV, TEN_TN, NS, GT, QUANHE) – NV_DEAN(MANV, MADA, SOGIO) – PHONGBAN_DD(MAPB, DD) Lý thuyết CSDL 12 Ví dụ - Tạo bảng CREATE TABLE NHANVIEN ( MANV CHAR(9), HODEM VARCHAR(30), TENNV VARCHAR(10), NS DATETIME, DCHI VARCHAR(50), GT CHAR(3), LUONG INT, MA_NQL CHAR(9), PHONG INT ) Lý thuyết CSDL 13 Lệnh tạo bảng (tt) • – NOT NULL – NULL – UNIQUE – DEFAULT – PRIMARY KEY – FOREIGN KEY / REFERENCES – CHECK • Đặt tên cho RBTV CONSTRAINT Lý thuyết CSDL 14 Ví dụ - RBTV CREATE TABLE NHANVIEN ( HODEM VARCHAR(30) NOT NULL, TENNV VARCHAR(10) NOT NULL, MANV CHAR(9) PRIMARY KEY, NS DATETIME, DCHI VARCHAR(50), GT CHAR(3) CHECK (GT IN (‘Nam’, ‘Nu’)), LUONG INT DEFAULT (10000), MA_NQL CHAR(9), PHONG INT ) Lý thuyết CSDL 15 Ví dụ - RBTV CREATE TABLE PHONGBAN ( TENPB VARCHAR(20) UNIQUE, MAPHONG INT NOT NULL, TRPHONG 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) ) Lý thuyết CSDL 16 Ví dụ - Đặt tên cho RBTV CREATE TABLE NHANVIEN ( HODEM VARCHAR(30) CONSTRAINT NV_HODEM_NN NOT NULL, TENNV VARCHAR(10) NOT NULL, MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY, NS DATETIME, DCHI VARCHAR(50), GT CHAR(3) CONSTRAINT NV_GT_CHK CHECK (GT IN (‘Nam’, ‘Nu’)), LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT (1000000), MA_NQL CHAR(9), PHONG INT ) Lý thuyết CSDL 17 Ví dụ - Đặt tên cho RBTV 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) ) Lý thuyết CSDL 18 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 COLUMN [] ALTER TABLE DROP COLUMN ALTER TABLE ALTER COLUMN Lý thuyết CSDL 19 Lệnh sửa bảng (tt) • Thêm RBTV • Xóa RBTV ALTER TABLE ADD CONSTRAINT , CONSTRAINT , ALTER TABLE DROP Lý thuyết CSDL 20 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) Lý thuyết CSDL 21 Ví dụ - Thay đổi RBTV CREATE TABLE PHONGBAN ( TENPB VARCHAR(20), MAPHONG INT NOT NULL, TRPHONG CHAR(9), NG_NHANCHUC DATETIME ) ALTER TABLE PHONGBAN ADD CONSTRAINT PB_MAPHONG_PK PRIMARY KEY (MAPHONG), CONSTRAINT PB_TRPHONG FOREIGN KEY (TRPHONG) REFERENCES NHANVIEN(MANV), CONSTRAINT PB_NGNHANCHUC_DF DEFAULT (GETDATE()) FOR (NG_NHANCHUC), CONSTRAINT PB_TENPB_UNI UNIQUE (TENPB) Lý thuyết CSDL 22 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 Lý thuyết CSDL 23 Lệnh xóa bảng (tt) NHANVIEN TENNVHONV TENDEM MANV NS DCHI GT LUON G MA_NQL PHO NG PHONGBAN TRPHO NG TENPHG MAPHO NG NG_NHANCHUC Lý thuyết CSDL 24 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 TYPE FROM CREATE DOMAIN Kieu_Ten AS VARCHAR(30) CREATE TYPE Kieu_Ten FROM VARCHAR(30) not null Lý thuyết CSDL 25 Nội dung chi tiết • Giới thiệu • Định nghĩa dữ liệu • Cập nhật dữ liệu – Thêm (insert) – Xóa (delete) – Sửa (update) • Truy vấn dữ liệu • Tính đầy đủ của SQL • Khung nhìn (view) Lý thuyết CSDL 26 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 Lý thuyết CSDL 27 Lệnh INSERT (tt) • Cú pháp (thêm 1 dòng) INSERT INTO () VALUES () Lý thuyết CSDL 28 Ví dụ INSERT INTO NHANVIEN(HODEM, 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, TENDEM, TENNV, MANV, DCHI) VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, NULL) Lý thuyết CSDL 29 Lệnh INSERT (tt) • 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 ở những thuộc tính là khóa chính hoặc có RBTV là 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ị Lý thuyết CSDL 30 Lệnh INSERT (tt) • Cú pháp (thêm nhiều dòng) INSERT INTO () Lý thuyết CSDL 31 Ví dụ CREATE TABLE THONGKE_PB ( TENPHONG VARCHAR(20), SL_NV INT, LUONG_TC INT ) INSERT INTO THONGKE_PB(TENPHONG, SL_NV, LUONG_TC) SELECT TENPHONG, COUNT(MANV), SUM(LUONG) FROM NHANVIEN, PHONGBAN WHERE PHONG=MAPHONG GROUP BY TENPHONG Lý thuyết CSDL 32 Lệnh DELETE • Dùng để xóa các dòng của bảng • Cú pháp DELETE FROM [WHERE ] Lý thuyết CSDL 33 Ví dụ DELETE FROM NHANVIEN WHERE HODEM=‘Tran Van’ DELETE FROM NHANVIEN WHERE MANV=‘345345345’ DELETE FROM NHANVIEN Lý thuyết CSDL 34 Lệnh DELETE (tt) • 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 – CASCADE • Đặt NULL cho những giá trị tham chiếu Lý thuyết CSDL 35 Lệnh DELETE (tt) 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 33344555 598798798 7 MANV MA_NQL 88866555 533344555 5 TENLO T Thanh Manh HangBui 07/19/1968 33 NTH Q1 Nu 38000 499988777 7 98765432 1 Ngoc NhuLe 07620/195 1 219 TD Q3 Nu 43000 498765432 1 88866555 5 Quynh VinhPham 11/10/1945 450 TV HN Nam 55000 188866555 5 NULLVan SODA THOIGIANMA_NVIEN 10 10.033344555 5 20 20.088866555 5 30 20.098765432 1 1 20.045345345 3 TamTran 07/31/1972 543 MTL Q1 Nu 25000 545345345 3 33344555 5 Thanh QuangTran 04/08/1969 980 LHP Q5 Nam 25000 498798798 7 98765432 1 Hong 10 35.098798798 7 30 5.098798798 7 Lý thuyết CSDL 36 Lệnh DELETE (tt) TENNVHONV NGSINH DCHI PHAI LUONG PHG TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 HungNguyen 09/15/1962 Ba Ria VT Nam 38000 33344555 598798798 7 MANV MA_NQL 88866555 533344555 5 TENLO T Thanh Manh HangBui 07/19/1968 33 NTH Q1 Nu 38000 499988777 7 98765432 1 Ngoc NhuLe 07620/195 1 219 TD Q3 Nu 43000 498765432 1 88866555 5 Quynh VinhPham 11/10/1945 450 TV HN Nam 55000 188866555 5 NULLVan TamTran 07/31/1972 543 MTL Q1 Nu 25000 5 5 545345345 3 33344555 5 Thanh QuangTran 04/08/1969 980 LHP Q5 Nam 25000 498798798 7 98765432 1 Hong NULL NULL NULL 05/22/1988333445555Nghien cuu 5 NG_NHANCHU C MA_NVIEN 01/01/1995 06/19/1981 987987987 888665555 TENPHG MAPHG Dieu hanh 4 Quan ly 1 Lý thuyết CSDL 37 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 ] Lý thuyết CSDL 38 Ví dụ UPDATE NHANVIEN SET NGSINH=’08/12/1965’ WHERE MANV=‘333445555’ UPDATE NHANVIEN SET LUONG=LUONG*1.1 Lý thuyết CSDL 39 Ví dụ 25 • 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 Lý thuyết CSDL 40 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 – CASCADE Lý thuyết CSDL 41 Nội dung chi tiết • Giới thiệu • Định nghĩa dữ liệu • Cập nhật dữ liệu • Truy vấn dữ liệu – Truy vấn cơ bản – Tập hợp, so sánh tập hợp và truy vấn lồng – Hàm kết hợp và gom nhóm – Một số kiểu truy vấn khác • Tính đầy đủ của SQL • Khung nhìn (view) Lý thuyết CSDL 42 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 Lý thuyết CSDL 43 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 Lý thuyết CSDL 44 Truy vấn cơ bản (tt) SELECT FROM WHERE    SELECT L FROM R WHERE C L (C (R)) • SQL và ĐSQH Lý thuyết CSDL 45 Ví dụ SELECT * FROM NHANVIEN WHERE PHONG=5 Lấy tất cả các cột của quan hệ kết quả TENNVHONV NS DCHI GT LUONG PHO NG 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 TENDEM Thanh Manh Lý thuyết CSDL 46 Mệnh đề SELECT SELECT MANV, HONV, TENDEM, TENNV FROM NHANVIEN WHERE PHONG=5 AND GT=‘Nam’ TENNVHONV TungNguyen HungNguyen TENDEM Thanh Manh 333445555 987987987 MANV Lý thuyết CSDL 47 Mệnh đề SELECT (tt) SELECT MANV, HONV AS HO, TENDEM AS ‘TEN DEM’, TENNV AS TEN FROM NHANVIEN WHERE PHONG=5 AND GT=‘Nam’ TENHO TungNguyen HungNguyen TEN DEM Thanh Manh 333445555 987987987 MANV Tên bí danh Lý thuyết CSDL 48 Mệnh đề SELECT (tt) SELECT MANV, HONV + ‘ ’ + TENDEM + ‘ ’ + TENNV AS ‘HO TEN’ FROM NHANVIEN WHERE PHONG=5 AND GT=‘Nam’ HO TEN Nguyen Thanh Tung Nguyen Manh Hung 333445555 987987987 MANV Mở rộng Lý thuyết CSDL 49 Mệnh đề SELECT (tt) SELECT MANV, LUONG*1.1 AS ‘LUONG10%’ FROM NHANVIEN WHERE PHONG=5 AND GT=‘Nam’ LUONG10% 33000 27500 333445555 987987987 MANV Mở rộng Lý thuyết CSDL 50 Mệnh đề SELECT (tt) SELECT LUONG FROM NHANVIEN WHERE PHONG=5 AND GT=‘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 SELECT DISTI CT LUONG FROM NHANVIEN WHERE PHONG=5 AND GT=‘Nam’ Lý thuyết CSDL 51 Ví dụ • Cho biết MANV và TENNV làm việc ở phòng ‘Nghien cuu’ Lý thuyết CSDL 52 Mệnh đề WHERE SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHONG=‘Nghien cuu’ AND Biểu thức logic TRUE TRUE PHONG=MAPHONG Lý thuyết CSDL 53 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE (TENPHONG=‘Nghien cuu’ OR TENPHONG=‘Quan ly’) AND GT=‘Nam’ AND PHONG=MAPHONG Độ ưu tiên Lý thuyết CSDL 54 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG>20000 AND LUONG<30000 BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG BETWEEN 20000 AND 30000 Lý thuyết CSDL 55 Mệnh đề WHERE (tt) NOT BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG NOT BETWEEN 20000 AND 30000 Lý thuyết CSDL 56 Mệnh đề WHERE (tt) 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ỳ Lý thuyết CSDL 57 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN WHERE HONV LIKE ‘Nguyen’ NOT LIKE SELECT MANV, TENNV FROM NHANVIEN WHERE HONV NOT LIKE ‘Nguyen’ Lý thuyết CSDL 58 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’ ESCAPE ‘Nguyen_’ WHERE ColumnA LIKE '%5/%%' ESCAPE '/' Lý thuyết CSDL 59 Mệnh đề WHERE (tt) Ngày giờ SELECT MANV, TENNV FROM NHANVIEN WHERE NGSINH BETWEEN ‘1955-12-08’ AND ‘1966-07-19’ Lý thuyết CSDL 60 Mệnh đề WHERE (tt) NULL – 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 Lý thuyết CSDL 61 Mệnh đề WHERE (tt) NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NOT NULL Lý thuyết CSDL 62 WHERE TRUE Mệnh đề FROM SELECT MANV, MAPHONG FROM NHANVIEN, PHONGBAN Không sử dụng mệnh đề WHERE MAPHONG 1 4 333445555 333445555 MANV 5 1987987987 987987987 333445555 4 5987987987 Lý thuyết CSDL 63 Mệnh đề FROM (tt) SELECT TENPHONG, DIADIEM FROM PHONGBAN, DDIEM_PHG WHERE MAPHONG=MAPHONG Tên bí danh AS PB, DDIEM_PHG AS DD PB.MAPHONG=DD.MAPHONG SELECT TENNV, NGSINH, TENTN, NGSINH FROM NHANVIEN, THANNHAN WHERE MANV=MA_NVIEN V.NGSINH, TENTN, T .NGSINH NV, THANNHAN TN Lý thuyết CSDL 64 Ví dụ 1 • Với những đề án ở ‘Ha Noi’, cho biết mã đề án, mã phòng, tên phòng chủ trì đề án, họ tên trưởng phòng cùng với ngày sinh và địa chỉ của người ấy Lý thuyết CSDL 65 Ví dụ 2 • Tìm họ tên của nhân viên phòng số 5 có tham gia vào đề án “Sản phẩm X” với số giờ làm việc trên 10 giờ Lý thuyết CSDL 66 Ví dụ 3 • Tìm họ tên của từng nhân viên và người phụ trách trực tiếp nhân viên đó Lý thuyết CSDL 67 Ví dụ 4 • Tìm họ tên của những nhân viên được “Nguyen Thanh Tung” phụ trách trực tiếp Lý thuyết CSDL 68 Mệnh đề ORDER BY • Dùng để hiển thị kết quả câu truy vấn theo một thứ tự nào đó • Cú pháp – ASC: tăng (mặc định) – DESC: giảm SELECT FROM WHERE ORDER BY Lý thuyết CSDL 69 Mệnh đề ORDER BY (tt) • Ví dụ SELECT MA_NVIEN, SODA FROM PHANCONG ORDER BY MA_NVIEN DESC, SODA SODA 10 30 99988777 799988777 7 MA_NVIEN 10 3098798798 798765432 1 98798798 7 10 2098765432 1 3098765432 1 Lý thuyết CSDL 70 Nội dung chi tiết • Giới thiệu • Định nghĩa dữ liệu • Truy vấn dữ liệu – Truy vấn cơ bản – Tập hợp, so sánh tập hợp và truy vấn lồng – Hàm kết hợp và gom nhóm – Một số dạng truy vấn khác • Cập nhật dữ liệu • Tính đầy đủ của SQL • Khung nhìn (view) Lý thuyết CSDL 71 Phép toán tập hợp trong SQL • SQL có cài đặt các phép toán – Hợp (UNION) – Giao (INTERSECT) – Trừ (EXCEPT) • Kết quả trả về là tập hợp – Loại bỏ các bộ trùng nhau – Để giữ lại các bộ trùng nhau • UNION ALL Lý thuyết CSDL 72 Phép toán tập hợp trong SQL (tt) • Cú pháp SELECT FROM WHERE UNION [ALL] SELECT FROM WHERE SELECT FROM WHERE INTERSECT SELECT FROM WHERE SELECT FROM WHERE EXCEPT SELECT FROM WHERE Lý thuyết CSDL 73 Ví dụ 5 • Cho biết các mã đề án có – Nhân viên với họ là ‘Nguyen’ tham gia hoặc, – Trưởng phòng chủ trì đề án đó với họ là ‘Nguyen’ Lý thuyết CSDL 74 Ví dụ 6 • Tìm nhân viên có người thân cùng tên và cùng giới tính Lý thuyết CSDL 75 Ví dụ 7 • Tìm những nhân viên không có thân nhân nào Lý thuyết CSDL 76 Truy vấn lồng SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHONG SELECT FROM WHERE ( SELECT FROM WHERE ) Câu truy vấn ngoài (Outer query) Câu truy vấn trong (Subquery) Lý thuyết CSDL 77 Truy vấn lồng (tt) • Các câu lệnh SELECT có thể lồng nhau ở nhiều mức • Câu truy vấn con thường trả về một tập các giá trị • Các câu truy vấn trong trong cùng một mệnh đề WHERE được kết hợp bằng phép nối logic • Mệnh đề WHERE của câu truy vấn ngoài – – So sánh tập hợp thường đi cùng với một số toán tử • IN, NOT IN • ALL • ANY hoặc SOME – Kiểm tra sự tồn tại • EXISTS • NOT EXISTS Lý thuyết CSDL 78 Truy vấn lồng (tt) • Có 2 loại truy vấn lồng – Lồng phân cấp • Mệnh đề WHERE của truy vấn trong không tham chiếu đến thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn ngoài • Khi thực hiện, câu truy vấn trong sẽ được thực hiện trước – Lồng tương quan • Mệnh đề WHERE của truy vấn trong tham chiếu ít nhất một thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn ngoài • Khi thực hiện, câu truy vấn trong sẽ được thực hiện nhiều lần, mỗi lần tương ứng với một bộ của truy vấn ngoài Lý thuyết CSDL 79 Ví dụ - Lồng phân cấp SELECT MANV, TENNV FROM NHANVIEN WHERE PHONG IN ( SELECT MAPHONG FROM DIADIEM_PHG WHERE DIADIEM=‘TP HCM’ ) (1, 5) SELECT MANV, TENNV FROM NHANVIEN, DIADIEM_PHG WHERE DIADIEM=‘TP HCM’ AND PHONG=MAPHONG Lý thuyết CSDL 80 Ví dụ 4 • Tìm họ tên của những nhân viên được “Nguyen Thanh Tung” phụ trách trực tiếp Lý thuyết CSDL 81 Ví dụ 7 • Tìm những nhân viên không có thân nhân nào Lý thuyết CSDL 82 Ví dụ 8 • Tìm những nhân viên có lương lớn hơn lương của ít nhất một nhân viên phòng 4 Lý thuyết CSDL 83 Ví dụ 9 • Tìm những nhân viên có lương lớn hơn lương của tất cả nhân viên phòng 4 Lý thuyết CSDL 84 Ví dụ 10 • Tìm những trưởng phòng có tối thiểu một thân nhân Lý thuyết CSDL 85 Ví dụ - Lồng tương quan SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG SELECT MANV, TENNV FROM NHANVIEN WHERE EXISTS ( SELECT * FROM PHONGBAN WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG ) Lý thuyết CSDL 86 Ví dụ 6 • Tìm nhân viên có người thân cùng tên và cùng giới tính Lý thuyết CSDL 87 Ví dụ 7 • Tìm những nhân viên không có thân nhân nào Lý thuyết CSDL 88 Ví dụ 8 • Tìm những nhân viên có lương lớn hơn lương của ít nhất một nhân viên phòng 4 Lý thuyết CSDL 89 Ví dụ 10 • Tìm những trưởng phòng có tối thiểu một thân nhân Lý thuyết CSDL 90 Nhận xét IN và EXISTS • IN – IN – Thuộc tính ở mệnh đề SELECT của truy vấn trong phải có cùng kiểu dữ liệu với thuộc tính ở
Tài liệu liên quan