Thứ Ba, 25 tháng 7, 2023

WHERE IN - WHERE LIKE trong MySQL

Ở bài tìm hiểu lệnh SELECT mình đã liệt kê danh sách các toán tử và trong đó có hai toán tử là IN và LIKE thì trong bài này chúng ta sẽ tìm hiểu nó. Về cách sử dụng thì IN và LIKE rất hữu dụng nhưng về thực tế thì chúng ta cần phải xem lại nó. Chi tiết thến ào thì chúng ta sẽ tìm hiểu nó nhé.

Nhưng trước tiên chúng ta cần tạo Database, tạo Table và insert vài dòng dữ liệu đã nhé:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE DATABASE IF NOT EXISTS qlsv;
USE qlsv;
  
CREATE TABLE IF NOT EXISTS sinhvien(
    sv_id INT(11) NOT NULL AUTO_INCREMENT,
    sv_name VARCHAR(255) NOT NULL,
    sv_description  VARCHAR(500),
    CONSTRAINT pk_sinhvien PRIMARY KEY(sv_id)
) ENGINE = INNODB;
  
INSERT INTO sinhvien(sv_name, sv_description)
VALUES('Mr Cuong', 'Nguyen Van Cuong');
  
INSERT INTO sinhvien(sv_name, sv_description)
VALUES('Mr Kinh', 'Nguyen Van Kinh');
  
INSERT INTO sinhvien(sv_name, sv_description)
VALUES('Mr Chinh', 'Nguyen Van Chinh');
  
INSERT INTO sinhvien(sv_name, sv_description)
VALUES('Mr Quyen', 'Nguyen Van Quyen');

Bài viết này được đăng tại tranvanbinh.vn

Kết quả:

322/danh-sach-sinh-vien.png

Chúng ta sẽ sử dụng dữ liệu này để truy vấn cho các demo luôn nhé.

Mục lục

  • 1. WHERE IN trong MySQL
  • 2. WHERE LIKE trong MySQL
    • LIKE với ký hiệu %
    • Like với kí hiệu _
  • # Lời kết

1. WHERE IN trong MySQL

WHERE IN có tác dụng tương tự như hàm in_array() trong PHP vậy, nghĩa là sẽ kiểm tra giá trị của field đó có nằm trong một tập hợp nào đó hay không. Chẳng hạn bạn cần kiểm tra trong bảng sinh viên có sinh viên nào có tên là Mr CườngMr Kính hoặc Mr Chính hay không? thì ta sẽ tạo điều kiện IN như sau:

1
2
3
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_name IN ('Mr Cuong', 'Mr Kinh', 'Mr Chinh')

Kết quả sẽ là:

where-in-vi-du-1-mysql.png

Như vậy những record nào có tên là Mr Cuong hoặc Mr Kinh hoặc Mr Chinh thì đều được chọn.

Nếu không sử dụng IN thì ta sẽ dùng toán tử OR để tạo điều kiện. Như ví dụ trên tôi sẽ chuyển sang sử dụng OR như sau:

1
2
3
4
5
6
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE
    sv_name = 'Mr Cuong' OR
    sv_name = 'Mr Kinh' OR 
    sv_name = 'Mr Chinh'   

2. WHERE LIKE trong MySQL

Like dịch trong tiếng anh có nghĩa là giống, trong ngôn ngữ T-SQL thì nó cũng có ý nghĩa tương tự đó là tìm những dòng nào mà có dữ liệu giống với cấu trúc lệnh LIKE truyền vào. Nó hoạt động theo nguyên tắc tương tự như Regular Expression vậy, nghĩa là sẽ so khớp với cấu trúc của chuỗi LIKE truyền vào. Sau đây là một số ví dụ liên quan tới lệnh LIKE trong MySQL.

LIKE với ký hiệu %

Ký hiệu % sẽ đại diện cho 0 hoặc nhiều ký tự.

Ví dụ: cần tìm những sinh viên nào có tên và trong tên chỉ cần có chữ Cuong là được chọn.

1
2
3
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_name LIKE '%Cuong%'

Kết quả nó sẽ trả về một record duy nhất. Riêng với chuỗi %Cuong% thì tôi sẽ giải thích cho các trường hợp sau là đúng:

  • Chuỗi 'some thing Cuong some thing' đúng
  • Chuỗi 'some thing Cuong' đúng
  • Chuỗi 'Cuong some thing' đúng
Ví dụ: Tìm những sinh viên nào có lastname là Kinh

1
2
3
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_name LIKE '%Kinh'

Có lẽ bạn thắc mắc tại sao lại chỉ có mỗi dấu % ở đằng trước nhỉlaughLý do đơn giản bởi vì lastname thì ở cuối của chuỗi rồi cho nên đằng sau lastname sẽ không có gì nữa, còn đằng trước thì là các chữ cái bất kì

Like với kí hiệu _

Ký hiệu _ đại diện cho một ký tự bất kì, nghĩa là khi bạn sử dụng ký hiệu này thì nó sẽ là một ký tự thay vì 0 hoặc nhiều ký tự như ký hiệu %.

Ví dụ: Tìm sinh viên có tên bắt đầu chữ M, ký tự thứ 2 bất kì và tiếp theo là khoảng trắng, tiếp theo nữa là các ký tự bất kì

1
2
3
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_name LIKE 'M_ %'

Cú pháp 'M_ %' có ý nghĩa là bắt đầu chữ M, tiếp theo là dấu _ nên nó là ký tự bất kì, tiếp theo là khoảng trắng và tiếp nữa dấu % là 0 hoặc nhiều ký tự bất kì.

Còn khá nhiều nữa nhưng thông thường chúng ta sử dụng hai ký hiệu % và _ thôi nên mình sẽ không trình bày thêm để tránh độ phức tạp ở đây. Nếu bạn muốn tìm hiểu có thể vào link này để tham khảo.

# Lời kết

Nhìn sơ qua thì thấy nó hay nhưng tính đến sự tối ưu thì hai lệnh này sẽ gây mất khá nhiều thời gian để so khớp, chính vì vậy khi làm ứng dụng website lớn bạn nên hạn chế sử dụng lệnh LIKE và IN nhé, thay vào đó bạn sẽ tìm hiểu một kỹ thuật cao hơn đó là FullText Search.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
WHERE IN - WHERE LIKE trong MySQL, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master