SELECT Fundamentals: "Tuyệt kỹ" lấy đúng và đủ dữ liệu từ kho tàng Database
1. Cú pháp "Huyền thoại": SELECT ... FROM
Cấu trúc cơ bản nhất mà ai cũng phải thuộc lòng:
SELECT column1, column2 FROM table_name;
- SELECT * (Chọn tất cả): Một thói quen rất phổ biến của anh em mới vào nghề.
- Ưu điểm: Nhanh, tiện, không cần nhớ tên cột.
- Nhược điểm: Cực kỳ tốn tài nguyên. Nếu bảng có 50 cột mà bạn chỉ cần dùng 2 cột, việc SELECT * sẽ bắt Database phải đọc dữ liệu thừa từ đĩa, tốn băng thông truyền tải và tốn RAM để xử lý.
- Lời khuyên: Hãy luôn chỉ định rõ tên các cột bạn cần. Đây là bước tối ưu hóa đầu tiên và đơn giản nhất.
2. Bí kíp lọc dữ liệu với WHERE
Đừng bao giờ bê nguyên cả cái kho về rồi mới lọc bằng code (PHP/Go). Hãy để Database lọc giúp bạn, nó nhanh hơn nhiều!
- Các toán tử cơ bản:
=,<>,>,<,>=,<=. - Kết hợp điều kiện:
AND,OR,NOT. - Tìm kiếm tương đối với
LIKE:* LIKE 'A%': Bắt đầu bằng chữ A. LIKE '%A%': Chứa chữ A ở bất kỳ đâu. (Lưu ý: Dùng%ở đầu sẽ làm Index "vô dụng", query sẽ rất chậm trên bảng lớn).- Lọc theo tập hợp:
WHERE id IN (1, 2, 3)hoặcWHERE price BETWEEN 100 AND 500.
3. Đặt biệt danh với AS (Aliases)
Đôi khi tên cột trong Database rất thô cứng (ví dụ: u_first_name_v2), bạn có thể làm cho kết quả trả về "đẹp" hơn bằng từ khóaAS.
SELECT u_name AS full_name, u_email AS email FROM users;
Việc này cực kỳ hữu ích khi bạn làm việc với các Frontend Framework, giúp mapping dữ liệu mượt mà hơn mà không cần đổi tên cột thật trong DB.
4. Sắp xếp và Giới hạn: ORDER BY & LIMIT
Sau khi lấy được dữ liệu, bạn cần trình bày nó một cách ngăn nắp.
- ORDER BY: Sắp xếp theo một hoặc nhiều cột.
ASC: Tăng dần (mặc định).DESC: Giảm dần (thường dùng để lấy các bản ghi mới nhất).- LIMIT (hoặc OFFSET): "Vũ khí" để làm tính năng phân trang (Pagination).
LIMIT 10: Chỉ lấy 10 dòng đầu tiên.LIMIT 10 OFFSET 20: Bỏ qua 20 dòng đầu và lấy 10 dòng tiếp theo (trang số 3).
5. "Cú lừa" về thứ tự thực thi (Pro Tip)
Đây là kiến thức giúp bạn phân biệt giữa một Junior và một Senior. Trong code, bạn viết SELECT đầu tiên, nhưng Database không chạy SELECT đầu tiên!
Thứ tự thực hiện thực tế của Database là:
- FROM (Tìm xem bảng đó ở đâu)
- WHERE (Lọc các dòng thỏa mãn)
- SELECT (Chọn ra các cột cần thiết từ các dòng đã lọc)
- ORDER BY (Sắp xếp kết quả cuối cùng)
- LIMIT (Cắt bớt kết quả)
Tại sao cần biết điều này? Vì bạn không thể dùng "biệt danh" (Alias) đặt ở SELECT để lọc trong WHERE, vì lúc WHERE đang chạy, Database còn chưa biết cái SELECT bạn định đặt tên là gì!
Lời kết
SELECT Fundamentals nghe có vẻ đơn giản nhưng nó là nền tảng để bạn tiến tới những kỹ thuật phức tạp hơn như Joins hay Aggregations. Hãy luôn nhớ nguyên tắc: Chỉ lấy những gì bạn cần và lọc càng sớm càng tốt.
Hy vọng bài viết này giúp anh em củng cố lại những viên gạch đầu tiên trong sự nghiệp Backend của mình. Ở bài tới, chúng ta sẽ cùng "nâng cấp" lên level mới với Aggregate Functions: Cách tính toán trên hàng triệu dòng dữ liệu trong tích tắc!
All rights reserved