1. Mệnh đề WHERE trong MySQL với Python

Mệnh đề WHERE là một mệnh đề được dùng kiểm tra một điều kiện trong câu lệnh truy vấn, WHERE có thể đi kèm với các câu lệnh như SELECTINSERTUPDATEDELETE….mệnh đề này chỉ được sử dụng để lấy ra các bản ghi có điều kiện đáp ứng cụ thể nào đó.

Khi mệnh đề WHERE xuất hiện trong câu lệnh SELECT chính là việc chỉ định ra những bản ghi có một điều kiện thỏa mãn cụ thể sẽ được lấy ra.

Ví dụ dưới đây, chúng tôi sẽ chỉ lấy ra các bản ghi có điều kiện Tuoi = 20 và GioiTinh = ‘nam’ thuộc bảng “tbl_user” trong cơ sở dữ liệu “laptrinhtudau” như sau:

import mysql.connector
try:
    # Ket noi toi MySQL
    mydb = mysql.connector.connect(
        host="localhost",
        user="root",
        password="",
        database="laptrinhtudau"
    )
    # Tao doi tuong con tro trong MySQL
    mycursor = mydb.cursor()
    # Tao cau truy van lay ra cac ban ghi co Tuoi = 20 va GioiTinh = 'nam' trong bang "tbl_user"
    sql = "SELECT * FROM tbl_user WHERE Tuoi = 20 AND GioiTinh = 'nam'"
    # Thuc thi cau truy van 
    mycursor.execute(sql)
    # Chuyen doi cac ban ghi vua lay ra thanh mot LIST
    myresult = mycursor.fetchall()
    
    # Duyet LIST ket qua
    for x in myresult:
        print(x)
except:# Truong hop co loi khi lay ra ban ghi trong bang
    print("Khong the lay ra ban ghi trong bang!")

Kết quả:

(1, ‘Chu Minh Nam’, 20, ‘nam’)
(3, ‘Phung Thai Son’, 20, ‘nam’)

2. Ký tự đại diện trong mệnh đề WHERE

Một ký tự đại diện được sử dụng để thay thế một hoặc nhiều ký tự trong một chuỗi. Các ký tự đại diện được sử dụng với toán tử LIKE. Toán tử LIKE được sử dụng trong mệnh đề WHERE để tìm kiếm một mẫu được chỉ định trong một cột.

Bảng dưới đây liệt kê ra một số ký tự đại diện Wildcards trong SQL Server

Ký tự Mô tả Ví dụ
% Đại diện cho không hoặc nhiều ký tự Ha% sẽ có thể là: Ha Noi, Ha Nam, Hai Duong…
_ Đại diện cho một ký tự duy nhất N_m sẽ có thể là: Nam, Năm, Nấm…
[] Đại diện cho bất kỳ ký tự đơn nào trong dấu ngoặc [] h[oa]t sẽ có thể là: hot và hat
^ Đại diện cho bất kỳ ký tự nào không có trong dấu ngoặc h[^oa]t sẽ có thể là hit, hut, nhưng không thể là hot và hat
Đại diện cho bất kỳ ký tự đơn lẻ nào trong phạm vi được chỉ định c[a-d]t sẽ có thể là cat, cbt, cct và cdt

Ví dụ dưới đây, sử dụng ký tự đại diện “%anh%” để chọn ra các bản ghi có chứa từ “anh” nằm ở trường HoTen thuộc bảng “tbl_user” trong cơ sở dữ liệu “laptrinhtudau” như sau:

import mysql.connector

try:
    # Ket noi toi MySQL
    mydb = mysql.connector.connect(
        host="localhost",
        user="root",
        password="",
        database="laptrinhtudau"
    )
    # Tao doi tuong con tro trong MySQL
    mycursor = mydb.cursor()

    # Tao cau truy van lay ra cac ban ghi co tu "anh" trong HoTen trong bang "tbl_user"
    sql = "SELECT * FROM tbl_user WHERE HoTen LIKE '%anh%'"

    # Thuc thi cau truy van 
    mycursor.execute(sql)
    # Chuyen doi cac ban ghi vua lay ra thanh mot LIST
    myresult = mycursor.fetchall()
    
    # Duyet LIST ket qua
    for x in myresult:
        print(x)
except:# Truong hop co loi khi lay ra ban ghi trong bang
    print("Khong the lay ra ban ghi trong bang!")

Kết quả:

(4, ‘Nguyen Tri Thanh’, 19, ‘nam’)
(6, ‘Chu Thi Minh Anh’, 21, ‘nu’)