hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Cấu trúc dữ liệu và giải thuật
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Lập trình C#
      • Lập Trình C# Cơ Bản
      • ASP.NET Core MVC
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • MySQL
Điều Kiện Trong Truy Vấn Với CASE WHEN và Wildcard, REGEXP trong MySQL

Điều Kiện Trong Truy Vấn Với CASE WHEN và Wildcard, REGEXP trong MySQL

  • 08-07-2025
  • Toanngo92
  • 0 Comments

CASE WHEN trong MySQL — một tính năng cực kỳ mạnh mẽ và linh hoạt để xử lý điều kiện trong truy vấn SQL, tương tự như câu lệnh if...else trong lập trình.


Mục lục

    • ✅ 1. CASE WHEN Là Gì?
    • ✅ 2. Cú Pháp Cơ Bản
    • ✅ 3. Ví Dụ Thực Tế
      • 📌 Bảng Students
      • 🎯 Phân loại học lực:
    • ✅ 4. Dùng CASE WHEN trong ORDER BY, GROUP BY, HAVING
      • Ví dụ: Sắp xếp học lực theo thứ tự Giỏi → Khá → Trung bình → Yếu
    • ✅ 5. Dùng CASE trong UPDATE
    • ✅ 6. Dùng CASE trong SELECT COUNT
    • 📘 Kết Luận
  • 🔍 Wildcard Trong MySQL – Ký Tự Đại Diện Trong Tìm Kiếm
    • ✅ 1. Wildcard là gì?
    • ✅ 2. Các Wildcard phổ biến trong MySQL
    • ✅ 3. Cú pháp sử dụng LIKE
    • ✅ 4. Ví dụ thực tế
      • 🔸 4.1. Dùng % – đại diện cho chuỗi bất kỳ
      • 🔸 4.2. Dùng _ – đại diện cho đúng 1 ký tự
    • ✅ 5. Phân biệt LIKE vs =
    • ✅ 6. Kết hợp LIKE với NOT
    • ✅ 7. Tìm kiếm không phân biệt hoa thường
    • 📘 Kết Luận
  • 🔍 Tìm Kiếm Nâng Cao Trong MySQL Với REGEXP
    • ✅ 1. REGEXP là gì?
    • ✅ 2. Cú pháp
    • ✅ 3. Ví dụ dữ liệu
    • ✅ 4. Các biểu thức thông dụng
    • ✅ 5. Ví dụ thực hành
      • Tên bắt đầu bằng chữ L hoặc M:
      • Tên chứa an hoặc in:
      • Tên có đúng 4 ký tự:
      • Tên không chứa chữ a:
    • ✅ 6. So sánh REGEXP và LIKE
    • ✅ 7. Một số ký hiệu phổ biến trong REGEXP
    • 📘 Kết Luận

✅ 1. CASE WHEN Là Gì?

  • CASE WHEN cho phép bạn gắn điều kiện logic vào cột kết quả trong truy vấn.
  • Rất hữu ích khi muốn hiển thị nội dung tùy theo điều kiện, ví dụ như phân loại tuổi, đánh giá kết quả học tập, v.v.

✅ 2. Cú Pháp Cơ Bản

SELECT 
    cot,
    CASE 
        WHEN dieu_kien1 THEN gia_tri1
        WHEN dieu_kien2 THEN gia_tri2
        ELSE gia_tri_mac_dinh
    END AS ten_cot_moi
FROM ten_bang;

✅ 3. Ví Dụ Thực Tế

📌 Bảng Students

CREATE TABLE Students (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    score INT
);

INSERT INTO Students VALUES
(1, 'Nam', 85),
(2, 'Linh', 70),
(3, 'Hà', 55),
(4, 'Khoa', 40);

🎯 Phân loại học lực:

SELECT 
    name,
    score,
    CASE 
        WHEN score >= 80 THEN 'Giỏi'
        WHEN score >= 65 THEN 'Khá'
        WHEN score >= 50 THEN 'Trung bình'
        ELSE 'Yếu'
    END AS hoc_luc
