SQL cơ bản - phần 2
MySQL Aliases
AS dùng để đặt tên tạm (alias) cho cột hoặc bảng.
Cú pháp:
SELECT column_name AS alias_name
FROM table_name;
Ví dụ: đặt tên cột tạm thời để dễ đọc kết quả.
SELECT order_id AS id, price_usd AS revenue
FROM orders
LIMIT 10;
MySQL JOIN
JOIN dùng để kết hợp dữ liệu từ nhiều bảng dựa trên khóa liên kết.
Cú pháp:
SELECT a.col, b.col
FROM table_a a
JOIN table_b b ON a.key = b.key;
Ví dụ: nối phiên truy cập với đơn hàng.
SELECT s.website_session_id, s.created_at, o.order_id
FROM website_sessions s
JOIN orders o ON s.website_session_id = o.website_session_id
LIMIT 10;
MySQL LEFT JOIN/RIGHT JOIN
LEFT JOIN giữ toàn bộ dòng của bảng trái, bảng phải khớp thì lấy, không khớp thì NULL.
Cú pháp:
SELECT a.col, b.col
FROM table_a a
LEFT JOIN table_b b ON a.key = b.key;
Ví dụ: phiên truy cập có/không có đơn hàng.
SELECT s.website_session_id, o.order_id
FROM website_sessions s
LEFT JOIN orders o ON s.website_session_id = o.website_session_id
LIMIT 10;
MySQL GROUP BY
GROUP BY nhóm dữ liệu để tính tổng hợp theo từng nhóm.
Cú pháp:
SELECT col, COUNT(*)
FROM table_name
GROUP BY col;
Ví dụ: đếm số đơn theo sản phẩm chính.
SELECT primary_product_id, COUNT(*) AS total_orders
FROM orders
GROUP BY primary_product_id;
MySQL HAVING
HAVING lọc dữ liệu sau khi đã GROUP BY.
Cú pháp:
SELECT col, COUNT(*)
FROM table_name
GROUP BY col
HAVING COUNT(*) > n;
Ví dụ: chỉ lấy sản phẩm có hơn 500 đơn.
SELECT primary_product_id, COUNT(*) AS total_orders
FROM orders
GROUP BY primary_product_id
HAVING COUNT(*) > 500;
MySQL CASE
CASE dùng để tạo giá trị có điều kiện.
Cú pháp:
SELECT CASE WHEN condition THEN value1 ELSE value2 END AS alias
FROM table_name;
Ví dụ: phân loại đơn hàng theo giá trị.
SELECT order_id,
CASE
WHEN price_usd >= 100 THEN 'High'
ELSE 'Low'
END AS order_value_group
FROM orders
LIMIT 10;
MySQL IF
IF dùng để trả về giá trị theo điều kiện đơn giản (dạng if-else).
Cú pháp:
SELECT IF(condition, value_if_true, value_if_false) AS alias
FROM table_name;
Ví dụ: gắn nhãn đơn hàng cao/thấp theo giá trị.
SELECT order_id,
IF(price_usd >= 100, 'High', 'Low') AS order_value_group
FROM orders
LIMIT 10;
MySQL Comments
Dùng để ghi chú trong SQL, không ảnh hưởng kết quả.
Cú pháp:
-- comment một dòng
/* comment nhiều dòng */
Ví dụ: ghi chú truy vấn.
-- Lấy 5 phiên đầu tiên
SELECT website_session_id, created_at
FROM website_sessions
LIMIT 5;
MySQL Operators
Toán tử so sánh và logic thường dùng: =, <>, >, <, >=, <=, AND, OR.
Cú pháp:
WHERE column1 >= 10 AND column2 <> 'test'
Ví dụ: lọc đơn hàng giá trị cao và không thuộc sản phẩm 1.
SELECT order_id, price_usd
FROM orders
WHERE price_usd >= 80
AND primary_product_id <> 1;