

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: Sử dụng bảng Sales.Customer của AdventureWorks2019, xử lý các tác vụ:
- Viết câu lệnh SELECT hiể thị ra những bản ghi not null và không bị trùng lặp (non-duplicate) lưu trữ trong đơn hàng
- Viếtế câu lệh SELECT hiển thị ra toàn bộ khách hàng chi tiếtế trong cộtTerrioryID thỏa mãn yêu cầu nhỏ hơn 10.
Bài 3: Sử dụng bảng Sales.SalesOrderHeader, thực thi yêi cầu:
SELECt ra tất cả các customderID và orderID
Bài 4: Viết câu lệnh hiển thị toàn bộ cột của bảng Production.ProductionCostHistory được chỉnh sửa vào ngày 17/06/2003
Bài 5: Sử dụng bảng Production.Product thực thi các tác vụ:
- Viết câ truy vấn hiển thị productID và tên cho mỗi sản phẩm trong bảng mà tên bắt đầu bằng Chain
- Viết câu truy vấn hiển thị productID và tên cho mỗi sản phẩm trong bảng mà có chứa từ khóa Lock trong tên sản phẩm
- Viết câu truy vấn hiển thị productID và tên cho mỗi sản phẩm trong bảng mà không chứa từ khóa Lock trong tên sản phẩm
Bài 6: Viết câu query hiển thị toàn bộ bản ghi đuợc cập nhật sau ngày 29 tháng 12 năm 2009. Hiển thị ra các cột: business Entity ID, cột name, cột hiển thị ngày chỉnh sửa Person.Person.
Bài 7: Viết câu truy vấn hiển thị ProductID,Name,Color từ bản ghi trong bảng Production.Product. Chỉ hiển thị những bản ghi mà không có màu nào được gán.
Bài 8: Viết câu truy vấn trả ra business entity ID và cột name trong bảng Person.Person và sắp xếp theo LastName,FirstName,MiddleName
Bài 9: Viết câu truy vấn trong bảng Sales.SpecialOffer. Hiển thị phép hiệu của cột MinQty và MaxQty cùng với cột SpecialOfferId và cột Description
Bài 10:
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ự.
h. Hiển thị những học viên có họ gồm 6 ký tự nhưng không chứa ký tự ‘r’.
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)