1. Trang chủ
  2. » Giáo án - Bài giảng

cơ sở dữ liệu phạm thị bạch huệ chương 5 sql sinhvienzone com

29 52 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 311,65 KB

Nội dung

CƠ S ỞD Ữ LI ỆU SỞ DỮ LIỆU Chương Ngôn ng ữ SQL ngữ GV: Phạm Thị Bạch Huệ Email: ptbhue@fit.hcmus.edu.vn Nội dung môn học − Chương Tổng quan CSDL − Chương Mơ hình ER − Chương Mơ hình quan hệ − Chương Phép tốn quan hệ − Chương Ngơn ngữ SQL − Chương Phép tính quan hệ − Chương Ràng buộc toàn vẹn − Chương Phụ thuộc hàm dạng chuẩn SinhVienZone.com https://fb.com/sinhvienzonevn Mục tiêu chương − Biết cách định nghĩa CSDL − Biết thao tác (tìm kiếm, thêm, xóa, sửa) sở liệu Lược đồ CSDL NHANVIEN(MANV,HONV,TENLOT,TENNV,PHAI,LUONG, DIACHI, NGAYSINH, MA_NQL, PHG) PHONGBAN (MAPB,TENPB,TRPHG,NGAYBĐ) DIADIEM_PHG(MAPB, DIADIEM) DEAN(MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA) PHANCONG (MANV, MADA, THOIGIAN) THANNHAN(MANV,TENTN,PHAI,NGAYSINH,QUANHE) SinhVienZone.com https://fb.com/sinhvienzonevn Giới thiệu SQL − SQL: Structured Query Language − SQL ngôn ngữ chuẩn nhiều HQT CSDL, gồm câu lệnh định nghĩa liệu, truy vấn cập nhật liệu − SQL sơ khai gọi SEQUEL (Structured English Query Language), IBM phát triển hệ thống System R, 1974-1976 − Gồm phiên bản: ƒ Chuẩn SQL-86 (SQL1) ANSI (American National Standards Institute) ISO (International Standards Organization) ƒ Chuẩn SQL-92 (SQL2) ƒ Chuẩn SQL-99 (SQL3) Phân loại − SQL gồm nhóm câu lệnh: ƒ DDL: Data Definition Language: tạo cấu trúc CSDL ƒ DML Data Manipulation Language: thao tác liệu • • • • • CREATE SELECT INSERT UPDATE DELETE SinhVienZone.com https://fb.com/sinhvienzonevn DDL − SQL dùng: ƒ Bảng ≡ Quan hệ ƒ Dòng ≡ Bộ ƒ Cột ≡ Thuộc tính − DDL dùng lệnh CREATE để: ƒ ƒ ƒ ƒ Tạo lược đồ (scheme) Tạo bảng (table) Tạo khung nhìn (view) Tạo ràng buộc tồn vẹn (assertion, trigger) DDL - Kiểu liệu − Kiểu số: ƒ Số nguyên: int, smallint ƒ Số thực: float, real, decimal, numeric − Chuỗi ký tự: ƒ Char(n), varchar(n), text − Chuỗi bit: ƒ Binary, varbinary, image − Boolean: ƒ Bit − Ngày giờ: ƒ Datetime SinhVienZone.com https://fb.com/sinhvienzonevn CREATE TABLE CREATE TABLE ( [], [], … [] ) − Ví dụ: CREATE TABLE PHONGBAN( MAPB TENPB TRPHG NGAYBĐ CHAR(5), VARCHAR(30), CHAR(5), DATETIME) Các ràng buộc − Một số ràng buộc: ƒ ƒ ƒ ƒ ƒ ƒ ƒ NOT NULL: định cột NULL NULL Khóa Khóa ngoại UNIQUE: định cột không nhận giá trị trùng DEFAULT: gán giá trị mặc định CHECK: kiểm tra điều kiện − Đặt tên ràng buộc: CONSTRAINT SinhVienZone.com https://fb.com/sinhvienzonevn Ví dụ − Ví dụ:CREATE TABLE NHANVIEN ( MANV CHAR(5) PRIMARY KEY, HONV VARCHAR(30) NOT NULL, TENLOT VARCHAR (30) NOT NULL, TENNV VARCHAR(30) NOT NULL, PHAI CHAR(10) CHECK PHAI IN (‘Nam’, ‘Nu’), LUONG INT DEFAULT (2000000), DIACHI VARCHAR (100), NGAYSINH DATETIME, MA_NQL CHAR(5), PHG CHAR(5) FOREIGN KEY (MA_NQL) REFERENCES NHANVIEN (MANV), FOREIGN KEY (PHG) REFERENCES PHONGBAN(MAPB)) ) − CREATE TABLE PHONGBAN( MAPB CHAR(5) CONSTRAINT PK_PB PRIMARY KEY, TENPB VARCHAR(30), TRPHG CHAR(5), NGAYBĐ DATETIME CONSTRAINT FK_PB FOREIGN KEY (TRPHG) REFERENCES NHANVIEN (MANV) ) ALTER TABLE − Thay đổi cấu trúc ràng buộc bảng − Gồm có: thêm/xóa/đổi kiểu liệu cột, thêm/xóa ràng buộc − Lệnh thêm cột: ALTER TABLE ADD [] Ví dụ: ALTER TABLE NHANVIEN ADD PHUCAP INT SinhVienZone.com https://fb.com/sinhvienzonevn − Xóa cột: ALTER TABLE DROP COLUMN Ví dụ: ALTER TABLE NHANVIEN DROP COLUMN PHUCAP − Thay đổi kiểu liệu ALTER TABLE ALTER COLUMN Ví dụ: ALTER TABLE NHANVIEN ALTER COLUMN PHUCAP FLOAT − Thêm ràng buộc ALTER TABLE ADD CONSTRAINT , CONSTRAINT , … − Giả sử bảng NHANVIEN chưa khai báo khóa ngoại PHG: ALTER TABLE NHANVIEN ADD CONSTRAINT FK_NV_PB FOREIGN KEY (PHG) REFERENCES PHONGBAN(MAPB) SinhVienZone.com https://fb.com/sinhvienzonevn − Xóa ràng buộc: ALTER TABLE DROP − Xóa ràng buộc FK_NV ALTER TABLE NHANVIEN DROP CONSTRAINT FK_NV_PB − DROP TABLE − Ví dụ: DROP TABLE NHANVIEN SinhVienZone.com https://fb.com/sinhvienzonevn Câu lệnh SQL tổng quát Dữ liệu cần truy vấn SELECT [DISTINCT| ALL] {*|[biểu_thức_trên cột [AS tên_mới]] [,…]} Các bảng dùng để lấy FROM tên_bảng [alias] [,…] liệu Điều kiện lọc [WHERE điều_kiện_1] dòng liệu cần quan tâm [GROUP BY ds_thuộc tính_1] DL gom [HAVING điều_kiện_2] nhóm theo giá trị cột [ORDER BY ds_thuộc_tính_2] Điều kiện lọc nhóm liệu cần quan tâm Dữ liệu xuất xếp theo thuộc tính Lưu ý − Tối thiểu có SELECT-FROM, mệnh đề lại cần dùng hay không phụ thuộc vào nhu cầu truy vấn liệu − Thứ tự mệnh đề câu truy vấn tổng quát thay đổi − Không phụ thuộc chữ in hay thường − SQL ngôn ngữ phi thủ tục, ta cần thể hiện: ƒ cần liệu gì, ƒ đâu ƒ thỏa điều kiện SinhVienZone.com https://fb.com/sinhvienzonevn Tìm tất dòng, tất cột − Ví dụ: Cho danh sách tất phòng ban SELECT MAPB, TENPB, TRPHG, NGAYBĐ FROM PHONGBAN − Dấu ‘*’ đại diện cho tất cột bảng Ví dụ viết: SELECT * FROM PHONGBAN Tìm tất dòng, vài cột − Tương ứng với phép chiếu (Π) ĐSQH − Ví dụ: Cho danh sách gồm mã phòng ban, tên nhân viên lương SELECT PHG, HONV, TENLOT, TENNV, LUONG FROM NHANVIEN 10 SinhVienZone.com https://fb.com/sinhvienzonevn − Ví dụ: Cho danh sách nhân viên Tp HCM SELECT MANV, HONV, TENLOT, TENNV, DIACHI FROM NHANVIEN WHERE DIACHI LIKE ‘%Tp HCM%’ Điều kiện liên quan giá trị Null − Ví dụ: Cho danh sách nhân viên chưa bố trí phòng SELECT * FROM NHANVIEN WHERE PHG IS NULL 15 SinhVienZone.com https://fb.com/sinhvienzonevn Sắp xếp dựa cột − Từ khóa theo sau thuộc tính dùng để xếp: ASC (sắp tăng, mặc định), DESC (sắp giảm) Ví dụ: Cho danh sách nhân viên theo mã phòng SELECT * FROM NHANVIEN ORDER BY PHG Sắp xếp dựa nhiều cột Ví dụ: Cho danh sách nhân viên tăng dần theo mã phòng, phòng theo thứ tự lương giảm dần SELECT * FROM NHANVIEN ORDER BY PHG, LUONG DESC 16 SinhVienZone.com https://fb.com/sinhvienzonevn Hàm tính tốn − Count:đếm số giá trị khác null trường đối số − Sum: tính tổng giá trị trường đối số − Avg: tính giá trị trung bình trường đối số − Min: trả giá trị nhỏ trường đối số − Max: trả giá trị lớn trường đối số − Đặc điểm: ƒ Nhận đối số trường trả giá trị ƒ Count, min, max áp dụng cho trường kiểu số lẫn kiểu số ƒ Sum, avg áp dụng trường kiểu số Hàm tính tốn − Các hàm tính tốn thao tác giá trị khác null, trừ count (*) − Count(*) đếm số dòng bảng, dù dòng có giá trị null hay giá trị trùng − DISTINCT dùng để loại bỏ trùng lặp trước vận dụng hàm, DISTINCT khơng có tác dụng min, max 17 SinhVienZone.com https://fb.com/sinhvienzonevn Hàm tính tốn − Nếu câu SELECT có dùng hàm tính tốn khơng có mệnh đề GROUP BY khơng liệt kê mệnh đề SELECT thuộc tính khơng phải đối số hàm tính tốn dùng − Ví dụ: Câu sau SAI: SELECT PHG, COUNT(LUONG) FROM NHANVIEN Count() − Ví dụ: Cho biết có tất nhân viên SELECT COUNT (*) FROM NHANVIEN − Ví dụ: Cho biết có nhân viên có lương lớn 3000000 SELECT COUNT(*) FROM NHANVIEN WHERE LUONG > 3000000 18 SinhVienZone.com https://fb.com/sinhvienzonevn Count DISTINCT − Có đề án phân công Câu SAI: SELECT COUNT (MADA) FROM PHANCONG Câu đúng: SELECT COUNT(DISTINCT MADA) FROM PHANCONG − Có nhân viên thuộc phòng số tổng lương họ SELECT COUNT (*), SUM(LUONG) FROM NHANVIEN WHERE PHG = − Ví dụ: Tìm lương thấp nhất, cao lương trung bình nhân viên SELECT MIN (LUONG) AS THAPNHAT, MAX (LUONG) AS CAONHAT, AVG(LUONG) AS TRUNGBINH FROM NHANVIEN 19 SinhVienZone.com https://fb.com/sinhvienzonevn Group by − GROUP BY dùng để tạo nhóm liệu trước vận dụng hàm − Các thuộc tính sau mệnh đề GROUP BY gọi thuộc tính gom nhóm ƒ Hàm thực nhóm câu truy vấn có mệnh đề GROUP BY ƒ Mỗi thuộc tính liệt kê sau SELECT có giá trị nhóm ƒ Tất thuộc tính sau SELECT phải xuất mệnh đề GROUP BY (trừ thuộc tính mang giá trị hàm) ƒ Có thể có thuộc tính xuất mệnh đề GROUP BY không xuất sau SELECT ƒ Hai dòng mang giá trị null thuộc tính gom nhóm gom thành nhóm ƒ Thứ tự thực hiện: (1) điều kiện sau WHERE (2) GROUP BY (3) hàm tính tốn nhóm (4) điều kiền sau HAVING Group by − Ví dụ: Cho biết phòng ban có nhân viên tổng lương nhân viên phòng SELECT PHG, COUNT(*), SUM (LUONG)AS TONG FROM NHANVIEN GROUP BY PHG − Ví dụ: Cho biết lương trung bình nhân viên nam nhân viên nữ phòng số SELECT PHAI, AVG(LUONG)AS TRUNGBINH FROM NHANVIEN WHERE PHG = GROUP BY PHAI 20 SinhVienZone.com https://fb.com/sinhvienzonevn Having − Ví dụ: Cho danh sách phòng ban có lương trung bình nhân viên nam lớn 4000000 SELECT PHG, AVG (LUONG) FROM NHANVIEN WHERE PHAI = ‘Nam’ GROUP BY PHG HAVING AVG (LUONG) > 4000000 Câu truy vấn − Là câu truy vấn xuất câu truy vấn khác Kết câu truy vấn dùng cho mệnh đề SELECT khác − Một câu truy vấn dùng mệnh đề: WHERE, HAVING, INSERT, UPDATE, DELETE − Câu truy vấn trả về: ƒ Một giá trị, tức dòng cột ƒ Nhiều dòng cột ƒ Nhiều dòng nhiều cột 21 SinhVienZone.com https://fb.com/sinhvienzonevn Câu truy vấn − Ví dụ: Cho danh sách nhân viên thuộc phòng ban tên ‘Nghiên cứu’ SELECT MANV, HONV, TENLOT, TENNV FROM NHANVIEN WHERE PHG =(SELECT MAPB FROM PHONGBAN WHERE TENPB = ‘Nghien cuu’) Câu truy vấn − Có thể dùng câu truy vấn sau tốn tử so sánh mệnh đề WHERE HAVING − Ví dụ: Cho danh sách nhân viên có lương lớn lương trung bình tồn nhân viên SELECT MANV,HONV,TENLOT,TENNV FROM NHANVIEN WHERE LUONG > (SELECT AVG(LUONG) FROM NHANVIEN) 22 SinhVienZone.com https://fb.com/sinhvienzonevn Câu truy vấn - IN − Ví dụ: Cho biết danh sách nhân viên có tham gia đề án SELECT MANV, HONV, TENLOT, TENNV FROM NHANVIEN WHERE MANV IN (SELECT MANV FROM PHANCONG) ANY & ALL − Nếu câu truy vấn cho kết rỗng mệnh đề ALL có giá trị TRUE mệnh đề ANY có giá trị FALSE − Chuẩn ISO dùng SOME tương đương với ANY − Ví dụ: Cho biết nhân viên có lương lớn giá trị lương nhân viên thuộc phòng số SELECT MANV, HONV, TENLOT, TENNV FROM NHANVIEN WHERE LUONG > SOME (SELECT LUONG FROM NHANVIEN WHERE PHG = 5) 23 SinhVienZone.com https://fb.com/sinhvienzonevn − Ví dụ: Cho biết nhân viên có lương lớn tất giá trị lương nhân viên thuộc phòng số SELECT MANV, HONV, TENLOT, TENNV FROM NHANVIEN WHERE LUONG > ALL (SELECT LUONG FROM NHANVIEN WHERE PHG = 5) Truy vấn từ nhiều bảng − Ta truy xuất liệu từ nhiều bảng − Ví dụ: Cho danh sách nhân viên thuộc phòng ban tên ‘Nghiên cứu’ SELECT MANV, HONV, TENLOT, TENNV FROM NHANVIEN N, PHONGBAN P WHERE N.PHG = P.MAPB AND TENPB = ‘Nghien cuu’ 24 SinhVienZone.com https://fb.com/sinhvienzonevn Kết trái (Left join) −Ví dụ: Cho biết tên nhân viên mã đề án mà nhân viên có tham gia, khơng có tham gia đề án thơng tin đề án NULL SELECT MANV, TENNV, MADA FROM NHANVIEN NV LEFT JOIN PHANCONG PC ON NV.MANV = PC.MANV Tương tự có kết phải (Right join), kết (full outer join) Kết phép kết hội kết phép kết trái kết phải Exists, not exists − Được dùng câu truy vấn con, EXISTS trả TRUE kết câu truy vấn có dòng − Ví dụ: Cho danh sách nhân viên có tham gia đề án SELECT * FROM NHANVIEN NV WHERE EXISTS (SELECT * FROM PHANCONG WHERE MANV = NV.MANV) 25 SinhVienZone.com https://fb.com/sinhvienzonevn − Ví dụ: Cho danh sách nhân viên khơng có tham gia đề án SELECT * FROM NHANVIEN NV WHERE NOT EXISTS (SELECT * FROM PHANCONG WHERE MANV = NV.MANV) Hội − Ví dụ: Cho danh sách nhân viên có tham gia đề án tên ‘X’ ‘Y’ SELECT MANV, TENNV FROM NHANVIEN NV, PHANCONG PC, DEAN DA WHERE NV.MANV = PC.MANV AND PC.MADA = DA.MADA AND (TENDA = ‘X’ OR TENDA = ‘Y’) 26 SinhVienZone.com https://fb.com/sinhvienzonevn Giao − Ví dụ: Cho danh sách nhân viên vừa tham gia đề án tên ‘X’ vừa tham gia đề án tên ‘Y’ SELECT MANV, TENNV FROM NHANVIEN WHERE MANV IN (SELECT MANV FROM PHANCONG PC1, DEAN DA1 WHERE PC1.MADA = DA1.MADA AND TENDA = ‘X’) AND MANV IN (SELECT MANV FROM PHANCONG PC2, DEAN DA2 WHERE PC2.MADA = DA2.MADA AND TENDA = ‘Y’) Hiệu − Ví dụ: Cho danh sách nhân viên có tham gia đề án tên ‘X’ khơng có tham gia đề án tên ‘Y’ SELECT MANV, TENNV FROM NHANVIEN WHERE MANV IN (SELECT MANV FROM PHANCONG PC1, DEAN DA1 WHERE PC1.MADA = DA1.MADA AND TENDA = ‘X’) AND MANV NOT IN (SELECT MANV FROM PHANCONG PC2, DEAN DA2 WHERE PC2.MADA = DA2.MADA AND TENDA = ‘Y’) 27 SinhVienZone.com https://fb.com/sinhvienzonevn Insert − Ví dụ: Phân cơng nhân viên mã 001 làm đề án mã DAX thời gian 10 Insert into PHANCONG values (‘001’, ‘DAX’, 10) − Ví dụ: Phân cơng nhân viên mã 001 làm tất đề án phòng số chủ trì Insert into PHANCONG (SELECT 001, MADA, NULL FROM DEAN WHERE PHONG = 5) Update − Ví dụ: Cập nhật lương trưởng phòng tăng 10% UPDATE NHANVIEN SET LUONG = LUONG*1.1 WHERE MANV IN (SELECT TRPHG FROM PHONGBAN) 28 SinhVienZone.com https://fb.com/sinhvienzonevn Delete − Ví dụ: Xóa phân cơng liên quan đến nhân viên mã ‘001’ DELETE PHANCONG WHERE MANV = ‘001’ 29 SinhVienZone.com https://fb.com/sinhvienzonevn ... THANNHAN(MANV,TENTN,PHAI,NGAYSINH,QUANHE) SinhVienZone. com https://fb .com/ sinhvienzonevn Giới thiệu SQL − SQL: Structured Query Language − SQL ngôn ngữ chuẩn nhiều HQT CSDL, gồm câu lệnh định nghĩa liệu, truy vấn cập nhật liệu − SQL. .. Bit − Ngày giờ: ƒ Datetime SinhVienZone. com https://fb .com/ sinhvienzonevn CREATE TABLE CREATE TABLE ( [], [], … []... phiên bản: ƒ Chuẩn SQL- 86 (SQL1 ) ANSI (American National Standards Institute) ISO (International Standards Organization) ƒ Chuẩn SQL- 92 (SQL2 ) ƒ Chuẩn SQL- 99 (SQL3 ) Phân loại − SQL gồm nhóm câu

Ngày đăng: 30/01/2020, 20:58