SQL Cơ Bản Cho Người Mới Bắt Đầu

Tại Sao Phải Học SQL?

SQL (Structured Query Language) là ngôn ngữ chuẩn để truy vấn và quản lý cơ sở dữ liệu quan hệ. Dù bạn làm backend developer, data analyst, hay marketer — SQL là kỹ năng cơ bản không thể thiếu. Hầu hết mọi ứng dụng web, mobile, và enterprise đều dùng database relational như PostgreSQL, MySQL hoặc SQLite.

Học SQL không khó. Bạn có thể viết query đầu tiên trong vòng 5 phút. Bài viết này sẽ đưa bạn từ zero đến đủ SQL cho công việc thực tế.

Cài Đặt Môi Trường

Bạn không cần cài gì cả để bắt đầu. Hai cách nhanh nhất:

  • SQLiteOnline — chạy SQL trực tiếp trên trình duyệt, không cần đăng ký
  • DB Fiddle — hỗ trợ MySQL, PostgreSQL, SQLite với sample data sẵn có

Nếu muốn cài local, macOS/Linux dùng brew install sqlite3 hoặc Ubuntu dùng sudo apt install sqlite3. Windows tải SQLite binary từ trang chính thức.

Các Cú Pháp SQL Cơ Bản

SELECT — Đọc Dữ Liệu

SELECT là lệnh dùng nhiều nhất trong SQL. Cú pháp cơ bản:

SELECT ten_cot, gia_tri FROM bang_du_lieu;

Ví dụ với bảng users có cột name, email, age:

-- Lấy tất cả
SELECT * FROM users;

-- Lấy cột cụ thể
SELECT name, email FROM users;

-- Lấy với điều kiện
SELECT name, email FROM users WHERE age > 25;

-- Sắp xếp
SELECT name, age FROM users ORDER BY age DESC;

-- Giới hạn kết quả
SELECT name FROM users LIMIT 10;

INSERT — Thêm Dữ Liệu

INSERT INTO users (name, email, age) VALUES ('Nguyễn Văn A', '[email protected]', 28);

-- Thêm nhiều dòng
INSERT INTO users (name, email, age) VALUES
  ('Trần B', '[email protected]', 32),
  ('Lê C', '[email protected]', 24);

UPDATE — Sửa Dữ Liệu

UPDATE users SET age = 29 WHERE name = 'Nguyễn Văn A';

Cảnh báo: Luôn dùng WHERE khi UPDATE. Nếu thiếu WHERE, toàn bộ bảng sẽ bị update.

XÓA Dữ Liệu

DELETE FROM users WHERE id = 5;

Tương tự UPDATE — thiếu WHERE sẽ xóa toàn bộ dữ liệu.

Tạo Bảng và Cấu Trúc Dữ Liệu

CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name VARCHAR(100) NOT NULL,
  email VARCHAR(255) UNIQUE NOT NULL,
  age INTEGER,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Các kiểu dữ liệu thường dùng:

  • INTEGER — số nguyên (ID, tuổi, số lượng)
  • VARCHAR(n) — chuỗi độ dài tối đa n (tên, email)
  • TEXT — chuỗi dài không giới hạn (nội dung bài viết)
  • FLOAT / DECIMAL — số thực (giá tiền, tỷ lệ)
  • BOOLEAN — true/false (trạng thái)
  • TIMESTAMP — ngày giờ

JOIN — Nối Bảng

JOIN là tính năng mạnh nhất của SQL. Khi dữ liệu phân tán nhiều bảng, JOIN giúp bạn truy vấn kết hợp.

-- INNER JOIN: chỉ lấy dòng có match cả 2 bảng
SELECT users.name, orders.total
FROM users
INNER JOIN orders ON users.id = orders.user_id;

-- LEFT JOIN: lấy tất cả dòng bảng trái, match bảng phải nếu có
SELECT users.name, orders.total
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

--RIGHT JOIN: lấy tất cả dòng bảng phải
SELECT users.name, orders.total
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

Ví dụ thực tế: bảng users có 100 người dùng, bảng orders có 500 đơn hàng. LEFT JOIN sẽ trả về 100 dòng (mỗi user kèm đơn hàng nếu có, nếu chưa có đơn thì orders.total = NULL).

Aggregate Functions

Hàm tổng hợp để phân tích dữ liệu:

-- Đếm số user
SELECT COUNT(*) FROM users;

-- Tổng doanh thu
SELECT SUM(total) FROM orders;

-- Trung bình đơn hàng
SELECT AVG(total) FROM orders;

-- Min/Max
SELECT MIN(age), MAX(age) FROM users;

GROUP BY — Phân Nhóm

-- Số đơn hàng theo user
SELECT user_id, COUNT(*) as order_count, SUM(total) as total_spent
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 5;  -- chỉ lấy user có hơn 5 đơn

WHERE filter trước khi group, HAVING filter sau khi group.

Subquery và CTE

Subquery

-- User có đơn hàng lớn nhất
SELECT name FROM users WHERE id = (
  SELECT user_id FROM orders ORDER BY total DESC LIMIT 1
);

CTE (Common Table Expression)

WITH top_spenders AS (
  SELECT user_id, SUM(total) as total_spent
  FROM orders
  GROUP BY user_id
  HAVING SUM(total) > 10000
)
SELECT users.name, top_spenders.total_spent
FROM users INNER JOIN top_spenders ON users.id = top_spenders.user_id;

CTE giúp code SQL dễ đọc hơn nhiều so với subquery lồng nhau.

Index — Tăng Tốc Query

Khi bảng có hàng triệu dòng, query sẽ chậm nếu không có index.

-- Tạo index trên cột frequently queried
CREATE INDEX idx_users_email ON users(email);

-- Composite index (nhiều cột)
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);

Rule of thumb: tạo index cho cột dùng trong WHERE, JOIN, ORDER BY. Không tạo index quá nhiều vì index làm chậm INSERT/UPDATE.

Lộ Trình Học SQL

Giai Đoạn Nội Dung Thời Gian
Cơ bản SELECT, INSERT, UPDATE, DELETE, WHERE 1-2 tuần
Trung bình JOIN, Aggregate, GROUP BY, Subquery 2-4 tuần
Nâng cao CTE, Window Function, Index optimization 1-2 tháng
Chuyên gia Query tuning, Partitioning, Replication 3-6 tháng

Tài Nguyên Học SQL Miễn Phí

SQL là kỹ năng đầu tư lớn nhất cho bất kỳ ai làm việc với dữ liệu. Bắt đầu với SQLiteOnline, viết 5 câu query mỗi ngày trong 2 tuần — bạn sẽ bất ngờ mình tiến bộ nhanh thế nào.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Thiết Kế Cơ Sở Dữ Liệu: Chuẩn Hóa, Index và Thực Hành

Thiết kế cơ sở dữ liệu cho người mới: Chuẩn hóa, Index và thực hành Thiết kế cơ sở dữ liệu tốt quyết định hiệu năng và khả năng mở…

Xem thêm

TypeScript cho người mới: Bắt đầu lập trình có kiểu dữ liệu

TypeScript cho người mới: Bắt đầu lập trình có kiểu dữ liệu TypeScript là ngôn ngữ lập trình mở rộng của JavaScript, được Microsoft phát triển và phát hành từ…

Xem thêm

Lệnh Git cơ bản cho người mới bắt đầu lập trình

Git là công cụ quản lý phiên bản phổ biến nhất thế giới, và biết dùng Git chuẩn là kỹ năng cơ bản nhất của lập trình viên hiện đại….

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất