Chào mừng bạn đến với cộng đồng System Design Việt Nam! 🌟 Chúng tôi đã tạo ra một nhóm để các bạn chia sẻ và học hỏi về thiết kế hệ thống. Hãy tham gia cùng chúng tôi để xây dựng một cộng đồng thực sự lớn mạnh.
Cộng Đồng System Design Việt Nam: Tham gia ngay!
Kênh TikTok: Theo dõi chúng tôi trên TikTok!
Cùng Khám Phá SQL!
SQL (Structured Query Language) là một ngôn ngữ vô cùng mạnh mẽ để làm việc với cơ sở dữ liệu. Trong hành trình tìm hiểu về SQL, bạn đang ở cấp độ nào? Hãy cùng điểm qua các cấp độ phát triển kỹ năng SQL trong bài viết này.
Các Cấp Độ Kiến Thức SQL
Kiến thức về SQL có thể được chia thành 6 cấp độ khác nhau:
- Very Basic: Bao gồm các lệnh cơ bản như
SELECT
,FROM
,WHERE
. - Basic: Sử dụng các lệnh
GROUP BY
vàHAVING
để nhóm và chuẩn hóa dữ liệu. - Beginner: Làm quen với các lệnh
JOIN
, nhưLEFT JOIN
,RIGHT JOIN
,OUTER JOIN
,INNER JOIN
, vàSELF JOIN
. - Intermediate: Học về
Subqueries
(truy vấn con).Lưu ý rằng nhiều người thường dừng lại ở giai đoạn này. Việc nâng cấp lên giai đoạn tiếp theo sẽ giúp bạn cải thiện đáng kể khả năng viết các câu truy vấn phức tạp.
- Advanced: Nâng cao hơn với
CTEs
(Common Table Expressions),Window Functions
, và lệnhPARTITION BY
. - Pro: Hoàn thiện với việc đọc chiến lược thực thi, hiểu cách các
indexes
hoạt động và cách mà cơ sở dữ liệu vận hành một cách sâu sắc.
Tại Sao Bạn Cần Học SQL?
Có ba lý do chính khiến việc học SQL trở nên quan trọng:
- Trả lời câu hỏi kinh doanh: Kỹ năng này giúp bạn kết nối với các bộ phận khác trong doanh nghiệp, từ đó đóng góp vào chiến lược kinh doanh.
- Thiết kế kỹ thuật dựa trên dữ liệu: Khả năng viết truy vấn không chỉ giúp đỡ trong việc tạo và hiểu sơ đồ ERD, mà còn nâng cao kiến thức về dữ liệu và mối quan hệ của chúng.
- Tỷ lệ giữa công sức và lợi ích cao: SQL dễ học và sử dụng, có thể trở thành kỹ năng quan trọng giúp bạn giải quyết những câu hỏi phức tạp.
Một Số Câu Lệnh SQL Cơ Bản
Chúng ta sẽ sử dụng một bảng dữ liệu về các giao dịch bán hàng với năm cột cơ bản:
sql
CREATE TABLE deals (
deal_id INT PRIMARY KEY,
deal_amount DECIMAL(10, 2),
customer_name VARCHAR(255),
region VARCHAR(255),
deal_date DATE
);
Giả sử chúng ta có 20 dòng dữ liệu như sau:
sql
INSERT INTO deals
(deal_id, deal_amount, customer_name, region, deal_date)
VALUES
(1, 25000.00, 'Acme Corporation', 'North America', '2023-01-15'),
(2, 25000.00, 'Globex Corporation', 'North America', '2023-01-20'),
...
(20, 6000.00, 'Hooli', 'Europe', '2023-11-04');
Hãy bắt đầu với một số câu truy vấn đơn giản. Chúng ta sẽ tìm giao dịch lớn nhất theo từng khu vực.
Lời Giải Ngây Thơ (Naive Solution)
sql
SELECT *
FROM deals d1
WHERE d1.deal_amount = (
SELECT MAX(d2.deal_amount)
FROM deals d2
WHERE d2.region = d1.region
);
Phương Pháp Tối Ưu Hơn: Sử Dụng CTE
sql
WITH max_deals_by_region AS (
SELECT region, MAX(deal_amount) AS max_deal_amount
FROM deals
GROUP BY region
)
SELECT d.*
FROM deals d
JOIN max_deals_by_region rmd ON d.region = rmd.region AND d.deal_amount = rmd.max_deal_amount;
CTEs giúp bạn cải thiện đáng kể khả năng đọc hiểu mã SQL và tổ chức các truy vấn phức tạp một cách rõ ràng hơn.
Thử Nghiệm Về Window Functions
Hãy thử sức với câu truy vấn chọn 3 giao dịch hàng đầu trong mỗi khu vực:
sql
WITH ranked_deals AS (
SELECT deal_id, deal_amount, customer_name, region, deal_date,
RANK() OVER (PARTITION BY region ORDER BY deal_amount DESC) AS deal_rank
FROM deals
)
SELECT deal_id, deal_amount, customer_name, region, deal_date
FROM ranked_deals
WHERE deal_rank <= 3
ORDER BY region, deal_rank;
Bạn sẽ nhận thấy rằng kết quả có thể nhiều hơn 3 bản ghi, vì có thể có các giao dịch có cùng số tiền, dẫn đến xếp hạng chung.
Kết Luận
Việc nắm vững SQL không chỉ giúp bạn trong công việc hàng ngày mà còn cải thiện khả năng giải quyết vấn đề và khả năng phân tích dữ liệu của bạn. Hãy tiếp tục hành trình học hỏi và tham gia vào cộng đồng System Design Việt Nam để cùng nhau phát triển nhé! 🌍❤️
Chúng tôi hy vọng bài viết này sẽ hữu ích cho bạn! Hãy theo dõi chúng tôi để không bỏ lỡ những kiến thức thú vị khác về SQL và thiết kế hệ thống.
source: viblo