CodeGym /Các khóa học /SQL SELF /Cú pháp cơ bản của SELECT: cấu trúc và các thành phần của...

Cú pháp cơ bản của SELECT: cấu trúc và các thành phần của truy vấn

SQL SELF
Mức độ, Bài học
Có sẵn

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:

  1. Xử lý bảng trong FROM: server tìm bảng được chỉ định.
  2. Á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.
  3. 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é.

2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Chọn tất cả dữ liệu từ bảng
Chọn tất cả dữ liệu từ bảng
2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Chọn các cột cụ thể trong SQL
Chọn các cột cụ thể trong SQL
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION