Menu

Các lệnh SQL cơ bản: danh sách câu lệnh SQL kèm ví dụ

Những lệnh SQL bạn dùng hằng ngày, chia nhóm theo chức năng (DDL, DML, DQL và TCL), mỗi lệnh kèm một ví dụ bạn có thể chạy ngay trong SQLite.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Tổng quan các lệnh SQL

Các lệnh SQL được chia thành vài nhóm theo chức năng. Bảng dưới đây liệt kê những lệnh bạn sẽ dùng nhiều nhất, và mỗi phần bên dưới chạy một lệnh trong số đó.

LệnhNhómChức năng
CREATE TABLEDDLĐịnh nghĩa một bảng mới và các cột của nó
ALTER TABLEDDLThêm hoặc đổi tên cột, hoặc đổi tên bảng
DROP TABLEDDLXóa một bảng cùng toàn bộ hàng trong đó
INSERTDMLThêm hàng mới
UPDATEDMLThay đổi giá trị trong các hàng đã có
DELETEDMLXóa hàng
SELECTDQLĐọc hàng, lọc bằng WHERE và sắp xếp bằng ORDER BY
BEGIN, COMMIT, ROLLBACKTCLGom các thay đổi để chúng cùng thành công hoặc cùng thất bại

DDL là ngôn ngữ định nghĩa dữ liệu (data definition language), DML là ngôn ngữ thao tác dữ liệu (data manipulation language), DQL là ngôn ngữ truy vấn dữ liệu (data query language) và TCL là ngôn ngữ điều khiển giao dịch (transaction control language). Tên gọi không quan trọng bằng cách phân chia: DDL thay đổi hình dạng của cơ sở dữ liệu, DML thay đổi những gì nằm bên trong nó.

CREATE TABLE: định nghĩa bảng

CREATE TABLE đặt tên bảng và liệt kê các cột cùng kiểu dữ liệu và quy tắc của chúng. Mọi lệnh khác trên trang này đều cần một bảng để làm việc.

Trang CREATE TABLE nói kỹ về các quy tắc như NOT NULL, UNIQUE và DEFAULT.

INSERT: thêm hàng

INSERT INTO thêm một hoặc nhiều hàng. Liệt kê các cột, rồi đến các giá trị theo đúng thứ tự đó.

Cột id tự điền giá trị: một cột INTEGER PRIMARY KEY nhận số tiếp theo khi bạn bỏ trống nó. Xem thêm tại INSERT.

SELECT: đọc hàng

SELECT là lệnh bạn sẽ viết nhiều nhất. Chọn cột, lọc hàng bằng WHERE và sắp xếp bằng ORDER BY.

Chỉ những hàng vượt qua điều kiện WHERE mới được trả về, điểm cao nhất đứng đầu. Xem SELECT cơ bản và WHERE để biết chi tiết.

UPDATE: sửa hàng

UPDATE gán giá trị mới cho các hàng đã tồn tại. Mệnh đề WHERE quyết định những hàng nào bị sửa; bỏ nó đi thì mọi hàng đều thay đổi.

Khi chưa chắc một mệnh đề WHERE khớp với những gì, hãy chạy nó dưới dạng SELECT trước. Trang UPDATE có thêm nhiều mẫu khác.

DELETE: xóa hàng

DELETE FROM xóa các hàng khớp với mệnh đề WHERE. Giống UPDATE, lệnh này tác động lên mọi hàng nếu thiếu mệnh đề đó.

Hàng của Chen đã biến mất, các hàng khác vẫn nguyên vẹn. Xem DELETE.

ALTER TABLE và DROP TABLE: sửa hoặc xóa bảng

ALTER TABLE thay đổi một bảng đã có mà không làm mất các hàng của nó. DROP TABLE xóa hẳn bảng.

Cột mới bắt đầu với giá trị NULL ở các hàng đã có cho đến khi bạn điền vào. ALTER và DROP TABLE liệt kê những gì SQLite cho phép.

JOIN: kết hợp các bảng

Một JOIN đọc hàng từ hai bảng cùng lúc, ghép theo một cột chung.

