SQL là một ngôn ngữ mạnh mẽ và linh hoạt có thể được sử dụng trong nhiều ứng dụng khác nhau, từ kinh doanh, tài chính, y tế đến giáo dục. Cơ sở dữ liệu SQL được cài đặt với tất cả các lệnh cần thiết để thêm, sửa đổi, xóa và truy vấn dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu về một số lệnh phổ biến trong SQL.
1. SQL là gì?
SQL là một ngôn ngữ truy vấn dữ liệu quan hệ được sử dụng để tạo, truy vấn, cập nhật và xóa dữ liệu trong cơ sở dữ liệu quan hệ. SQL được chia thành 4 loại lệnh chính:
- DDL (Data Definition Language): Các lệnh DDL được sử dụng để định nghĩa cấu trúc của cơ sở dữ liệu, bao gồm tạo, xóa, sửa đổi bảng, cột và ràng buộc.
- DML (Data Manipulation Language): Các lệnh DML được sử dụng để thao tác dữ liệu trong cơ sở dữ liệu, bao gồm chèn, cập nhật, xóa và chọn dữ liệu.
- DCL (Data Control Language): Các lệnh DCL được sử dụng để kiểm soát quyền truy cập vào cơ sở dữ liệu, bao gồm cấp phép, thu hồi và thay đổi quyền truy cập.
- TCL (Transaction Control Language): Các lệnh TCL được sử dụng để kiểm soát các giao dịch, bao gồm bắt đầu, xác nhận và hủy giao dịch.
Hình 1: Một số câu lệnh phổ biến trong SQL
1.1 Các lệnh DDL
- CREATE TABLE: Tạo một bảng mới trong cơ sở dữ liệu.
- DROP TABLE: Xóa một bảng khỏi cơ sở dữ liệu.
- ALTER TABLE: Sửa đổi cấu trúc của một bảng.
- ADD COLUMN: Thêm một cột mới vào một bảng.
- DROP COLUMN: Xóa một cột khỏi một bảng.
1.2 Các lệnh DML
- INSERT INTO: Chèn dữ liệu mới vào một bảng.
- UPDATE: Cập nhật dữ liệu hiện có trong một bảng.
- DELETE: Xóa dữ liệu khỏi một bảng.
- SELECT: Lấy dữ liệu từ một hoặc nhiều bảng.
1.3 Các lệnh DCL
- GRANT: Cấp quyền truy cập vào một đối tượng cơ sở dữ liệu cho một người dùng hoặc nhóm người dùng.
- REVOKE: Thu hồi quyền truy cập vào một đối tượng cơ sở dữ liệu cho một người dùng hoặc nhóm người dùng.
- DENY: Từ chối quyền truy cập vào một đối tượng cơ sở dữ liệu cho một người dùng hoặc nhóm người dùng.
1.4 Các lệnh TCL
- BEGIN TRANSACTION: Bắt đầu một giao dịch.
- COMMIT TRANSACTION: Xác nhận một giao dịch.
- ROLLBACK TRANSACTION: Hủy bỏ một giao dịch.
2. Các câu lệnh trong SQL
Mở cửa sổ dòng lệnh cơ sở dữ liệu (sử dụng xác thực Socket/Trust)
Mặc định trên Ubuntu 18.04, người dùng root MySQL có thể xác thực mà không cần mật khẩu bằng cách sử dụng lệnh sau:
sudo mysql
Để mở cửa sổ dòng lệnh PostgreSQL, sử dụng lệnh sau. Ví dụ này sẽ đăng nhập với tài khoản postgres, đó là vai trò superuser mặc định, nhưng bạn có thể thay thế bằng bất kỳ vai trò đã tạo trước nào:
sudo -u postgres psql
Mở cửa sổ dòng lệnh cơ sở dữ liệu (sử dụng xác thực mật khẩu)
Nếu người dùng root MySQL được đặt để xác thực bằng mật khẩu, bạn có thể sử dụng lệnh sau:
mysql -u root -p
Nếu bạn đã thiết lập một tài khoản người dùng không phải là root cho cơ sở dữ liệu của mình, bạn cũng có thể sử dụng phương pháp này để đăng nhập bằng tài khoản đó:
mysql -u user -p
Lệnh trên sẽ yêu cầu bạn nhập mật khẩu sau khi chạy nó. Nếu bạn muốn cung cấp mật khẩu của mình là một phần của lệnh, ngay sau tùy chọn -p, hãy điền mật khẩu của bạn mà không có khoảng trống giữa chúng:
mysql -u root -ppassword
Tạo cơ sở dữ liệu
Lệnh sau tạo một cơ sở dữ liệu với các thiết lập mặc định.
CREATE DATABASE database_name;
Nếu bạn muốn cơ sở dữ liệu của bạn sử dụng bộ ký tự và phân loại khác với các thiết lập mặc định, bạn có thể chỉ định chúng bằng cú pháp sau:
CREATE DATABASE database_name CHARACTER SET character_set COLLATE collation;
Liệt kê cơ sở dữ liệu
Để xem các cơ sở dữ liệu tồn tại trong cài đặt MySQL hoặc MariaDB của bạn, chạy lệnh sau:
SHOW DATABASES;
Trong PostgreSQL, bạn có thể xem các cơ sở dữ liệu đã được tạo bằng lệnh sau:
\l
Xóa cơ sở dữ liệu
Để xóa một cơ sở dữ liệu, bao gồm bất kỳ bảng và dữ liệu nào trong đó, chạy một lệnh theo cấu trúc sau:
DROP DATABASE IF EXISTS database;
Tạo người dùng
Để tạo một hồ sơ người dùng cho cơ sở dữ liệu mà không chỉ định bất kỳ đặc quyền nào cho nó, chạy lệnh sau:
CREATE USER username IDENTIFIED BY 'password';
PostgreSQL sử dụng cú pháp tương tự, nhưng hơi khác nhau một chút:
CREATE USER user WITH PASSWORD 'password';
Nếu bạn muốn tạo một người dùng mới và cấp cho họ các đặc quyền trong một lệnh, bạn có thể làm như vậy bằng cách sử dụng câu lệnh GRANT. Lệnh sau tạo một người dùng mới và cấp cho họ đầy đủ quyền truy cập vào mọi cơ sở dữ liệu và bảng trong RDBMS:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Lưu ý từ khóa PRIVILEGES trong câu lệnh GRANT trước đây. Trong hầu hết các RDBMS, từ khóa này là tùy chọn, và câu lệnh này có thể được viết tương đương như:
GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Tuy nhiên, chú ý từ khóa PRIVILEGES là bắt buộc khi bật chế độ SQL để cấp quyền.
Xóa người dùng
Sử dụng cú pháp sau để xóa hồ sơ người dùng cơ sở dữ liệu:
DROP USER IF EXISTS username;
Lưu ý: lệnh này mặc định sẽ không xóa bất kỳ bảng nào được tạo bởi người dùng đã bị xóa, và cố gắng truy cập vào các bảng đó có thể dẫn đến lỗi.
Chọn một cơ sở dữ liệu
Trước khi bạn có thể tạo một bảng, bạn phải thông báo cho RDBMS biết cơ sở dữ liệu mà bạn muốn tạo bảng trong đó. Trong MySQL và MariaDB, làm như vậy bằng cú pháp sau:
USE database;
Trong PostgreSQL, bạn phải sử dụng lệnh sau để chọn cơ sở dữ liệu mong muốn:
\c database
Tạo một bảng
Cấu trúc lệnh sau tạo một bảng mới với tên table, và bao gồm hai cột, mỗi cột có kiểu dữ liệu cụ thể của riêng nó:
CREATE TABLE table (
column_1 column_1_data_type,
column_2 column_2_data_type
);
Xóa một bảng
Để xóa một bảng hoàn toàn, bao gồm tất cả dữ liệu của nó, chạy lệnh sau:
DROP TABLE IF EXISTS table;
Chèn dữ liệu vào bảng
Sử dụng cú pháp sau để điền dữ liệu vào một hàng của bảng:
INSERT INTO table (column_A, column_B, column_C) VALUES ('data_A', 'data_B', 'data_C');
Xóa dữ liệu từ bảng
Để xóa một hàng dữ liệu từ bảng, sử dụng cấu trúc lệnh sau. Lưu ý rằng giá trị (value) nên là giá trị được chứa trong cột đã chỉ định trong hàng bạn muốn xóa:
DELETE FROM table WHERE column='value';
Thay đổi dữ liệu trong bảng
Sử dụng cú pháp sau để cập nhật dữ liệu trong một hàng đã cho. Lưu ý rằng mệnh đề WHERE ở cuối lệnh cho biết SQL nên cập nhật hàng nào. Giá trị (value) là giá trị được chứa trong cột_A tương ứng với hàng bạn muốn thay đổi.
UPDATE table SET column_1 = value_1, column_2 = value_2 WHERE column_A=value;
Chèn một cột
Cú pháp sau sẽ thêm một cột mới vào bảng:
ALTER TABLE table ADD COLUMN column data_type;
Xóa một cột
Một lệnh tuân theo cấu trúc này sẽ xóa một cột từ bảng:
ALTER TABLE table DROP COLUMN column;
Thực hiện truy vấn cơ bản
Để xem tất cả dữ liệu từ một cột duy nhất trong bảng, sử dụng cú pháp sau:
SELECT column FROM table;
Để truy vấn nhiều cột từ cùng một bảng, phân tách tên cột bằng dấu phẩy:
SELECT column_1, column_2 FROM table;
Bạn cũng có thể truy vấn tất cả các cột trong một bảng bằng cách thay thế tên cột bằng dấu sao (*). Trong SQL, dấu sao hoạt động như các trình giữ chỗ để đại diện cho "tất cả":
SELECT * FROM table;
Sử dụng mệnh đề WHERE
Bạn có thể hạn chế kết quả của một truy vấn bằng cách thêm mệnh đề WHERE vào câu lệnh SELECT, như sau:
SELECT column FROM table WHERE conditions_that_apply;
Ví dụ, bạn truy vấn tất cả dữ liệu từ một hàng duy nhất bằng cú pháp như sau. Lưu ý rằng giá trị (value) nên là giá trị được chứa trong cả cột đã chỉ định và hàng bạn muốn truy vấn:
SELECT * FROM table WHERE column = value;
Làm việc với toán tử so sánh
Một toán tử so sánh trong mệnh đề WHERE xác định cách cột đã chỉ định nên được so sánh với giá trị. Dưới đây là một số toán tử so sánh phổ biến trong SQL:
=
: kiểm tra sự bằng nhau!=
: kiểm tra sự không bằng nhau<
: kiểm tra sự nhỏ hơn>
: kiểm tra sự lớn hơn<=
: kiểm tra sự nhỏ hơn hoặc bằng>=
: kiểm tra sự lớn hơn hoặc bằngBETWEEN
: kiểm tra xem giá trị có nằm trong khoảng đã cho hay khôngIN
: kiểm tra xem giá trị của hàng có nằm trong một tập giá trị đã chỉ định hay khôngEXISTS
: kiểm tra xem có tồn tại các hàng dữ liệu thoả mãn điều kiện đã chỉ định hay khôngLIKE
: kiểm tra xem một giá trị có khớp với một chuỗi đã chỉ định hay khôngIS NULL
: kiểm tra giá trị NULLIS NOT NULL
: kiểm tra giá trị khác NULL
Làm việc với Wildcard
SQL cho phép sử dụng ký tự Wildcard. Chúng hữu ích khi bạn muốn tìm một mục cụ thể trong một bảng nhưng không chắc chắn về mục đó là gì.
Dấu sao (*) là các giữ chỗ đại diện cho "all", điều này sẽ truy vấn tất cả các cột trong một bảng:
SELECT * FROM table;
Dấu phần trăm (%) đại diện cho một hoặc nhiều ký tự không biết:
SELECT * FROM table WHERE column LIKE 'val%';
Dấu gạch dưới (_) được sử dụng để đại diện cho một ký tự không biết duy nhất:
SELECT * FROM table WHERE column LIKE 'v_lue';
Đếm các mục trong một cột
Hàm COUNT được sử dụng để tìm số lượng các mục trong một cột đã cho. Cú pháp sau sẽ trả về tổng số giá trị trong cột:
SELECT COUNT(column) FROM table;
Bạn có thể hạn chế kết quả của hàm COUNT bằng cách thêm mệnh đề WHERE, như sau:
SELECT COUNT(column) FROM table WHERE column=value;
Tìm giá trị trung bình trong một cột
Hàm AVG được sử dụng để tìm giá trị trung bình (trong trường hợp này, trung bình cộng) của các giá trị trong một cột cụ thể. Lưu ý rằng hàm AVG chỉ hoạt động với các cột chứa giá trị số; khi sử dụng trên một cột chứa giá trị chuỗi, nó có thể trả về lỗi hoặc 0:
SELECT AVG(column) FROM table;
Tìm tổng các giá trị trong một cột
Hàm SUM được sử dụng để tính tổng các giá trị số trong một cột:
SELECT SUM(column) FROM table;
Tương tự như hàm AVG, nếu bạn chạy hàm SUM trên một cột chứa giá trị chuỗi, nó có thể trả về lỗi hoặc chỉ 0, tùy thuộc vào RDBMS của bạn.
Tìm giá trị lớn nhất trong một cột
Để tìm giá trị số lớn nhất trong một cột hoặc giá trị cuối cùng theo thứ tự chữ cái, sử dụng hàm MAX:
SELECT MAX(column) FROM table;
Tìm giá trị nhỏ nhất trong một cột
Để tìm giá trị số nhỏ nhất trong một cột hoặc giá trị đầu tiên theo thứ tự chữ cái, sử dụng hàm MIN:
SELECT MIN(column) FROM table;
Sắp xếp kết quả với mệnh đề ORDER BY
Mệnh đề ORDER BY được sử dụng để sắp xếp kết quả truy vấn. Cú pháp truy vấn sau trả về giá trị từ column_1 và column_2 và sắp xếp kết quả theo giá trị trong column_1 theo thứ tự tăng dần hoặc, với giá trị chuỗi, theo thứ tự bảng chữ cái:
SELECT column_1, column_2 FROM table ORDER BY column_1;
Để thực hiện cùng hành động, nhưng sắp xếp kết quả theo thứ tự giảm dần hoặc đảo ngược thứ tự bảng chữ cái, thêm DESC vào truy vấn:
SELECT column_1, column_2 FROM table ORDER BY column_1 DESC;
Sắp xếp kết quả với mệnh đề GROUP BY
Mệnh đề GROUP BY tương tự như mệnh đề ORDER BY, nhưng nó được sử dụng để sắp xếp kết quả của một truy vấn bao gồm một hàm tổng hợp như COUNT, MAX, MIN, hoặc SUM. Một mình, các hàm tổng hợp được mô tả trong phần trước chỉ trả về một giá trị duy nhất. Tuy nhiên, bạn có thể xem kết quả của một hàm tổng hợp được thực hiện trên tất cả các giá trị khớp trong một cột bằng cách bao gồm mệnh đề GROUP BY.
Cú pháp sau sẽ đếm số giá trị khớp trong column_2 và nhóm chúng theo thứ tự tăng dần hoặc theo thứ tự bảng chữ cái:
SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2;
Để thực hiện cùng hành động, nhưng nhóm kết quả theo thứ tự giảm dần hoặc đảo ngược thứ tự bảng chữ cái, thêm DESC vào truy vấn:
SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2 DESC;
Kết hợp nhiều câu SELECT với mệnh đề UNION
Toán tử UNION hữu ích để kết hợp kết quả của hai (hoặc nhiều hơn) câu SELECT thành một tập kết quả duy nhất:
SELECT column_1 FROM table UNION SELECT column_2 FROM table;
Ngoài ra, mệnh đề UNION có thể kết hợp hai (hoặc nhiều hơn) câu SELECT truy vấn các bảng khác nhau vào cùng một tập kết quả:
SELECT column FROM table_1 UNION SELECT column FROM table_2;
3. Kết luận
Bài viết trên đây là sự tìm hiểu bước đầu của người viết về khái niệm SQL và 1 vài câu lệnh cơ bản. Để tìm hiểu thêm về các lệnh SQL, bạn có thể tham khảo các tài liệu hướng dẫn SQL hoặc các khóa học trực tuyến.
P.A Việt Nam cung cấp đa dạng các Plan Hosting đáp ứng yêu cầu của khách hàng: Hosting Phổ Thông và Hosting Chất Lượng Cao. Tham khảo các ưu đãi tại: https://www.pavietnam.vn/vn/tin-khuyen-mai/.