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ệnh | Nhóm | Chức năng |
|---|---|---|
CREATE TABLE | DDL | Định nghĩa một bảng mới và các cột của nó |
ALTER TABLE | DDL | Thêm hoặc đổi tên cột, hoặc đổi tên bảng |
DROP TABLE | DDL | Xóa một bảng cùng toàn bộ hàng trong đó |
INSERT | DML | Thêm hàng mới |
UPDATE | DML | Thay đổi giá trị trong các hàng đã có |
DELETE | DML | Xóa hàng |
SELECT | DQL | Đọc hàng, lọc bằng WHERE và sắp xếp bằng ORDER BY |
BEGIN, COMMIT, ROLLBACK | TCL | Gom 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ùngSHOW TABLES, còn PostgreSQL dùng viewinformation_schema.tables(hoặc\dttrongpsql). - Id tự tăng. Trong SQLite, một cột khai báo
INTEGER PRIMARY KEYtự đánh số cho hàng mới, nên các ví dụINSERTbỏ quaid. MySQL cầnAUTO_INCREMENTtrên cột đó, còn PostgreSQL cần một cột identity (GENERATED BY DEFAULT AS IDENTITY) hoặcSERIAL. - Phân quyền và thay đổi schema. SQLite không có
GRANThayREVOKE, 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 TABLEcủ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.