SQL (Structured Query Language) là ngôn ngữ không thể thiếu khi làm việc với cơ sở dữ liệu, giúp bạn thao tác và quản lý dữ liệu một cách hiệu quả. Dù bạn là người mới học SQL hay đã có kinh nghiệm, nắm vững các lệnh SQL cơ bản luôn là nền tảng quan trọng để xử lý dữ liệu, truy vấn thông tin và tối ưu hiệu suất hệ thống.

Trong bài viết này, hãy  cùng VietnamWorks inTECH khám phá danh sách các truy vấn và câu lệnh SQL quan trọng mà bạn cần biết.

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ác lệnh SQL là tập hợp các hướng dẫn dùng để giao tiếp với cơ sở dữ liệu nhằm thực hiện các tác vụ như truy vấn, thao tác và quản lý dữ liệu.

Các lệnh SQL có thể được sử dụng để tìm kiếm dữ liệu trong cơ sở dữ liệu, cũng như thực hiện các chức năng khác như tạo bảng, thêm dữ liệu vào bảng, sửa đổi dữ liệu và xóa bảng.

Dưới đây là danh sách các lệnh SQL cơ bản mà bạn cần biết khi làm việc với SQL.

Các lệnh SQL cơ bản

1. SELECT và FROM

Lệnh SELECT xác định các cột dữ liệu sẽ được hiển thị trong kết quả truy vấn. Ngoài ra, bạn cũng có thể tạo các cột tính toán dựa trên dữ liệu hiện có.

Ví dụ sau sẽ lấy ba cột (studentID, FirstName, LastName) từ bảng student và thêm một cột tính toán (FullName) bằng cách ghép hai cột FirstNameLastName:

SELECT studentID, FirstName, LastName, FirstName + ' ' + LastName AS FullName

FROM student;

Kết quả:

+-----------+-------------------+------------+------------------------+
| studentID | FirstName         | LastName   | FullName               |
+-----------+-------------------+------------+------------------------+
|         1 | Monique           | Davis      | Monique Davis          |
|         2 | Teri              | Gutierrez  | Teri Gutierrez         |
|         3 | Spencer           | Pautier    | Spencer Pautier        |
|         4 | Louis             | Ramsey     | Louis Ramsey           |
|         5 | Alvin             | Greene     | Alvin Greene           |
|         6 | Sophie            | Freeman    | Sophie Freeman         |
|         7 | Edgar Frank "Ted" | Codd       | Edgar Frank "Ted" Codd |
|         8 | Donald D.         | Chamberlin | Donald D. Chamberlin   |
|         9 | Raymond F.        | Boyce      | Raymond F. Boyce       |
+-----------+-------------------+------------+------------------------+
9 rows in set (0.00 sec)

2. CREATE TABLE

Lệnh CREATE TABLE dùng để tạo bảng mới trong cơ sở dữ liệu.

CREATE TABLE table_name (

    column_1 datatype,

    column_2 datatype,

    column_3 datatype

);

3. ALTER TABLE

Lệnh ALTER TABLE dùng để thay đổi cấu trúc của bảng. Ví dụ, thêm một cột mới vào bảng:

ALTER TABLE table_name

ADD column_name datatype;

4. CHECK Constraint

CHECK giúp giới hạn phạm vi giá trị có thể được nhập vào một cột.

Ví dụ sau tạo một ràng buộc CHECK trên cột Age, đảm bảo rằng tất cả giá trị nhập vào phải từ 18 trở lên:

CREATE TABLE Persons (

    ID int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Age int,

    CHECK (Age >= 18)

);

Để đặt tên cho một ràng buộc CHECK và định nghĩa ràng buộc CHECK trên nhiều cột, hãy sử dụng cú pháp SQL sau:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255),
    CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);

5. WHERE (AND, OR, IN, BETWEEN, LIKE)

Mệnh đề WHERE được sử dụng để giới hạn số lượng hàng được trả về.

