Truy Vấn Dữ Liệu Với SELECT Trong MySQL
- 08-07-2025
- Toanngo92
- 0 Comments
Truy vấn dữ liệu với câu lệnh SELECT — phần quan trọng và thường dùng nhất trong SQL, được sử dụng để đọc và phân tích dữ liệu từ các bảng.
Mục lục
✅ 1. Câu lệnh SELECT cơ bản
Cú pháp:
SELECT cot1, cot2, ...
FROM ten_bang;
Ví dụ:
SELECT name, age
FROM Students;
Lấy tất cả các cột:
SELECT * FROM Students;
✅ 2. Sử dụng WHERE để lọc dữ liệu
Cú pháp:
SELECT * FROM ten_bang
WHERE dieu_kien;
Các toán tử thường dùng:
| Toán tử | Ý nghĩa |
|---|---|
= | Bằng |
!= | Khác |
> | Lớn hơn |
< | Nhỏ hơn |
>= | Lớn hơn hoặc bằng |
<= | Nhỏ hơn hoặc bằng |
BETWEEN a AND b | Trong khoảng |
IN (...) | Một trong các giá trị |
LIKE | Khớp mẫu (pattern) |
Ví dụ:
SELECT * FROM Students WHERE age >= 20;
SELECT * FROM Students WHERE name = 'Linh';
SELECT * FROM Students WHERE name LIKE 'L%';
SELECT * FROM Students WHERE age IN (19, 21, 23);
✅ 3. Sắp xếp dữ liệu với ORDER BY
Cú pháp:
SELECT * FROM ten_bang
ORDER BY cot [ASC | DESC];
Ví dụ:
SELECT * FROM Students ORDER BY age ASC;
SELECT * FROM Students ORDER BY name DESC;
✅ 4. Giới hạn kết quả với LIMIT
Cú pháp:
SELECT * FROM ten_bang
LIMIT so_luong;
Hoặc phân trang:
SELECT * FROM ten_bang
LIMIT offset, so_luong;
Ví dụ:
SELECT * FROM Students LIMIT 5; -- Lấy 5 dòng đầu tiên
SELECT * FROM Students LIMIT 5, 5; -- Lấy 5 dòng từ dòng thứ 6
✅ 5. Loại bỏ trùng lặp với DISTINCT
SELECT DISTINCT age FROM Students;
→ Trả về danh sách các tuổi không trùng lặp.
✅ 6. Kết hợp nhiều điều kiện với AND, OR
SELECT * FROM Students
WHERE age >= 20 AND name LIKE 'L%';
SELECT * FROM Students
WHERE age < 20 OR name = 'Nam';
💡 Thực hành tổng hợp
-- 1. Lấy tất cả sinh viên từ 20 tuổi trở lên, sắp xếp theo tuổi giảm dần
SELECT * FROM Students
WHERE age >= 20
ORDER BY age DESC;
-- 2. Lấy 3 dòng đầu tiên có tên bắt đầu bằng chữ H
SELECT * FROM Students
WHERE name LIKE 'H%'
LIMIT 3;
-- 3. Lấy tất cả tuổi không trùng lặp
SELECT DISTINCT age FROM Students;
📘 Kết Luận
Câu lệnh SELECT là công cụ truy vấn và phân tích dữ liệu cốt lõi trong SQL. Khi kết hợp với WHERE, ORDER BY, LIMIT, DISTINCT và các toán tử, bạn có thể tạo ra rất nhiều dạng truy vấn mạnh mẽ và linh hoạt.
Bài tập
Bài 1: Sử dụng database studentManagement để thực hiện các truy vấn sau:
Link bài studentManagement: https://hocvietcode.com/constraint-rang-buoc-table-strong-sql-server/#content_baitap
- Lấy ra toàn bộ student.
- Lấy ra top 3 student.
- Lấy ra top 3 student, sắp xếp theo điểm từ trên xuống.
- Tìm kiếm student có BirthDate nằm giữa '01/01/1993' và '31/12/1998'
- Sử dụng hàm count(), đếm số lượng sinh viên và hiển thị ra bảng biểu diễn có tên: ClassID, ClassNAme, TotalStudent
- Tính điểm trung bình của student và hiển thị ra các bản ghi bao gồm các cột: studentId,StudentName,ClassName,StudentAvarageMark
- Tính tổng tất cả điểm của student, và chỉ hiển thị ra student có tổng điểm lớn hơn 10.
Bài 2:
1. Đọc hiểu bài toán quản lý Học viên và Điểm thi sau:
Có một Cơ sở dữ liệu (CSDL) như hình trên.
Bảng Test lưu danh sách các môn học.
Bảng Student lưu danh sách các học viên.
Bảng StudentTest lưu danh sách điểm thi và ngày thi của mỗi học viên với môn thi.
Một học viên chưa thi môn nào nếu như mã học viên (RN) không xuất hiện trong bảng StudentTest. Một môn học chưa có ai thi nếu mã môn học (TestID) không xuất hiện trong bảng StudentTest.
2. Tạo một file có tên Lab2.sql.
3. Tạo một CSDL đặt tên là ‘Baitap’ và thực hiện các yêu cầu dưới đây.