FROM Students;

📌 Kết quả:

namescorehoc_luc
Nam85Giỏi
Linh70Khá
Hà55Trung bình
Khoa40Yếu

✅ 4. Dùng CASE WHEN trong ORDER BY, GROUP BY, HAVING

Bạn có thể dùng trong:

  • ORDER BY để sắp xếp theo logic tùy ý
  • GROUP BY phân nhóm theo điều kiện
  • HAVING lọc nhóm theo điều kiện phức tạp

Ví dụ: Sắp xếp học lực theo thứ tự Giỏi → Khá → Trung bình → Yếu

SELECT name, score,
  CASE 
    WHEN score >= 80 THEN 'Giỏi'
    WHEN score >= 65 THEN 'Khá'
    WHEN score >= 50 THEN 'TB'
    ELSE 'Yếu'
  END AS hoc_luc
FROM Students
ORDER BY 
  CASE 
    WHEN score >= 80 THEN 1
    WHEN score >= 65 THEN 2
    WHEN score >= 50 THEN 3
    ELSE 4
  END;

✅ 5. Dùng CASE trong UPDATE

UPDATE Students
SET score = 
  CASE 
    WHEN name = 'Hà' THEN 60
    WHEN name = 'Khoa' THEN 50
    ELSE score
  END;

Cập nhật điểm cho 2 sinh viên theo tên.


✅ 6. Dùng CASE trong SELECT COUNT

Đếm số sinh viên giỏi, khá, yếu:

SELECT 
  COUNT(CASE WHEN score >= 80 THEN 1 END) AS gioi,
  COUNT(CASE WHEN score >= 65 AND score < 80 THEN 1 END) AS kha,
  COUNT(CASE WHEN score < 50 THEN 1 END) AS yeu
FROM Students;

📘 Kết Luận

  • CASE WHEN là công cụ cực kỳ linh hoạt và mạnh mẽ trong SQL.
  • Có thể dùng ở bất kỳ đâu trong truy vấn: SELECT, WHERE, ORDER BY, GROUP BY, HAVING, UPDATE, …
  • Giúp hiển thị dữ liệu theo logic tùy chỉnh mà không cần thay đổi dữ liệu trong bảng.

🔍 Wildcard Trong MySQL – Ký Tự Đại Diện Trong Tìm Kiếm

Wildcard – ký tự đại diện trong MySQL, thường dùng trong các biểu thức tìm kiếm kết hợp với LIKE. Đây là một phần không thể thiếu khi bạn cần tìm kiếm dữ liệu linh hoạt, không chính xác tuyệt đối.


✅ 1. Wildcard là gì?

  • Wildcard (ký tự đại diện) là các ký hiệu đặc biệt dùng để đại diện cho một hoặc nhiều ký tự trong biểu thức so khớp chuỗi (LIKE).
  • Wildcard thường dùng kết hợp với toán tử LIKE (hoặc NOT LIKE) trong mệnh đề WHERE.

✅ 2. Các Wildcard phổ biến trong MySQL

Ký tựÝ nghĩa
%Đại diện cho 0 hoặc nhiều ký tự bất kỳ
_Đại diện cho một ký tự đơn bất kỳ
[]❌ Không hỗ trợ trong MySQL (chỉ trong SQL Server)
[^]❌ Không hỗ trợ trong MySQL

📌 MySQL chỉ hỗ trợ % và _ là hai wildcard chính.


✅ 3. Cú pháp sử dụng LIKE

SELECT * FROM table_name
WHERE column_name LIKE 'pattern';

✅ 4. Ví dụ thực tế

Giả sử bạn có bảng Students(name):