Ví dụ sau đây sẽ minh họa cách hoạt động của WHERE. Đầu tiên, chúng ta thực hiện một câu lệnh SELECT mà không có mệnh đề WHERE, sau đó thêm WHERE để lọc dữ liệu dựa trên các điều kiện cụ thể.

Câu lệnh SELECT không có WHERE:

SELECT studentID, FullName, sat_score, rcd_updated FROM student;

 

+-----------+------------------------+-----------+---------------------+
| studentID | FullName               | sat_score | rcd_updated         |
+-----------+------------------------+-----------+---------------------+
|         1 | Monique Davis          |       400 | 2017-08-16 15:34:50 |
|         2 | Teri Gutierrez         |       800 | 2017-08-16 15:34:50 |
|         3 | Spencer Pautier        |      1000 | 2017-08-16 15:34:50 |
|         4 | Louis Ramsey           |      1200 | 2017-08-16 15:34:50 |
|         5 | Alvin Greene           |      1200 | 2017-08-16 15:34:50 |
|         6 | Sophie Freeman         |      1200 | 2017-08-16 15:34:50 |
|         7 | Edgar Frank "Ted" Codd |      2400 | 2017-08-16 15:35:33 |
|         8 | Donald D. Chamberlin   |      2400 | 2017-08-16 15:35:33 |
|         9 | Raymond F. Boyce       |      2400 | 2017-08-16 15:35:33 |
+-----------+------------------------+-----------+---------------------+
9 rows in set (0.00 sec)

Câu lệnh SELECT với WHERE để giới hạn kết quả:

STUDENT studentID, FullName, sat_score, recordUpdated
FROM student
WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8)
        AND
        sat_score NOT IN (1000, 1400);
+-----------+----------------------+-----------+---------------------+
| studentID | FullName             | sat_score | rcd_updated         |
+-----------+----------------------+-----------+---------------------+
|         1 | Monique Davis        |       400 | 2017-08-16 15:34:50 |
|         2 | Teri Gutierrez       |       800 | 2017-08-16 15:34:50 |
|         4 | Louis Ramsey         |      1200 | 2017-08-16 15:34:50 |
|         5 | Alvin Greene         |      1200 | 2017-08-16 15:34:50 |
|         8 | Donald D. Chamberlin |      2400 | 2017-08-16 15:35:33 |
+-----------+----------------------+-----------+---------------------+
5 rows in set (0.00 sec)

6. UPDATE

Để cập nhật một bản ghi trong bảng, bạn sử dụng câu lệnh UPDATE.

Sử dụng điều kiện WHERE để chỉ định các bản ghi cần cập nhật. Bạn có thể cập nhật một hoặc nhiều cột cùng lúc. Cú pháp như sau:

UPDATE table_name
SET column1 = value1, 
    column2 = value2, ...
WHERE condition;

Ví dụ sau đây cập nhật tên của bản ghi có Id = 4:

UPDATE Person
SET Name = “Elton John”
WHERE Id = 4;

Bạn cũng có thể cập nhật cột trong một bảng bằng cách sử dụng giá trị từ bảng khác. Sử dụng mệnh đề JOIN để lấy dữ liệu từ nhiều bảng. Cú pháp như sau:

UPDATE table_name1
SET table_name1.column1 = table_name2.columnA
    table_name1.column2 = table_name2.columnB
FROM table_name1
JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key

Ví dụ sau cập nhật thông tin Manager cho tất cả bản ghi trong bảng Person:

UPDATE Person
SET Person.Manager = Department.Manager
FROM Person
JOIN Department ON Person.DepartmentID = Department.ID

7. GROUP BY

GROUP BY cho phép bạn nhóm các hàng lại và tổng hợp dữ liệu.

Dưới đây là cú pháp của GROUP BY:

SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;

8. HAVING

HAVING cho phép bạn lọc dữ liệu đã được tổng hợp bởi mệnh đề GROUP BY, giúp người dùng nhận được một tập hợp giới hạn các bản ghi để xem.

Dưới đây là cú pháp của HAVING:

SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > value;

9. AVG()

"Average" được sử dụng để tính trung bình của một cột số từ tập hợp các hàng được trả về bởi một câu lệnh SQL.

Dưới đây là cú pháp để sử dụng hàm này:

SELECT groupingField, AVG(num_field)
FROM table1
GROUP BY groupingField

Dưới đây là một ví dụ sử dụng bảng student:

SELECT studentID, FullName, AVG(sat_score) 
FROM student 
GROUP BY studentID, FullName;

10. AS (Đặt bí danh)

Lệnh AS dùng để đặt tên bí danh cho cột hoặc bảng:

SELECT user_only_num1 AS AgeOfServer, (user_only_num1 - warranty_period) AS NonWarrantyPeriod FROM server_table

Điều này tạo ra kết quả đầu ra như sau:

+-------------+------------------------+
| AgeOfServer | NonWarrantyPeriod      | 
+-------------+------------------------+
|         36  |                     24 |
|         24  |                     12 | 
|         61  |                     49 |
|         12  |                      0 | 
|          6  |                     -6 |
|          0  |                    -12 | 
|         36  |                     24 |
|         36  |                     24 | 
|         24  |                     12 | 
+-------------+------------------------+

Bạn cũng có thể sử dụng AS để gán tên cho bảng, giúp việc tham chiếu trong các phép JOIN trở nên dễ dàng hơn.

SELECT ord.product, ord.ord_number, ord.price, cust.cust_name, cust.cust_number FROM customer_table AS cust

JOIN order_table AS ord ON cust.cust_number = ord.cust_number

Điều này tạo ra kết quả đầu ra như sau:

+-------------+------------+-----------+-----------------+--------------+
| product     | ord_number | price     | cust_name       | cust_number  |
+-------------+------------+-----------+-----------------+--------------+
|     RAM     |   12345    |       124 | John Smith      |  20          |
|     CPU     |   12346    |       212 | Mia X           |  22          |
|     USB     |   12347    |        49 | Elise Beth      |  21          |
|     Cable   |   12348    |         0 | Paul Fort       |  19          |
|     Mouse   |   12349    |        66 | Nats Back       |  15          |
|     Laptop  |   12350    |       612 | Mel S           |  36          |
|     Keyboard|   12351    |        24 | George Z        |  95          |
|     Keyboard|   12352    |        24 | Ally B          |  55          |
|     Air     |   12353    |        12 | Maria Trust     |  11          |
+-------------+------------+-----------+-----------------+--------------+

11. ORDER BY

ORDER BY cung cấp cách sắp xếp tập kết quả theo một hoặc nhiều cột trong câu lệnh SELECT. Dưới đây là một truy vấn SQL sắp xếp danh sách sinh viên theo FullName theo thứ tự giảm dần.

Mặc định, thứ tự sắp xếp là tăng dần (ASC), nhưng để sắp xếp theo thứ tự ngược lại (giảm dần), bạn sử dụng DESC.

SELECT studentID, FullName, sat_score
FROM student
ORDER BY FullName DESC;

12. COUNT

COUNT sẽ đếm số lượng hàng và trả về kết quả đó dưới dạng một cột trong tập kết quả.

Dưới đây là một số trường hợp sử dụng COUNT:

  • Đếm tất cả các hàng trong một bảng (không cần GROUP BY)
  • Đếm tổng số của từng tập con dữ liệu (cần có GROUP BY)

Câu lệnh SQL dưới đây đếm tổng số hàng trong bảng. Lưu ý rằng bạn có thể đặt tên cho cột kết quả COUNT bằng cách sử dụng AS.

SELECT count(*) AS studentCount FROM student;

13. DELETE

DELETE được sử dụng để xóa một bản ghi trong bảng.

Hãy cẩn thận! Bạn có thể xóa toàn bộ dữ liệu trong bảng hoặc chỉ một số bản ghi nhất định. Sử dụng điều kiện WHERE để chỉ định các bản ghi cần xóa. Cú pháp như sau:

DELETE FROM table_name
WHERE condition;

Dưới đây là một ví dụ xóa khỏi bảng Person bản ghi có Id bằng 3:

