Bài 1: Giới thiệu về Trình quản lý quảng cáo
BÀI GIẢNG: CÁC HÀM SQL CƠ BẢN
1. Giới thiệu về các hàm SQL
SQL cung cấp nhiều hàm giúp xử lý dữ liệu hiệu quả hơn, bao gồm:
- Hàm xử lý chuỗi (String Functions)
- Hàm số học (Mathematical Functions)
- Hàm ngày tháng (Date Functions)
- Hàm kiểm tra giá trị NULL (NULL Functions)
- Hàm chuyển đổi kiểu dữ liệu (Conversion Functions)
- Hàm điều kiện CASE WHEN
2. Các hàm xử lý chuỗi (String Functions)
Dùng để thao tác với dữ liệu dạng văn bản.
| Hàm | Chức năng | Ví dụ |
|---|---|---|
LEN(string) |
Độ dài chuỗi | SELECT LEN('SQL Server') → 10 |
UPPER(string) |
Chuyển thành chữ hoa | SELECT UPPER('sql') → 'SQL' |
LOWER(string) |
Chuyển thành chữ thường | SELECT LOWER('SQL') → 'sql' |
LEFT(string, n) |
Lấy n ký tự từ trái | SELECT LEFT('SQL Server', 3) → 'SQL' |
RIGHT(string, n) |
Lấy n ký tự từ phải | SELECT RIGHT('SQL Server', 6) → 'Server' |
SUBSTRING(string, start, length) |
Lấy chuỗi con | SELECT SUBSTRING('SQL Server', 5, 6) → 'Server' |
REPLACE(string, old, new) |
Thay thế chuỗi | SELECT REPLACE('SQL Server', 'SQL', 'MySQL') → 'MySQL Server' |
🚀 Ứng dụng thực tế: Lấy danh sách giảng viên có tên bắt đầu bằng “Nguyễn”
SELECT * FROM GiangVien WHERE HoTen LIKE 'Nguyễn%';
3. Các hàm số học (Mathematical Functions)
Dùng để thực hiện phép toán trên dữ liệu số.
| Hàm | Chức năng | Ví dụ |
|---|---|---|
ABS(x) |
Giá trị tuyệt đối | SELECT ABS(-5) → 5 |
CEILING(x) |
Làm tròn lên | SELECT CEILING(2.3) → 3 |
FLOOR(x) |
Làm tròn xuống | SELECT FLOOR(2.9) → 2 |
ROUND(x, n) |
Làm tròn x đến n chữ số | SELECT ROUND(3.14159, 2) → 3.14 |
RAND() |
Sinh số ngẫu nhiên | SELECT RAND() → 0.735 |
🚀 Ứng dụng thực tế: Tính lương thực nhận của giảng viên (lương cơ bản * hệ số lương)
SELECT HoTen, ROUND(HeSoLuong * 3000000, 0) AS LuongThucNhan FROM GiangVien;
4. Các hàm ngày tháng (Date Functions)
Xử lý dữ liệu kiểu ngày tháng.
| Hàm | Chức năng | Ví dụ |
|---|---|---|
GETDATE() |
Lấy ngày giờ hiện tại | SELECT GETDATE() → '2025-03-09 14:30:00' |
YEAR(date) |
Lấy năm | SELECT YEAR('2025-03-09') → 2025 |
MONTH(date) |
Lấy tháng | SELECT MONTH('2025-03-09') → 3 |
DAY(date) |
Lấy ngày | SELECT DAY('2025-03-09') → 9 |
DATEADD(unit, value, date) |
Cộng thời gian vào ngày | SELECT DATEADD(DAY, 10, '2025-03-09') → '2025-03-19' |
DATEDIFF(unit, date1, date2) |
Khoảng cách giữa 2 ngày | SELECT DATEDIFF(DAY, '2025-03-01', '2025-03-09') → 8 |
🚀 Ứng dụng thực tế: Lấy danh sách khóa học bắt đầu trong tháng này
SELECT * FROM KhoaHoc WHERE MONTH(NgayBatDau) = MONTH(GETDATE()) AND YEAR(NgayBatDau) = YEAR(GETDATE());
5. Các hàm xử lý NULL (NULL Functions)
Dùng để thay thế giá trị NULL khi truy vấn.
| Hàm | Chức năng | Ví dụ |
|---|---|---|
ISNULL(value, default) |
Thay thế NULL bằng giá trị mặc định | SELECT ISNULL(NULL, 'Không có dữ liệu') → 'Không có dữ liệu' |
COALESCE(value1, value2, …) |
Trả về giá trị đầu tiên khác NULL | SELECT COALESCE(NULL, NULL, 'ABC') → 'ABC' |
🚀 Ứng dụng thực tế: Lấy danh sách giảng viên, nếu số điện thoại bị NULL thì thay bằng 'Chưa cập nhật'
SELECT HoTen, ISNULL(SoDienThoai, 'Chưa cập nhật') AS SoDienThoai FROM GiangVien;
6. Các hàm chuyển đổi kiểu dữ liệu (Conversion Functions)
Chuyển đổi giữa các kiểu dữ liệu khác nhau.
| Hàm | Chức năng | Ví dụ |
|---|---|---|
CAST(value AS datatype) |
Chuyển đổi kiểu dữ liệu | SELECT CAST(123 AS VARCHAR(10)) → '123' |
CONVERT(datatype, value, style) |
Chuyển đổi kiểu dữ liệu với định dạng | SELECT CONVERT(VARCHAR, GETDATE(), 103) → '09/03/2025' |
🚀 Ứng dụng thực tế: Hiển thị ngày tháng theo định dạng DD/MM/YYYY
SELECT CONVERT(VARCHAR, NgayBatDau, 103) AS NgayBatDau FROM KhoaHoc;
7. Hàm điều kiện (CASE WHEN)
Dùng để tạo điều kiện trong truy vấn.
Cấu trúc
CASE
WHEN điều_kiện_1 THEN giá_trị_1
WHEN điều_kiện_2 THEN giá_trị_2
ELSE giá_trị_mặc_định
END
| Ứng dụng | Ví dụ |
|---|---|
| Phân loại điểm sinh viên | sql SELECT HoTen, Diem, CASE WHEN Diem >= 8 THEN 'Giỏi' WHEN Diem >= 6.5 THEN 'Khá' ELSE 'Trung bình' END AS XepLoai FROM SinhVien; |
| Xác định trạng thái đăng ký | sql SELECT HoTen, CASE WHEN isDangKy = 1 THEN 'Đã đăng ký' ELSE 'Chưa đăng ký' END AS TrangThai FROM TaiKhoan; |
8. Tổng kết
- Hàm chuỗi giúp xử lý văn bản.
- Hàm số học hỗ trợ tính toán.
- Hàm ngày tháng giúp thao tác với dữ liệu thời gian.
- Hàm NULL tránh lỗi khi truy vấn dữ liệu rỗng.
- Hàm chuyển đổi kiểu dữ liệu giúp format dữ liệu đúng định dạng.
- Hàm CASE WHEN giúp phân loại dữ liệu theo điều kiện.
BÀI TẬP ỨNG DỤNG CÁC HÀM SQL CƠ BẢN
Chủ đề: Quản lý thông tin học viên
1. Cấu trúc bảng HocVien
CREATE TABLE HocVien (
ID INT PRIMARY KEY IDENTITY(1,1),
HoTen NVARCHAR(100) NOT NULL,
NgaySinh DATE NOT NULL,
GioiTinh NVARCHAR(10) CHECK (GioiTinh IN ('Nam', 'Nữ')),
Email NVARCHAR(100) UNIQUE,
SoDienThoai NVARCHAR(15),
Diem FLOAT,
NgayDangKy DATE DEFAULT GETDATE()
);
2. Bộ dữ liệu mẫu
INSERT INTO HocVien (HoTen, NgaySinh, GioiTinh, Email, SoDienThoai, Diem, NgayDangKy) VALUES
(N'Nguyễn Văn A', '2000-05-15', 'Nam', 'nguyenvana@gmail.com', '0987654321', 8.5, '2024-01-10'),
(N'Trần Thị B', '2001-08-22', 'Nữ', 'tranthib@gmail.com', '0912345678', 6.8, '2024-02-05'),
(N'Lê Minh C', '1999-12-10', 'Nam', 'leminhc@gmail.com', '0977777777', 9.2, '2024-01-25'),
(N'Hoàng Thị D', '2002-04-18', 'Nữ', NULL, NULL, 7.5, '2024-03-01'),
(N'Phạm Văn E', '2000-09-30', 'Nam', 'phamvane@gmail.com', '0966666666', NULL, '2024-02-15');
3. Yêu cầu bài tập
💡 Sử dụng các lệnh SQL cơ bản để thực hiện các truy vấn sau:
1️⃣ Truy vấn danh sách học viên và hiển thị ngày sinh theo định dạng DD/MM/YYYY
2️⃣ Hiển thị danh sách học viên, thay giá trị NULL ở SoDienThoai bằng 'Chưa cập nhật'
3️⃣ Tính tuổi của học viên dựa trên NgaySinh
4️⃣ Xếp loại học viên dựa trên điểm số
- Giỏi: Điểm ≥ 8
- Khá: 6.5 ≤ Điểm < 8
- Trung bình: 5 ≤ Điểm < 6.5
- Yếu: Dưới 5
5️⃣ Tìm học viên đăng ký trong tháng hiện tại
6️⃣ Đếm số lượng học viên theo giới tính
7️⃣ Sắp xếp danh sách học viên theo điểm từ cao xuống thấp
🎯 NỘP BÀI: FILE SQL đã làm toàn bộ câu ở trên