CSDL LÀ GÌ ? Gồm nhiều bảng và mỗi quan hệ giữa chúng Mỗi bảng chứa nhiều thực thể cùng loại Mỗi thực thể có nhiều thuộc tính Mỗi thuộc tính chịu nhiều ràng buộc Khóa chính có g
Trang 1CSDL LÀ GÌ ?TẠO, XÓA, SAO LƯU, PHỤC HỒI
TẠO, XÓA, SỬA BẢNG
CÁC RÀNG BUỘCTHAO TÁC DỮ LIỆUTRUY VẤN DỮ LIỆU
TOÁN TỬ LỌCHÀM THƯỜNG DÙNG
Trang 2THỰC THỂ LÀ GÌ ?
Thực thể: các vật thể, hình thức có thực liên quan đến bài toán hiện tại.
Sinh viên, giáo viên, nhân viên…
Lớp học, phòng ban, nhà xưởng, kho chứa, thư viện…
Điện thoại, máy tính, quần áo, bánh kẹo…
DV sửa chữa, DV biểu diễn…
Đơn đặt hàng, phiếu bán hàng, phiếu chuyển hàng…
Thuộc tính: được sử dụng để mô tả thực thể
Sinh viên: họ tên, giới tính, điểm, chuyên ngành…
Sản phẩm: tên, giá, ngày sản xuất,
Trang 3Học phí
Điểm
Trang 5QUAN HỆ GIỮA CÁC THỰC THỂ
Sinh viên & Lớp học
Nhân viên & Phòng ban
Sinh viên $ Môn học
Sinh viên & Giáo viên
Tài xế & Xê
Khách hàng & Chính sách giảm giá
Trang 6Anh ngữ
Trang 7CSDL LÀ GÌ ?
Gồm nhiều bảng và mỗi quan hệ giữa chúng
Mỗi bảng chứa nhiều thực thể cùng loại
Mỗi thực thể có nhiều thuộc tính
Mỗi thuộc tính chịu nhiều ràng buộc
Khóa chính (có giá trị duy nhất)
Khóa ngoại (có giá trị của cột khóa ở bảng khác)
Null (cho phép để trống)
Miền giá trị (giá trị phải thuộc vào)
Mỗi bảng có thể có quan hệ với nhiều bảng khác
Có thể có nhiều cột tham gia vào khóa chính
Trang 8CSDL LÀ GÌ ?
Trang 9TẠO, XÓA, SAO LƯU, PHỤC HỒI CSDL
Trang 11TẠO BẢNG
CREATE TABLE SinhVien
(
MaSV VARCHAR (20) NOT NULL ,
HoTen VARCHAR (50) NOT NULL ,
GioiTinh INT (1) DEFAULT 1 ,
CONSTRAINT SV_PK PRIMARY KEY ( MaSV ) );
Trang 13RÀNG BUỘC
PRIMARY KEY : Khóa chính
CONSTRAINT <tên> PRIMARY KEY (<cột>)
FOREIGN KEY : Khóa ngoại
CONSTRAINT <tên> FOREIGN KEY (<cột>)
REFERENCES <bảng> (<cột>) [ON DELETE CASCADE] [ON UPDATE CASCADE]
CHECK: Kiểm tra
CONSTRAINT <tên> CHECK (<điều kiện>)
NOT NULL : Không cho để trống
DEFAULT : Mặc định
UNIQUE: Duy nhất
Trang 14XÓA BẢNG
DROP TABLE
Trang 15SỬA ĐỔI CẤU TRÚC
Thêm cột DiaChi vào bảng SinhVien
ALTER TABLE SinhVien
ADD COLUMN DiaChi VARCHAR(50)
Xóa cột HoTen khỏi bảng SinhVien
ALTER TABLE SinhVien
DROP COLUMN HoTen
Thay đổi thuộc tính cột HoTen trong bảng SinhVien
ALTER TABLE SinhVien
ALTER COLUMN HoTen VARCHAR(30)
Trang 16SỬA ĐỔI CẤU TRÚC
Thêm ràng buộc khóa ngoại cho cột MaLH bảng SinhVien chỉ đến cột MaLH bảng LopHoc
ALTER TABLE SinhVien
ADD CONSTRAINT SV_FK FOREIGN KEY (MaLH)
REFERENCES LopHoc (MaLH)
ON DELETE CASCADE
ON UPDATE CASCADE
Xóa ràng buộc có tên SV_FK
ALTER TABLE SinhVien
DROP CONSTRAINT SV_FK
Định nghĩa ràng buộc kiểm tra cho bảng SinhVien
ALTER TABLE SinhVien
ADD CONSTRAINT SV_CK CHECK (DiemTB < 10)
Trang 17THAO TÁC DỮ LIỆU
INSERT INTO: Chèn dữ liệu
INSERT INTO SanPham(MaSP, TenSP, DonGia, NgaySX)
VALUES (1, '8610', 100, '2000-12-31');
UPDATE: Cập nhật dữ liệu
UPDATE SanPham SET DonGia=123, NgaySX='2009-12-31'
WHERE MaSP > 100;
DELETE: Xóa dữ liệu
DELETE FROM SanPham WHERE MaSP=123;
Trang 18TRUY VẤN DỮ LIỆU
Liệt kê các cột C1, C2, C3
SELECT C1, C2, C3 FROM T
Đặt bí danh cho cột C2 là NAME
SELECT C1, C2 AS ‘ NAME ’, C3 FROM T
Sử dụng DISTINCT để loại bỏ các hàng trùng dữ liệu
SELECT DISTINCT C1, C2, C3 FROM T
Sử dụng LIMIT để hạn chế số lượng bản ghi
SELECT C1, C2, C3 FROM T LIMIT 3, 20
Sử dụng dấu sao ( * ) để liệt kê tất cả các cột
SELECT * FROM T
Sắp xếp
SELECT * FROM T ORDER BY C2 DESC
SELECT * FROM T ORDER BY C2 ASC
Trang 19LỌC DỮ LIỆU
Sử dụng WHERE và điều kiện để chỉ ra các bản ghi cần thực hiện cho các câu lệnh UPDATE, DELETE và SELECT
SELECT * FROM T WHERE <điều kiện>
DELETE FROM T WHERE <điều kiện>
UPDATE T SET C2=3, C3=’2010-12-31’ WHERE <điều kiện>
Sau đây là một số ví dụ về biểu thức lọc WHERE
Các bản ghi có giá trị của C1 là ‘ABC’
Trang 20 AND, OR, NOT
…WHERE NOT (C2>=10 AND C2<=20)
Trang 21TOÁN TỬ ĐẶC BIỆT (1)
LIKE và ký tự dại diện %, _ và [xyz]
Các ví dụ
Cột C1 có chứa chuỗi ‘ABC’ ?
…WHERE C1 LIKE ‘%ABC%’
Cột C1 có kết thúc bởi chuỗi ‘ABC’ ?
…WHERE C1 LIKE ‘%ABC’
Cột C1 có chứa một trong các ký tự ‘A’, ‘B’ hay ‘C’ ?
…WHERE C1 LIKE ‘%[ABC]%’
Cột C1 có chứa chuỗi ‘AB x C’, với x là ký tự bất kỳ ?
…WHERE C1 LIKE ‘%AB_C%’
Trang 22TOÁN TỬ ĐẶC BIỆT (2)
Kiểm tra phạm vi số hoặc ngày
…WHERE C3 BETWEEN ‘2000-12-31’ AND ‘2010-12-31’
Kiểm tra tập hợp bất kỳ (số, ngày, chuỗi,…)
Kiểm tra giá trị không null
…WHERE C1 IS NOT NULL
Trang 23HÀM THƯỜNG DÙNG
TỔNG HỢP NGÀY THÁNG XỬ LÝ CHUỖI KHÁC
Trang 24HÀM TỔNG HỢP
SUM(biểu thức) dùng để tính tổng
SELECT SUM(C2) AS ‘Tong’ FROM T
MIN(biểu thức) dùng để lấy giá trị nhỏ nhất
SELECT MIN(C2) AS ‘NhoNhat’ FROM T
MAX(biểu thức) dùng để lấy giá trị lớn nhất
SELECT MAX(C2) AS ‘LonNhat’ FROM T
AVG(biểu thức) dùng để tính giá trị trung bình
SELECT AVG(C2) AS ‘TrungBinh’ FROM T
COUNT(cột hoặc *) dùng để đếm số bản ghi
SELECT COUNT(*) AS ‘SoLuong’ FROM T
Trang 25HÀM XỬ LÝ CHUỖI
UPPER(chuỗi) đổi sang chữ hoa
SELECT UPPER(C1) FROM T
LOWER(chuỗi) đổi sang chữ thường
SELECT C3 FROM T WHERE LOWER(C1)=‘xyz’
LTRIM(chuỗi) cắt bỏ ký tự trắng bên trái chuỗi
SELECT LTRIM(C1) FROM T
RTRIM(chuỗi) cắt bỏ ký tự trắng bên phải chuỗi
SELECT RTRIM(C1) FROM T
TRIM(chuỗi) cắt bỏ ký tự trắng 2 đầu chuỗi
SELECT TRIM(C1) FROM T
CONCAT(‘chuỗi 1’, ‘chuỗi 2’) ghép 2 chuỗi
SELECT CONCAT(‘SV:’, C1) AS MaSV FROM T
Trang 26HÀM XỬ LÝ NGÀY
CURDATE() lấy ngày hiện tại
SELECT * FROM T WHERE C3 < CurDate ()
Lấy năm-tháng-ngày và giờ-phút-giây
DATE(ngày) lấy năm-tháng-ngày
TIME(ngày) lấy giờ-phút-giây
Các hàm lấy ngày, tháng, năm, giờ, phút, giây
YEAR(ngày) lấy năm
MONTH(ngày) lấy tháng
HOUR(ngày) lấy giờ
MINUTE(ngày) lấy phút
SECOND(ngày) lấy giây
SELECT SUM(C2) FROM T WHERE Year(C3 )=2010
Trang 27CÁC HÀM KHÁC
FORMAT(số, <số lượng số lẻ>) định dạng số
SELECT C1, FORMAT(C2, 3) AS CC2 FROM T
DATE_FORMAT(ngày, ‘%d%m%Y’) định dạng ngày
SELECT FORMAT(C3, ‘%d-%m-%Y’) AS CC3 FROM T
IF(<điều kiện>, <gtrị đúng>, <gtrị sai>) chọn 1 trong 2
SELECT IF(C1 IS NULL, ‘SV00’, C1) AS CC1 FROM T
Trang 28IF(Diem<5, 'Yếu', IF(Diem<7.5, 'Trung Bình', 'Giỏi')) AS ‘XẾP LOẠI',
DATE_FORMAT(NgaySinh, "%d-%M-%Y") AS 'NGÀY SINH'
FROM SinhVien
ORDER BY Diem DESC
LIMIT 0, 30;
Trang 29 COUNT(MaSV) AS "SỐ LƯỢNG",
MAX(Diem) AS "ĐIỂM CAO NHẤT",
AVG(Diem) AS "ĐIỂM TRUNG BÌNH",
MAX(NgaySinh) AS "SV TRẺ NHẤT"
FROM SinhVien
GROUP BY MaLH
Cột tự do (không sử dụng hàm tổng hợp) phải là cột nhóm (phải ở trong GROUP
BY)
Cột tự do (không sử dụng hàm tổng hợp) phải là cột nhóm (phải ở trong GROUP
BY)
Trang 30GROUP BY…HAVING
SELECT
MaLH AS "MÃ LỚP",
COUNT(MaSV) "SỐ LƯỢNG",
MAX(Diem) "ĐIỂM CAO NHẤT",
AVG(Diem) "ĐIỂM TRUNG BÌNH",
đó
WHERE <ĐK>
là điều kiện chung (toàn bộ)
Chỉ hiện các nhóm thỏa điều kiện này
Trang 31JOIN KẾT NỐI 2 BẢNG
INNER JOIN
KẾT NỐI TRONG KẾT NỐI NGOÀI TRÁILEFT OUTER JOIN KẾT NỐI NGOÀI PHẢIRIGHT OUTER JOIN
Lấy các bản ghi của
bảng phải và bảng trái
có cùng giá trị của cột
kết nối
Lấy tất cả các bản ghi của bảng trái và bảng phải có cùng giá trị của cột kết nối Giá trị NULL cho các cột bảng
phải
Lấy tất cả các bản ghi của bảng phải và bảng trái có cùng giá trị của cột kết nối Giá trị NULL cho các cột bảng
trái
Trang 32[INNER] JOIN
SELECT t.HoTen, p.TenLop FROM SinhVien t JOIN LopHoc p ON t.MaLH=p.MaLH
SELECT t.HoTen, p.TenLop FROM SinhVien t,
LopHoc p WHERE t.MaLH=p.MaLH
Trang 33LEFT [OUTER] JOIN
SELECT t.HoTen, p.TenLop FROM SinhVien t LEFT JOIN LopHoc p ON t.MaLH=p.MaLH
Trang 34RIGHT [OUTER] JOIN
SELECT t.HoTen, p.TenLop FROM SinhVien t RIGHT JOIN LopHoc p ON t.MaLH=p.MaLH
Trang 35TRUY VẤN CON
SELECT * FROM SinhVien WHERE MaLH IN (SELECT MaLH FROM LopHoc WHERE Year(NgayKG)=2000)
SELECT *, (SELECT COUNT(*) FROM SinhVien sv
WHERE lh.MaLH=sv.MaLH) AS SoHV FROM LopHoc lh