CREATE TABLE Students (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

INSERT INTO Students (id, name) VALUES
(1, 'Nam'),
(2, 'Linh'),
(3, 'Thanh'),
(4, 'Lan'),
(5, 'An');

🔸 4.1. Dùng % – đại diện cho chuỗi bất kỳ

SELECT * FROM Students
WHERE name LIKE 'L%';

📌 Tìm tên bắt đầu bằng chữ L (ví dụ: Linh, Lan)


SELECT * FROM Students
WHERE name LIKE '%n';

📌 Tìm tên kết thúc bằng chữ n (ví dụ: Lan, An)


SELECT * FROM Students
WHERE name LIKE '%an%';

📌 Tìm tên chứa chuỗi "an" ở bất kỳ vị trí nào (ví dụ: Thanh, Lan)


🔸 4.2. Dùng _ – đại diện cho đúng 1 ký tự

SELECT * FROM Students
WHERE name LIKE '_an';

📌 Tìm tên có 3 ký tự, trong đó ký tự cuối là an, ví dụ: Lan, An → chỉ Lan khớp vì _an là 3 ký tự.


SELECT * FROM Students
WHERE name LIKE '__n_';

📌 Tên có 4 ký tự, với ký tự thứ 3 là n, ví dụ: Linh


✅ 5. Phân biệt LIKE vs =

Toán tửDùng khi…
=So khớp chính xác 100%
LIKESo khớp linh hoạt, có thể dùng wildcard

✅ 6. Kết hợp LIKE với NOT

SELECT * FROM Students
WHERE name NOT LIKE '%n';

📌 Lấy tất cả sinh viên không kết thúc bằng chữ n.


✅ 7. Tìm kiếm không phân biệt hoa thường

MySQL mặc định so sánh LIKE không phân biệt chữ hoa/chữ thường (vì collation thường là utf8_general_ci).

SELECT * FROM Students
WHERE name LIKE 'lan'; -- vẫn khớp với 'Lan'

Nếu bạn dùng collation utf8_bin, thì LIKE sẽ phân biệt chữ hoa thường.


📘 Kết Luận

  • Wildcard giúp tìm kiếm dữ liệu linh hoạt khi không biết chính xác giá trị.
  • % đại diện cho nhiều ký tự, _ đại diện cho 1 ký tự.
  • Rất hữu ích trong các trường hợp tìm kiếm tên, email, mô tả, v.v.

🔍 Tìm Kiếm Nâng Cao Trong MySQL Với REGEXP

Công cụ tìm kiếm nâng cao hơn LIKE trong MySQL: REGEXP (Regular Expression) – biểu thức chính quy. Đây là một tính năng mạnh mẽ để tìm kiếm linh hoạt, phức tạp trong chuỗi văn bản.


✅ 1. REGEXP là gì?

  • REGEXP (hoặc RLIKE) là toán tử trong MySQL dùng để so khớp chuỗi với một biểu thức chính quy (regex).
  • Hữu ích khi bạn cần tìm theo mẫu phức tạp hơn khả năng của LIKE.

✅ 2. Cú pháp

SELECT * FROM ten_bang
WHERE cot REGEXP 'biểu_thức';
  • REGEXP: toán tử so khớp
  • 'biểu_thức': biểu thức chính quy (regex)

RLIKE là đồng nghĩa với REGEXP.


✅ 3. Ví dụ dữ liệu

CREATE TABLE Students (
    id INT,
    name VARCHAR(50)
);

INSERT INTO Students VALUES
(1, 'Nam'),
(2, 'Linh'),
(3, 'Thanh'),
(4, 'Lan'),
(5, 'An'),
(6, 'Minh'),
(7, 'Tommy');

✅ 4. Các biểu thức thông dụng

Biểu thức regexÝ nghĩaVí dụ kết quả
'^a'Bắt đầu bằng aAn
'n$'Kết thúc bằng nLan, An
`’ai’`Chứa a hoặc i
'[abc]'Chứa một trong các ký tự a, b, hoặc cLan
'^[LM]'Bắt đầu bằng L hoặc MLinh, Lan, Minh
'th'Chứa chuỗi thThanh
'^.{4}$'Độ dài đúng 4 ký tựLinh, Minh
'[^a]'Không chứa ký tự aMinh, Tommy

✅ 5. Ví dụ thực hành

Tên bắt đầu bằng chữ L hoặc M:

SELECT * FROM Students
WHERE name REGEXP '^[LM]';

Tên chứa an hoặc in:

SELECT * FROM Students
WHERE name REGEXP 'an|in';

Tên có đúng 4 ký tự:

SELECT * FROM Students
WHERE name REGEXP '^.{4}$';

Tên không chứa chữ a:

SELECT * FROM Students
WHERE name NOT REGEXP 'a';

✅ 6. So sánh REGEXP và LIKE

Tính năngLIKEREGEXP
Đơn giản, dễ dùng✅❌ (khó hơn nếu mới học)
Linh hoạt phức tạp❌✅ (so khớp nhiều điều kiện)
Hỗ trợ ký tự đặc biệt% (nhiều), _ (1 ký tự)^, $, `
Phân biệt hoa/thường❌ (theo collation)✅ tùy collation (utf8_bin)

✅ 7. Một số ký hiệu phổ biến trong REGEXP

Ký hiệuÝ nghĩa
.Bất kỳ 1 ký tự
*Lặp 0 hoặc nhiều lần
+Lặp ít nhất 1 lần
^Bắt đầu chuỗi
$Kết thúc chuỗi
[]Một ký tự thuộc tập cho trước
``
{n}Xuất hiện đúng n lần
{n,m}Xuất hiện từ n đến m lần

📌 MySQL chỉ hỗ trợ biểu thức chính quy đơn giản (POSIX-style), không hỗ trợ đầy đủ regex nâng cao như trong Python hoặc PCRE.


📘 Kết Luận

  • REGEXP rất mạnh trong việc tìm kiếm chuỗi theo mẫu phức tạp.
  • Nếu LIKE quá hạn chế cho bạn (ví dụ tìm chuỗi nhiều điều kiện, kiểm tra định dạng…), hãy dùng REGEXP.
  • Để tối ưu hiệu suất, tránh lạm dụng REGEXP trên các bảng lớn mà không có chỉ mục (INDEX).

Bài viết liên quan:

TCL Trong MySQL – Quản Lý Giao Dịch Với COMMIT, ROLLBACK, SAVEPOINT
FUNCTION Trong MySQL – Định Nghĩa Hàm Tùy Chỉnh Trả Về Giá Trị
TRIGGER Trong MySQL – Kích Hoạt Tự Động Khi Dữ Liệu Thay Đổi
Giao Dịch (Transaction) Trong MySQL — START TRANSACTION, COMMIT, ROLLBACK
Stored Procedure Trong MySQL — thủ tục lưu trữ
Tăng Tốc Truy Vấn Dữ Liệu Với INDEX Trong MySQL
VIEW Trong MySQL — Bảng Ảo Từ Truy Vấn
Truy Vấn Con (SUBQUERY) và Biểu Thức Bảng Chung (CTE) Trong MySQL
Kết Hợp Dữ Liệu Từ Nhiều Bảng Với JOIN Trong MySQL
Hàm Tổng Hợp và Nhóm Dữ Liệu Trong MySQL: GROUP BY, HAVING
Truy Vấn Dữ Liệu Với SELECT Trong MySQL
Các Lệnh DML Cơ Bản Trong MySQL: INSERT, UPDATE, DELETE

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

Truy Vấn Dữ Liệu Với SELECT Trong MySQL

Các Lệnh DML Cơ Bản Trong MySQL: INSERT, UPDATE, DELETE

TCL Trong MySQL – Quản Lý Giao Dịch Với COMMIT, ROLLBACK, SAVEPOINT

DCL Trong MySQL – Quản Lý Quyền Truy Cập Với GRANT và REVOKE

FUNCTION Trong MySQL – Định Nghĩa Hàm Tùy Chỉnh Trả Về Giá Trị

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×