updated August 21, 2024404 views

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ột id, 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ệu INT vào bảng users, 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ảng users, 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ảng table_name thành new_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ành new_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ành new_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ột column_name của bảng table_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ăng NULL, 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ỉ định file_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ẫn file_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ột name từ bảng employees và cột department_name từ bảng departments.
  • FROM employees: Lấy dữ liệu từ bảng employees.
  • INNER JOIN departments ON employees.department_id = departments.id: Kết hợp bảng employees với bảng departments bằng cách so khớp cột department_id của employees với cột id của departments. 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ảng employees và tên phòng ban từ bảng departments.
  • FROM employees: Truy vấn bắt đầu từ bảng employees.
  • LEFT JOIN departments ON employees.department_id = departments.id: Thực hiện phép LEFT JOIN giữa bảng employees và bảng departments. LEFT JOIN nghĩa là tất cả các dòng từ bảng employees sẽ được lấy ra, và nếu có dữ liệu tương ứng trong bảng departments (dựa trên điều kiện ON 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ảng departments, cột department_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ột name (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ột department_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ảng employeesdepartments.
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ảng employees.
  • departments.department_name: Lấy tên phòng ban từ bảng departments.
  • On employees.department_id = departments.id: Điều kiện kết hợp dựa trên department_id trong bảng employees khớp với id trong bảng departments.

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ảng employees (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ảng employees sẽ kết hợp với mỗi hàng trong bảng departments.
  • 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ảng departments.

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;
  • e1e2 là các bí danh (alias) cho bảng employees.
  • INNER JOIN kết hợp hai bảng (ở đây thực ra là bảng employees với chính nó) dựa trên điều kiện e1.manager_id = e2.id.
  • Điều kiện này yêu cầu rằng cột manager_id của bảng e1 phải bằng cột id của bảng e2. Nói cách khác, nhân viên e1 có một người quản lý với id tương ứng, và người quản lý này được đại diện bởi e2.
  • Kết quả trả về sẽ là cặp Employee - Manager, với Employee 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ảng employees và cột department_name từ bảng departments.
  • FROM employees: Bắt đầu truy vấn từ bảng employees.
  • NATURAL JOIN departments: Thực hiện phép nối tự nhiên (Natural Join) giữa bảng employees và bảng departments.

USING (clause)

  • Thực hiện truy vấn dữ liệu từ hai bảng employeesdepartments bằng cách sử dụng phép nối INNER 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ột department_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ảng employees và cột department_name từ bảng departments.
  • FROM employees: Từ bảng employees.
  • INNER JOIN departments: Thực hiện phép nối giữa bảng employees và bảng departments.
  • USING (department_id): Điều kiện nối là cột department_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.