SQL — DDL và DML
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| SQL/ˌes kjuː ˈel/ | Ngôn ngữ truy vấn có cấu trúc |
| Data Definition Language/ˈdeɪtə ˌdefɪˈnɪʃn ˈlæŋɡwɪdʒ/ | Ngôn ngữ định nghĩa dữ liệu |
| Data Manipulation Language/ˈdeɪtə məˌnɪpjʊˈleɪʃn ˈlæŋɡwɪdʒ/ | Ngôn ngữ thao tác dữ liệu |
| INNER JOIN/ˈɪnə dʒɔɪn/ | nối trong |
| aggregate functions/ˈæɡrɪɡeɪt ˈfʌŋkʃnz/ | hàm tổng hợp |
Ngôn ngữ mà các lập trình viên ông bà bạn cũng đã sử dụng
- Năm 1974, hai nhà nghiên cứu IBM thiết kế một ngôn ngữ truy vấn cho các bảng của Codd và gọi nó là SEQUEL: Structured English Query Language. Tên bị rút gọn thành SQL, và ngôn ngữ này chưa bao giờ biến mất.
- Fifty năm sau, mọi ngân hàng, hãng hàng không, bệnh viện và trang web bạn sử dụng đều chạy trên nền tảng đó. Một học sinh gõ
SELECThôm nay đang viết cùng một câu lệnh mà một lập trình viên đã viết trước khi bố mẹ họ sinh ra. - Nó có hai phần, và đề thi yêu cầu bạn đọc một trong hai phần và viết cả hai: Ngôn ngữ Định nghĩa Dữ liệu xây dựng cấu trúc, và Ngôn ngữ Thao tác Dữ liệu điền, thay đổi và hỏi dữ liệu.
- Bài học này là phần con của SQL trong chương trình học, từng câu lệnh một, với số điểm tương ứng.
DDL và DML
- Hệ quản trị CSDL thực hiện tất cả việc tạo và sửa đổi cấu trúc của cơ sở dữ liệu thông qua DDL của nó: tạo cơ sở dữ liệu, tạo và thay đổi bảng, thêm khóa.
- Nó thực hiện tất cả các truy vấn và bảo trì dữ liệu thông qua DML của nó: chọn, chèn, cập nhật và xóa dòng.
- SQL là tiêu chuẩn công nghiệp cho cả hai. Xếp một câu lệnh vào đúng nửa nào là câu hỏi một điểm phổ biến:
CREATE TABLElà DDL,SELECTlà DML.

Cấu trúc ở một bên, dữ liệu ở bên kia
Từ nào sau đây là một phần của Ngôn ngữ Định nghĩa Dữ liệu (DDL)?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
DDL thay đổi cấu trúc (CREATE, ALTER, DROP). SELECT/INSERT/UPDATE/DELETE là DML (làm việc với dữ liệu).
DDL xác định cấu trúc (ví dụ: CREATE TABLE), trong khi DML làm việc với dữ liệu bên trong nó (SELECT, INSERT, UPDATE, DELETE).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Định nghĩa so với Thao tác: DDL tạo hình dạng cho các bảng; DML đọc và thay đổi các dòng.
DDL: tạo cấu trúc
CREATE DATABASE Shop;
CREATE TABLE CUSTOMER (
CustomerID INTEGER,
Name VARCHAR(50),
Town VARCHAR(30),
Joined DATE,
Active BOOLEAN,
PRIMARY KEY (CustomerID)
);
ALTER TABLE CUSTOMER ADD Email VARCHAR(100);
- Các kiểu dữ liệu trong chương trình học:
CHARACTER(một số lượng ký tự cố định),VARCHAR(n)(lên đến n ký tự),BOOLEAN,INTEGER,REAL,DATE,TIME. PRIMARY KEY (field)đặt tên cho khóa;ALTER TABLE … ADDthêm một thuộc tính vào bảng đã tồn tại.
Ghép nối mỗi loại dữ liệu với kiểu dữ liệu SQL tương ứng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Hai trạng thái, văn bản độ dài biến đổi, số có phần thập phân, ngày lịch. INTEGER dành cho đếm số nguyên và TIME cho thời điểm trong ngày.
Ví dụ minh họa: hai bảng với khóa ngoại
- Viết SQL để tạo một
ORDERSvớiOrderIDlàm khóa chính,CustomerIDlàm khóa ngoại tham chiếu đếnCUSTOMER, và mộtOrderDate.
CREATE TABLE ORDERS (
OrderID INTEGER,
CustomerID INTEGER,
OrderDate DATE,
PRIMARY KEY (OrderID),
FOREIGN KEY (CustomerID) REFERENCES CUSTOMER(CustomerID)
);
- Số điểm:
CREATE TABLEkèm tên; mỗi thuộc tính với kiểu phù hợp;PRIMARY KEY;FOREIGN KEY … REFERENCESnêu tên bảng và trường của nó.
DML: đặt câu hỏi với SELECT
SELECT Name, Town
FROM CUSTOMER
WHERE Town = 'London'
ORDER BY Name ASC;
SELECTliệt kê các trường cần xuất (*cho tất cả),FROMđặt tên bảng,WHEREgiữ lại chỉ các dòng thỏa mãn điều kiện,ORDER BYsắp xếp kết quả,ASChoặcDESC.- Chuỗi ký tự đặt trong dấu nháy đơn; số không. So sánh:
=,<,>,<=,>=,<>; điều kiện nối với nhau bằngAND,OR,NOT;LIKE 'A%'khớp văn bản bắt đầu bằng A;BETWEEN 10 AND 20cho khoảng giá trị.

