Đối với bất kỳ loại nghề nghiệp nào liên quan đến CNTT, bạn đều phải có kiến thức, kỹ năng, kinh nghiệm và chứng chỉ cần thiết về chuyên môn kỹ thuật và ngôn ngữ lập trình được chỉ định. Để tích lũy kinh nghiệm và nhận được mức lương hấp dẫn trong một số công việc công nghệ như kỹ thuật dữ liệu, phân tích dữ liệu, v.v., bạn cần phải thu thập bí quyết và đào tạo thực hành về một trong những ngôn ngữ lập trình quan trọng nhất – SQL! Trong phần đầu tiên của chuỗi series tự học SQL, các bạn sẽ được giới thiệu về những khái niệm cơ bản nhất và cũng rất quan trọng đối với một người mới học SQL cần nắm được.
Giới thiệu chung
Ngôn ngữ truy vấn SQL là gì?
- SQL là viết tắt của Ngôn ngữ truy vấn có cấu trúc, là ngôn ngữ được tiêu chuẩn hóa để tương tác với các hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). Cơ sở dữ liệu quan hệ là tập hợp dữ liệu được tổ chức thành các bảng, trong đó mỗi bảng có một tập hợp các cột và hàng.
- SQL cho phép người dùng tạo, thao tác và phân tích dữ liệu được lưu trữ trong các bảng này. SQL được các nhà khoa học máy tính IBM phát triển vào những năm 1970 và đã trở thành một trong những ngôn ngữ phổ biến và được sử dụng rộng rãi nhất để quản lý và phân tích dữ liệu.
- SQL được hỗ trợ bởi nhiều RDBMS, chẳng hạn như MySQL, Oracle, PostgreSQL và Microsoft SQL Server.
Một số khái niệm trong cơ sở dữ liệu
Có một số dạng dữ liệu phổ biến như cơ sở dữ liệu quan hệ (Relational Databases), cơ sở dữ liệu phi quan hệ NoSQL, dữ liệu theo thời gian (Time Series), dữ liệu NewSQL, ….
Tuy nhiên chúng ta sẽ tìm hiểu 2 nhóm hệ quản trị cơ sở dữ liệu thường được sử dụng phổ biến trên thị trường hiện nay:
- Cơ sở dữ liệu quan hệ (Relational Databases).
- Cơ sở dữ liệu phi quan hệ NoSQL.
Cơ sở dữ liệu quan hệ (Relational Database)
Một cơ sở dữ liệu quan hệ dựa trên mô hình dữ liệu quan hệ, tổ chức dữ liệu thành các bảng với các cột và hàng.
Cơ sở dữ liệu quan hệ có các đặc điểm sau:
- Cấu trúc dữ liệu: Các bảng trong cơ sở dữ liệu quan hệ thuộc về một lược đồ định nghĩa định dạng tổng thể của cơ sở dữ liệu. Điều này làm cho việc quản lý và bảo trì dữ liệu dễ dàng hơn, đặc biệt là cho dữ liệu lớn có cấu trúc.
- Mối quan hệ dữ liệu: Các bảng trong cơ sở dữ liệu quan hệ được kết nối bởi các khóa chính và khóa ngoại, thiết lập các liên kết giữa các tập dữ liệu khác nhau.
- Thao tác dữ liệu: Cơ sở dữ liệu quan hệ sử dụng SQL, một ngôn ngữ truy vấn có cấu trúc, để thực hiện các thao tác khác nhau trên dữ liệu. Một số hệ thống cơ sở dữ liệu quan hệ phổ biến là MySQL, SQL Server, Oracle, v.v.
a) Máy chủ cơ sở dữ liệu (Database Server)
d) Bảng (Tables)
Hầu hết chúng ta đều quan sát dữ liệu ở trong bảng (Tables). Cơ sở dữ liệu thì bao gồm nhiều bảng và bảng bao gồm các thành tố sau:
- Hàng (Row/Record/Tuple/Entity)
- Cột (Attribute/Column)
- Giá trị (Cell/Attribute Value/Field Value)
- Tập hợp các thực thể (Set of entities)
Cơ sở dữ liệu phi quan hệ NoSQL
- Cơ sở dữ liệu phi quan hệ NoSQL là cơ sở dữ liệu được xây dựng dành riêng cho mô hình dữ liệu liệu linh hoạt.
- Cơ sở dữ liệu phi quan hệ NoSQL được tối ưu hóa dành riêng cho các cơ sở dữ liệu lớn. Thuộc tính của cơ sở dữ liệu phi quan hệ NoSQL:
- Được thiết kế cho phân tích các dữ liệu có cấu trúc chưa được xác định.
- Khả năng lưu trữ: Gần như không có giới hạn cho lưu trữ dữ liệu và số người dùng hệ thống.
- Định dạng dữ liệu lưu trữ: Lưu trữ đa dạng loại dữ liệu như hình ảnh, video, âm thanh, …
- Phù hợp cho ứng dụng với dữ liệu đa dạng và thay đổi thường xuyên.
- Hạn chế khi thực hiện các câu lệnh truy vấn phức tạp.
- Do không có tiêu chuẩn chung như SQL nên việc học và sử dụng sẽ phức tạp hơn.
Các nhóm câu lệnh SQL
Mệnh đề SELECT và FROM
- Mệnh đề SELECT dùng để chỉ định tên của các cột dữ liệu mà bạn muốn sử dụng trong truy vấn.
- Mệnh đề FROM được dùng để chỉ định bảng mà bạn muốn truy vấn. Nếu bạn cần truy vấn dữ liệu trong một bảng, chỉ đích danh bảng mà bạn cần truy vấn, kết quả truy vấn sẽ là tất cả các hàng trong bảng đã chỉ định. Để hiểu rõ hơn vai trò của 2 mệnh đề trên, chúng ta cùng xem những ví dụ sau: Ví dụ: Từ bảng dbo.DimEmployee thuộc bộ dữ liệu AdventureWorksDW2019, truy vấn tất cả các dữ liệu có trong bảng. Kết quả truy vấn gồm 25 cột và 296 hàng.
Giải thích câu lệnh truy vấn:
- FROM: Chỉ định dữ liệu được lấy từ bảng dbo.DimEmplyee.
- SELECT *: Câu lệnh truy vấn tất cả bảng dữ liệu.
Ví dụ: Từ bảng dbo.DimEmployee thuộc bộ dữ liệu AdventureWorksDW2019, truy vấn FirstName được gán tên là “Tên”, LastName được gán là “Họ”, FirstName + LastName được gán là “ Họ và tên”, Title được gán tên là “Chức vụ”, Vacationshours + SickLeaveHours được gán tên là “Tổng giờ nghỉ”.
Từ đây, ta rút ra được vai trò của SELECT:
- Hiển thị cột lấy ra từ bảng thuộc cơ sở dữ liệu (Database).
- Kết hợp với Allias để gán tên tạm thời cho cột hiển thị.
- Thực hiện tính toán từ các cột đã có sẵn và gán tên cho cột mới.
Chỉ định điều kiện hàng dữ liệu được truy vấn bằng mệnh đề WHERE
Với mệnh đề WHERE, chỉ những hàng thỏa mãn điều kiện logic (Predicate) thì sau khi thực thi câu lệnh truy vấn, kết quả trả về thỏa mãn điều kiện logic (Predicate).
Ví dụ: Từ bảng dữ liệu SalesLT.Product thuộc bộ dữ liệu adventureworks, truy vấn các cột Name, ProductNumber, StandardCost, SellStarDate. Với điều kiện, Name bắt đầu với 2 ký tự “HL”, StandardCost lớn hơn 300 và SellStartDate nằm trong khoảng thời gian từ 01/07/2005 đến 01/07/2006.
Giải thích câu lệnh truy vấn:
- FROM: Nhằm chỉ định dữ liệu truy vấn được lấy từ bảng SalesLT.Product.
- WHERE: Lọc bản ghi thoả mãn điều kiện ở đây là Name bắt đầu với 2 ký tự “HL”, StandardCost lớn hơn 300 và SellStartDate nằm trong khoảng thời gian từ 01/07/2005 đến 01/07/2006.
- SELECT: Dùng để chọn các cột truy vấn, các cột ở đây là Name, ProductNumber, StandardCost, SellStarDate.
Lưu ý: Với trường hợp cột được chọn được lưu dưới dạng tên thay thế (Alias), mệnh đề WHERE sẽ không thể tìm truy vấn theo điều kiện của tên thay thế (Alias). Do mệnh đề WHERE được thực thi trước mệnh đề SELECT.
Nhóm các hàng bằng mệnh đề GROUP BY
Mệnh đề GROUP BY dùng để nhóm các hàng có cùng giá trị trong một hoặc nhiều cột thành các nhóm riêng biệt dựa trên các giá trị trong cột đó.
Để hiểu rõ hơn, ta cùng xem ví dụ dưới đây: Truy vấn tổng số lượng địa chỉ trong bảng Address được nhóm lại theo từng khu vực quốc gia (CountryRegion).
Giải thích câu lệnh truy vấn:
- FROM: Nhằm chỉ định dữ liệu truy vấn được lấy từ bảng SalesLT.Address.
- SELECT TOP 10 *: Truy vấn 10 hàng đầu tiên của bảng dữ liệu SalesLT.Address.
Giải thích câu lệnh truy vấn.
- FROM: Nhằm chỉ định dữ liệu truy vấn được lấy từ bảng SalesLT.Address.
- GROUP BY: Nhóm các hàng có cùng giá trị trong cột CountryRegion lại với nhau.
- SELECT: Chỉ định các cột cần truy vấn, các cột cần truy vấn ở đây là CountryRegion và Count_CountryRegion.
- Hàm COUNT(*): dùng để đếm số dòng trong bảng SalesLT.Address thoả mãn từng giá trị của cột CountryRegion.
Chỉ định điều kiện các nhóm bằng mệnh đề HAVING
Mệnh để Having dùng để chỉ định điều kiện cho dữ liệu đã được nhóm với nhau. Để hiểu rõ hơn, ta cùng xem ví dụ sau: Vẫn với bộ dữ liệu ở ví dụ trên, truy vấn ra CountryRegion có tổng số lượng địa chỉ lớn hơn 40.
Giải thích câu lệnh truy vấn.
- GROUP BY: Nhóm các hàng có cùng giá trị trong cột CountryRegion lại với nhau.
- Hàm COUNT(*): Dùng để đếm số dòng trong bảng SalesLT.Address cho mỗi giá trị của cột CountryRegion.
- HAVING: Chỉ định điều kiện cho dữ liệu đã được nhóm (CountryRegion), CountryRegion có tổng số lượng địa chỉ lớn hơn 40.
Do đó, chúng ta cần phân biệt rõ ràng giữa mệnh đề WHERE và mệnh đề HAVING:
Sắp xếp thứ tự dữ liệu bằng mệnh đề ORDER BY
Mệnh đề ORDER BY dùng để sắp xếp thứ tự dữ liệu theo cột hoặc các cột được chọn. ORDER BY sắp xếp thứ tự theo 2 cách:
- ASC thứ tự tăng dần từ (A-Z).
Giải thích câu lệnh truy vấn.
- ORDER BY: Sắp xếp thứ tự tăng dần theo cột Color.
- DESC thứ tự giảm dần từ (Z-A).
Giải thích câu lệnh truy vấn.
- ORDER BY: Sắp xếp thứ tự giảm dần theo cột Color.
Lưu ý: ORDER BY sẽ mặc định sắp xếp thứ tự tăng dần từ (A-Z) khi không có ASC hoặc DESC đi kèm.
Logic thực thi câu lệnh (Logical query processing)
Một số lưu ý để viết một câu lệnh truy vấn SQL tốt hơn
Một số lưu ý khi viết câu lệnh SQL
Khi tự học SQL, có một số điều cần lưu ý để tối ưu hóa lệnh truy vấn tốt hơn.
- Lưu ý 1: “Khoảng trống” không ảnh hưởng đến kết quả của một câu truy vấn.
- Lưu ý 2: Câu lệnh được kết thúc với dấu “;”. Tuy nhiên vào thời điểm hiện tại không nhiều DBMS yêu cầu “;” để kết thúc câu lệnh nữa.
- Và thêm các lưu ý quan trọng khác nữa
Những ngầm định khi viết câu lệnh SQL
- Thứ 1: Nhất quán về mặt chứ viết hoa/viết thường.
- Thứ 2: Sử dụng “Khoảng trống” một cách phù hợp.
- Và thêm các ngầm định quan trọng khác nữa.
Tổng kết lại ở phần 1, chúng ta đã tìm hiểu về SQL, các khái niệm về cơ sở dữ liệu, cấu trúc của một câu query và một vài lưu ý khi viết câu query. Đề việc tự học SQL hiệu quả, bạn hãy bookmark lại bài viết này và note những kiến thức quan trọng lại nhé. Ngoài ra các bạn có thể tham khảo thêm SQL cheat sheet để tự học thêm về các câu lệnh nhé. Nếu bạn thấy nội dung này hữu ích, đừng quên để lại bình luận và hãy theo dõi để đón chờ phần tiếp theo ở các bài viết sắp tới nhé!