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 DATABASE | Khởi tạo CSDL |
| CREATE TABLE | Khởi tạo bảng |
| ALTER TABLE | Đổi định nghĩa bảng |
| PRIMARY KEY | Khai báo khoá chính |
| FOREIGN KEY REFERENCES | Khai 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 |
| VARCHAR | Xâu kí tự có độ dài thay đổi, không vượt quá n kí tự |
| BOOLEAN | Kiểu lôgic có trị Đúng (1) hay Sai (0) |
| INT hay INTEGER | Số nguyên |
| REAL | Số thực dấu phẩy động |
| DATE | Ngày dạng 'YYYY-MM-DD' |
| TIME | Thờ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 JOIN | Liên kết các bảng theo điều kiện |
| INNER JOIN | Liê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 |
| GRANT | Cấp quyền cho người dùng |
| REVOKE | Thu 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).
Xem nguyên văn trang sách của bài SQL – Ngôn ngữ truy vấn có cấu trúc ngay dưới đây.
Xem ngay Slide bài giảngBài trình chiếu đã dạy trên lớp (PowerPoint).
Mở Drive Phiếu học tậpPhiếu ghi bài trên lớp của bài SQL – Ngôn ngữ truy vấn có cấu trúc.
Mở Drive Phiếu thực hànhBài tập thực hành kèm theo bài SQL – Ngôn ngữ truy vấn có cấu trúc.
Mở Drive Trắc nghiệm12 câu ôn tập bài SQL – Ngôn ngữ truy vấn có cấu trúc — bấm Kiểm tra để xem đúng/sai ngay.
Làm ngayNộ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.



