SQL (Structured Query Language) là ngôn ngữ tiêu chuẩn để quản lý và thao tác dữ liệu trong các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) như MySQL, PostgreSQL, SQL Server, và Oracle. Dù bạn là người mới bắt đầu học SQL hay đã có kinh nghiệm, nắm vững những lệnh SQL cơ bản là rất quan trọng. Dưới đây là một số lệnh SQL phổ biến mà bạn nên biết.
SQL Table
-
Câu lệnh được sử dụng để xóa tất cả các hàng trong bảng
table_name
, nhưng giữ nguyên cấu trúc của bảng (các cột và ràng buộc vẫn được giữ nguyên).TRUNCATE TABLE table_name;
-
Câu lệnh được sử dụng để xóa một bảng có tên
table_name
trong cơ sở dữ liệu. Khi bảng bị xóa bằng lệnh này, toàn bộ dữ liệu bên trong bảng đó cũng sẽ bị xóa và bảng sẽ không còn tồn tại trong cơ sở dữ liệu.DROP TABLE table_name;
-
Câu lệnh được sử dụng để xóa toàn bộ cơ sở dữ liệu có tên là
database_name
.DROP DATABASE database_name;
-
Câu lệnh dưới đây được sử dụng để tạo một bảng trong cơ sở dữ liệu. Cụ thể, câu lệnh này được sử dụng để tạo một bảng mới có tên là
table_name
với ba cột (column1, column2, column3,...), và mỗi cột có một kiểu dữ liệu được xác định bởi datatype.CREATE TABLE table_name ( column1 datatype, column2 datatype, coLumn3 datatype, ... );
Ví dụ, nếu bạn muốn tạo một bảng
users
với các cộtid
,name
, vàemail
, thì câu lệnh có thể giống như sau:CREATE TABLE users ( id INT, name VARCHAR(100), email VARCHAR(100) );
-
Câu lệnh dùng để thêm một cột mới vào một bảng hiện có trong cơ sở dữ liệu.
ALTER TABLE table_name ADD column_name datatype;
Ví dụ, nếu bạn muốn thêm một cột tên là
age
với kiểu dữ liệuINT
vào bảngusers
, bạn có thể sử dụng câu lệnh:ALTER TABLE users ADD age INT;
-
Câu lệnh này được sử dụng để xóa một cột khỏi một bảng trong cơ sở dữ liệu.
ALTER TABLE table_name DROP COLUMN column_name;
Ví dụ, nếu bạn muốn xóa cột
age
trong bảngusers
, bạn có thể sử dụng câu lệnh:ALTER TABLE users DROP COLUMN age;
-
Câu lệnh trong dùng để đổi tên một cột trong một bảng. Ví dụ, nếu bạn muốn đổi tên cột
old_column_name
trong bảngtable_name
thànhnew_column_name
, bạn sẽ sử dụng câu lệnh dưới đây.EXEC sp_rename 'table_name.old_column_name', 'new_column_name', 'COLUMN';
-
Câu lệnh này dùng để đổi tên một cột trong bảng cơ sở dữ liệu. Ví dụ câu lệnh dưới đây sẽ thay đổi tên của một cột trong bảng
table_name
từold_column_name
thànhnew_column_name
.ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
-
Câu lệnh dưới đây sẽ đổi tên bảng
old_table_name
thànhnew_table_name
.ALTER TABLE old_table_name RENAME TO new_table_name;
-
Câu lệnh được sử dụng để tạo một chỉ mục trên một bảng trong cơ sở dữ liệu. Cụ thể, câu lệnh dưới đây sẽ tạo một chỉ mục với tên là
index_name
trên cộtcolumn_name
của bảngtable_name
.CREATE INDEX index_name ON table_name (column_name);
Tác dụng của chỉ mục giúp tăng tốc độ truy vấn dữ liệu trên các cột đã được đánh chỉ mục, đặc biệt là khi thực hiện các truy vấn tìm kiếm hoặc sắp xếp. Tuy nhiên, việc tạo chỉ mục cũng có thể làm chậm quá trình chèn, cập nhật hoặc xóa dữ liệu vì cơ sở dữ liệu phải cập nhật chỉ mục tương ứng
-
Câu lệnh này được sử dụng để tạo một chỉ mục (index) duy nhất (unique index) trên một cột của bảng trong cơ sở dữ liệu.
CREATE UNIQUE INDEX index_name ON table_name (column_name);
-
Câu lệnh được sử dụng để xóa một chỉ mục (index) đã tồn tại trên một bảng.
DROP INDEX index_name;
-
Câu lệnh đượ sử dụng để thêm khóa chính (primary key) cho một bảng trong cơ sở dữ liệu.
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
-
Câu lệnh dùng để thêm một khóa ngoại (foreign key) vào một bảng trong cơ sở dữ liệu. Cụ thể, câu lệnh này thực hiện việc liên kết một cột trong bảng hiện tại với một cột trong bảng khác, giúp duy trì tính toàn vẹn của dữ liệu giữa hai bảng.
ALTER TABLE table_name ADD FOREIGN KEY (column_name) REFERENCES other_table (column_name);
-
Câu lệnh được sử dụng để hiển thị danh sách tất cả các bảng trong cơ sở dữ liệu hiện tại.
SHOW TABLES;
-
Câu lệnh được sử dụng trong MySQL để lấy thông tin cấu trúc của bảng
table_name
. Nó hiển thị các cột của bảng, kiểu dữ liệu của các cột, cũng như các thông tin khác như khả năngNULL
, khóa chính, và các thuộc tính khác của cột.DESCRIBE table_name;
-
Câu lệnh được sử dụng để liệt kê tất cả các cơ sở dữ liệu hiện có trên một máy chủ cơ sở dữ liệu.
SHOW DATABASES;
-
Back up a database (MySQL)
-
This command is run from the command line, not within MySQL
-
Example usage: mysqldump -u username -p database_name › backup_file. sql
-
Sao lưu cơ sở dữ liệu (MySQL). Lệnh này được chạy từ
command line
, không phải trong MySQL.mysqldump -u username -p database_name › backup_file. sql
-
Câu lệnh dùng để sao lưu cơ sở dữ liệu trong SQL Server. Câu lệnh dưới đây sao lưu cơ sở dữ liệu có tên
database_name
đến đường dẫn được chỉ địnhfile_path
.BACKUP DATABASE database_name TO DISK = 'file_path';
-
Câu lệnh được sử dụng để khôi phục một cơ sở dữ liệu có tên
database_name
ở đường dẫnfile_path
.RESTORE DATABASE database_name FROM DISK = 'file_path';
SQL Joins
INNER JOIN
- Thực hiện một truy vấn để lấy tên của nhân viên và tên của phòng ban mà nhân viên đó làm việc.
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
SELECT employees.name, departments.department_name
: Chọn cộtname
từ bảngemployees
và cộtdepartment_name
từ bảngdepartments
.FROM employees
: Lấy dữ liệu từ bảngemployees
.INNER JOIN departments ON employees.department_id = departments.id
: Kết hợp bảngemployees
với bảngdepartments
bằng cách so khớp cộtdepartment_id
củaemployees
với cộtid
củadepartments
. Kết quả chỉ trả về những hàng mà có giá trị tương ứng trong cả hai bảng.
LEFT JOIN (or LEFT OUTER JOIN)
- Thực hiện một truy vấn để lấy tên của nhân viên và tên của phòng ban mà họ thuộc về.
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
SELECT employees.name, departments.department_name
: Lựa chọn tên của nhân viên từ bảngemployees
và tên phòng ban từ bảngdepartments
.FROM employees
: Truy vấn bắt đầu từ bảngemployees
.LEFT JOIN departments ON employees.department_id = departments.id
: Thực hiện phépLEFT JOIN
giữa bảngemployees
và bảngdepartments
.LEFT JOIN
nghĩa là tất cả các dòng từ bảngemployees
sẽ được lấy ra, và nếu có dữ liệu tương ứng trong bảngdepartments
(dựa trên điều kiệnON employees.department_id = departments.id
), dữ liệu đó cũng sẽ được lấy ra. Nếu không có dữ liệu tương ứng trong bảngdepartments
, cộtdepartment_name
sẽ có giá trịNULL
.
RIGHT JOIN Cor RIGHT OUTER JUIN)
- Đoạn mã SQL dưới đây sử dụng câu lệnh
RIGHT JOIN
để kết hợp dữ liệu từ hai bảng làemployees
(nhân viên) vàdepartments
(phòng ban). Cụ thể, câu truy vấn sẽ lấy tên của các nhân viên và tên phòng ban mà họ thuộc về, nhưng sẽ trả về tất cả các phòng ban, kể cả những phòng ban không có nhân viên nào.
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
employees
: Bảng chứa thông tin nhân viên, trong đó có cộtname
(tên nhân viên) vàdepartment_id
(mã phòng ban mà nhân viên thuộc về).departments
: Bảng chứa thông tin phòng ban, trong đó có cộtdepartment_name
(tên phòng ban) vàid
(mã phòng ban).RIGHT JOIN
: Loại join này lấy tất cả các hàng từ bảng bên phải (departments
) và các hàng phù hợp từ bảng bên trái (employees
). Nếu không có hàng nào trong bảng bên trái khớp với điều kiện join, các cột của bảng bên trái sẽ chứa giá trịNULL
.
FULL OUTER JOIN
- Câu lệnh SQL dưới đây thực hiện một phép
FULL OUTER JOIN
giữa hai bảngemployees
vàdepartments
.
SELECT employees.name, departments.department_name
FROM employees
FULL OUTER JOIN departments On employees.department_id = departments.id;
FULL OUTER JOIN
: Kết hợp tất cả các bản ghi từ cả hai bảng. Nếu không có kết quả khớp nhau, các giá trị sẽ làNULL
ở phía không có dữ liệu.employees.name
: Lấy tên nhân viên từ bảngemployees
.departments.department_name
: Lấy tên phòng ban từ bảngdepartments
.On employees.department_id = departments.id
: Điều kiện kết hợp dựa trêndepartment_id
trong bảngemployees
khớp với id trong bảngdepartments
.
CROSS JOIN
- Câu lệnh SQL sau sử dụng phép
CROSS JOIN
để kết hợp tất cả các bản ghi từ hai bảngemployees
(nhân viên) vàdepartments
(phòng ban) mà không có điều kiện nào giữa chúng. Kết quả sẽ là một bảng mới chứa tất cả các kết hợp có thể giữa các hàng của hai bảng.
SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;
CROSS JOIN
tạo ra một "Cartesian product", nghĩa là mỗi hàng trong bảngemployees
sẽ kết hợp với mỗi hàng trong bảngdepartments
.- Kết quả sẽ có số hàng bằng số hàng của bảng
employees
nhân với số hàng của bảngdepartments
.
SELF JOIN
- Truy vấn để lấy danh sách các nhân viên và tên người quản lý của họ từ bảng
employees
.
SELECT e1.name AS Employee, e2.name AS Manager
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.id;
e1
vàe2
là các bí danh (alias) cho bảngemployees
.INNER JOIN
kết hợp hai bảng (ở đây thực ra là bảngemployees
với chính nó) dựa trên điều kiệne1.manager_id = e2.id
.- Điều kiện này yêu cầu rằng cột
manager_id
của bảnge1
phải bằng cộtid
của bảnge2
. Nói cách khác, nhân viêne1
có một người quản lý vớiid
tương ứng, và người quản lý này được đại diện bởie2
. - Kết quả trả về sẽ là cặp
Employee
-Manager
, vớiEmployee
là tên của nhân viên (e1.name
) vàManager
là tên của người quản lý (e2.name
).
NATURAL JOIN
- Thực hiện một truy vấn để lấy tên của nhân viên và tên của phòng ban mà họ làm việc.
SELECT employees.name, departments.department_name
FROM employees
NATURAL JOIN departments;
SELECT employees.name, departments.department_name
: Chọn cột name từ bảngemployees
và cộtdepartment_name
từ bảngdepartments
.FROM employees
: Bắt đầu truy vấn từ bảngemployees
.NATURAL JOIN departments
: Thực hiện phép nối tự nhiên (Natural Join) giữa bảngemployees
và bảngdepartments
.
USING (clause)
- Thực hiện truy vấn dữ liệu từ hai bảng
employees
vàdepartments
bằng cách sử dụng phép nốiINNER JOIN
. Cụ thể, nó lấy tên của nhân viên (employees.name
) và tên phòng ban (departments.department_name
) dựa trên giá trị chung của cộtdepartment_id
.
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments USING (department_id);
SELECT employees.name, departments.department_name
: Chọn cột name từ bảngemployees
và cộtdepartment_name
từ bảngdepartments
.FROM employees
: Từ bảngemployees
.INNER JOIN departments
: Thực hiện phép nối giữa bảngemployees
và bảngdepartments
.USING (department_id)
: Điều kiện nối là cộtdepartment_id
, tức là chỉ những dòng có giá trịdepartment_id
giống nhau ở cả hai bảng mới được lấy ra.