Đến thời điểm này, bạn đã biết hết những lợi ích của SQL và là một nhà phân tích dữ liệu, kỹ sư dữ liệu, hoặc nhà khoa học dữ liệu dày dạn. Bạn hiểu về các phương ngữ SQL khác nhau, thành thạo việc nhập dữ liệu SQL và viết lưu loát các truy vấn SQL cơ bản. Nhưng bạn có muốn nâng kỹ năng lên cấp độ tiếp theo không? Đây là cách làm.
Các khái niệm SQL trung cấp
Hiểu các ngôn ngữ con của SQL
Trong SQL có bốn ngôn ngữ con chính—chúng đề cập đến các tác vụ khác nhau nhưng đều là một phần của ngôn ngữ SQL:
1. DDL (Data Definition Language)
Các câu lệnh này dùng để tạo bảng và cơ sở dữ liệu, đồng thời xác định thuộc tính trường hoặc thuộc tính bảng. Ví dụ về lệnh trong nhóm này gồm CREATE, ALTER và DROP.
2. DML (Data Manipulation Language)
Các câu lệnh thuộc nhóm này dùng để cập nhật dữ liệu hoặc thêm, xóa dữ liệu khỏi bảng. Các lệnh gồm UPDATE, DELETE và INSERT.
3. DCL (Data Control Language)
Các câu lệnh SQL này dùng để kiểm soát người được quyền truy cập dữ liệu. Các lệnh thuộc nhóm này là GRANT và REVOKE.
4. TCL (Transaction Control Language)
Ngôn ngữ này dùng để xác nhận (commit) dữ liệu và khôi phục dữ liệu. COMMIT và ROLLBACK thuộc nhóm này.
5. DQL (Data Query Language)
Dùng để truy xuất dữ liệu từ SQL Server. Câu lệnh SELECT thuộc nhóm này.
Những điều này có thể trông đáng ngại, nhưng đừng lo! SQL là một ngôn ngữ rất gọn gàng, dễ học, nhất là vì bạn không dùng SQL để tạo trực quan hóa dữ liệu—toàn bộ là về tạo bảng, tổ chức và làm sạch dữ liệu, cũng như học cách đặt đúng câu hỏi.
UNION và JOIN
Phần lớn thời gian, dữ liệu bạn cần sẽ không nằm trong một bảng khổng lồ mà rải rác ở nhiều bảng. Với SQL, bạn có thể gộp các bảng này lại để tập hợp tất cả dữ liệu cần thiết vào một nơi. Vì UNION và JOIN làm việc với bảng, chúng được đặt trong mệnh đề FROM.
UNION về cơ bản sẽ chồng hai bảng có các cột giống hệt nhau lên nhau. Điều này hữu ích với dữ liệu giao dịch bán hàng có thể được tách thành các bảng theo tháng, quý hoặc năm.
Có nhiều kiểu JOIN thường dùng—Inner, Outer, Left và Exception. Nói ngắn gọn, chúng sẽ trả về các tổ hợp hàng khác nhau từ các bảng được nối với nhau.
Tài nguyên bổ sung:
Cú pháp SQL trung cấp
Đến giờ, bạn đã biết những điều cơ bản về cú pháp SQL, bao gồm các mệnh đề SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY và LIMIT. Bạn thành thạo Thiết kế cơ sở dữ liệu và cũng hiểu thứ tự thực thi của SQL—rằng truy vấn được viết khác với cách chúng được xử lý.
Giờ là lúc học thêm cú pháp nâng cao.
Phép tổng hợp: SELECT, GROUP BY và HAVING
Tương tự Excel, bạn có thể dùng SQL để tổng hợp dữ liệu theo tổng, trung bình, giá trị lớn nhất, nhỏ nhất và đếm. Phép tổng hợp hữu ích khi khám phá dữ liệu ban đầu, phân tích hoặc khi trình bày cho khán giả. Bạn có thể thực hiện trong mệnh đề SELECT để trả về một phép tổng hợp đơn giản, hoặc dùng GROUP BY để tạo một “bảng tổng hợp (pivot table)” kiểu Excel từ dữ liệu của bạn.
Dùng phép tổng hợp trong mệnh đề SELECT sẽ chỉ trả về một phép tính đơn giản, ví dụ nếu bạn dùng SUM(column_name), truy vấn sẽ trả về một giá trị đại diện cho tổng tất cả giá trị trong cột đó.
Bạn cũng có thể áp dụng tổng hợp theo dữ liệu phân loại. Chẳng hạn, nếu bạn có bảng dữ liệu bán trái cây trên toàn quốc, bạn có thể nhóm tổng doanh số theo loại sản phẩm, hoặc giá trung bình theo bang. Điều này cần mệnh đề GROUP BY, xuất hiện sau WHERE. Bạn sẽ phải chỉ định cột phân loại mà bạn muốn “nhóm theo”, rồi đưa các cột đó vào mệnh đề SELECT.
Sau khi dữ liệu đã được nhóm gọn gàng, với phép tổng hợp gắn với một biến phân loại, bạn có thể lọc theo các tổng hợp đó bằng mệnh đề HAVING, nằm sau GROUP BY. Điều này hữu ích khi bạn muốn thu hẹp truy vấn hơn nữa, ví dụ, chỉ chọn những cửa hàng trái cây có tổng doanh số trung bình trên $100.000.
Tài nguyên bổ sung:
- SQL | Hàm xử lý chuỗi | GeeksforGeeks
- Hàm tổng hợp SQL | Mode
- SQL GROUP BY | W3 Schools
- SQL HAVING | TutorialsPoint
Câu lệnh CASE
Một câu lệnh CASE trong SQL tương tự hàm IF() của Excel—nếu dữ liệu trong một cột khớp với tiêu chí đặt ra, thì trả về “giá trị này”. Điều này hữu ích khi phân loại lại dữ liệu định lượng thành dữ liệu phân loại, ví dụ chia một tập giá trị thành “Cao”, “Trung bình” hoặc “Thấp”. Câu lệnh CASE nằm trong mệnh đề SELECT.
Xem thêm:
Truy vấn lồng (Subquery)
Subquery có thể được dùng theo nhiều cách khác nhau, nhưng thường thấy ở mệnh đề FROM hoặc WHERE. Chúng tạo ra một bảng tạm nhỏ từ dữ liệu của bạn, mà bạn có thể dùng như một bảng mới để truy vấn theo cách khác.
Xem thêm:
Ngày và thời gian
Giống nhiều ngôn ngữ dữ liệu khác, làm việc với ngày và giờ có thể phức tạp. Đôi khi ngày tháng hoạt động như “chuỗi” thông tin. Đôi khi chúng được xử lý như ngày tháng thực sự, với cú pháp SQL có thể tách dữ liệu theo đơn vị như tháng hoặc năm. Vì có nhiều cách khác nhau để làm việc này, các hàm này được xem là cú pháp SQL nâng cao.
Xem thêm:
Nâng tầm tư duy SQL của bạn
Những hướng dẫn SQL nên theo
Khi làm việc thực tế, câu hỏi nghiệp vụ hiếm khi chuyển thành truy vấn SQL một cách gọn gàng. Đó là lý do bạn cần đánh giá kỹ yêu cầu trước khi viết một dòng mã nào. Dưới đây là một số hướng dẫn hữu ích khi luyện tập SQL.
Viết lại câu hỏi nghiệp vụ dưới dạng chú thích trước
Dùng chú thích mã để “động não” truy vấn trước—bạn đang cố trả lời câu hỏi gì? Những phần và yếu tố nào cần tập trung? Điều này sẽ định hướng truy vấn SQL của bạn.
Có hai kiểu chú thích: nội dòng và nhiều dòng.
--Chú thích nội dòng là hai dấu gạch ngang và nằm trên một dòng mã—phù hợp với ghi chú ngắn, nhanh
/*Chú thích nhiều dòng trông như thế này.
Phù hợp để tạo “banner” giải thích mục tiêu truy vấn, tác giả, v.v.*/
Phác thảo truy vấn của bạn
Trước cả khi bắt đầu gõ, bạn nên xác định những phần bạn sẽ cần cho truy vấn. Bạn luôn cần mệnh đề SELECT và FROM—nhưng còn gì nữa? Bạn có cần lọc dữ liệu bằng WHERE không? Bạn có cần dùng các hàm tổng hợp không?
Hiểu các cách khác nhau để đạt mục tiêu
Khi có thể, hãy thử có nhiều cách làm cùng một việc. Như vậy, bạn có thể tự kiểm tra chất lượng và xác nhận xem có ra cùng kết quả không. Ví dụ, bạn có thể tìm giá trị lớn nhất trong một cột bằng cách dùng hàm MAX() trong mệnh đề SELECT, hoặc sắp xếp dữ liệu bằng ORDER BY rồi dùng LIMIT để chỉ trả về một hàng.
Kiểm thử truy vấn
Xây dựng truy vấn từng dòng một và chạy thường xuyên để kiểm tra hoạt động. Thêm từng phần một cũng giúp bạn không phải rà soát lại từng dòng mã khi có lỗi.
Lập hồ sơ bảng (profile)
Để bắt đầu truy vấn, trước tiên bạn phải hiểu các phần tử dữ liệu bên trong. Bắt đầu bằng cách xem toàn bộ cơ sở dữ liệu; sau đó, xem vài cột một lần. Tìm phạm vi giá trị, cả phân loại và định lượng, để hình dung thông tin có trong bảng.
Giữ một danh sách giả định
Khi viết bất kỳ loại mã dữ liệu nào, bạn luôn nên lập danh sách các giả định để dễ dàng theo dõi các giới hạn và phụ thuộc.
Duy trì một từ điển dữ liệu
Tập hợp một kho trung tâm cho các phần tử dữ liệu bạn dùng, bao gồm mô tả các bảng và trường khác nhau được dùng trong phân tích. Có thể bao gồm các kiểu dữ liệu ở mỗi cột (ký tự, số nguyên, tiền tệ, ngày, v.v.) và mô tả ngắn gọn về chính cột đó.
Luôn dành thời gian kiểm tra chất lượng dữ liệu
Phân tích không kết thúc khi bạn viết xong truy vấn. Bạn vẫn phải hiểu kết quả và thực hiện các kiểm tra chất lượng để đảm bảo phân tích là chính xác. Hãy thử các cách khác để đạt cùng kết quả xem có khác biệt không—đây cũng là lúc chú thích nội dòng phát huy tác dụng!
Luyện tập trong sandbox
Một trong những cách tốt nhất để học bất kỳ ngôn ngữ lập trình nào là tìm một “sandbox” để thử nghiệm. Bạn sẽ có thể chạy thử mã, xem nó hoạt động không, chỉnh sửa, chạy lại, lặp đi lặp lại cho đến khi cảm thấy thoải mái với nguyên tắc và cú pháp. Khi mới bắt đầu, bạn có thể muốn có thêm định hướng—hãy thử tìm một dự án có hướng dẫn rõ ràng và mã lời giải để đối chiếu.
Dưới đây là vài tài nguyên luyện tập tốt:
Tạm thời đến đây. Hy vọng nội dung này hữu ích với bạn—hãy tiếp tục luyện tập và học hỏi!