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