SQL là gì? Tất tần tật những điều bạn cần biết về SQL
SQL là "công cụ" cơ bản mà Data Engineer, Data Analyst, Data Scientist cần biết có để làm việc với dữ liệu. Đây cũng là một trong những yêu cầu bắt buộc trong JD tuyển dụng các vị trí Data. Tuy nhiên, một trong những khó khăn của các bạn mới tìm hiểu về SQL đó chính là… có vô vàn các loại SQL khác nhau: MySQL, SQL Server, Microsoft SQL, PostgreSQL,... mỗi loại lại có một cú pháp khác nhau, cách dùng khác nhau. Ai cũng nói làm Data là học SQL nhưng học SQL nào thì không ai nói cho bạn biết.
Nếu đây là những băn khoăn của bạn khi mới tìm hiểu về khái niệm này, thì hãy cùng TM tìm hiểu về SQL trong bài viết này nhé!
SQL là gì?
SQL là viết tắt của Structured Query Language (Ngôn ngữ truy vấn có cấu trúc), được định nghĩa là ngôn ngữ lập trình để “giao tiếp” với cơ sở dữ liệu có cấu trúc (relational database), nhằm cập nhật, thay đổi, quản lý, truy xuất, xử lý và tổ chức thông tin.
Ví dụ về cơ sở dữ liệu có cấu trúc - Slide là một phần của khóa học SQL for Data Analysis
SQL được thiết kế để làm việc với các hệ quản trị cơ sở dữ liệu (DBMS) khác nhau như MySQL, PostgreSQL, SQL Server, Oracle, và nhiều hệ quản trị cơ sở dữ liệu khác.
Sử dụng SQL để làm việc với Microsoft SQL Server
SQL và NoSQL có gì khác nhau?
Ngược lại với SQL, NoSQL được sử dụng để làm việc với loại dữ liệu được lưu trữ dưới hình thức phi cấu trúc, ví dụ như hình ảnh, video hoặc văn bản. Một số loại cơ sở dữ liệu NoSQL có thể kể tới bao gồm MongoDB, Redis, Cassandra và Elasticsearch.
Đọc thêm: So sánh các loại kiến trúc dữ liệu: Data Warehouse, Data Mart & Data Lake
Một số điểm khác biệt cơ bản giữa SQL và NoSQL có thể kể tới như:
Cấu trúc của cơ sở dữ liệu: Không giống cơ sở dữ liệu có cấu trúc với các bảng dữ liệu có chứa thông tin theo hàng và cột, cơ sở dữ liệu NoSQL sử dụng cách tiếp cận cặp khóa-giá trị (key-value-pairs approach) để lưu trữ tất cả dữ liệu ở một nơi. Trong trường hợp này, khóa biểu thị một phần tử duy nhất, ví dụ: địa chỉ email của nhân viên.
Sự linh hoạt: Cơ sở dữ liệu NoSQL có thể lưu trữ một khối lượng lớn dữ liệu phi cấu trúc mà không cần ràng buộc về loại dữ liệu mà người dùng muốn lưu trữ. Tính linh hoạt trong việc lưu trữ các loại dữ liệu mới khác nhau theo nhu cầu khác nhau giúp cơ sở dữ liệu NoSQL trực quan hơn và mở rộng phạm vi ứng dụng. Tuy nhiên cũng vì vậy, cơ sở dữ liệu NoSQL đòi hỏi nhiều nỗ lực xử lý và lưu trữ nhiều hơn cơ sở dữ liệu có cấu trúc. Cơ sở dữ liệu NoSQL cũng rất phổ biến nhờ khả năng thay đổi quy mô theo chiều ngang - nghĩa là có thể tăng khả năng xử lý bằng cách bổ sung thêm nhiều máy tính chạy phần mềm NoSQL.
Tính nhất quán: Tính sẵn có của dữ liệu và tính nhất quán của dữ liệu là các khía cạnh quan trọng trong việc đảm bảo hiệu suất của một cơ sở dữ liệu. Mặc dù cơ sở dữ liệu có cấu trúc luôn đảm bảo dữ liệu nhất quán trên các phiên bản máy chủ cơ sở dữ liệu SQL, một số cơ sở dữ liệu NoSQL, ví dụ như Redis, có thể phản hồi truy vấn có thông tin có thể không chính xác trong vài giây.
Tại sao lại có nhiều loại ngôn ngữ SQL như vậy? Bạn nên học loại SQL nào?
Có nhiều loại SQL vì có nhiều nhà cung cấp phát triển hệ thống quản lý cơ sở dữ liệu (DBMS) khác nhau, và để cạnh tranh cũng như để đáp ứng nhu cầu khác nhau của người dùng, mỗi hệ thống DBMS sẽ phát triển những tính năng khác nhau, điều này dẫn tới sự khác biệt về câu lệnh SQL để làm việc với từng hệ quản trị này.
Dưới đây là một số Database Management System sử dụng ngôn ngữ SQL:
Một số Database Management System sử dụng ngôn ngữ SQL
MySQL
MySQL là máy chủ cơ sở dữ liệu SQL mã nguồn mở, phổ biến và dễ sử dụng nhất được sử dụng rộng rãi để phát triển ứng dụng web. Bên cạnh phiên bản nguồn mở được thiết kế để hỗ trợ các câu lệnh SQL cơ bản, phiên bản thương mại dành cho doanh nghiệp cũng cung cấp một loạt tiện ích mở rộng và plugin bổ sung.
PostgreSQL
Không giống MySQL, PostgreSQL là một hệ thống quản lý cơ sở dữ liệu có cấu trúc đối tượng (ORDBMS) được thiết kế để hỗ trợ các mô hình dữ liệu phức tạp và đa dạng hơn. PostgreSQL cung cấp một loạt các tính năng dành cho doanh nghiệp, bao gồm khả năng mở rộng, bảo mật và hỗ trợ tự động hóa tốt hơn thông qua giao diện dòng lệnh hoặc truy cập trực tiếp qua web. PostgreSQL hỗ trợ Windows, macOS và một số bản phân phối Linux. Cơ sở dữ liệu này cũng hỗ trợ các thủ tục được lưu trữ (stored procedures), một ngôn ngữ lập trình rất phức tạp được xây dựng dựa trên SQL để tạo điều kiện thuận lợi cho các giao dịch phức tạp và cung cấp sự tuân thủ ACID (Atomicity - Tính nguyên tử, Consistency -Tính nhất quán, Isolation - Cách ly, Durability - Độ bền).
Microsoft SQL Server (T-SQL)
Microsoft SQL Server là một cơ sở dữ liệu có cấu trúc phổ biến nhất khác có mã nguồn gần gũi và thuộc quyền sở hữu của Microsoft. SQL Server hỗ trợ các hệ điều hành Windows và Linux, có khả năng tạo điều kiện truy cập thông qua các truy vấn SQL và giao diện đồ họa người dùng. Các ứng dụng doanh nghiệp lớn thường sử dụng cơ sở dữ liệu Microsoft SQL Server và tận dụng nhiều tính năng với phiên bản SQL Server hiện tại, bao gồm tính toàn vẹn tham chiếu (referential integrity), kiểm soát đồng thời nhiều phiên bản (multi-version concurrency control), tính sẵn có của dữ liệu (higher availability), khả năng khóa chi tiết (fine-grained locking) và độ ổn định cao hơn (greater stability).
Oracle Database (PLSQL)
Thuộc sở hữu của Tập đoàn Oracle, Oracle DB là cơ sở dữ liệu có cấu trúc nguồn đóng thương mại. Oracle hỗ trợ các hệ điều hành macOS, Windows và Linux và được sử dụng hiệu quả cho các ứng dụng lớn trong các ngành công nghiệp. Cơ sở dữ liệu Oracle có thể hỗ trợ tự động hóa việc quản lý máy chủ và dữ liệu.
Đọc thêm: Tìm hiểu về các loại hệ quản trị cơ sở dữ liệu quan hệ (RDBMS)
Nên học loại SQL nào?
Tất cả các loại SQL dù được xây dựng cho các hệ thống quản lý cơ sở dữ liệu khác nhau đều vẫn sẽ dựa trên cùng một tiêu chuẩn SQL chung và đều chia sẻ các câu lệnh tương tự nhau, ví dụ:
SELECT để hiển thị dữ liệu
FROM để chỉ định dữ liệu được lấy ra từ bảng nào
WHERE dùng để xác định điều kiện lấy dữ liệu
ORDER BY dùng để xác định dữ liệu lấy ra sẽ được sắp xếp thế nào
…
Các loại ngôn ngữ SQL đều được xây dựng dựa trên cùng một tiêu chuẩn SQL
Vì vậy, bạn chỉ cần học 1 loại SQL để nắm được tư duy, các câu lệnh căn bản, sau đó có thể tự tìm hiểu và mở rộng thêm với các hệ cơ sở dữ liệu khác.
Đọc thêm: Hướng dẫn tự học và các nguồn SQL để luyện tập dành cho người mới bắt đầu
Cấu trúc câu lệnh SQL (Syntax)
Ví dụ một câu lệnh SQL
SQL được cấu thành bởi một số yếu tố:
Statements (câu lệnh): Câu lệnh là một phương thức thực thi truy vấn trên schema hoặc bảng dữ liệu. Các câu lệnh SQL thường kết thúc với một dấu chấm phẩy (“;” - không bắt buộc).
Keywords (từ khóa): Từ khóa là một danh sách từ/cụm từ cho phép máy tính thực hiện các hành động lọc dữ liệu trên cơ sở dữ liệu.
Ví dụ: LIKE là một toán tử giúp máy tính tìm kiếm những dòng dữ liệu có chung một điểm chung trong cơ sở dữ liệu - nếu bạn cần tìm thông tin của tất cả nhân viên ở Bắc Ninh, bạn có thể truy vấn:
SELECT *
FROM employee
WHERE name LIKE ‘Tran%’ AND city = ‘Bac Ninh’
Clauses (mệnh đề): Mệnh đề là một hàm (in-built function) giúp trả về những trường thông tin yêu cầu từ một bảng dữ liệu.
Ví dụ, bạn cần lấy thông tin về tuổi, email và địa chỉ của khách hàng - bạn có thể sử dụng mệnh đề truy vấn:
SELECT age, email, address
FROM customer;
Trong đó SELECT là là từ khóa, age, email, address là các trường dữ liệu cần lấy
Expressions: expressions là công thức trong một câu truy vấn. Nó bao gồm một hoặc nhiều giá trị, toán tử và các hàm SQL. SQL expression có thể được chia thành ba loại: Boolean, numeric và date.
Ví dụ, bạn cần lấy tất cả các nhân viên có mức lương bằng 800$. Bạn có thể thực hiện truy vấn:
SELECT *
FROM employee
WHERE salary = 5000;
Trong đó 5000 chính là expression
Predicates: Predicates là những từ khóa thể hiện mối quan hệ giữa các expression và kết quả là đúng hay sai. Predicates có thể hiểu đơn giản là một từ biểu thị tính đúng/sai/không xác định được của một điều kiện và được sử dụng để giới hạn một truy vấn.
Ví dụ:
SELECT *
FROM customer
WHERE product = ‘television’;
Trong đó, ‘product = television’ là predicate của câu lệnh SQL.
Queries (truy vấn): Truy vấn SQL là một câu lệnh được dùng để truy xuất dữ liệu từ một cơ sở dữ liệu.
Ví dụ, bạn muốn truy xuất tên và số thứ tự của tất cả khách hàng có tên là ‘Quynh’. Truy vấn sau sẽ tìm kiếm những dòng dữ liệu đáp ứng yêu cầu:
SELECT name, customer_number
FROM customer
WHERE name LIKE ‘%Quynh%’;
Không bắt buộc cần sử dụng đầy đủ 6 thành phần trong cùng một câu lệnh. Đôi khi một câu lệnh SQL có thể chỉ bao gồm mệnh đề SELECT, ví dụ SELECT case when ‘mobifone’ ~ ‘mobi’ THEN 1 ELSE 0 END nhằm kiểm tra từ mobifone có chứa mobi hay không.
Quá trình xử lý của một truy vấn SQL như nào?
Một truy vấn SQL sẽ được xử lý bởi bộ xử lý ngôn ngữ truy vấn (query language processor) có trình phân tích cú pháp (parser) và trình tối ưu hóa truy vấn (query optimizer). Hệ thống sẽ tìm ra cách tốt nhất để thực hiện yêu cầu và công cụ SQL sẽ xác định cách diễn giải tác vụ đó. Máy chủ SQL sẽ biên dịch truy vấn theo ba giai đoạn:
Parsing: Quá trình này sẽ mã hóa truy vấn thành đại số quan hệ (relational algebra - một bộ các toán tử và quy tắc được sử dụng để thao tác trên các quan hệ). Sau đó, hệ thống sẽ kiểm tra tính hợp lệ của truy vấn, bao gồm:
Syntax check – kiểm tra tính hợp lệ của cú pháp SQL. Ví dụ với truy vấn SELECT * FORM employe. Lúc này hệ thống sẽ báo lỗi do sai chính tả FROM.
Semantic check – kiểm tra ngữ nghĩa của truy vấn. Ví dụ, truy vấn có chứa tên bảng dữ liệu không tồn tại sẽ bị báo lỗi.
Authorization check - kiểm tra quyền được truy cập vào bảng dữ liệu của người dùng.
Shared Pool check – Mỗi truy vấn đều có mã băm (hash code - giá trị của mỗi khối dữ liệu nhằm phân biệt các khối dữ liệu khác nhau) trong quá trình thực hiện.
Bước kiểm tra này nhằm xác định sự tồn tại của mã băm, nếu mã tồn tại trong nhóm chia sẻ (shared pool - nơi lưu trữ những truy vấn SQL vừa được thực thi và những định nghĩa dữ liệu được dùng gần đây nhất) thì cơ sở dữ liệu sẽ không thực hiện các bước bổ sung để tối ưu hóa nữa - quá trình này được gọi là soft parse. Còn nếu đây hoàn toàn là một truy vấn mới và chưa xuất hiện trong shared pool, truy vấn đó sẽ phải trải qua thêm một bước là hard parse - tối ưu hóa (optimizer).
Optimization: Tạo ra kế hoạch thực hiện truy vấn.
Trong giai đoạn tối ưu hóa, cơ sở dữ liệu phải thực hiện phân tích cú pháp ít nhất cho một câu lệnh DML duy nhất và thực hiện tối ưu hóa trong quá trình phân tích này. Quá trình này sẽ thu thập thông tin mô tả về dữ liệu cần quét qua, bao gồm lấy được số lượng hàng, giá trị cột, index, kích thước của bảng dữ liệu,...
Trình tối ưu hóa sẽ phân tích các điều kiện được sử dụng (WHERE), sắp xếp thứ tự của các câu lệnh, đảm bảo khả năng đọc nhanh của các truy vấn, giảm bớt những yêu cầu trùng lặp, đồng thời tạo ra nhiều kế hoạch để truy xuất được dữ liệu theo nhiều path và chi phí khác nhau.
Để thực hiện tìm kiếm và sửa đổi cơ sở dữ liệu một cách hiệu quả, cơ sở dữ liệu có cấu trúc sử dụng mã byte (bytecode).
Mục tiêu của quá trình này nhằm kiểm tra, đánh giá và chọn ra kế hoạch truy vấn hiệu quả, thời gian thực hiện được tối ưu và với chi phí thấp nhất. Để kiểm tra kế hoạch thực hiện truy vấn, bạn có thể sử dụng câu lệnh EXPLAIN.
Execution Engine: Gửi truy vấn tới bộ máy thực thi truy vấn để thực hiện thứ tự câu lệnh theo kế hoạch trên cơ sở dữ liệu và hiển thị kết quả.
Quá trình xử lý của một truy vấn SQL
Các nhóm câu lệnh SQL
Các nhóm câu lệnh SQL phổ biến nhất
SQL sử dụng một số lệnh chính, bao gồm:
Data Definition Language (DDL - Ngôn ngữ định nghĩa dữ liệu):
Đây là các lệnh SQL được sử dụng để thiết kế cấu trúc cơ sở dữ liệu, ví dụ:
CREATE: Tạo một bảng dữ liệu hoặc một bản view mới.
ALTER: Thay đổi và điều chỉnh bảng dữ liệu đã có.
DROP: Xóa toàn bộ một bảng hoặc một object khỏi cơ sở dữ liệu.
TRUNCATE: Xóa toàn bộ bản ghi trong bảng, giải phóng bộ nhớ và không thể phục hồi lại
Đặc biệt, khi định nghĩa một bảng với CREATE, bạn cũng cần định nghĩa cột, dạng dữ liệu và các điều kiện khác.
Ví dụ, để tạo một bảng mới:
CREATE TABLE lockers (
locker_number INT PRIMARY KEY,
location varchar(20) NULL,
number_of_times_used INT CHECK (NumberOfTimesUsed>=0),
date_when_in_inserted DATETIME DEFAULT (GETDATE()));
Truy vấn này sẽ tạo một bảng tên là lockers với bốn trường:
Cột locker_number là khóa chính của bảng, dạng dữ liệu là integer
Cột location có thể có bản ghi không chứa dữ liệu, dạng dữ liệu là varchar
Cột number_of_times_used có dạng dữ liệu là integer và không được có giá trị âm
Cột date_when_in_inserted được mặc định lưu dạng dữ liệu là datetime và lưu giá trị là ngày hôm nay
Data Manipulation Language (DML - Ngôn ngữ thao tác dữ liệu):
Các câu lệnh dùng để điều chỉnh dữ liệu và thao tác với dữ liệu hiện có, ví dụ:
INSERT: Tạo ra một bản ghi mới trong bảng dữ liệu đã có, bằng cách sử dụng VALUES để bổ sung giá trị một cách chính xác, hoặc sử dụng SELECT để bổ sung dữ liệu từ những bảng khác. Ví dụ để bổ sung dữ liệu về nhân viên:
INSERT INTO employee(employee_number, employee_first_name, employee_middle_name, employee_last_name)
VALUES (2, 'Jane', NULL, Nguyen);
DELETE: Xóa các bản ghi trong một bảng theo một điều kiện hoặc có thể xóa toàn bộ bảng. Khác với TRUNCATE và DROP, dữ liệu sau khi DELETE vẫn có thể khôi phục lại. Ví dụ, để xóa nhân viên có mã nhân viên là 5:
DELETE FROM employee
WHERE employee_number = 5;
UPDATE: Thay đổi các bản ghi sẵn có trong một bảng dữ liệu. Đó có thể là thay đổi một giá trị từ On leave sang Active, ví dụ:
UPDATE employee
SET status = 'Active'
WHERE employee_number = 5;
Data Control Language (DCL - Ngôn ngữ kiểm soát dữ liệu):
Đây là các câu lệnh được dùng để quản lý cơ sở dữ liệu, nhằm cấp quyền truy cập, quyền thực hiện tác vụ hoặc quyền view cho những người dùng khác, ví dụ:
GRANT: Cấp quyền cho phép thao tác với một hoặc nhiều bảng.
REVOKE: Thu hồi quyền truy cập được cấp cho người dùng.
Transaction Control Language (TCL - Ngôn ngữ kiểm soát giao dịch):
Đây là các câu lệnh được dùng để thực hiện các thay đổi đối với cơ sở dữ liệu, ví dụ:
ROLLBACK: hoàn tác một giao dịch bị lỗi
Data Query Language (DQL - Ngôn ngữ truy vấn dữ liệu):
Đây là các lệnh SQL được sử dụng để truy xuất dữ liệu được lưu trữ trong cơ sở dữ liệu, ví dụ:
SELECT: Lựa chọn các trường dữ liệu cần truy xuất hoặc thực hiện các tính toán (SUM, COUNT, MIN, MAX, AVG) hoặc thay đổi tên (ALIAS)
FROM: Xác định dữ liệu được truy xuất từ bảng nào, schema nào. Mệnh đề này cũng thường được sử dụng cùng với JOIN nhằm kết hợp nhiều bảng dữ liệu theo một điều kiện/cột dữ liệu chính
WHERE: Giới hạn các dòng dữ liệu theo một điều kiện cụ thể. Ví dụ, bạn có thể truy xuất các dòng dữ liệu của những người hiện đang sống tại New York
GROUP BY: Được sử dụng khi có những phép tổng hợp ở mệnh đề SELECT. Ví dụ, nếu bạn muốn tính giờ làm việc của mỗi nhân viên theo tháng, có thể truy vấn bằng cách SUM(working_hour) và GROUP BY employee_id, month.
HAVING: Giới hạn các nhóm GROUP BY theo điều kiện. Ví dụ, nếu bạn muốn truy vấn những nhân viên có có tổng số giờ làm việc lớn hơn 50, bạn có thể SUM(working_hour) và GROUP BY employee_id, month, HAVING SUM(working_hour) > 50
ORDER BY: Sắp xếp thứ tự của các dòng dữ liệu, theo chiều tăng dần/từ A tới Z (ASCENDING) hoặc giảm dần/từ Z tới A (DESCENDING).
Đọc thêm: SQL Cheat Sheet
Nếu bạn học SQL với mục đích trở thành Data Analyst hoặc Business Analyst, bạn sẽ cần phải thành thạo Data Query Language (DQL - Ngôn ngữ truy vấn dữ liệu), biết sử dụng các câu lệnh SQL để truy vấn dữ liệu từ cơ sở dữ liệu nhằm trả lời các bài toán của doanh nghiệp. Còn nếu bạn định hướng trở thành Data Engineer, bạn sẽ cần thành thạo tất cả các loại truy vấn trên.
Đọc thêm: Lộ trình học Data Analyst/Business Analyst chi tiết cho dân trái ngành
Tạm kết
Trên đây là những kiến thức tổng quan nhất mà bạn cần phải biết về SQL một trong những “công cụ” quan trọng nhất đối với người làm data.
Nếu bạn có định hướng trở thành Data Analyst, muốn trang bị kiến thức căn bản về hệ thống dữ liệu, biết cách “tương tác” với hệ thống để lấy dữ liệu phục vụ phân tích qua ngôn ngữ SQL hãy tham khảo khóa học SQL for Data Analysis của TM Data School.
Khóa học sẽ mang đến cho bạn:
Kiến thức bài bản về hệ thống dữ liệu (Data System): Hiểu rõ cấu trúc và từng thành phần của một hệ thống dữ liệu: Data Collector, Data Pipeline, Data Warehouse, Data Mining Tool.
Tạo và quản lý dữ liệu trong nhà kho dữ liệu với SQL: Sử dụng các câu lệnh SQL để tạo và quản lý dữ liệu: tạo bảng, chỉnh sửa cấu trúc bảng, tạo ràng buộc (constraints), update bảng, xóa bảng,...
Truy vấn dữ liệu từ cơ bản đến nâng cao với SQL: Nắm vững các câu lệnh truy vấn SQL nhằm hỗ trợ Data Analyst/Data Scientist lấy dữ liệu từ hệ thống phục vụ quá trình phân tích.
Project thực tế thêm vào portfolio: Capstone project xây dựng hệ thống dữ liệu và truy vấn bằng SQL xuyên suốt qua cả khoá học để học viên có thể thêm vào portfolio ứng tuyển công việc.
Ngoài khi tham gia khóa học bạn còn được hướng dẫn bài bản từ các anh chị trainers được đào tạo về Data Science ở nước ngoài.
Tham khảo chi tiết khóa học tại đây!
Bài viết được tổng hợp và biên dịch bởi Tomorrow Marketers, xin vui lòng không sao chép dưới mọi hình thức!