Trong thời đại dữ liệu bùng nổ, khả năng khai thác thông tin giá trị từ lượng dữ liệu khổng lồ đã trở thành một yếu tố then chốt để đưa ra quyết định sáng suốt trong kinh doanh và nghiên cứu. Khoa học dữ liệu (Data Science) chính là lĩnh vực tập trung vào việc trích xuất, xử lý và phân tích dữ liệu để tìm ra các mô hình, xu hướng và hiểu biết sâu sắc.
Trong hành trình khám phá khoa học dữ liệu, việc làm chủ cơ sở dữ liệu và ngôn ngữ truy vấn SQL (Structured Query Language) là một bước quan trọng không thể bỏ qua. SQL là ngôn ngữ chuẩn được sử dụng để tương tác với cơ sở dữ liệu quan hệ, cho phép chúng ta truy xuất, thao tác và quản lý dữ liệu một cách hiệu quả. Bên cạnh đó, Python, với sự linh hoạt và mạnh mẽ của mình, đã trở thành ngôn ngữ lập trình được ưa chuộng trong lĩnh vực khoa học dữ liệu. Sự kết hợp giữa SQL và Python mang đến một bộ công cụ hoàn hảo để giải quyết các bài toán phân tích dữ liệu phức tạp.
Cơ sở Dữ liệu Quan hệ và SQL
Cơ sở Dữ liệu Quan hệ (Relational Database)
Cơ sở dữ liệu quan hệ (RDBMS) là một mô hình lưu trữ dữ liệu phổ biến, trong đó dữ liệu được tổ chức thành các bảng có quan hệ với nhau thông qua các khóa ngoại (foreign keys). Mỗi bảng chứa các bản ghi (record) đại diện cho các đối tượng trong thế giới thực, và các trường (field) mô tả các thuộc tính của đối tượng đó.
Ngôn ngữ Truy vấn Có Cấu trúc (SQL):
SQL là ngôn ngữ được thiết kế để làm việc với cơ sở dữ liệu quan hệ. Nó cung cấp một tập hợp các lệnh để thực hiện các thao tác như:
- DDL (Data Definition Language): Định nghĩa cấu trúc của cơ sở dữ liệu, bao gồm việc tạo (CREATE), sửa đổi (ALTER) và xóa (DROP) các bảng, chỉ mục (index) và các đối tượng khác.
- DML (Data Manipulation Language): Thao tác dữ liệu trong các bảng, bao gồm việc chèn (INSERT), cập nhật (UPDATE), xóa (DELETE) và truy vấn (SELECT) dữ liệu.
- DCL (Data Control Language): Quản lý quyền truy cập vào cơ sở dữ liệu, bao gồm việc cấp (GRANT) và thu hồi (REVOKE) quyền truy cập cho người dùng.
Tạo Cơ sở Dữ liệu Quan hệ và Làm việc với Nhiều Bảng bằng Lệnh DDL
Tạo Cơ sở Dữ liệu:
Để bắt đầu, chúng ta cần tạo một cơ sở dữ liệu mới. Trong SQL, chúng ta sử dụng lệnh CREATE DATABASE:
SQL
CREATE DATABASE ten_co_so_du_lieu;
Tạo Bảng
Sau khi đã có cơ sở dữ liệu, chúng ta sẽ tạo các bảng để lưu trữ dữ liệu. Lệnh CREATE TABLE được sử dụng để định nghĩa cấu trúc của một bảng:
SQL
CREATE TABLE ten_bang (
ten_cot1 kieu_du_lieu1 rang_buoc1,
ten_cot2 kieu_du_lieu2 rang_buoc2,
...
);
Ví dụ, để tạo một bảng khach_hang với các cột ma_khach_hang, ten_khach_hang và email:
SQL
CREATE TABLE khach_hang (
ma_khach_hang INT PRIMARY KEY,
ten_khach_hang VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE
);
Quan hệ giữa các Bảng
Trong cơ sở dữ liệu quan hệ, các bảng thường có quan hệ với nhau thông qua các khóa ngoại (foreign keys). Khóa ngoại là một cột trong một bảng tham chiếu đến khóa chính (primary key) của một bảng khác.
Ví dụ, để tạo một bảng don_hang có quan hệ với bảng khach_hang:
SQL CREATE TABLE don_hang ( ma_don_hang INT PRIMARY KEY, ma_khach_hang INT, ngay_dat DATE, FOREIGN KEY (ma_khach_hang) REFERENCES khach_hang(ma_khach_hang) );
Xây dựng Truy vấn SQL Cơ bản đến Trung cấp bằng Lệnh DML
Truy vấn Dữ liệu (SELECT)
Lệnh SELECT là lệnh quan trọng nhất trong SQL, được sử dụng để truy vấn dữ liệu từ một hoặc nhiều bảng. Cú pháp cơ bản của lệnh SELECT:
SQL SELECT ten_cot1, ten_cot2, ... FROM ten_bang WHERE dieu_kien;
Ví dụ, để lấy tất cả các khách hàng từ bảng khach_hang:
SQL SELECT * FROM khach_hang;
Lọc Dữ liệu (WHERE)
Mệnh đề WHERE được sử dụng để lọc dữ liệu dựa trên các điều kiện nhất định. Ví dụ, để lấy tất cả các khách hàng có tên là “Nguyễn Văn A”:
SQL SELECT * FROM khach_hang WHERE ten_khach_hang = 'Nguyễn Văn A';
Sắp xếp Dữ liệu (ORDER BY)
Mệnh đề ORDER BY được sử dụng để sắp xếp dữ liệu theo một hoặc nhiều cột. Ví dụ, để sắp xếp khách hàng theo tên tăng dần:
SQL SELECT * FROM khach_hang ORDER BY ten_khach_hang ASC;
Các Hàm Tập hợp (Aggregate Functions)
SQL cung cấp các hàm tập hợp như COUNT, SUM, AVG, MIN, MAX để tính toán trên một tập hợp các giá trị. Ví dụ, để đếm số lượng khách hàng:
SQL SELECT COUNT(*) FROM khach_hang;
Ghép Bảng (JOIN)
Phép ghép bảng (JOIN) là một kỹ thuật quan trọng trong SQL, cho phép chúng ta kết hợp dữ liệu từ nhiều bảng dựa trên các quan hệ giữa chúng. Có nhiều loại phép ghép khác nhau như INNER JOIN, LEFT JOIN, RIGHT JOIN và FULL JOIN.
Ví dụ, để lấy tất cả các đơn hàng và thông tin khách hàng tương ứng:
SQL SELECT * FROM don_hang INNER JOIN khach_hang ON don_hang.ma_khach_hang = khach_hang.ma_khach_hang;
Truy vấn SQL Nâng cao
Truy vấn con (Subquery)
Truy vấn con là một truy vấn SQL được lồng bên trong một truy vấn khác. Chúng cho phép thực hiện các thao tác phức tạp hơn bằng cách chia nhỏ vấn đề thành các bước nhỏ hơn. Ví dụ:
SQL SELECT * FROM khach_hang WHERE ma_khach_hang IN ( SELECT ma_khach_hang FROM don_hang WHERE ngay_dat >= '2024-01-01' );
Truy vấn trên sẽ chọn tất cả khách hàng đã đặt hàng từ ngày 1 tháng 1 năm 2024.
Biểu thức bảng (Table Expression)
Biểu thức bảng là một cấu trúc tạm thời đại diện cho một tập hợp các hàng và cột, có thể được sử dụng trong các truy vấn khác. Có hai loại biểu thức bảng chính:
- CTE (Common Table Expression): Được định nghĩa bằng từ khóa
WITH. - Derived Table: Được định nghĩa trong mệnh đề
FROM.
Ví dụ sử dụng CTE:
SQL WITH khach_hang_vip AS ( SELECT * FROM khach_hang WHERE tong_tien_mua >= 1000000 ) SELECT * FROM khach_hang_vip;
Cửa sổ (Window Function)
Hàm cửa sổ hoạt động trên một tập hợp các hàng liên quan đến hàng hiện tại. Chúng cho phép thực hiện các tính toán như xếp hạng, tổng chạy, trung bình động, v.v. Ví dụ:
SQL SELECT *, RANK() OVER (ORDER BY tong_tien_mua DESC) AS xep_hang FROM khach_hang;
Tập hợp (Set Operation)
SQL cung cấp các phép toán trên tập hợp như UNION, INTERSECT và EXCEPT để kết hợp kết quả của nhiều truy vấn.
Các tính năng nâng cao khác
SQL còn có nhiều tính năng nâng cao khác như:
- Stored Procedure: Một nhóm các lệnh SQL được lưu trữ trong cơ sở dữ liệu và có thể được gọi lại để thực thi.
- Trigger: Một đoạn mã được thực thi tự động khi một sự kiện cụ thể xảy ra trong cơ sở dữ liệu.
- View: Một bảng ảo được tạo ra từ một truy vấn SQL.
Python và SQL
Kết nối Python với Cơ sở Dữ liệu
Python cung cấp nhiều thư viện để kết nối và tương tác với cơ sở dữ liệu, phổ biến nhất là sqlite3 (cho SQLite), psycopg2 (cho PostgreSQL), mysql.connector (cho MySQL).
Python
import sqlite3
conn = sqlite3.connect('du_lieu.db')
cursor = conn.cursor()
Thực thi Truy vấn SQL
Python
cursor.execute('SELECT * FROM khach_hang')
rows = cursor.fetchall()
for row in rows:
print(row)
Thư viện Pandas
Pandas là một thư viện Python mạnh mẽ để phân tích và thao tác dữ liệu. Nó cung cấp các cấu trúc dữ liệu như DataFrame và Series, giúp dễ dàng làm việc với dữ liệu dạng bảng. Pandas cũng có thể đọc và ghi dữ liệu từ nhiều nguồn khác nhau, bao gồm cả cơ sở dữ liệu SQL.
Python import pandas as pd df = pd.read_sql_query('SELECT * FROM khach_hang', conn) print(df)
Ứng dụng SQL và Python trong Khoa học Dữ liệu
- Phân tích dữ liệu thăm dò (EDA): Sử dụng SQL để tổng hợp, lọc và biến đổi dữ liệu, sau đó sử dụng Python và các thư viện như Matplotlib, Seaborn để trực quan hóa dữ liệu.
- Xây dựng mô hình dự đoán: Sử dụng SQL để chuẩn bị dữ liệu, sau đó sử dụng Python và các thư viện như Scikit-learn để xây dựng và đánh giá các mô hình học máy.
- Tạo báo cáo và dashboard: Sử dụng SQL để truy vấn dữ liệu, sau đó sử dụng Python và các thư viện như Dash để tạo các báo cáo và dashboard tương tác.
Kết luận
SQL và Python là hai công cụ mạnh mẽ không thể thiếu trong bộ công cụ của một nhà khoa học dữ liệu. Bằng cách kết hợp chúng, bạn có thể xây dựng các ứng dụng phân tích dữ liệu hiệu quả và toàn diện.