Chỉ những dòng vượt qua WHERE mới đạt đến kết quả
Từ khóa SQL nào dùng để lấy dữ liệu từ bảng? (một từ)
Difficulty 1/5 · 100 coins + a small bonus on first completion today
SELECT liệt kê các trường cần lấy; FROM tên bảng.
Câu lệnh WHERE trong câu SELECT:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
WHERE lọc dòng theo điều kiện; ORDER BY sắp xếp; danh sách SELECT chọn các cột.
Ví dụ minh họa: viết truy vấn
- Viết một script SQL để xuất tên và địa chỉ email của tất cả khách hàng đang hoạt động tại Manchester, theo thứ tự bảng chữ cái của tên.
SELECT Name, Email
FROM CUSTOMER
WHERE Town = 'Manchester' AND Active = TRUE
ORDER BY Name;
- Một điểm mỗi mục: các trường đúng sau
SELECT; bảng đúng sauFROM;WHEREvới cả hai điều kiện và chuỗi trong dấu ngoặc đơn;ORDER BY Name. Sử dụng chính xác tên bảng và tên trường mà đề bài cung cấp.
Đặt các mệnh đề của câu lệnh SELECT theo thứ tự chúng được viết.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Các trường, bảng, bộ lọc, sắp xếp. ORDER BY luôn nằm ở cuối, và câu lệnh kết thúc bằng dấu chấm phẩy.
Hai bảng: INNER JOIN
SELECT CUSTOMER.Name, ORDERS.OrderDate
FROM CUSTOMER INNER JOIN ORDERS
ON CUSTOMER.CustomerID = ORDERS.CustomerID
WHERE ORDERS.OrderDate >= '2024-01-01';
- INNER JOIN kết hợp các dòng của hai bảng nơi khóa ngoại trong bảng này khớp với khóa chính trong bảng kia, được nêu trong mệnh đề
ON. - Thêm tiền tố bảng khi cùng tên xuất hiện trong cả hai bảng. Chương trình yêu cầu truy vấn vào tối đa hai bảng.
Nối hai bảng với INNER JOIN
Phép nối khớp các dòng mà khóa ngoại bằng khóa chính — ở đây Orders.CustomerID = Customer.CustomerID — và gộp mỗi cặp khớp thành một dòng rộng hơn.
INNER JOIN được sử dụng để:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
JOIN kết hợp hai bảng dựa trên mối quan hệ (thường là khóa ngoại khớp với khóa chính).
Hàm tổng hợp và GROUP BY
SELECT CustomerID, COUNT(*) AS NumOrders
FROM ORDERS
GROUP BY CustomerID;
SELECT AVG(Price) FROM PRODUCT;
SELECT SUM(Quantity) FROM ORDER_LINE WHERE OrderID = 1042;
- Hàm tổng hợp tóm tắt nhiều hàng thành một giá trị:
COUNTđếm số hàng,SUMtính tổng,AVGtính trung bình. GROUP BYtạo một hàng tóm tắt cho mỗi giá trị của trường: số lượng đơn hàng theo từng khách hàng. Nếu không có nó, hàm tổng hợp sẽ tóm tắt toàn bộ bảng.
COUNT(*) trả về cái gì?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
COUNT(*) đếm số dòng; SUM/AVG/MIN/MAX là các hàm tổng hợp khác.
Để xuất ra số lượng đơn hàng mà mỗi khách hàng đã đặt, truy vấn cần: chọn tất cả các đáp án đúng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Đếm số dòng, một nhóm cho mỗi khách hàng, từ bảng đơn hàng. Sắp xếp là tùy chọn.
Thay đổi dữ liệu: INSERT, UPDATE, DELETE
INSERT INTO CUSTOMER (CustomerID, Name, Town, Joined, Active)
VALUES (101, 'Ada Lovelace', 'London', '2024-03-01', TRUE);
UPDATE CUSTOMER SET Town = 'Bristol' WHERE CustomerID = 101;
DELETE FROM CUSTOMER WHERE CustomerID = 101;
INSERT INTO … VALUESthêm một dòng: liệt kê các trường, sau đó là các giá trị theo cùng thứ tự.UPDATE … SET … WHEREthay đổi các dòng khớp.DELETE FROM … WHERExóa chúng.- Luôn luôn cung cấp cho
UPDATEvàDELETEmột mệnh đềWHERE, nếu không sự thay đổi sẽ tác động lên mọi dòng trong bảng.
Điều gì xảy ra nếu bạn chạy UPDATE hoặc DELETE mà không có mệnh đề WHERE?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Không có WHERE, thao tác sẽ ảnh hưởng đến tất cả các dòng — đây là một lỗi phổ biến và nguy hiểm.
Nối mỗi câu lệnh DML với chức năng của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
SELECT đọc; INSERT thêm; UPDATE thay đổi; DELETE xóa — bốn động từ cơ bản của DML.
Ví dụ có lời giải: đọc câu lệnh
SELECT Name
FROM CUSTOMER INNER JOIN ORDERS
ON CUSTOMER.CustomerID = ORDERS.CustomerID
WHERE OrderDate = '2024-05-01'
ORDER BY Name DESC;
- Nêu những gì script này sẽ hiển thị. Tên của tất cả khách hàng đã đặt đơn hàng vào ngày 1 tháng 5 năm 2024, mỗi hàng tương ứng với một đơn hàng, sắp xếp theo thứ tự ngược lại từ A-Z.
- Đọc theo thứ tự thực thi: ghép nối bảng theo ID khách hàng, giữ các hàng của ngày đó, xuất ra tên, sắp xếp giảm dần. Một khách hàng có hai đơn hàng trong ngày sẽ xuất hiện hai lần.
Điểm số dễ mất
- Chuỗi ký tự trong dấu nháy đơn, số không:
Town = 'London',CustomerID = 101. ORDER BYnằm sauWHERE; một phép join cần mệnh đềONcủa nó; mỗi câu lệnh đều kết thúc bằng dấu chấm phẩy.COUNT(*)đếm các dòng, không phải giá trị phân biệt; câu hỏi theo nhóm cầnGROUP BY.CREATE,ALTERvàPRIMARY KEYlà DDL;SELECT,INSERT,UPDATE,DELETElà DML. Sử dụng đúng tên gọi mà đề bài đưa ra.
Bạn đã nắm vững
- DDL tạo và thay đổi cấu trúc:
CREATE DATABASE,CREATE TABLEvới các thuộc tính có kiểu,PRIMARY KEY,FOREIGN KEY … REFERENCES,ALTER TABLE … ADD· DML thao tác với dữ liệu - Các kiểu:
CHARACTER,VARCHAR(n),BOOLEAN,INTEGER,REAL,DATE,TIME SELECT fields FROM table WHERE condition ORDER BY field;INNER JOIN … ONcho hai bảng;COUNT,SUM,AVGvớiGROUP BYđể có một dòng cho mỗi nhómINSERT INTO … VALUES,UPDATE … SET … WHERE,DELETE FROM … WHERE: chưa bao giờ thực hiện cập nhật hoặc xóa mà không cóWHERE