ÔN TẬP CHỦ ĐỀ SQL
1. Hệ quản trị cơ sở dữ liệu
Khái niệm: Hệ quản trị cơ sở dữ liệu (DBMS) là phần mềm cung cấp môi trường để tạo lập, lưu trữ, quản lý và thao tác với các cơ sở dữ liệu một cách có hệ thống.
Ví dụ: MySQL là một hệ quản trị cơ sở dữ liệu phổ biến giúp lưu trữ toàn bộ dữ liệu của một trường học.
Lợi ích: Giúp kiểm soát dư thừa dữ liệu, đảm bảo tính nhất quán, hỗ trợ chia sẻ dữ liệu cho nhiều người dùng đồng thời và cung cấp các cơ chế bảo mật an toàn.
Ví dụ: Nhờ hệ quản trị CSDL, nhiều giáo viên có thể cùng lúc nhập điểm cho học sinh từ nhiều máy tính khác nhau mà dữ liệu không bị xung đột.
2. Xác định cấu trúc bảng
Trường (Field): Là một cột trong bảng, đại diện cho một thuộc tính cụ thể của đối tượng cần quản lý.
Ví dụ: Trong bảng HocSinh, cột HoTen là một trường dùng để lưu tên của tất cả học sinh.
Bản ghi (Record): Là một hàng trong bảng, chứa tập hợp các giá trị của các trường mô tả về một đối tượng cụ thể.
Ví dụ: Một bản ghi có thể là dòng chứa toàn bộ thông tin: MaHS: 1, HoTen: ĐỨC THÀNH, Lop: 12A1.
3. Các loại khóa
Khóa chính (Primary Key): Là một hoặc một nhóm các trường dùng để định danh duy nhất cho mỗi bản ghi trong bảng. Giá trị của khóa chính không được phép rỗng và không được trùng lặp.
Ví dụ: Mã học sinh (MaHS) là khóa chính vì mỗi học sinh có một mã định danh duy nhất, không ai giống ai.
Khóa ngoài (Foreign Key): Là trường (hoặc nhóm trường) trong một bảng dùng để liên kết với khóa chính của một bảng khác.
Ví dụ: Cột MaLop trong bảng HocSinh là khóa ngoài, nó tham chiếu đến khóa chính MaLop nằm trong bảng LopHoc để biết học sinh đó thuộc lớp nào.
4. Các kiểu dữ liệu cơ bản
Kiểu chuỗi: Dùng để lưu trữ dữ liệu dạng văn bản, ký tự.
Ví dụ: VARCHAR(50) dùng để lưu họ tên học sinh, như "HOẰNG".
Kiểu số: Dùng để lưu trữ các con số để thực hiện tính toán.
Ví dụ: INT dùng để lưu sĩ số của một lớp (ví dụ: 45), FLOAT dùng để lưu điểm số (ví dụ: 8.5).
Ngày tháng: Dùng để lưu trữ dữ liệu về thời gian, ngày, tháng, năm.
Ví dụ: DATE dùng để lưu ngày sinh của học sinh với định dạng 'YYYY-MM-DD'.
5. Một số lệnh SQL thông dụng
5.1. Câu lệnh tạo CSDL
Ý nghĩa: Dùng để khởi tạo một cơ sở dữ liệu mới trên hệ thống.
Cú pháp: CREATE DATABASE <tên CSDL>;
Ví dụ: CREATE DATABASE QuanLyHocTap;
5.2. Câu lệnh thay đổi cấu trúc trong một bảng
Cú pháp chung: ALTER TABLE <tên bảng> <hành động>;
Thêm trường mới: ALTER TABLE HocSinh ADD DiaChi VARCHAR(100);
Sửa đổi trường: ALTER TABLE HocSinh MODIFY DiaChi VARCHAR(200);
Xóa trường: ALTER TABLE HocSinh DROP COLUMN DiaChi;
Thêm khóa chính: ALTER TABLE HocSinh ADD PRIMARY KEY (MaHS);
Thêm khóa ngoài: ALTER TABLE HocSinh ADD FOREIGN KEY (MaLop) REFERENCES LopHoc(MaLop);
Xóa khóa chính: ALTER TABLE HocSinh DROP PRIMARY KEY;
Xóa khóa ngoài: ALTER TABLE HocSinh DROP FOREIGN KEY fk_malop;
Đổi tên bảng: ALTER TABLE HocSinh RENAME TO DanhSachHocSinh;
Xóa bảng: Lệnh xóa hoàn toàn bảng.
Cú pháp: DROP TABLE <tên bảng>;
Ví dụ: DROP TABLE DanhSachHocSinh;
5.3. Khởi tạo khóa chính (Primary Key)
Ý nghĩa: Xác định trường dữ liệu là khóa chính của bảng trong lúc tạo hoặc sửa bảng.
Cú pháp: PRIMARY KEY (<tên trường>);
Ví dụ: CREATE TABLE LopHoc (MaLop INT, TenLop VARCHAR(20), PRIMARY KEY (MaLop));
5.4. Khai báo khóa ngoài (Foreign Key)
Ý nghĩa: Xác định liên kết khóa ngoài của bảng tham chiếu đến bảng khác.
Cú pháp: FOREIGN KEY (<tên trường>) REFERENCES < tên bảng> (<tên trường>);
Ví dụ: CREATE TABLE HocSinh (MaHS INT, MaLop INT, FOREIGN KEY (MaLop) REFERENCES LopHoc(MaLop));
5.5. Câu lệnh tạo bảng
Ý nghĩa: Khởi tạo một bảng dữ liệu trống gồm tên các trường dữ liệu và kích thước của mỗi trường.
Cú pháp: CREATE TABLE < tên bảng> (<tên trường 1> < kiểu dữ liệu>, <tên trường 2> < kiểu dữ liệu>,...);
Ví dụ: CREATE TABLE GiaoVien (MaGV INT, TenGV VARCHAR(50));
5.6. Câu lệnh xoá dữ liệu
Ý nghĩa: Xóa dòng dữ liệu cụ thể từ bảng dựa trên điều kiện.
Cú pháp: DELETE FROM < tên bảng> WHERE <điều kiện>;
Ví dụ: DELETE FROM HocSinh WHERE MaHS = 3; (Xóa học sinh có mã là 3).
5.7. Câu lệnh cập nhật dữ liệu
Ý nghĩa: Được sử dụng để thay đổi/cập nhật dữ liệu của các trường đang có trong một bảng.
Cú pháp: UPDATE < tên_bảng> SET < tên_ trường> = < giá trị> WHERE <điều _kiện>;
Ví dụ: UPDATE HocSinh SET TenHS = 'HOẰNG' WHERE MaHS = 2;
5.8. Câu lệnh thêm dữ liệu
Ý nghĩa: Thêm bản ghi mới (hàng mới) vào một bảng trong CSDL.
Cú pháp: INSERT INTO < tên bảng> VALUES (<giá trị 1>, <giá trị 2>,..);
Ví dụ: INSERT INTO HocSinh VALUES (1, 'ĐỨC THÀNH', 12);
5.9. Dùng từ khoá AS (Bí danh)
Ý nghĩa: Đặt tên viết tắt cho bảng dữ liệu để viết câu lệnh ngắn gọn hơn.
Cú pháp: < tên bảng> AS <tên viết tắt>;
Ví dụ: SELECT hs.TenHS FROM HocSinh AS hs; (Gọi bảng HocSinh tắt là "hs").
5.10. Câu lệnh truy xuất và xử lí dữ liệu
Truy vấn tất cả: SELECT * FROM HocSinh;
Truy vấn cột cụ thể: SELECT TenHS, MaLop FROM HocSinh;
Lọc dữ liệu bằng WHERE: SELECT * FROM HocSinh WHERE MaLop = 12;
Sắp xếp bằng ORDER BY: SELECT * FROM HocSinh ORDER BY TenHS ASC; (Sắp xếp tăng dần theo tên)
Nhóm dữ liệu bằng GROUP BY: SELECT MaLop, COUNT(*) FROM HocSinh GROUP BY MaLop; (Đếm số học sinh của từng lớp)
Kết hợp bảng bằng INNER JOIN: SELECT HocSinh.TenHS, LopHoc.TenLop FROM HocSinh INNER JOIN LopHoc ON HocSinh.MaLop = LopHoc.MaLop;
6. Các hàm thông dụng
COUNT(): Đếm số lượng bản ghi. Ví dụ: SELECT COUNT(MaHS) FROM HocSinh; (Đếm tổng số học sinh)
SUM(): Tính tổng. Ví dụ: SELECT SUM(HocPhi) FROM PhieuThu; (Tính tổng tiền học phí)
AVG(): Tính trung bình cộng. Ví dụ: SELECT AVG(DiemTinHoc) FROM BangDiem; (Tính điểm trung bình môn Tin)
MAX(): Lấy giá trị lớn nhất. Ví dụ: SELECT MAX(DiemTinHoc) FROM BangDiem; (Tìm điểm cao nhất)
MIN(): Lấy giá trị nhỏ nhất. Ví dụ: SELECT MIN(DiemTinHoc) FROM BangDiem; (Tìm điểm thấp nhất)
LENGTH(): Lấy độ dài chuỗi. Ví dụ: SELECT LENGTH(TenHS) FROM HocSinh;
UPPER(): Chuyển chuỗi thành chữ in hoa. Ví dụ: SELECT UPPER(TenHS) FROM HocSinh;
LOWER(): Chuyển chuỗi thành chữ in thường. Ví dụ: SELECT LOWER(TenHS) FROM HocSinh;
TRIM(): Cắt khoảng trắng ở hai đầu chuỗi. Ví dụ: SELECT TRIM(' Xin chao ');
SUBSTRING(): Cắt một phần của chuỗi. Ví dụ: SELECT SUBSTRING(TenHS, 1, 3) FROM HocSinh;
NOW(): Trả về ngày và giờ hiện tại của hệ thống. Ví dụ: SELECT NOW();
CONCAT(): Nối các chuỗi lại với nhau. Ví dụ: SELECT CONCAT(Ho, ' ', Ten) FROM HocSinh;
7. Quan hệ trong cơ sở dữ liệu
Quan hệ 1 - 1: Một bản ghi của bảng này chỉ liên kết với đúng một bản ghi của bảng kia.
Ví dụ: Bảng GiaoVien và bảng TaiKhoanQuanLy. Cô Nguyễn Thị Thủy là một giáo viên và cô chỉ được cấp đúng 1 tài khoản quản lý hệ thống.
Quan hệ 1 - n (Một - Nhiều): Một bản ghi của bảng này có thể liên kết với nhiều bản ghi của bảng kia.
Ví dụ: Bảng LopHoc và HocSinh. Một lớp 12A1 có thể chứa nhiều học sinh, nhưng mỗi học sinh chỉ học ở duy nhất một lớp 12A1.
Quan hệ n - n (Nhiều - Nhiều): Nhiều bản ghi của bảng này liên kết với nhiều bản ghi của bảng kia.
Ví dụ: Bảng HocSinh và MonHoc. Một học sinh có thể học nhiều môn (Toán, Lý, Tin học...) và một môn học cũng có rất nhiều học sinh đăng ký học.
8. Các đặc tính cơ bản của Cơ sở dữ liệu (CSDL)
Tính cấu trúc (Structured):
Khái niệm: Dữ liệu trong CSDL được lưu trữ theo một cấu trúc chặt chẽ, được định nghĩa rõ ràng thông qua các bảng, trường và kiểu dữ liệu.
Ví dụ: Bảng HocSinh được quy định sẵn cột MaHS là kiểu số nguyên (INT), cột HoTen là kiểu chuỗi (VARCHAR). Bạn không thể nhập văn bản vào cột đã được quy định là kiểu số.
Tính giảm thiểu dư thừa (Reduced Redundancy):
Khái niệm: Một CSDL được thiết kế tốt sẽ hạn chế tối đa việc lặp lại cùng một thông tin ở nhiều nơi, giúp tiết kiệm không gian lưu trữ và tránh sai sót.
Ví dụ: Thay vì ghi tên lớp '12A1' lặp đi lặp lại ở 40 dòng thông tin của 40 học sinh, ta chỉ cần ghi MaLop: 1 ở bảng HocSinh và tạo một bảng LopHoc riêng để lưu chi tiết mã lớp 1 là '12A1'.
Tính nhất quán (Consistency):
Khái niệm: Dữ liệu phải đảm bảo tính thống nhất trên toàn bộ hệ thống. Khi một thông tin thay đổi, tất cả những nơi liên quan đều phải phản ánh sự thay đổi đó.
Ví dụ: Nếu bảng LopHoc đổi tên lớp từ '12A1' thành '12 Toán', thì khi truy xuất thông tin của các học sinh thuộc lớp này, hệ thống sẽ tự động hiển thị tên lớp mới nhất mà không cần đi sửa từng học sinh.
Tính toàn vẹn (Data Integrity):
Khái niệm: Dữ liệu lưu trong CSDL phải đảm bảo tính chính xác và hợp lệ thông qua các ràng buộc (Constraints) được người thiết lập định nghĩa.
Ví dụ: Ràng buộc (CHECK) yêu cầu điểm số phải nằm trong khoảng từ 0 đến 10. Nếu ai đó vô tình dùng lệnh INSERT để nhập điểm 11, hệ quản trị CSDL sẽ lập tức báo lỗi và từ chối lưu.
Tính độc lập dữ liệu (Data Independence):
Khái niệm: Sự thay đổi ở cấu trúc dữ liệu không làm ảnh hưởng đến các phần mềm, ứng dụng đang sử dụng nó.
Ví dụ: Bạn có thể dùng lệnh ALTER TABLE để thêm cột DiaChiEmail vào bảng HocSinh, việc này sẽ không làm hỏng phần mềm quản lý điểm đang chạy trên máy tính của trường.
Tính bảo mật và an toàn (Security and Safety):
Khái niệm: Hệ thống cung cấp cơ chế phân quyền người dùng và sao lưu/phục hồi để bảo vệ dữ liệu khỏi các truy cập trái phép hoặc sự cố mất mát.
Ví dụ: Hệ thống phân quyền sao cho tài khoản của học sinh chỉ có quyền sử dụng lệnh SELECT (để xem điểm), trong khi tài khoản của giáo viên mới được cấp quyền chạy lệnh UPDATE hoặc INSERT (để sửa hoặc nhập điểm mới).
Tính chia sẻ (Sharing):
Khái niệm: Dữ liệu có thể được truy cập và sử dụng đồng thời bởi nhiều người dùng hoặc nhiều ứng dụng khác nhau.
Ví dụ: Cùng một lúc, học sinh A đang xem điểm trên website, học sinh B đang xem trên ứng dụng điện thoại, và giáo viên C đang nhập điểm trên máy tính trường; tất cả đều tương tác mượt mà trên cùng một nguồn cơ sở dữ liệu.