Boris không đăng ký môn nào, nên INNER JOIN bỏ cậu ấy ra. Một LEFT JOIN sẽ giữ Boris lại, với cột môn học để trống.

GROUP BY: tổng hợp hàng

GROUP BY gộp các hàng có chung một giá trị thành một hàng, và một hàm tổng hợp như COUNT hay AVG tóm tắt từng nhóm.

Hàm tổng hợp và GROUP BY và HAVING đi sâu hơn.

BEGIN, COMMIT và ROLLBACK: gom các thay đổi

Một giao dịch (transaction) khiến nhiều thay đổi được tính như một. COMMIT giữ lại tất cả; ROLLBACK hoàn tác tất cả.

Lần chuyển tiền đã được commit còn thay đổi thứ hai bị rollback, nên cuối cùng Ada còn 70 và Boris có 80. Giao dịch giải thích khi nào nên dùng chúng.

SQLite khác ở đâu

Các lệnh trên trang này là SQL chuẩn, và những gì bạn học ở đây vẫn dùng được trong MySQL và PostgreSQL. Tuy vậy, các ví dụ chạy được viết cho SQLite, và có ba chi tiết thay đổi trên các cơ sở dữ liệu lớn hơn:

  • Liệt kê bảng. Các ví dụ đọc sqlite_master, bảng schema riêng của SQLite. MySQL dùng SHOW TABLES, còn PostgreSQL dùng view information_schema.tables (hoặc \dt trong psql).
  • Id tự tăng. Trong SQLite, một cột khai báo INTEGER PRIMARY KEY tự đánh số cho hàng mới, nên các ví dụ INSERT bỏ qua id. MySQL cần AUTO_INCREMENT trên cột đó, còn PostgreSQL cần một cột identity (GENERATED BY DEFAULT AS IDENTITY) hoặc SERIAL.
  • Phân quyền và thay đổi schema. SQLite không có GRANT hay REVOKE, vì cơ sở dữ liệu SQLite chỉ là một tệp duy nhất, không có tài khoản người dùng, và ALTER TABLE của nó không thể đổi kiểu dữ liệu của một cột.

Câu hỏi thường gặp

Các lệnh SQL cơ bản là gì?

Năm lệnh đã đủ cho phần lớn công việc hằng ngày: CREATE TABLE để định nghĩa bảng, INSERT để thêm hàng, SELECT để đọc, UPDATE để sửa và DELETE để xóa. Tiếp theo là ALTER TABLE, DROP TABLE, JOIN, GROUP BY và các lệnh giao dịch BEGIN, COMMIT, ROLLBACK.

DDL và DML khác nhau thế nào?

DDL (data definition language, ngôn ngữ định nghĩa dữ liệu) thay đổi cấu trúc cơ sở dữ liệu: CREATE, ALTER và DROP. DML (data manipulation language, ngôn ngữ thao tác dữ liệu) thay đổi các hàng bên trong bảng: INSERT, UPDATE và DELETE. SELECT chỉ đọc, nên thường được xếp riêng thành DQL.

Lệnh SQL có phân biệt chữ hoa chữ thường không?

Không. SELECT, select và Select đều chạy được. Viết hoa từ khóa là một quy ước giúp chúng nổi bật so với tên bảng và tên cột. Tuy nhiên, văn bản trong dấu nháy được so sánh chính xác từng ký tự, nên trong SQLite 'Ada' và 'ada' là hai chuỗi khác nhau, trừ khi bạn yêu cầu so sánh không phân biệt hoa thường.

Các lệnh này có chạy giống nhau trong MySQL và PostgreSQL không?

Đây là các câu lệnh SQL chuẩn và mang cùng ý nghĩa trong cả ba hệ, nên những gì bạn học ở đây vẫn dùng được. Tuy vậy, các ví dụ chạy được viết cho SQLite: liệt kê bảng ở đây đọc sqlite_master, id tự tăng cần AUTO_INCREMENT trong MySQL hoặc cột identity trong PostgreSQL, và SQLite không có GRANT hay REVOKE.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu