Facebook Pixel

SQL là gì? Hướng dẫn Prompt SQL với ChatGPT, Copilot

06 Dec, 2024

SQL 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.

SQL là gì? Hướng dẫn Prompt SQL với ChatGPT, Copilot

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Sql
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.

Sql
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.

Sql
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ư ChatGPTCopilot.

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.

Sql
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

sql là gì
Câu lệnh SQL

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:

Bash
CREATE TABLE TABLE_NAME (COLUMN_NAME DATATYPES[,....]);  

Ví dụ:

Bash
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

Bash
DROP TABLE table_name;

Ví dụ:

Bash
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

Bash
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:

Bash
ALTER TABLE table_name MODIFY(column_definitions....);  

Ví dụ:

Bash
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.

Bash
TRUNCATE TABLE table_name;  

Ví dụ:

Bash
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

Bash
INSERT INTO TABLE_NAME    
(col1, col2, col3,.... col N)  
VALUES (value1, value2, value3, .... valueN);  

Hoặc

Bash
INSERT INTO TABLE_NAME VALUES (value1, value2, value3, .... valueN); 

Ví dụ

Bash
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

Bash
UPDATE table_name SET [column_name1= value1,...column_nameN = valueN] [WHERE CONDITION]  

Ví dụ

Bash
UPDATE students    
SET User_Name = 'Sonoo'    
WHERE Student_Id = '3'  

4.2.3 Delete

Xóa bảng ghi với cú pháp

Bash
DELETE FROM table_name [WHERE condition];

Ví dụ

Bash
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

Bash
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:‌

Bash
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

Bash
COMMIT;

Ví dụ

Bash
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

Bash
ROLLBACK;

Ví dụ

Bash
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

Bash
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

Bash
SELECT expressions    
FROM TABLES    
WHERE conditions;  

Ví dụ

Bash
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:

Bài viết liên quan

Lập trình backend expressjs

xây dựng hệ thống microservices
  • Kiến trúc Hexagonal và ứng dụngal font-
  • TypeScript: OOP và nguyên lý SOLIDal font-
  • Event-Driven Architecture, Queue & PubSubal font-
  • Basic scalable System Designal font-

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab