Mệnh đề WHERE tt Độ ưu tiên – Viết trước thực hiện trước– Trong ngoặc thực hiện trước SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHG=‘ Nghien cuu ’ OR TENPHG=‘ Quan ly ’ AND P
Trang 1CƠ SỞ DỮ LIỆU
( Databases )
Chương 3: Ngôn ngữ truy vấn SQL
Trang 26 Các lệnh liên quan tới cấu trúc
7 Các lệnh giao quyền truy cập CSDL
8 Bài tập
Trang 3 1970: SQL (Structured Query Language) bắt nguồn từ
nhằm khi đưa ra hệ quản trị CSDL có tên là SYSTEM-R
Trang 43.1 Giới thiệu SQL (tt)
Năm 1976: SEQUEL được cải tiến thành SEQUEL2
Năm 1978-1979: SEQUEL2 được nâng cấp và đổi tên thành SQL (nhưng vẫn đọc là SEQUEL)
Chuẩn SQL đầu tiên có tên gọi SQL-86 ( SQL1 ) được công nhận và chuẩn hóa bởi ANSI và ISO.
Năm 1992: SQL1 được mở rộng với nhiều tính năng mới và được gọi là SQL-92 ( SQL2 ).
Năm 1999: Chuẩn SQL-99 ( SQL3 ) ra đời
Phiên bản mới nhất hiện nay là SQL-2011
Trang 53.1 Giới thiệu SQL (tt)
Ngôn ngữ giao thiết CSLD gồm:
– DDL – Data Definition Language– DML – Data Manipulation Language– SQL – Structured Query Language– DCL – Data Control Language
SQL gồm 2 nhóm lệnh
– DDL: Tạo cấu trúc CSDL– DML: Thao tác trên CDSDL
• CREATE
• SELECT
• INSERT, UPDATE, DELETE…
Trang 6Lược đồ CSDL sử dụng
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)
Trang 73.2 lệnh SELECT – Truy vấn dữ liệu
• Nối các biểu thức: AND, OR, NOT
• Phép toán: >, <, <=, >=, =, <>, LIKE, BETWEEN
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
Trang 10Mệnh đề SELECT
Trang 11Mệnh đề SELECT (tt)
Tên, Bí danh
SELECT MANV, HONV AS 'Họ ', TENLOT AS ‘Tên lót’ , TENNV AS 'Tên '
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘ Nam ’
MANV,HO,TEN LOT,TEN (MaNV,HONV,TENLOT,TENNVPHG=5 PHAI=‘Nam’ ( NHANVIEN )))
Trang 14Mệnh đề SELECT (tt)
Loại bỏ các dòng trùng nhau
SELECT LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘ Nam ’
SELECT DISTINCT LUONG FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘ Nam ’
Trang 15Ví dụ
Cho biết MANV và TENNV làm việc ở phòng ‘Nghien cuu’
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG AND TENPGH=‘ Nghien cuu ’
Trang 16Mệnh đề WHERE
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG AND TENPHG=‘ Nghien cuu ’
Biểu thức luận lý
Trang 17Mệnh đề WHERE (tt)
Độ ưu tiên
– Viết trước thực hiện trước– Trong ngoặc thực hiện trước
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE ( TENPHG=‘ Nghien cuu ’ OR TENPHG=‘ Quan ly ’) AND PHG=MAPHG
Trang 18WHERE LUONG>=2000000 AND LUONG<=3000000
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG BETWEEN 2000000 AND 3000000
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG NOT BETWEEN 2000000 AND 3000000
Trang 20Mệnh đề WHERE (tt)
LIKE
– Lấy tất cả chuỗi giống với mẫu
NOT LIKE
– Lấy tất cả những chuỗi không giống
SELECT MANV, TENNV
FROM NHANVIEN
WHERE HONV LIKE ‘ Nguyen_ _ _ _’
SELECT MANV, TENNV
FROM NHANVIEN
WHERE HONV LIKE ‘Nguyen %’
1 Ký tự bất kỳ
Nhiều ký tự bất kỳ
Trang 21Mệ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 un witheld)
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
Trang 22Mệnh đề WHERE (tt)
Không sử dụng WHERE
– Kết quả là phép tích “đề-các”
Trang 23Mệnh đề FROM
Tên, Bí danh
SELECT TENPHG, DIADIEM
FROM PHONGBAN, DDIEM_PHG
WHERE MAPHG=MAPHG
SELECT TENPHG, DIADIEM FROM PHONGBAN, DDIEM_PHG WHERE PhongBan.MAPHG=DDiem_PHG.MAPHG
Bí danh
Trang 24Mệnh đề ORDER BY
Dùng để hiển thị kết quả truy vấn theo thứ tự
Cú pháp:
– ASC: Sắp xếp tăng (mặc định)– DESC: Sắp xếp giảm
SELECT <danh sách cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
ORDER BY <danh sách cột sắp xếp>
Trang 26SELECT <danh sách cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
GROUP BY <danh sách cột gom nhóm>
Trang 27Mệnh đề GROUP BY (tt)
Ví dụ: Cho biết số lượng nhân viên ở mỗi phòng ban
SELECT PHG, COUNT(*) AS ‘So NV’
FROM NHANVIEN
GROUP BY PHG
Hoặc
SELECT T ENPHG, COUNT(*) AS ‘So NV’
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG
GROUP BY TENPHG
Trang 28Mệnh đề GROUP BY (tt)
Ví dụ: Hãy cho biết mã nhân viên, số lượng đề án và tổng thời gian mà họ tham gia
SELECT MaNV, COUNT(*) AS ‘ So DA’,
SUM (THOIGIAN) AS ‘Tong TG’
FROM PHANCONG
GROUP BY MaNV
SELECT NV.MaNV, TENV,
COUNT(*) AS ‘So DA’, SUM (THOIGIAN) AS ‘Tong TG’
FROM PHANCONG PC, NHANVIEN NV
WHERE PC.MaNV = NV.MaNV
GROUP BY PC MaNV, TenNV
Trang 30WHERE <điều kiện>
GROUP BY <danh sách cột gom nhóm>
HAVING <điều kiện chọn nhóm>
SELECT MaNV, COUNT(*) AS ‘ So DA’, FROM PHANCONG
GROUP BY MaNV HAVING COUNT (*) > 2
Trang 31SELECT NV.PHG, PB.TenPB, Avg(NV.Luong) AS "TB Luong"
FROM NhanVien AS NV , PhongBan AS PB
WHERE NV.Phg = PB.MaPB
GROUP BY NV.PHG, PB.TenPB
Trang 323.3 Các hàm thao tác dữ liệu (tt)
Các hàm tính toán trên bản ghi
– ABS: tính trị tuyệt đối
– POWER(x, y): trả về xy– SQRT: Tính căn bậc 2
– LOG: Tính Log tự nhiên
– EXP: Tính ex– SIGN (x): Kiểm tra dấu của x (trả về -1 | 0 | 1)
– ROUND (x, n): làm tròn x tới n số lẻ (Access là RND)– Các hàm lượng giác: SIN, COS, TAN, ASIN, ACOS,…
Trang 333.3 Các hàm thao tác dữ liệu (tt)
Các hàm xử lý chuỗi
– LEN (str) : Cho chiều dài chuỗi ký tự
– LEFT (str, n): Lấy n ký tự phía trái của chuỗi str
– RIGHT (str, n): Lấy n ký tự phía phải của chuỗi str
– MID (str, p, n): Lấy n ký tự của chuỗi str kể từ vị trí p trong dãy
Trang 343.3 Các hàm thao tác dữ liệu (tt)
Các hàm xử lý thời gian
– DATE(): Cho ngày tháng năm hiện tại
– DAY (dd): Cho số thứ tự ngày trong tháng của biểu thức ngày dd
– MONTH (dd) Cho số thứ tự tháng trong năm của biểu thức ngày dd
– YEAR (dd) Cho năm của biểu thức ngày dd
– HOUR (tt) Cho giờ trong ngày (0- 23)
– MINUTE (tt) Cho số phút của thời gian tt
– SECONDS (tt) Cho số giây của biểu thức giờ tt
Trang 36WHERE <điều kiện kết nối>
SELECT HoNV, Tenlot, TenNV, TenPB FROM Nhanvien, PhongBan
SELECT <danh sách cột>
FROM <bảng 1> INNER JOIN <bảng 2> ON <điều kiện kết nối>
WHERE <điều kiện chọn dòng>
Trang 373.4 Truy vấn từ nhiều bảng (tt)
Ví dụ: Tìm mã và họ tên các nhân viên làm việc ở
phòng ‘Kinh doanh’
SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’, TenPB
FROM Nhanvien INNER JOIN PhongBan ON PHG = MaPB
WHERE TenPB LIKE ‘%Kinh doanh’
Hoặc:
SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’, TenPB
FROM Nhanvien, PhongBan WHERE PHG = MaPB AND TenPB LIKE ‘%Kinh doanh’
Trang 43Truy vấn lồng nhau (tt)
Các phép toán tập hợp
– IN – NOT IN– ALL
– ANY / SOME– EXISTS
– NOT EXISTS
Trang 44• Mệnh đề WHERE của Subquery tham chiếu đến ít nhất
1 thuộc tính của bảng trong mệnh đề FROM của truy vấn cha
• Khi thực hiện, câu truy vấn con được thực nhiều lần – mỗi lần ứng với 1 bộ của câu truy vấn cha
Trang 45Ví dụ - Truy vấn lồng phân cấp
Đưa ra mã nhân viên, họ tên nhân viên thuộc phòng
‘Tài chính’ hoặc phòng ‘Kế hoạch’
SELECT MaNV, HoNV, TenLot, TenNV
Trang 46FROM PHANCONG PC, NHANVIEN NV
WHERE PC.MaNV = NV.MaNV AND
NV.HoNV LIKE ‘%Nguyễn%’
)
Trang 49Ví dụ - Truy vấn lồng phân cấp (tt)
Tìm những trưởng phòng có tối thiểu 1 thân nhân
Tìm những Nhân viên có lương cao hơn lương của mọi nhân viên phòng 4
SELECT *
FROM NHANVIEN
WHERE MANV IN (SELECT MaNV FROM THANNHAN) AND
MANV IN (SELECT TRPHG FROM PHONGBAN)
Trang 50Truy vấn lồng tương quan
– Mệnh đề WHERE của Subquery tham chiếu đến ít nhất 1 thuộc tính của bảng trong mệnh đề FROM của
WHERE EXISTS ( SELECT * FROM THANNHAN TN
WHERE TN.MaNV = NV.MaNV) AND
EXISTS (SELECT TrgPHG FROM PHONGBAN
Trang 51Ví dụ - Truy vấn lồng lương quan (tt)
Tìm những nhân viên không có thân nhân nào
Trang 52Ví dụ - Truy vấn lồng lương quan (tt)
Tìm những nhân viên có lương cao hơn lương trung bình của phòng
Trang 53Ví dụ - Truy vấn lồng lương quan (tt)
Tìm những nhân viên có lương bằng lương cao hơn lương của ít nhất 1 nhân viên thuộc phòng ‘Tài chính’
SELECT *
FROM NHANVIEN NV1
WHERE EXISTS (
SELECT *
FROM NHANVIEN NV2, PHONGBAN PB
WHERE NV2.Phg = PB.MaPB AND
PB.TenPB LIKE ‘%Tài chính%’ AND
NV1.Luong > NV2.Luong
Trang 54Nhận xét IN và EXISTS
IN
– <tên cột> IN <câu truy vấn con>
– Thuộc tính ở mệnh đề SELECT câu truy vấn con phải
có cùng kiểu dữ liệu với thuộc tính ở mệnh đề WHERE trong câu truy vấn cha
Trang 56Phép toán tập hợp trong SQL (tt)
Ví dụ: Tìm các mã đề án có nhân viên họ ‘Nguyễn’
tham gia hoặc trưởng phòng chủ trì đề án có họ
‘Nguyễn’
SELECT MaDA
FROM PHANCONG PC, NHANVIEN NV
WHERE (PC.MaNV = NV.MaNV) AND (HoNV = ‘Nguyễn’)
UNION (
SELECT MaDA
FROM NHANVIEN NV, PHONGBAN PB, DEAN DA
WHERE (NV.MaNV=PB.TrgPhg) AND (DA.Phong= PB.MaPB)
AND (NV.HoNV = ‘Nguyễn’)
Trang 583.5.1 Thêm dòng vào bảng
Cú pháp
Ví dụ:
INSERT INTO <tên bảng> ( <danh sách các thuộc tính>)
VALUES (<danh sách các giá trị>)
Trang 603.5.1 Thêm dòng vào bảng (tt)
Thêm nhiều dòng
Ví dụ:
INSERT INTO <tên bảng> ( <danh sách các thuộc tính>)
<câu truy vấn con>
Trang 613.5.2 Sửa dòng trong bảng
Cú pháp
Ví dụ: Tăng lương 30% cho những người là ‘nữ’
UPDATE <tên bảng>
SET <tên thuộc tính> = <giá trị mới>,
<tên thuộc tính> = <giá trị mới>,
Trang 62• Không cho chỉnh sửa
• Sửa luôn dòng có giá trị tham chiếu đến (CASCADE)
Trang 633.5.3 Xóa dòng trong bảng
Cú pháp
Ví dụ:
DELETE FROM <tên bảng>
WHERE <điều kiện>
Trang 643.5.3 Xóa dòng trong bảng (tt)
Ví dụ: Xóa đi những nhân viên làm ở phòng ‘Dự án’
DELETE FROM NHANVIEN
WHERE PHG IN (
SELECT MaPB
FROM PHONGBAN
WHERE TenPB = ‘Phòng Dự án’ )
Trang 653.5.3 Xóa dòng trong bảng (tt)
Nhận xét
– Số dòng bị xóa phụ thuộc vào điều kiện sau WHERE
– Nếu không chỉ rõ điều kiện sau WHERE tất cả các dòng trong bảng sẽ bị xóa
– Lệnh DELETE FROM có thể gây ra vi phạm RBTV
• 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
Trang 663.5.3 Xóa dòng trong bảng (tt)
Trang 673.5.4 Tạo bảng từ CSDL
Cú pháp:
SELECT <danh sách cột/biểu thức>
FROM <tên bảng nguồn>
Trang 683.5.4 Tạo bảng từ CSDL (tt)
Ví dụ
FROM NHANVIEN NV, PHONGBAN PB
Trang 693.6 Các lệnh liên quan cấu trúc CSDL
Các kiểu dữ liệu trong SQL
Char (w) Kiểu ký tự độ rộng cố định (w)
Varchar(w) Kiểu ký tự có độ rộng thay đổi 0 w
Integer Kiểu số nguyên
Byte Kiểu số nguyên nhỏ (0 255)
Numberic (w,s) Số thực rộng w vị trí (cả dấu chấm) có s chữ số thập
phân Real, Double Số thực dấu phẩy động
Float (n) Số thực dấu phẩy động có ít nhất n chữ số
Time Kiểu thời gian (giờ/phút/giây)
Trang 703.6.1 Lệnh tạo bảng CREATE TABLE
Để định nghĩa 1 bảng cần chỉ ra:
– Tên bảng– Các thuộc tính
• Tên thuộc tính
• Kiểu dữ liệu
• RBTV trên thuộc tính
Cú pháp
Trang 713.6.1 CREATE TABLE (tt)
Ví dụ:
Trang 723.6.1 CREATE TABLE (tt)
RBTV
– NOT NULL– NULL
– UNIQUE– DEFAUL– PRIMARY KEY– FOREIGN KEY / REFERENCES– CHECK
Đặt tên cho RBTV
Trang 733.6.1 CREATE TABLE (tt)
Ví dụ RBTV
Trang 743.6.1 CREATE TABLE (tt)
Ví dụ:
Trang 753.6.1 CREATE TABLE (tt)
Ví dụ - đặt tên cho RBTV
Trang 763.6.1 CREATE TABLE (tt)
Ví dụ - đặt tên cho RBTV
Trang 783.6.2 Lệnh sửa bảng (tt)
Thay đổi RBTV
– Thêm RBTV
– Xóa RBTV
Trang 793.6.2 Lệnh sửa bảng (tt)
Ví dụ - thay đổi cấu trúc
Trang 803.6.2 Lệnh sửa bảng (tt)
Ví dụ - thay đổi RBTV
Trang 813.6.3 Xóa bảng
Cú pháp:
Ví dụ:
Trang 823.6.3 Xóa bảng (tt)
Trang 833.7 Lệnh giao quyền truy cập CSDL
(Đọc tài liệu)
Trang 853.8 Bài tập
(Tài liệu, trang 59 – 62)