Như đã đề cập trước đây, bài hôm nay chúng ta cùng làm cho câu lệnh truy vấn đa dạng hơn về cách xử lý qua các từ khoá dùng chung như IN, EXISTS, LIKE và UNION. Hãy cùng tìm hiểu sâu hơn qua bài hôm nay.
Nội dung
1. Vai trò của IN, EXISTS, LIKE và UNION trong câu lệnh truy vấn
Giúp câu lệnh query được xử lý linh động hơn như là truy vấn con qua IN/EXISTS, tìm kiếm dữ liệu tương đối dựa trên LIKE, gộp nhóm các câu truy vấn qua UNION.
[Database] DML 2 (Part 1)
[Database] DML 2 (Part 2)
2. Ý nghĩa và cách dùng các câu lệnh IN, EXISTS, LIKE và UNION
2.1. Câu lệnh IN / NOT IN
Giúp xác định một tập giá trị với WHERE.
Cú pháp
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
Ví dụ
Để lấy ra thông tin các bác sĩ có tên là An hay Khoa.
SELECT *
FROM doctor
WHERE last_name in ("An", 'Khoa');
Sử dụng kết hợp với truy vấn con, lấy ra thông tin các bác sĩ đã có tài khoản truy cập vào hệ thống.
SELECT *
FROM doctor
WHERE doctor_id IN (
SELECT doctor_id
FROM account_system
);
2.2. Câu lệnh LIKE / NOT LIKE
Tìm kiếm dữ liệu ở một cột theo mẫu cho sẵn (pattern).
- % đại diện cho 0 hoặc nhiều ký tự.
- _ đại diện cho 1 ký tự
Cú pháp
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
Ví dụ
Lấy ra các bác sĩ có tên bắt đầu bằng ký tự T.
SELECT *
FROM doctor
WHERE last_name LIKE 'T%';
Và lấy ra thông tin bác sĩ, tên chỉ chứa 2 ký tự.
SELECT *
FROM doctor
WHERE last_name LIKE '__';
2.3. Câu lệnh EXISTS / NOT EXISTS
Kiểm tra sự tồn tại của bất kỳ record nào ở truy vấn con (subquery).
Cú pháp
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
Ví dụ
SELECT *
FROM patient p
WHERE EXISTS (
SELECT *
FROM patient_bill pb
WHERE p.patient_id = pb.patient_id
GROUP BY patient_id
HAVING COUNT(*) >= 2
);
Mục đích câu lệnh truy vấn dùng để lấy ra thông tin các bệnh nhân đã nhận từ 2 lần thuốc trở lên
2.4. Câu lệnh UNION / UNION ALL
Dùng để kết hợp kết quả của 2 hoặc nhiều câu lệnh SELECT.
Điều kiện:
- Phải có cùng số lượng cột.
- Các cột tương ứng phải có cùng kiểu dữ liệu (không bắt buộc đối với MySQL).
Cú pháp
SELECT column_name(s) FROM table1
UNION [ALL]
SELECT column_name(s) FROM table2;
Ví dụ
Để lấy ra tên của bác sĩ và bệnh nhân:
SELECT `name`, 'bn'
FROM patient
UNION ALL
SELECT last_name, 'bs'
FROM doctor;
Kết luận
Tổng kết lại, khi sử dụng câu lệnh truy vấn để thao tác với dữ liệu:
Nếu muốn kết hợp với tập giá trị hoặc câu lệnh truy vấn con thì sử dụng IN hoặc EXISTS.
Khi tìm kiếm dữ liệu trên một mẫu (pattern), như regex thì dùng LIKE.
Còn muốn kết hợp nhiều câu SELECT thì sử dụng UNION để làm việc này.
Và những bài tiếp theo, vẫn là chuỗi bài về DML với các lệnh JOIN để kết hợp dữ liệu từ nhiều table.
0 Lời bình