Tin học 11 · SGK

Bài 14. SQL – Ngôn ngữ truy vấn có cấu trúc

SQL NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC

SAU BÀI HỌC NÀY EM SẼ:

Ở bài trước các em đã biết hệ QTCSDL với vai trò là một bộ phần mềm hỗ trợ khởi tạo, cập nhật, truy xuất CSDL để người dùng có thể cập nhật, truy xuất CSDL. Ngày nay ta thực hiện công việc đó chủ yếu thông qua ngôn ngữ truy vấn có cấu trúc SQL. Sự khác biệt của việc sử dụng SQL so với việc lập trình trực tiếp là gì?

Hoạt động 1

Để lấy danh sách các bản nhạc do nhạc sĩ Văn Cao (mã định danh Aid = 1) sáng tác trong bảng dữ liệu Bản nhạc, ta có thể thực hiện theo một trong hai cách sau:

Sự khác biệt cơ bản trong cách truy vấn nhờ ngôn ngữ truy vấn so với lập trình trực tiếp theo em là gì?

Với cách thực hiện thứ nhất trong Hoạt động 1, người dùng phải biết rõ cấu trúc tệp dữ liệu, từ đó lập trình lấy ra đoạn dữ liệu liên quan tới bản nhạc để xử lí. Việc làm này rất mất công, vì phải biết rõ thủ tục truy cập dữ liệu để xây dựng thuật toán. Hơn thế nữa, ở một bài toán khác có nội dung tương tự, ví dụ lập danh sách các học sinh có điểm trung bình môn Toán trên 8, lại phải viết lại chương trình với một thủ tục tương tự.

Với cách thực hiện thứ hai trong Hoạt động 1, người dùng chỉ cần viết ra yêu cầu dưới dạng một câu truy vấn muốn làm gì, chứ không phải cách để thực hiện yêu cầu ấy. Mọi việc còn lại sẽ do hệ QTCSDL tiếp nhận yêu cầu ở dạng xâu truy vấn rồi lấy ra kết quả theo yêu cầu.

Ngôn ngữ truy vấn chuẩn cho việc định nghĩa, cập nhật, truy xuất và điều khiển dữ liệu từ các CSDL quan hệ là SQL (Structured Query Language), được xây dựng từ những năm 1970. SQL đã trở thành ngôn ngữ truy vấn tiêu chuẩn mà hầu hết các hệ QTCSDL đều sử dụng. Điều đó có nghĩa là chúng ta có thể dùng SQL để thao tác trên hầu hết các hệ QTCSDL phổ biến như Oracle, SQL Server, MySQL, PostgreSQL. SQL có ba thành phần là DDL (Data Definition Language – ngôn ngữ định nghĩa dữ liệu), DML (Data Manipulation Language – ngôn ngữ thao tác dữ liệu) và DCL (Data Control Language – ngôn ngữ kiểm soát dữ liệu). Chúng ta sẽ sử dụng SQL để minh hoạ cách thức quản trị CSDL.

2 KHỞI TẠO CSDL

Thành phần DDL của SQL cung cấp các câu truy vấn khởi tạo CSDL, khởi tạo bảng, thiết lập các khoá, tóm tắt trong các bảng sau.

Câu truy vấn DDLÝ nghĩa
CREATE DATABASEKhởi tạo CSDL
CREATE TABLEKhởi tạo bảng
ALTER TABLEĐổi định nghĩa bảng
PRIMARY KEYKhai báo khoá chính
FOREIGN KEY REFERENCESKhai báo khoá ngoài

Các kiểu dữ liệu được sử dụng cho các thuộc tính của các bảng trong SQL.

Kiểu dữ liệuÝ nghĩa
CHAR (n) hay CHARACTER (n)Xâu kí tự có độ dài cố định n kí tự, nếu xâu có ít hơn thì trống được thêm vào phía bên phải
VARCHARXâu kí tự có độ dài thay đổi, không vượt quá n kí tự
BOOLEANKiểu lôgic có trị Đúng (1) hay Sai (0)
INT hay INTEGERSố nguyên
REALSố thực dấu phẩy động
DATENgày dạng 'YYYY-MM-DD'
TIMEThời gian dạng 'HH:MM:SS'

Các bảng Nhạc sĩ, Bản nhạc có tên tương ứng là nhacsi và bannhac.

Thành phần DML của SQL cung cấp các câu truy vấn cập nhật và truy xuất dữ liệu. Sau đây là một vài câu truy vấn truy xuất dữ liệu để minh hoạ.

Câu truy xuất dữ liệuÝ nghĩa
SELECT <dữ liệu cần lấy> FROM <tên bảng><dữ liệu cần lấy> có thể là danh sách các trường hay hàm nào đó với các biến là trường trong bảng
WHERE <điều kiện chọn>Chỉ định chọn chỉ các dòng thoả mãn điều kiện xác định
ORDER BY <tên trường>Sắp xếp các dòng kết quả theo thứ tự chỉ định
INNER JOINLiên kết các bảng theo điều kiện
INNER JOINLiên kết các theo điều kiện bảng

Một số câu truy vấn cập nhật dữ liệu được cho trong Bảng sau.

Câu truy vấn cập nhật dữ liệuÝ nghĩa
INSERT INTO <tên bảng> VALUES <danh sách giá trị>Thêm dữ liệu vào bảng <tên bảng> với giá trị lấy từ <danh sách giá trị>
DELETE FROM <tên bảng> WHERE <điều kiện>Xoá các dòng trong <tên bảng> thoả mãn <điều kiện>
UPDATE <tên bảng> SET <tên trường> = <giá trị>Cập nhật giá trị cho trường có tên là <tên trường> trong bảng <tên bảng>
Ví dụ:
SELECT Mid, TenBN FROM bannhac WHERE Aid = 1 ORDER BY TenBN;
Chọn ra từ bảng bannhac các dòng có Aid = 1, ở mỗi dòng chỉ lấy giá trị các cột Mid và TenBN. Sắp xếp các kết quả theo thứ tự TenBN.
SELECT bannhac.TenBN, nhacsi.TenNS FROM bannhac INNER JOIN nhacsi ON bannhac.Aid = nhacsi.Aid;
Lấy tất cả các dòng từ bảng bannhac, liên kết với bảng nhacsi theo khoá Aid, lấy cột TenBN ở bannhac và cột TenNS ở nhacsi.
INSERT INTO nhacsi VALUES (5, 'Phú Quang'), (6, 'Phan Huỳnh Điểu');
Thêm vào bảng nhacsi hai dòng mới.
DELETE FROM bannhac WHERE Mid = '0005';
Xoá dòng có Mid = '0005' trong bannhac.
UPDATE nhacsi SET TenNS = 'Hoàng Hiệp' WHERE Aid = 6;
Thay đổi giá trị cột TenNS thành 'Hoàng Hiệp' ở dòng có cột Aid = 6 trong bảng nhacsi.

Giả sử đã có bảng diemtoan_11A, trong đó có cột tb ghi điểm trung bình môn Toán của tất cả các học sinh lớp 11A. Khi đó câu truy vấn sau lấy ra điểm trung bình môn Toán của tất cả các học sinh lớp 11A:

SELECT AVG(tb) FROM diemtoan_11A;

4 KIỂM SOÁT QUYỀN TRUY CẬP

Thành phần DCL của SQL cung cấp các câu truy vấn kiểm soát quyền người dùng đối với CSDL, tóm tắt trong Bảng 14.5.

Mẫu câu truy vấnÝ nghĩa
GRANTCấp quyền cho người dùng
REVOKEThu hồi quyền đối với người dùng

LUYỆN TẬP

VẬN DỤNG

Viết câu truy vấn lấy ra tất cả các dòng trong bảng banthuam liên kết với bannhac và bảng casi, mỗi dòng lấy Sid của bảng banthuam, cột TenBN của bảng bannhac và TenCS của bảng casi.

Tài liệu bài học

Bản scan SGK xem ngay trên web · slide và phiếu mở từ Google Drive (cần đăng nhập Google để tải).

Nội dung SGK · bản scan

Bài SQL – Ngôn ngữ truy vấn có cấu trúc — trang 69–72 của sách giáo khoa.

SGK bài 14 – trang 69
Trang 69
SGK bài 14 – trang 70
Trang 70
SGK bài 14 – trang 71
Trang 71
SGK bài 14 – trang 72
Trang 72