Tạo 3 bảng và chèn dữ liệu như yêu cầu dưới đây:
Student (Lưu danh sách các học viên gồm mã học viên(RN), tên(Name), tuổi(Age)).
|
RN (int primary key) |
Name (VarChar (20)) |
Age (tinyint) |
|
1 |
Nguyen Van BADC |
20 |
|
2 |
Nguyen Van Tien |
30 |
|
3 |
Tran Minh Dung |
25 |
|
4 |
Toi La DEFG |
22 |
Test (Lưu danh sách môn học gồm mã môn học (TestID, tên môn học(Name)).
|
TestID (int primary key) |
Name (Varchar(20)) |
|
1 |
EPC |
|
2 |
HTML |
|
3 |
SQL |
|
4 |
PHP |
StudentTest (Lưu điểm thi của học viên với từng môn thi, gồm mã học viên (RN), mã môn học (TestID), ngày thi(Date), điểm thi(Mark)).
|
RN (int foreign key tham chiếu tới RN của Student) |
TestID (int foreign key tham chiếu tới TestID của Test) |
Date (Date) |
Mark (Float) |
|
1 |
1 |
7/17/2006 |
8 |
|
1 |
2 |
7/18/2006 |
5 |
|
1 |
3 |
7/19/2006 |
7 |
|
2 |
1 |
7/17/2006 |
7 |
|
2 |
2 |
7/18/2006 |
4 |
|
2 |
3 |
7/19/2006 |
2 |
|
3 |
1 |
7/17/2006 |
10 |
|
3 |
3 |
7/18/2006 |
1 |
a. Đưa ra điểm của học viên dưới dạng 4 chữ số, 2 chữ số sau dấu phảy.
b. Hiển thị những học viên có tuổi >25.
c. Hiển thị những học viên có tuổi là 20 hoặc 30.
d. Hiển thị những môn học có chứa ký tự ‘s’.
e. Hiển thị tất cả những bản ghi có điểm số >5 trong bảng StudentTest.
f. Hiển thị những học viên có tên gồm 4 ký tự.
g. Hiển thị những học viên có họ gồm 6 ký tự.
i. Thêm trường (cột) tên là Status có kiểu varchar(10) và giá trị mặc định là ‘Young’ vào bảng Student .
k. Xóa các ràng buộc khóa ngoại.
l. Xóa các ràng buộc khóa chính.
m. Xóa các bảng.
n. Xóa CSDL.
Extra:
1. Đưa ra tuổi trung bình của các học viên.
2. Tìm những học viên có tuổi cao nhất.
3. Tìm những học viên có tuổi thấp nhất.
4. Tìm những môn học có điểm cao nhất.
5. Tìm những môn học có điểm thấp nhất.
6. Tìm những học viên đã thi gần đây nhất.
7. Tìm những học viên đã thi đầu tiên.
8. Tính tổng tuổi của các học viên.
9. Tính xem đến thời điểm này mỗi môn học đã thi được bao nhiêu ngày rồi.
10. Tìm những học viên đạt điểm cao nhất.
11. Tìm những học viên có điểm thấp nhất.
12. Tính điểm trung bình cho mỗi học viên, điểm phải được sắp xếp giảm dần và được hiển thị dưới dạng 4 số, 2 chữ số sau dấu phảy.
13. Hiển thị danh sách các học viên đã tham gia thi, các môn thi được thi bởi các học viên đó.
14. Hiển thị danh sách các bạn học viên chưa thi môn nào.
15. Hiển thị danh sách học viên phải thi lại, tên môn học phải thi lại và điểm thi (điểm phải thi lại là điểm nhỏ hơn 5).
16. Hiển thị tên và điểm trung bình của học viên có điểm trung bình lớn nhất.
17. Hiển thị tên và điểm trung bình của học viên có điểm trung bình nhỏ nhất.
18. Hiển thị điểm thi cao nhất của từng môn học.
19. Hiển thị danh sách tất cả các học viên và môn học mà các học viên đó đã thi, nếu học viên chưa thi môn nào thì phần tên môn học để Null (LEft join, right join, full join)

