Câu lệnh SELECT trong MySQL là một trong những câu lệnh quan trọng nhất, được sử dụng để truy vấn và lấy dữ liệu từ cơ sở dữ liệu. Để hiểu rõ về SELECT, chúng ta sẽ đi từ những ví dụ cơ bản đến các tình huống nâng cao hơn.

1. Cú pháp cơ bản của câu lệnh SELECT

Cú pháp cơ bản của câu lệnh SELECT như sau:

column1

Lệnh này sẽ lấy thông tin về nameage của tất cả nhân viên trong bảng employees.

2. Lấy tất cả cột dữ liệu với dấu *

Nếu muốn lấy tất cả các cột trong bảng, bạn có thể sử dụng ký tự *.

employees

Câu lệnh này trả về danh sách nhân viên có tuổi lớn hơn 30.

Kết hợp nhiều điều kiện với AND, OR

Bạn có thể sử dụng ANDOR để kết hợp nhiều điều kiện trong WHERE.

ORDER BY

Lệnh này sẽ sắp xếp danh sách nhân viên theo lương giảm dần.

5. Giới hạn số dòng trả về với LIMIT

Để giới hạn số lượng kết quả trả về, chúng ta sử dụng LIMIT.

LIKE

Lệnh này sẽ trả về danh sách nhân viên có tên bắt đầu bằng chữ 'J'. Ký tự % đại diện cho bất kỳ chuỗi ký tự nào.

7. Sử dụng IN để kiểm tra nhiều giá trị

Mệnh đề IN giúp kiểm tra một cột có thuộc vào một tập hợp giá trị cụ thể không.

BETWEEN

Lệnh này trả về danh sách nhân viên có mức lương từ 3000 đến 6000.

9. Alias (Bí danh) cho cột hoặc bảng

Bí danh (AS) được sử dụng để đặt tên tạm cho cột hoặc bảng, giúp kết quả dễ đọc hơn.

EmployeeName

Lệnh này sẽ trả về tên nhân viên và tên phòng ban tương ứng, chỉ với những nhân viên có phòng ban (bảng employeesdepartment_id khớp với bảng departments).

11. Tính toán trên dữ liệu với hàm tổng hợp

MySQL cung cấp các hàm tổng hợp để thực hiện các tính toán trên dữ liệu như COUNT, SUM, AVG, MIN, MAX.

Tính số lượng nhân viên:

GROUP BY

Lệnh này trả về mức lương trung bình của từng phòng ban.

13. Sử dụng HAVING để lọc dữ liệu sau khi nhóm

Khác với WHERE, HAVING được sử dụng để lọc dữ liệu sau khi đã sử dụng GROUP BY.

SELECT

Lệnh này trả về danh sách nhân viên có lương lớn hơn mức lương trung bình của tất cả nhân viên.

15. Sử dụng DISTINCT để loại bỏ bản ghi trùng lặp

Mệnh đề DISTINCT được sử dụng để loại bỏ các kết quả trùng lặp trong dữ liệu.

department_id

Lệnh này sẽ trả về tên nhân viên, mức lương, và phân loại mức lương (Cao, Trung bình, Thấp) dựa trên giá trị của salary.

2. Sử dụng UNION để kết hợp nhiều truy vấn

UNION được sử dụng để kết hợp kết quả của nhiều truy vấn SELECT khác nhau. Các truy vấn phải có cùng số lượng cột và kiểu dữ liệu tương ứng.

department_id

Lệnh này sẽ trả về tên nhân viên và tên của người quản lý của họ. Trong bảng employees, cột manager_id là khóa ngoại trỏ đến id của người quản lý trong cùng bảng.

4. Sử dụng EXISTS để kiểm tra sự tồn tại

EXISTS được sử dụng để kiểm tra xem một truy vấn con có trả về kết quả nào hay không. Điều này rất hữu ích khi bạn muốn biết một điều kiện có thỏa mãn trong một tập hợp con dữ liệu hay không.

EXISTS

Lệnh này sẽ trả về các nhân viên không thuộc phòng ban nào (tức là không có giá trị department_id trong bảng departments).

6. Tính toán với các phép toán phức tạp

Bạn có thể sử dụng các phép toán số học phức tạp trong câu lệnh SELECT. Ví dụ sau sẽ tính tổng mức lương cho tất cả nhân viên và cộng thêm 10% tiền thưởng.

FROM

Lệnh này sẽ tính mức lương trung bình của từng phòng ban bằng cách kết hợp dữ liệu từ hai bảng và nhóm chúng lại với GROUP BY.

8. Sử dụng FULLTEXT để tìm kiếm văn bản

FULLTEXT cho phép tìm kiếm toàn văn bản trong MySQL trên các cột dạng chuỗi. Chỉ hỗ trợ trên bảng có kiểu MyISAM hoặc InnoDB với các cột đã lập chỉ mục.

ALL

Lệnh này trả về những nhân viên có lương lớn hơn tất cả nhân viên thuộc phòng ban có department_id = 2.

Ví dụ với ANY:

SELECT name, salary
FROM employees
WHERE salary > ANY (SELECT salary 
                    FROM employees 
                    WHERE department_id = 2);

Lệnh này trả về những nhân viên có lương lớn hơn ít nhất một nhân viên thuộc phòng ban có department_id = 2.

Kết luận:

Các ví dụ nâng cao trên minh họa những tính năng mạnh mẽ của câu lệnh SELECT trong MySQL. Bạn có thể thực hiện các phép tính phức tạp, kết hợp nhiều bảng, làm việc với dữ liệu con, và sử dụng các hàm đặc biệt để khai thác dữ liệu hiệu quả hơn trong các ứng dụng thực tế.