SQL là gì? Hướng dẫn Prompt SQL với ChatGPT, Copilot
06 Dec, 2024
Hướng nội
AuthorSQL là gì? Vì sao nên học ngôn ngữ SQL? 200Lab sẽ cung cấp kiến thức SQL cơ bản, các ưu & nhược điểm của ngôn ngữ này.
Mục Lục
Bạn đã từng nghe đến SQL nhưng chưa hiểu rõ nó là gì? Hay bạn biết SQL là một ngôn ngữ để làm việc với dữ liệu, nhưng vẫn chưa biết bắt đầu từ đâu?
Nếu bạn đang làm việc với dữ liệu – dù là phát triển ứng dụng, phân tích thông tin hay quản lý hệ thống – thì SQL chính là "người bạn đồng hành" không thể thiếu. Với SQL, bạn có thể dễ dàng lấy dữ liệu, sửa đổi, hoặc phân tích thông tin chỉ bằng vài dòng lệnh đơn giản.
Trong bài viết này, mình sẽ giải thích SQL một cách dễ hiểu nhất, dành cho cả người mới bắt đầu lẫn những ai đang muốn nâng cao kỹ năng. Từ khái niệm SQL là gì? đến những cú pháp cơ bản và cách nó hỗ trợ bạn làm việc với cơ sở dữ liệu hàng ngày.
1. SQL là gì?
SQL (Structured Query Language) là một ngôn ngữ truy vấn có cấu trúc, được thiết kế để giao tiếp với cơ sở dữ liệu quan hệ (RDBMS). SQL thực chất là một ngôn ngữ cực kỳ dễ học, được thiết kế để giúp bạn "nói chuyện" với cơ sở dữ liệu. Với kho tài liệu khổng lồ từ Google và Youtube và sự hỗ trợ của ChatGPT bạn hoàn toàn có thể thành tạo SQL một cách nhanh chóng
SQL xuất hiện lần đầu vào những năm 1970 tại IBM trong dự án System R – một trong những hệ quản trị cơ sở dữ liệu đầu tiên trên thế giới. Ban đầu, nó được gọi là SEQUEL (Structured English Query Language), nhưng sau đó phải đổi tên thành SQL vì lý do bản quyền. Tuy vậy, cách gọi "sequel" vẫn phổ biến cho đến ngày nay.
SQL được sử dụng để thực hiện 4 nhóm thao tác chính:
- Truy vấn dữ liệu (SELECT): Giúp bạn tìm kiếm và lấy thông tin từ các bảng dữ liệu.
- Chỉnh sửa dữ liệu (INSERT, UPDATE, DELETE): Cho phép thêm, sửa, hoặc xóa dữ liệu trong bảng.
- Quản lý cấu trúc cơ sở dữ liệu (CREATE, ALTER, DROP): Tạo hoặc thay đổi cấu trúc các bảng, cột, và thậm chí cả cơ sở dữ liệu.
- Kiểm soát quyền truy cập (GRANT, REVOKE): Điều chỉnh quyền truy cập để đảm bảo bảo mật dữ liệu.
2. SQL được dùng để làm gì?
SQL không phải là công cụ độc quyền của bất kỳ công ty nào. Nó đã trở thành tiêu chuẩn quốc tế (ISO/ANSI), được sử dụng trong hầu hết các hệ quản trị cơ sở dữ liệu phổ biến hiện nay, như: MySQL, PostgreSQL, Microsoft SQL Server, Oracle Database.
Dù bạn không nhận ra, mọi thao tác như đăng nhập, tìm kiếm sản phẩm, hay thậm chí đặt đồ ăn qua ứng dụng đều có SQL góp mặt ở phía sau. Nhưng cụ thể, SQL giúp chúng ta làm gì? Bạn có bao giờ thắc mắc làm thế nào một trang web thương mại điện tử hiển thị đúng sản phẩm bạn tìm kiếm?
Ví dụ: Bạn gõ từ khoá "iPhone 14" trên một trang web bán hàng. SQL sẽ gửi câu lệnh như sau đến cơ sở dữ liệu, kết quả: Toàn bộ thông tin về iPhone 14 (giá, số lượng, màu sắc) được hiển thị cho bạn.
SELECT * FROM Products WHERE name = 'iPhone 14'
Hay bạn có muốn xóa những sản phẩm lỗi thời hoặc không còn bán trên cửa hàng của mình trên Shopee nữa, ứng với thao tác của bạn trên màn hình, sẽ có 1 câu lệnh SQL được gửi đến cơ sở dữ liệu.
DELETE FROM Products WHERE name = 'Nokia 3310'
SQL còn được dùng để kiểm soát ai có quyền làm gì với dữ liệu. Ví dụ, chỉ nhân viên kế toán mới có thể xem thông tin lương của nhân viên khác.
GRANT SELECT ON EmployeeSalaries TO accountant_role;
3 Hướng dẫn Prompt SQL với ChatGPT, Copiot
Bạn nghĩ SQL là thứ gì đó phức tạp, khô khan và chỉ dành cho dân IT? Thực tế, SQL không chỉ dễ học mà còn cực kỳ thú vị, đặc biệt khi kết hợp với những công cụ hỗ trợ mạnh mẽ như ChatGPT và Copilot.
Trước khi đến với phần hướng dẫn mình sẽ chia sẻ kinh nghiệm cá nhân của mình để giúp các bạn tránh những sau sót không mong muốn khi tự học SQL nhé.
Mình sẽ không sự dụng ChatGPT, Copilot để:
- Tìm hiểu về các khái niệm cơ bản trong SQL (JOIN, Window Function) , các bạn hoàn toán có thể tìm các nguồn này ở Youtube, Datacamp, Kaggle, như mình đã nói có rất nhiều nguồn tài liệu chất lượng trên internet. Bạn không nên prompt khi chưa có kiến thức cơ bản.
- Cập nhật các thay đổi, cập nhật mới nhất về SQL trong một Database cụ thể, mình thấy ChatGPT hay Copilot sẽ không trả lời chính xác nên tốt nhất các bạn đừng hỏi nhé.
Mình dùng ChatGPT, Copilot để:
- Khi gặp các bài toán khó chưa giải quyết được.
- Khi không thể ghi nhớ được hết tất cả các hàm mà Database cung cấp, ví dụ như "Hàm cắt chuỗi trong Database Postgres là gì?", vì mỗi Database khác nhau sẽ có cách viết khác nhau làm mình không nhớ hết được.
Sau đây mình sẽ Demo một câu prompt với Bigquery của Google nhé trên ChatGPT.
Tôi có bảng dữ liệu customer_data, orders, pre_orders trên Bigquery, tôi muốn tìm những khách hàng (email, sdt) ở TPHCM đã mua điện thoại Iphone 2 năm trước nhưng năm nay chưa đăng kí pre order, mức chi tiêu năm nay của họ phải trên 20tr
.
Và đây là câu trả lời của ChatGPT.
WITH
-- Lọc khách hàng từ TPHCM đã mua điện thoại iPhone 2 năm trước
iphone_customers AS (
SELECT DISTINCT
c.email,
c.phone
FROM
`your_project.customer_data` AS c
JOIN
`your_project.orders` AS o
ON
c.customer_id = o.customer_id
WHERE
o.product_name LIKE '%iPhone%'
AND o.order_date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 2 YEAR) AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 YEAR)
AND c.city = 'TPHCM'
),
-- Lọc khách hàng đã đăng ký pre-order năm nay
pre_orders_this_year AS (
SELECT DISTINCT
c.email,
c.phone
FROM
`your_project.customer_data` AS c
JOIN
`your_project.pre_orders` AS po
ON
c.customer_id = po.customer_id
WHERE
EXTRACT(YEAR FROM po.order_date) = EXTRACT(YEAR FROM CURRENT_DATE())
),
-- Lọc tổng chi tiêu của khách hàng năm nay
customer_spending_this_year AS (
SELECT
c.email,
c.phone,
SUM(o.amount) AS total_spent
FROM
`your_project.customer_data` AS c
JOIN
`your_project.orders` AS o
ON
c.customer_id = o.customer_id
WHERE
EXTRACT(YEAR FROM o.order_date) = EXTRACT(YEAR FROM CURRENT_DATE())
GROUP BY
c.email,
c.phone
)
-- Lấy khách hàng thỏa mãn tất cả các điều kiện
SELECT
ic.email,
ic.phone
FROM
iphone_customers AS ic
LEFT JOIN
pre_orders_this_year AS poty
ON
ic.email = poty.email
AND ic.phone = poty.phone
JOIN
customer_spending_this_year AS csty
ON
ic.email = csty.email
AND ic.phone = csty.phone
WHERE
poty.email IS NULL -- Loại bỏ khách hàng đã đăng ký pre-order năm nay
AND csty.total_spent > 20000000; -- Điều kiện chi tiêu trên 20 triệu
Mình đánh giá cách viết này của ChatGPT rất tốt, nếu tự viết mình cũng sẽ làm giống như thế này.
4. Những câu lệnh SQL bạn cần biết
Các câu lệnh SQL được sử dụng để giao tiếp với cơ sở dữ liệu. Nó cũng được sử dụng để thực hiện các tác vụ, chức năng và truy vấn dữ liệu cụ thể. SQL có thể thực hiện các tác vụ khác nhau như tạo bảng, thêm dữ liệu vào bảng, thả bảng, sửa đổi bảng, đặt quyền cho người dùng.
Dưới đây là năm loại truy vấn SQL được sử dụng rộng rãi.
4.1 Ngôn ngữ định nghĩa dữ liệu (Data Definition Language)
Data Definition Language hay còn gọi là ngôn ngữ định nghĩa dữ liệu được viế tắt là DDL. Được gọi là lệnh định nghĩa dữ liệu vì chúng thay đổi cấu trúc của bảng như tạo bảng, xóa bảng, thay đổi bảng.
Tất cả lệnh của DDL đều được tự động cam kết nghĩa là nó lưu vĩnh viễn tất cả các thay đổi trong cơ sở dữ liệu.
Đây là một số lệnh thuộc DDL: Create, Alter, Drop, Truncate
41.1 Create
Tạo một bảng mới trong cơ sở dữ liệu với cú pháp:
CREATE TABLE TABLE_NAME (COLUMN_NAME DATATYPES[,....]);
Ví dụ:
CREATE TABLE EMPLOYEE(Name VARCHAR2(20), Email VARCHAR2(100), DOB DATE);
4.1.2 Drop
Được sử dụng để xóa toàn bộ một bảng hoặc các đối tượng khác được lưu trữ trong bảng với cú pháp
DROP TABLE table_name;
Ví dụ:
DROP TABLE EMPLOYEE;
4.1.3 Alter
Được sử dụng để sửa đổi một đối tượng của cơ sở dữ liệu. Thay đổi này có thể là sửa đổi các đặc điểm của một thuộc tính hiện có hoặc thêm một thuộc tính mới.
Cú pháp: thêm một cột mới vào bảng
ALTER TABLE table_name ADD column_name COLUMN-definition;
Để sửa đổi cột hiện có trong bảng, sử dụng cú pháp:
ALTER TABLE table_name MODIFY(column_definitions....);
Ví dụ:
ALTER TABLE STU_DETAILS ADD(ADDRESS VARCHAR2(20));
ALTER TABLE STU_DETAILS MODIFY (NAME VARCHAR2(20));
4.1.4 Truncate
Được sử dụng để xóa tất cả các hàng khỏi bảng và giải phóng không gian chứa bảng với cú pháp.
TRUNCATE TABLE table_name;
Ví dụ:
TRUNCATE TABLE EMPLOYEE;
4.2 Ngôn ngữ thao tác dữ liệu (Data Manipulation Language)
Data Manipulation Language hay còn gọi là ngôn ngữ thao tác dữ liệu thường được viết tắt là DML.
Được sử dụng để sửa đổi cơ sở dữ liệu trong các bảng hiện có bằng cách thêm, thay đổi hoặc xóa dữ liệu. Không giống như lệnh DDL xác định cách lưu trữ dữ liệu, lệnh DML hoạt động trong các bảng được xác định với các lệnh DDL.
Đây là một số lệnh thuộc DML: Insert, Update, Delete
4.2.1 Insert
Tạo một bảng ghi với cú pháp
INSERT INTO TABLE_NAME
(col1, col2, col3,.... col N)
VALUES (value1, value2, value3, .... valueN);
Hoặc
INSERT INTO TABLE_NAME VALUES (value1, value2, value3, .... valueN);
Ví dụ
INSERT INTO javatpoint (Author, Subject) VALUES ("Sonoo", "DBMS");
4.2.2 Update
Cập nhật hoặc sửa đổi giá trị của một cột trong bảng với cú pháp
UPDATE table_name SET [column_name1= value1,...column_nameN = valueN] [WHERE CONDITION]
Ví dụ
UPDATE students
SET User_Name = 'Sonoo'
WHERE Student_Id = '3'
4.2.3 Delete
Xóa bảng ghi với cú pháp
DELETE FROM table_name [WHERE condition];
Ví dụ
DELETE FROM javatpoint
WHERE Author="Sonoo";
4.3 Ngôn ngữ điều khiển dữ liệu (Data Control Language)
Data Control Language hay còn gọi là ngôn ngữ điều khiển dữ liệu thường được viết tắt là DCL. Được sử dụng để cấp hoặc thu hồi đặc quyền truy cập người dùng.
Đây là một số lệnh thuộc DML: Grant, Revoke.
4.3.1 Grant
Cung cấp một quyền cho người dùng với ví dụ sau
GRANT SELECT, UPDATE ON MY_TABLE TO SOME_USER, ANOTHER_USER;
4.3.2 Revoke
Lấy lại các quyền được cấp từ người dùng với ví dụ sau:
REVOKE SELECT, UPDATE ON MY_TABLE FROM USER1, USER2;
4.4 Ngôn ngữ kiểm soát giao dịch (Transaction Control Language)
Transaction Control Language hay còn gọi là ngôn ngữ kiểm soát giao dịch thường được viết tắt là TCL.
Được sử dụng để thay đổi trạng thái của một số dữ liệu. Ví dụ, để commit các thay đổi giao dịch hoặc thay đổi giao dịch rollback.
Đây là một số lệnh thuộc TCL: Commit, Rollback, Savepoint
4.4.1 Commit
Được sử dụng để lưu tất cả các giao dịch vào cơ sở dữ liệu với cú pháp
COMMIT;
Ví dụ
DELETE FROM CUSTOMERS
WHERE AGE = 25;
COMMIT;
4.4.2 Rollback
Được sử dụng để hoàn tác các giao dịch chưa được lưu vào cơ sở dữ liệu với cú pháp
ROLLBACK;
Ví dụ
DELETE FROM CUSTOMERS
WHERE AGE = 25;
ROLLBACK;
4.4.3 Savepoint
Được sử dụng để quay trở lại một giao dịch bất kỳ mà không cần trở về toàn bộ giao dịch với cú pháp
SAVEPOINT SAVEPOINT_NAME;
4.5 Ngôn ngữ truy vấn dữ liệu (Data Query Language)
Data Query Language hay còn gọi là ngôn ngữ truy vấn dữ liệu thường được viết tắt là DQL. DQL chỉ bao gồm một lệnh, chọn, được sử dụng để lấy dữ liệu cụ thể từ các bảng. Lệnh này đôi khi được nhóm lại với các lệnh DML.
Tất cả lệnh của DDL đều được tự động cam kết nghĩa là nó lưu vĩnh viễn tất cả các thay đổi trong cơ sở dữ liệu. Nó chỉ sử dụng một lệnh: Select
4.5.1 Select
Được sử dụng để chọn thuộc tính dựa trên điều kiện được mô tả bởi mệnh đề WHERE với cú pháp
SELECT expressions
FROM TABLES
WHERE conditions;
Ví dụ
SELECT emp_name
FROM employee
WHERE age > 20;
Hy vọng rằng những chia sẻ của 200Lab có thể giúp bạn hiểu rõ hơn về ngôn ngữ SQL - Structured Query Language. Bên cạnh đó, bạn cũng có thể cập nhật kiến thức cơ bản về các câu lệnh thường gặp trong SQL, cũng như lịch sử hình thành thú vị của ngôn ngữ này.
Một vài bài viết có thể bạn sẽ thích: