SQL là gì?
Bạn sẽ học được
- SQL là gì và vì sao gần như mọi công việc dữ liệu đều bắt đầu từ nó.
- Một truy vấn SQL gồm những phần nào, đọc một câu lệnh đơn giản ra sao.
- Chạy truy vấn đầu tiên trên bộ dữ liệu bán lẻ có sẵn trong mục Luyện tập.
- Phân biệt cách SQL "khai báo" với cách lập trình "ra lệnh từng bước".
- Ba lỗi người mới gặp nhiều nhất và cách sửa.
Khái niệm cốt lõi
SQL viết tắt của Structured Query Language — ngôn ngữ truy vấn có cấu trúc. Tên gọi hơi hàn lâm, nhưng công dụng rất đời thường: SQL là cách bạn đặt câu hỏi cho một cơ sở dữ liệu.
Hãy tưởng tượng bạn gọi món trong một quán quen. Bạn không đi vào bếp, không tự bật bếp, không tự xào nấu. Bạn nói "cho tôi một tô phở bò, ít hành" và nhà bếp lo phần còn lại. SQL hoạt động y như vậy. Bạn mô tả mình muốn thấy gì — những khách hàng ở Hà Nội, tổng doanh thu tháng 6, năm sản phẩm đắt nhất — còn hệ quản trị cơ sở dữ liệu (DBMS) tự quyết định đọc bảng nào trước, dùng chỉ mục nào, tính toán ra sao.
Điều này khiến SQL thuộc nhóm ngôn ngữ khai báo (declarative). Với Python hay JavaScript, bạn viết từng bước: tạo biến, lặp qua danh sách, cộng dồn, in kết quả. Với SQL, bạn chỉ nói kết quả mong muốn, không mô tả thuật toán. Chính vì thế một câu SQL 5 dòng có thể thay cho 50 dòng code, và cũng vì thế SQL dễ học hơn nhiều người tưởng.
Dữ liệu mà SQL làm việc cùng nằm trong cơ sở dữ liệu quan hệ: một tập các bảng có liên kết với nhau. Bảng customers lưu khách hàng, bảng orders lưu đơn hàng, cột customer_id trong orders trỏ về customers.id. Bạn sẽ học kỹ cấu trúc này ở bài sau; ở đây chỉ cần nhớ: SQL nói chuyện với bảng.
Một điểm dễ gây nhầm lẫn: SQL không phải ngôn ngữ lập trình đa dụng. Bạn không viết ứng dụng web bằng SQL, không làm giao diện bằng SQL. Nó là ngôn ngữ để hỏi và thay đổi dữ liệu. Trong thực tế, người ta chia các lệnh SQL thành vài nhóm:
| Nhóm | Viết tắt | Dùng để | Ví dụ |
|---|---|---|---|
| Truy vấn dữ liệu | DQL | Đọc dữ liệu | SELECT |
| Thao tác dữ liệu | DML | Thêm, sửa, xoá dòng | INSERT, UPDATE, DELETE |
| Định nghĩa dữ liệu | DDL | Tạo, sửa cấu trúc bảng | CREATE TABLE, ALTER TABLE |
| Phân quyền | DCL | Cấp và thu quyền | GRANT, REVOKE |
Trong khóa học này bạn dùng gần như chỉ SELECT, vì đó là lệnh chiếm 90% công việc của một người phân tích dữ liệu. Các lệnh còn lại bạn sẽ gặp khi làm việc với kỹ sư dữ liệu hoặc tự xây pipeline.
Một câu SQL tốt đọc như một câu tiếng Anh: "Cho tôi tên và thành phố của khách hàng, sắp xếp theo tên." Nếu bạn đọc thành lời được, khả năng cao cú pháp cũng đúng.
Ví dụ chạy được
Truy vấn đơn giản nhất không cần bảng nào:
SELECT 1 AS hello;Kết quả:
| hello |
|---|
| 1 |
Đọc từng phần:
SELECT— "hãy lấy cho tôi".1— một giá trị hằng số; bạn có thể viết2 + 2và nhận về4.AS hello— đặt tên cho cột kết quả làhello, thay vì cái tên mặc định khó đọc như?column?.- Dấu
;— kết thúc câu lệnh. Trình soạn SQL thường chấp nhận thiếu dấu này, nhưng công cụ dòng lệnh và nhiều hệ thống khác thì không. Tạo thói quen viết đủ.
Giờ đến một truy vấn thật trên bảng khách hàng của bộ dữ liệu bán lẻ:
SELECT name, city
FROM customers
LIMIT 5;Kết quả (rút gọn):
| name | city |
|---|---|
| An Nguyễn | Hà Nội |
| Bình Trần | TP. Hồ Chí Minh |
| Chi Lê | Đà Nẵng |
| Dũng Phạm | Hà Nội |
| Em Võ | TP. Hồ Chí Minh |
Ba mệnh đề, ba nhiệm vụ:
SELECT name, city— chọn hai cột cần xem.FROM customers— lấy từ bảngcustomers. Tên bảng là số nhiều, một quy ước phổ biến.LIMIT 5— chỉ lấy 5 dòng đầu. Khi mới làm quen, luôn thêmLIMITđể tránh kéo về hàng triệu dòng và làm chậm máy.
Bạn không cần viết hoa từ khoá. select name, city from customers limit 5; chạy y hệt. Tuy nhiên viết hoa SELECT, FROM, LIMIT giúp mắt tách phần "lệnh" khỏi phần "tên" — một thói quen đáng giữ khi truy vấn dài hàng trăm dòng. Ngược lại, tên bảng và tên cột trong PostgreSQL phân biệt hoa thường khi không có dấu nháy kép, nên hãy viết đúng như schema: customers, không phải Customers.
Thực hành
Làm ngay ba việc sau trong mục Luyện tập của DataHọc:
- Chạy
SELECT 1 AS hello;rồi đổi thànhSELECT 2 + 3 AS ket_qua;. Xác nhận kết quả là5. - Chạy
SELECT * FROM customers LIMIT 3;. Đọc tên các cột hiện ra và đoán xem mỗi cột lưu gì. Cột nào có thể để trống? - Mở bài luyện Lấy toàn bộ khách hàng (
select-all-customers) và thử viết truy vấn trả về mọi khách hàng, sắp xếp theoid. Bạn chưa họcORDER BY, cứ đoán trước — bài sau sẽ giải thích.
Mẹo nhỏ khi thực hành: chạy từng phần của truy vấn thay vì viết cả khối rồi mới kiểm tra. Nếu SELECT * FROM customers LIMIT 3; chạy được nhưng truy vấn dài của bạn lỗi, lỗi nằm ở phần bạn vừa thêm, không phải ở bảng.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách sửa |
|---|---|---|
syntax error at or near "customers" | Thiếu dấu phẩy giữa hai cột, hoặc gõ sai FROM | Đọc lại đúng vị trí con trỏ báo lỗi; kiểm tra dấu phẩy giữa các cột |
column "ten" does not exist | Sai tên cột hoặc dùng tên tiếng Việt không có trong bảng | Chạy SELECT * FROM customers LIMIT 1; để xem tên cột thật |
relation "customer" does not exist | Sai tên bảng (số ít/số nhiều) | Dùng đúng customers |
| Kết quả mỗi lần chạy một thứ tự khác | Không có ORDER BY; SQL không hứa thứ tự mặc định | Thêm ORDER BY id khi cần thứ tự ổn định |
Một lỗi nữa ít thấy trong thông báo nhưng hay gặp trong công việc: dùng SELECT * ở mọi nơi. Với người mới, * rất tiện để khám phá bảng. Nhưng trong truy vấn thật, nó kéo về cả cột bạn không dùng, làm chậm báo cáo và khiến truy vấn vỡ nếu ai đó thêm cột. Bài 4 sẽ nói kỹ hơn.
Tóm tắt
- SQL là ngôn ngữ khai báo để hỏi cơ sở dữ liệu quan hệ; bạn mô tả kết quả, DBMS lo cách thực hiện.
- Một truy vấn đọc cơ bản có dạng
SELECT <cột> FROM <bảng>và thường kèmLIMIT. - Từ khoá không phân biệt hoa thường, nhưng tên bảng/cột phải viết đúng.
- Luôn kết thúc bằng
;, luôn thêmLIMITkhi khám phá dữ liệu, luôn thêmORDER BYkhi cần thứ tự ổn định. - Bạn đã chạy được truy vấn đầu tiên — từ đây, mọi bài học chỉ là mở rộng ba mệnh đề này.
Use ← → to move between lessons