DELETE FROM Person
WHERE Id = 3;
 
14. JOIN (INNER, LEFT, RIGHT, FULL OUTER)

JOIN, còn được gọi là Inner Join, chọn các bản ghi có giá trị khớp nhau trong hai bảng.

SELECT * FROM A x JOIN B y ON y.aId = x.Id

LEFT JOIN trả về tất cả các hàng từ bảng bên trái và các hàng khớp từ bảng bên phải. Nếu không có kết quả khớp nào ở bảng bên phải, các cột của bảng đó sẽ có giá trị NULL.

SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id

RIGHT JOIN trả về tất cả các hàng từ bảng bên phải và các hàng khớp từ bảng bên trái. Ngược lại với LEFT JOIN, nếu không có kết quả khớp nào ở bảng bên trái, các cột của bảng đó sẽ có giá trị NULL.

SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id

FULL OUTER JOIN trả về tất cả các hàng có kết quả khớp trong một trong hai bảng. Nếu một hàng ở bảng bên trái không có kết quả khớp ở bảng bên phải, nó vẫn được hiển thị. Tương tự, nếu một hàng ở bảng bên phải không có kết quả khớp ở bảng bên trái, nó cũng sẽ được hiển thị.

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName

15. INSERT

Được dùng để thêm dữ liệu vào bảng:

INSERT INTO table_name (column_1, column_2, column_3) 

VALUES (value_1, 'value_2', value_3);

16. LIKE (Tìm kiếm mẫu dữ liệu)

LIKE được sử dụng trong WHERE hoặc HAVING (như một phần của GROUP BY) để lọc các hàng có giá trị trong cột khớp với một mẫu ký tự nhất định.

Câu lệnh SQL sau sẽ chọn các sinh viên có FullName bắt đầu bằng "Monique" hoặc kết thúc bằng "Greene":

SELECT studentID, FullName, sat_score, rcd_updated
FROM student 
WHERE 
    FullName LIKE 'Monique%' OR 
    FullName LIKE '%Greene';
+-----------+---------------+-----------+---------------------+
| studentID | FullName      | sat_score | rcd_updated         |
+-----------+---------------+-----------+---------------------+
|         1 | Monique Davis |       400 | 2017-08-16 15:34:50 |
|         5 | Alvin Greene  |      1200 | 2017-08-16 15:34:50 |
+-----------+---------------+-----------+---------------------+
2 rows in set (0.00 sec)

Bạn có thể đặt NOT trước LIKE để loại bỏ các hàng có mẫu chuỗi nhất định thay vì chọn chúng.

Câu lệnh SQL sau sẽ loại bỏ các bản ghi có chứa "cer Pau""Ted" trong cột FullName:

SELECT studentID, FullName, sat_score, rcd_updated
FROM student 
WHERE FullName NOT LIKE '%cer Pau%' AND FullName NOT LIKE '%"Ted"%';
+-----------+----------------------+-----------+---------------------+
| studentID | FullName             | sat_score | rcd_updated         |
+-----------+----------------------+-----------+---------------------+
|         1 | Monique Davis        |       400 | 2017-08-16 15:34:50 |
|         2 | Teri Gutierrez       |       800 | 2017-08-16 15:34:50 |
|         4 | Louis Ramsey         |      1200 | 2017-08-16 15:34:50 |
|         5 | Alvin Greene         |      1200 | 2017-08-16 15:34:50 |
|         6 | Sophie Freeman       |      1200 | 2017-08-16 15:34:50 |
|         8 | Donald D. Chamberlin |      2400 | 2017-08-16 15:35:33 |
|         9 | Raymond F. Boyce     |      2400 | 2017-08-16 15:35:33 |
+-----------+----------------------+-----------+---------------------+
7 rows in set (0.00 sec)

Kết luận

Trên đây là tổng quan về các lệnh SQL cơ bản. Nắm vững các lệnh này sẽ giúp bạn làm việc với cơ sở dữ liệu hiệu quả hơn!

VietnamWorks inTECH