Ok, tụi mình đã bắt đầu làm quen với SELECT, lệnh SQL dùng để lấy dữ liệu từ một bảng hoặc nhiều bảng trong database. Có thể nói nó giống như phím F5 trên trình duyệt cho database: "cho tao xem mày có gì nào". Cấu trúc đơn giản của truy vấn như sau:
SELECT cột1, cột2, … cộtN
FROM bảng
Trong đó:
SELECT— là từ khóa bắt đầu truy vấn.cột1, cột2, ...— là danh sách các cột mà bạn muốn lấy dữ liệu.FROM bảng— chỉ định bảng mà bạn muốn lấy dữ liệu từ đó.
Giờ mình sẽ chia nhỏ ra từng phần kèm ví dụ cho dễ hiểu nhé!
Cấu trúc cơ bản của lệnh SELECT
Lấy tất cả các cột. Nếu bạn muốn xem toàn bộ dữ liệu trong bảng, có thể dùng dấu sao *. Ví dụ, tụi mình có bảng students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 17 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 21 | C |
Để lấy toàn bộ dữ liệu từ bảng này, bạn dùng truy vấn:
SELECT * FROM students
Kết quả sẽ là một tập các cột và dòng như sau:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 17 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 21 | C |
Tức là — nguyên cái bảng, đúng như yêu cầu luôn.
Chọn các cột cụ thể
Thường thì bạn chỉ cần lấy những cột mình cần thôi, khỏi kéo dữ liệu thừa cho nặng. Ví dụ bạn muốn biết tên và tuổi của sinh viên. Vậy bạn viết truy vấn như này:
SELECT name, age FROM students
Kết quả truy vấn sẽ như sau:
| name | age |
|---|---|
| Alex | 17 |
| Maria | 19 |
| Otto | 21 |
Thấy khác biệt chưa? Khi bạn chỉ chọn những cột cần thiết, truy vấn sẽ nhanh hơn và gọn gàng hơn nhiều.
Thứ tự thực thi truy vấn
SQL query — đúng là tricky thật: mặc dù mình viết SELECT ở đầu, nhưng thực ra phần FROM mới được xử lý trước, sau đó mới trả về kết quả. Dưới đây là cách nó chạy bên trong:
- Xử lý bảng trong
FROM: server tìm bảng được chỉ định. - Áp dụng điều kiện cho các dòng (nếu có): chỉ lấy những dòng thỏa mãn điều kiện.
- Chọn các cột đã chỉ định: lấy dữ liệu cần thiết từ các dòng còn lại.
Tức là với lệnh như này:
SELECT name FROM students
Đầu tiên server sẽ tìm bảng students, sau đó đọc cột name, rồi mới trả về kết quả.
Ví dụ thực tế
Ví dụ số 1: Danh sách sinh viên.
Giả sử bạn là admin trường đại học, và bạn cần tên của tất cả sinh viên. Truy vấn:
SELECT name
FROM students;
Kết quả:
| name |
|---|
| Alex |
| Maria |
| Otto |
Ví dụ số 2: Thêm tuổi và id.
Bây giờ bạn cần id, tên và tuổi. Chỉ cần thêm vài cột nữa thôi:
SELECT name, age, id
FROM students;
Kết quả:
| name | age | id |
|---|---|---|
| Alex | 17 | 1 |
| Maria | 19 | 2 |
| Otto | 21 | 3 |
Ví dụ số 3: Thêm biểu thức.
Giả sử bạn muốn biết sinh viên của mình còn bao nhiêu năm nữa mới đủ tuổi trưởng thành.
Lúc này thay vì age, bạn viết 21-age. Ở đây mình giả định trưởng thành là 21 tuổi cho đẹp:
SELECT name, 21-age
FROM students;
Kết quả sẽ như này:
| name | 21-age |
|---|---|
| Alex | 4 |
| Maria | 2 |
| Otto | 0 |
Chi tiết về biểu thức bạn sẽ học ở các bài sau. Giờ thì cùng xem qua mấy lỗi mà chắc chắn nhiều bạn đã từng gặp nhé.
Lỗi phổ biến khi dùng SELECT
Gõ sai tên bảng hoặc cột.
Một trong những lỗi hay gặp nhất — là khi tên bảng hoặc tên cột bị sai chính tả.
Nếu trong database không có bảng studentsz, bạn sẽ bị lỗi:
SELECT name
FROM studentsz; -- Lỗi: không có bảng này!
Hoặc nếu cột tên là name, mà bạn lại ghi student_name, cũng lỗi luôn:
SELECT student_name -- Lỗi: không có cột này!
FROM students;
Giải pháp đơn giản: luôn kiểm tra lại tên bảng và tên cột cho chuẩn.
Lỗi cú pháp trong truy vấn.
Một lỗi nữa hay gặp — là quên dấu phẩy khi liệt kê các cột:
SELECT name age id -- Lỗi: thiếu dấu phẩy!
FROM students;
Nhưng đừng lo. Truy vấn SELECT chỉ lấy dữ liệu thôi. Mọi lỗi trong truy vấn kiểu này không thể làm hỏng dữ liệu trong database của bạn. Nhưng khi đến các truy vấn thay đổi dữ liệu — lúc đó lỗi sẽ "đau ví" hơn nhiều.
Dùng * thay vì chỉ định cột cụ thể.
Khi bạn dùng *, bạn lấy TẤT CẢ dữ liệu, kể cả những thứ không cần thiết. Điều này làm giảm hiệu năng và có thể gây vấn đề với bảng lớn. Luôn chọn đúng những cột bạn thực sự cần thôi nhé.
GO TO FULL VERSION