CHƯƠNG 5 SQL (Structured Query Language) Nội dung Giới thiệu Định nghĩa dữ liệu Truy vấn dữ liệu Cập nhật dữ liệu Khung nhìn (view) Chỉ mục (index) 2 Giới thiệu Ngôn ngữ ĐSQH - Cách thức truy vấn dữ liệu - Khó khăn cho người sử dụng SQL (Structured Query Language) - Ngôn ngữ cấp cao - Người sử dụng chỉ cần đưa ra nội dung cần truy vấn - Được phát triển bởi IBM (1970s) - Được gọi là SEQUEL - Được ANSI công nhận và phát triển thành chuẩn SQL-86 SQL-92 SQL-99 3 Giới thiệu (tt) SQL gồm - Định nghĩa dữ liệu (DDL) - Thao tác dữ liệu (DML) - Định nghĩa khung nhìn Lý thuyết : Chuẩn SQL-92 - Ràng buộc toàn vẹn - Phân quyền và bảo mật - Điều khiển giao tác SQL sử dụng thuật ngữ Thương mại : SQL Server - Bảng ~ quan hệ - Cột ~ thuộc tính - Dòng ~ bộ 4 Nội dung chi tiết Giới thiệu Định nghĩa dữ liệu - Kiểu dữ liệu - Các lệnh định nghĩa dữ liệu Truy vấn dữ liệu Cập nhật dữ liệu Khung nhìn (view) Chỉ mục (index) 5 Định nghĩa dữ liệu Là ngôn ngữ mô tả - Lược đồ cho mỗi quan hệ - Miền giá trị tương ứng của từng thuộc tính - Ràng buộc toàn vẹn - Chỉ mục trên mỗi quan hệ Gồm - CREATE TABLE (tạo bảng) - DROP TABLE (xóa bảng) - ALTER TABLE (sửa bảng) - CREATE DOMAIN (tạo miền giá trị) - CREATE DATABASE 6 Kiểu dữ liệu Số (numeric) - INTEGER - SMALLINT - NUMERIC, NUMERIC(p), NUMERIC(p,s) - DECIMAL, DECIMAL(p), DECIMAL(p,s) - REAL - DOUBLE PRECISION - FLOAT, FLOAT(p) 7 Kiểu dữ liệu (tt) Chuỗi ký tự (character string) - CHARACTER hoặc CHAR - CHARACTER(n) hoặc CHAR (n) - CHARACTER VARYING(n) hoặc VARCHAR(n) - NATIONAL CHARACTER (n) hoặc NCHAR(n) Chuỗi bit (bit string) - BIT, BIT(x) - BIT VARYING(x) Ngày giờ (datetime) - DATE gồm ngày, tháng và năm - TIME gồm giờ, phút và giây - TIMESTAMP gồm ngày và giờ - DATETIME: gồm DATE và TIME (Chỉ có trong SQL của SQL 8 Server) Lệnh tạo bảng Để định nghĩa một bảng - Tên bảng - Các thuộc tính Tên thuộc tính Kiểu dữ liệu Các RBTV trên thuộc tính Cú pháp CREATE TABLE <Tên_bảng> ( <Tên_cột> <Kiểu_dữ_liệu> [<RBTV>], <Tên_cột> <Kiểu_dữ_liệu> [<RBTV>], … [<RBTV>] ) 9 Ví dụ - Tạo bảng Tạo bảng lưu trữ thông tin giáo viên với các thuộc tính và quy định sau: MaGV : Khoá chính HoTen: Họ tên của giáo viên không được để trống Luong: Mặc định là 1000 Phai: Phải là Nam hoặc Nữ NgaySinh: Ngày tháng năm sinh của giáo viên SoNha, Duong, Quan, ThanhPho : địa chỉ của giáo viên GVQLCM: mã giáo viên quản lý chuyên môn của giáo viên (khoá ngoại) MaBM: mã bộ môn của giáo viên (khoá ngoại) 10 Ví dụ - Tạo bảng CREATE TABLE GIAOVIEN ( MaGV CHAR(9), HoTen NVARCHAR(50), Luong INT, Phai CHAR(3), NgaySinh DATETIME, SoNha NVARCHAR(10), Duong NVARCHAR(50), Quan NVARCHAR(50), ThanhPho NVARCHAR(50), GVQLCM CHAR(9), MaBM CHAR(9) ) 11 Lệnh tạo bảng (tt) <RBTV> - NOT NULL - NULL - UNIQUE - DEFAULT - PRIMARY KEY - FOREIGN KEY / REFERENCES - CHECK Đặt tên cho RBTV CONSTRAINT <Ten_RBTV> <RBTV> 12 Ví dụ - RBTV CREATE TABLE GIAOVIEN ( MAGV CHAR(9) PRIMARY KEY, HOTEN NVARCHAR(50) NOT NULL, LUONG INT DEFAULT (1000), PHAI CHAR(3) CHECK (PHAI IN(‘Nam’, ‘Nu’)), NGAYSINH DATETIME, SONHA NVARCHAR(10), DUONG NVARCHAR(50), QUAN NVARCHAR(50), THANHPHO NVARCHAR(50), GVQLCM CHAR(9), 13 MABM CHAR(9) Ví dụ - RBTV CREATE TABLE CONGVIEC ( MADT VARCHAR(10), STT INT, TENCV NVARCHAR(50), NGAYBD DATETIME, NGAYKT DATETIME, PRIMARY KEY(MADT, STT) ) CREATE TABLE DETAI ( MADT VARCHAR (10) PRIMARY KEY, TENDT NVARCHAR (50) UNIQUE, KINHPHI INT, CAPQL NVARCHAR (50), NGAYBD DATETIME, NGAYKT DATETIME, MACD VARCHAR (10), GVCNDT CHAR (9) 14 ) Ví dụ - Đặt tên cho RBTV CREATE TABLE GIAOVIEN ( MAGV CHAR(9) CONSTRAINT PK_GV PRIMARY KEY, HOTEN NVARCHAR(50) CONSTRAINT NN_HOTEN NOT NULL, LUONG INT CONSTRAINT DE_LUONG DEFAULT (10000), PHAI CHAR(3) CONSTRAINT CK_PHAI CHECK (PHAI IN('Nam', 'Nu')) CONSTRAINT NN_PHAI NOT NULL, NGAYSINH DATETIME, SONHA NVARCHAR(10), DUONG NVARCHAR(50), QUAN NVARCHAR(50), THANHPHO NVARCHAR(50), GVQL CHAR(9), MABM CHAR(9) 15 ) Ví dụ - Đặt tên cho RBTV CREATE TABLE CONGVIEC( MADT VARCHAR(10), STT INT, TENCV NVARCHAR(50), NGAYBD DATETIME, NGAYKT DATETIME, CONSTRAINT PK_CV PRIMARY KEY(MADT, STT), CONSTRAINT FK_CONGVIEC_DETAI FOREIGN KEY MADT REFERENCES DETAI(MADT) ) 16 Lệnh sửa bảng Được dùng để Thay đổi cấu trúc bảng Thay đổi RBTV Thêm cột ALTER TABLE <Tên_bảng> ADD <Tên_cột> <Kiểu_dữ_liệu> [<RBTV>] Xóa cột ALTER TABLE <Tên_bảng> DROP COLUMN <Tên_cột> Cập nhật cột ALTER TABLE <Tên_bảng> ALTER COLUMN <Tên_cột> <Kiểu_dữ_liệu_mới> 17 Lệnh sửa bảng (tt) Thêm RBTV ALTER TABLE <Tên_bảng> ADD CONSTRAINT <Ten_RBTV> <RBTV>, CONSTRAINT <Ten_RBTV> <RBTV>, … Xóa RBTV ALTER TABLE <Tên_bảng> DROP <Tên_RBTV> 18 Ví dụ - Thay đổi cấu trúc bảng ALTER TABLE GIAOVIEN ADD TUOI INT CONSTRAINT CK_TUOI CHECK (TUOI >= 23 AND TUOI <=60) NOT NULL ALTER TABLE GIAOVIEN DROP COLUMN HOTEN ALTER TABLE GIAOVIEN ALTER COLUMN HOTEN NVARCHAR(100) 19 Ví dụ - Thay đổi RBTV CREATE TABLE BOMON( MABM INT NOT NULL, Phải xác định NOT NULL TENBM NVARCHAR(50), trước khi tạo khóa chính PHONG CHAR(10), DIENTHOAI CHAR(15), TRUONGBM CHAR(9), MAKHOA CHAR(4), NGAYNHANCHUC DATETIME ) ALTER TABLE BOMON ADD CONSTRAINT PK_BOMON PRIMARY KEY (MABM), CONSTRAINT FK_TRBOMON FOREIGN KEY (TRUONGBM) Cần có bảng REFERENCES GIAOVIEN(MAGV), GIAOVIEN trước CONSTRAINT UNI_TENBM UNIQUE(TENBM), CONSTRAINT DF_NGAYNHANCHUC DEFAULT(GETDATE()) FOR NGAYNHANCHUC20 Lệnh xóa bảng Được dùng để xóa cấu trúc bảng Tất cả dữ liệu của bảng cũng bị xóa Cú pháp DROP TABLE <Tên_bảng> Ví dụ DROP TABLE GIAOVIEN DROP TABLE BOMON DROP TABLE THAMGIADT 21 Lệnh xóa bảng (tt) GIÁOVIÊN MãGV HọTên Lương Phái NgàySinh SốNhà Đường Quận ThànhPhố GVQL MãBM BỘMÔN MãKhoa TrưởngBM NgàyNhậnChức ĐiệnThoại MãBM TênBM Phòng KHOA TrưởngKhoa NgàyNhậnChức TênKhoa NămTL Phòng ĐiệnThoại MãKhoa 22 Lệnh tạo miền giá trị Tạo ra một kiểu dữ liệu mới kế thừa những kiểu dữ liệu có sẳn Cú pháp CREATE DOMAIN <Tên_kdl_mới> AS <Kiểu_dữ_liệu> Ví dụ CREATE DOMAIN MyString30 AS VARCHAR(30) 23 Nội dung chi tiết Giới thiệu Định nghĩa dữ liệu Truy vấn dữ liệu Truy vấn cơ bản Tập hợp, so sánh tập hợp và truy vấn lồng Hàm kết hợp và gom nhóm Một số kiểu truy vấn khác Cập nhật dữ liệu Khung nhìn (view) Chỉ mục (index) 24 Truy vấn dữ liệu Là ngôn ngữ rút trích dữ liệu thỏa một số điều kiện nào đó Dựa trên Phép toán ĐSQH Một số bổ sung Cho phép 1 bảng có nhiều dòng trùng nhau Bảng là bag quan hệ là set 25 Truy vấn cơ bản Gồm 3 mệnh đề SELECT <danh sách các cột> FROM <danh sách các bảng> WHERE <điều kiện> <danh sách các cột> Tên các cột cần được hiển thị trong kết quả truy vấn <danh sách các bảng> Tên các bảng liên quan đến câu truy vấn <điều kiện> Biểu thức boolean xác định dòng nào sẽ được rút trích Nối các biểu thức: AND, OR, và NOT Phép toán: , , , , , , LIKE và BETWEEN 26 Truy vấn cơ bản (tt) SQL và ĐSQH SELECT <danh sách các cột> FROM <danh sách các bảng> WHERE <điều kiện> SELECT L FROM R WHERE C L (C (R)) 27 Mệnh đề SELECT Lấy ra tất cả các cột Lấy tất cả các cột của quan hệ SELECT * kết quả FROM KHOA WHERE PHONG='I53' AND NAMTL = '1995' MaKhoa TenKhoa Phong NamTL DienThoai TruongKhoa NgayNhanChuc CNTT Công nghệ thông tin I53 1995 08313964145 GV130 01/01/2007 SH Sinh học B32 1975 08313123545 GV250 01/01/1990 PHG='I53'NamTL='1995' (KHOA) 28 Mệnh đề SELECT (tt) Lấy ra một số cột SELECT MAKHOA, TENKHOA, PHONG FROM KHOA WHERE PHONG='I53' AND NAMTL = '1995' MaKhoa TenKhoa Phong CNTT Công nghệ thông tin I53 MAKHOA, TENKHOA, PHONG( PHG='I53'NamTL='1995' (KHOA)) 29 Mệnh đề SELECT (tt) Tên bí danh SELECT MAKHOA AS 'Mã khoa', TENKHOA AS 'Tên khoa', PHONG AS 'Mã phòng' FROM KHOA WHERE PHONG='I53' AND NAMTL = '1995' Mã Tên khoa Mã phòng khoa CNTT Công nghệ thông I53 tin Mã khoa, Tên khoa, Mã phòng( MAKHOA,TENKHOA,PHONG( PHG='I53'NamTL='1995' (KHOA))) 30 Mệnh đề SELECT (tt) Mở rộng SELECT MAGV, HOTEN, SONHA + ',' + DUONG + ',' + ',' + QUAN + ',' + THANHPHO AS 'DIA CHI' FROM GIAOVIEN WHERE PHAI='Nam' MAGV HOTEN DIA CHI GV001 Nguyễn Văn A 123 Phan Đăng Lưu, Q.Phú Nhuận, TP.Hồ Chí Minh MAGV,HOTEN,DIA CHI( MAGV,HOTEN,SONHA+DUONG+QUAN+THANHPHO( PHAI=‘Nam’(GIAOVIEN))) 31 Mệnh đề SELECT (tt) Mở rộng SELECT MAGV, LUONG*1.1 AS 'LUONG10%' FROM GIAOVIEN WHERE PHAI='Nam' MAGV LUONG10% GV001 550000 MAGV,LUONG10%( MAGV,LUONG*1.1( PHAI=‘Nam’(GIAOVIEN))) 32 Mệnh đề SELECT (tt) Loại bỏ các dòng trùng nhau SELECT LUONG SELECT DISTINCT LUONG FROM GIAOVIEN FROM GIAOVIEN WHERE PHAI=‘Nam’ WHERE PHAI=‘Nam’ LUONG LUONG 30000 30000 25000 25000 25000 38000 38000 - Tốn chi phí - Người dùng muốn thấy 33 Ví dụ Cho biết MAGV và TENGV làm việc ở bộ môn ‘Hệ thống thông tin’ R1 GIAOVIEN GIAOVIEN.MABM BOMON KQ MAGV, HOTEN ( TENBM='Hệ thống thông tin' (R1)) SELECT MAGV, HOTEN FROM GIAOVIEN, BOMON WHERE TENBM= N'Hệ thống thông tin' AND GIAOVIEN.MABM 34 Mệnh đề WHERE Sử dụng các phép toán AND, OR để nối các biểu thức điều kiện lại với nhau SELECT MAGV, HOTEN FROM GIAOVIEN, BOMON TRUE Biểu WHERE TENBM = 'Hệ thống thông tin' thức AND luận lý AND GIAOVIEN.MABM TRUE 35 Mệnh đề WHERE (tt) Độ ưu tiên SELECT MAGV, HOTEN FROM GIAOVIEN, BOMON WHERE (TENBM = 'Hệ thống thông tin' OR TENBM = 'Mạng máy tính') AND GIAOVIEN.MABM Độ ưu tiên mặc định của các phép toán: từ trái qua phải. Nên sử dụng dấu ngoặc thể hiện tường minh sự ưu tiên của các phép toán. 36 Mệnh đề WHERE (tt) BETWEEN SELECT MAGV, HOTEN FROM GIAOVIEN WHERE LUONG >= 20000 AND LUONG <= 30000 SELECT MAGV, HOTEN FROM GIAOVIEN WHERE LUONG BETWEEN 20000 AND 30000 37 Mệnh đề WHERE (tt) NOT BETWEEN SELECT MAGV, HOTEN FROM GIAOVIEN WHERE LUONG NOT BETWEEN 20000 AND 30000 SELECT MAGV, HOTEN FROM GIAOVIEN WHERE LUONG < 20000 OR LUONG > 30000 38 Mệnh đề WHERE (tt) LIKE SELECT MAGV, HOTEN FROM GIAOVIEN HOTEN LIKE ‘nguyen _ _ _ _’ WHERE HOTEN LIKE ‘Nguyen _ _ _ _’ 4 ký tự bất kỳ SELECT MAGV, HOTEN FROM GIAOVIEN WHERE HOTEN LIKE ‘Nguyen %’ Chuỗi bất kỳ 39 Mệnh đề WHERE (tt) NOT LIKE SELECT MAGV, HOTEN FROM GIAOVIEN WHERE HOTEN LIKE ‘Nguyen’ phủ định SELECT MAGV, HOTEN FROM GIAOVIEN WHERE HOTEN NOT LIKE ‘Nguyen’ 40 Mệnh đề WHERE (tt) charlist MAGV HOTEN GV001 Nguyễn Văn A GV002 Hoàng Thị C SELECT * SELECT * FROM GIAOVIEN GV FROM GIAOVIEN GV WHERE GV.HOTEN LIKE N'[n]%' WHERE GV.HOTEN LIKE N'[nh]%' MAGV HOTEN MAGV HOTEN GV001 Nguyễn Văn A GV001 Nguyễn Văn A GV002 Hoàng Thị C 41 Mệnh đề WHERE (tt) charlist MAGV HOTEN GV001 Nguyễn Văn A GV002 Hoàng Thị C SELECT * SELECT * FROM GIAOVIEN GV FROM GIAOVIEN GV WHERE GV.HOTEN LIKE N'[^h]%' WHERE GV.
Tổng quan về giáo trình
Giáo trình thuộc học phần Cơ sở dữ liệu (hoặc Hệ quản trị cơ sở dữ liệu), giữ vị trí cốt lõi trong khối kiến thức cơ sở ngành thuộc chương trình đào tạo Cử nhân và Kỹ sư Công nghệ thông tin, Hệ thống thông tin và Khoa học máy tính. Nội dung trọng tâm của tài liệu tập trung vào Chương 5: Ngôn ngữ truy vấn có cấu trúc (Structured Query Language - SQL), đóng vai trò cầu nối chuyển tiếp từ lý thuyết mô hình dữ liệu quan hệ sang môi trường triển khai thực tế trên các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS).
Mục tiêu học tập của tài liệu nhằm trang bị cho người học:
- Khả năng hiểu rõ nguồn gốc lịch sử, quá trình chuẩn hóa của SQL từ các phát triển ban đầu của IBM (SEQUEL) đến các chuẩn ANSI (SQL-86, SQL-92, SQL-99).
- Nắm vững cú pháp và áp dụng thành thạo nhóm lệnh Định nghĩa dữ liệu (DDL - Data Definition Language) để khởi tạo, điều chỉnh cấu trúc lược đồ, kiểu dữ liệu và các ràng buộc toàn vẹn.
- Hiểu và triển khai các biểu thức truy vấn dữ liệu (DML - Data Manipulation Language) từ cấu trúc
SELECT - FROM - WHEREcơ bản, tương quan trực tiếp với các phép toán trong Đại số quan hệ. - Nắm bắt cơ chế kiểm soát dữ liệu thông qua khung nhìn (view), chỉ mục (index), phân quyền, bảo mật và điều khiển giao tác.
Cách tiếp cận của giáo trình đi từ nền tảng lý thuyết hình thức (Đại số quan hệ, chuẩn ANSI SQL-92) đối chiếu song song với thuật ngữ và cú pháp thương mại (điển hình là Microsoft SQL Server). Cấu trúc bài giảng kết hợp định nghĩa cú pháp chuẩn xác với hệ thống ví dụ thực hành xây dựng trên mô hình quản lý nhân sự, đề tài nghiên cứu khoa học và tổ chức bộ môn của trường đại học.
Nội dung kiến thức cốt lõi
Các chương và chủ đề chính
Nội dung tài liệu được tổ chức theo quy trình phát triển logic của một hệ thống cơ sở dữ liệu quan hệ:
-
Tổng quan về ngôn ngữ SQL: Khái quát sự hình thành từ ngôn ngữ Đại số quan hệ (ĐSQH) đến ngôn ngữ cấp cao SQL phát triển bởi IBM vào thập niên 1970 với tên gọi ban đầu là SEQUEL, sau đó được Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI) công nhận qua các phiên bản SQL-86, SQL-92, SQL-99. Phân định các phân hệ chức năng: Định nghĩa dữ liệu (DDL), Thao tác dữ liệu (DML), Định nghĩa khung nhìn, Ràng buộc toàn vẹn, Phân quyền - bảo mật và Điều khiển giao tác. Thiết lập bảng ánh xạ giữa thuật ngữ lý thuyết và thương mại: Quan hệ ~ Bảng (Table), Thuộc tính ~ Cột (Column), Bộ ~ Dòng (Row/Tuple).
-
Ngôn ngữ định nghĩa dữ liệu (DDL) và hệ thống kiểu dữ liệu: Cung cấp cú pháp mô tả lược đồ quan hệ, miền giá trị, ràng buộc toàn vẹn và chỉ mục:
- Các lệnh quản trị cấu trúc:
CREATE TABLE,DROP TABLE,ALTER TABLE,CREATE DOMAIN,CREATE DATABASE. - Kiểu dữ liệu số (Numeric):
INTEGER,SMALLINT,NUMERIC,NUMERIC(p),NUMERIC(p,s),DECIMAL,DECIMAL(p,s),REAL,DOUBLE PRECISION,FLOAT,FLOAT(p). - Kiểu dữ liệu chuỗi ký tự (Character string):
CHAR,CHAR(n),VARCHAR(n),NCHAR(n),NVARCHAR(n). - Kiểu chuỗi bit (Bit string):
BIT,BIT(x),BIT VARYING(x). - Kiểu ngày giờ (Datetime):
DATE(ngày, tháng, năm),TIME(giờ, phút, giây),TIMESTAMP(ngày và giờ),DATETIME(kết hợp cả Date và Time trong SQL Server).
- Các lệnh quản trị cấu trúc:
-
Khai báo ràng buộc toàn vẹn (RBTV): Thiết lập các điều kiện kiểm tra trên thuộc tính hoặc bảng thông qua từ khóa
NOT NULL,NULL,UNIQUE,DEFAULT,PRIMARY KEY,FOREIGN KEY / REFERENCES,CHECK. Cú pháp định danh tường minh cho ràng buộc bằng mệnh đềCONSTRAINT <Ten_RBTV> <RBTV>(ví dụ:CONSTRAINT PK_GV PRIMARY KEY,CONSTRAINT CK_PHAI CHECK (PHAI IN ('Nam', 'Nu'))). -
Sửa đổi và xóa cấu trúc bảng:
- Lệnh
ALTER TABLE: Thêm cột mới (ADD), xóa cột (DROP COLUMN), thay đổi kiểu dữ liệu (ALTER COLUMN), thêm ràng buộc (ADD CONSTRAINT) hoặc xóa ràng buộc (DROP <Tên_RBTV>). - Lệnh
DROP TABLE: Hủy bỏ hoàn toàn lược đồ và toàn bộ dữ liệu lưu trữ bên trong bảng.
- Lệnh
-
Ngôn ngữ truy vấn dữ liệu (DML) cơ bản:
- Cấu trúc mệnh đề nền tảng:
SELECT <danh sách các cột> FROM <danh sách các bảng> WHERE <điều kiện>. - Cơ chế loại bỏ dòng trùng lặp bằng từ khóa
DISTINCT. - Khai báo bí danh (Alias) cho cột và bảng thông qua từ khóa
AShoặc khoảng trắng. - Các phép toán logic và so sánh:
AND,OR,NOT,BETWEEN ... AND ...,NOT BETWEEN, phép khớp mẫuLIKE/NOT LIKEvới ký tự đại diện (%,_,[charlist],[^charlist]). - Cơ chế xử lý giá trị rỗng (
NULL): Bản chất giá trị không xác định (unknown), không áp dụng (inapplicable), không tồn tại (withheld); logic ba giá trị (Three-Valued Logic); kiểm tra bằng toán tửIS NULLvàIS NOT NULL. - Kết nối nhiều bảng: Bản chất tích Descartes của mệnh đề
FROMkết hợp điều kiện lọc tại mệnh đềWHEREđể thực hiện phép kết.
- Cấu trúc mệnh đề nền tảng:
Kiến thức nền tảng được xây dựng
- Ánh xạ lý thuyết Đại số quan hệ sang SQL: Biểu diễn tương đương giữa biểu thức toán học $\pi_L(\sigma_C(R))$ và câu lệnh truy vấn: $$\text{SELECT } L \text{ FROM } R \text{ WHERE } C$$
- Mô hình cấu trúc bảng đa tập hợp (Bag/Multiset): Phân biệt giữa quan hệ trong lý thuyết ĐSQH (tập hợp - Set, không chứa các phần tử trùng lặp) và bảng trong SQL (cho phép nhiều dòng trùng nhau trừ khi chỉ định rõ
DISTINCThoặc khóa chính). - Tính toàn vẹn tham chiếu và phụ thuộc dữ liệu: Thiết lập mối quan hệ giữa các thực thể thông qua cặp khóa chính - khóa ngoại (
PRIMARY KEY-FOREIGN KEY), yêu cầu thứ tự khởi tạo bảng độc lập trước khi tạo bảng phụ thuộc.
Kỹ năng phát triển
- Kỹ năng thiết kế và hiện thực hóa lược đồ cơ sở dữ liệu quan hệ bằng mã lệnh DDL chuẩn.
- Kỹ năng phân tích logic và cấu trúc hóa câu lệnh truy vấn dữ liệu có điều kiện, biểu thức tính toán số học (
LUONG*1.1), và ghép chuỗi ký tự (SONHA + ',' + DUONG...). - Kỹ năng gỡ lỗi xung đột cấu trúc dữ liệu, kiểm soát điều kiện vi phạm ràng buộc toàn vẹn khi chỉnh sửa hoặc xóa bảng.
Phương pháp giảng dạy và học tập
Giáo trình áp dụng phương pháp sư phạm diễn dịch kết hợp quy nạp, bắt đầu từ việc trình bày cú pháp tổng quát, phân tích ngữ nghĩa, sau đó minh họa trực tiếp thông qua các đoạn mã thực thi trên lược đồ cơ sở dữ liệu mẫu.
Hệ thống bài tập và nghiên cứu tình huống thực tế
Hệ thống bài học được neo chặt vào lược đồ cơ sở dữ liệu quản lý nghiên cứu khoa học của trường đại học bao gồm 7 thực thể liên kết: GIAOVIEN, BOMON, KHOA, DETAI, CONGVIEC, THAMGIADT, CHUDE. Các ví dụ điển hình bao gồm:
- Tình huống định nghĩa cấu trúc: Khởi tạo bảng
GIAOVIENvới các điều kiện nghiệp vụ:MaGVlà khóa chính,HoTenkhông được để trống (NOT NULL),Luongmặc định 1000 (DEFAULT),Phaikiểm tra thuộc tập hợp('Nam', 'Nu')bằng mệnh đềCHECK. - Tình huống ràng buộc tham chiếu phức hợp: Tạo bảng
CONGVIECvới khóa chính tổng hợp từ hai thuộc tính(MADT, STT)và khóa ngoạiMADTtham chiếu đếnDETAI(MADT). - Tình huống thay đổi cấu trúc: Thêm ràng buộc tuổi giảng viên từ 23 đến 60 bằng lệnh
ALTER TABLE GIAOVIEN ADD TUOI INT CONSTRAINT CK_TUOI CHECK (TUOI >= 23 AND TUOI <= 60) NOT NULL. - Tình huống truy vấn đa bảng: Truy vấn kết hợp bảng để lấy thông tin trưởng bộ môn thuộc khoa 'CNTT', tìm chủ nhiệm đề tài cấp quản lý 'Thành phố', hoặc lọc giảng viên tham gia đề tài 'Mobile Database' có mức phụ cấp trên 10 triệu đồng.
Phương pháp đánh giá và tự học
- Đánh giá năng lực: Đo lường thông qua độ chính xác cú pháp SQL, khả năng chỉ định đúng thứ tự bảng trong mệnh đề
FROM, thiết lập chính xác điều kiện kết nối trong mệnh đềWHEREđể tránh bùng nổ tích Descartes, và khả năng thiết lập tên ràng buộc (CONSTRAINT) chuẩn mực. - Hướng dẫn tự học: Thực hành viết kịch bản SQL tuần tự từ DDL đến DML; kiểm tra tính đúng đắn của các biểu thức logic có chứa giá trị
NULL; đối chiếu kết quả trả về của câu lệnh SQL với bảng dữ liệu gốc để hiểu rõ cơ chế lọc và chiếu.
Điểm nổi bật và cập nhật
-
Hệ thống hóa lịch sử và chuẩn hóa: Tài liệu theo sát quá trình tiến hóa của chuẩn ANSI SQL từ SQL-86, SQL-92 đến SQL-99, làm rõ sự đồng nhất và khác biệt giữa lý thuyết chuẩn và cú pháp hỗ trợ trên hệ quản trị thương mại SQL Server (như kiểu dữ liệu
DATETIMEhay hàmGETDATE()). -
Làm rõ bản chất toán học của đại số quan hệ trong SQL: Giải thích rõ ràng nguyên lý ánh xạ từ các phép toán hình thức (phép chọn $\sigma$, phép chiếu $\pi$, phép tích Descartes $\times$, phép kết $\bowtie$) sang các mệnh đề
SELECT,FROM,WHERE. -
Chi tiết hóa cơ chế logic ba giá trị (Three-Valued Logic): Phân tích sâu về giá trị
NULLtrong cơ sở dữ liệu:- Biểu thức tính toán có
NULLsẽ trả vềNULL(ví dụ:x + 3$\rightarrow$NULL). - Biểu thức so sánh trực tiếp với
NULLsẽ trả vềUNKNOWN(ví dụ:x = 3$\rightarrow$UNKNOWN), từ đó xác lập tính bắt buộc của việc dùng toán tửIS NULLhoặcIS NOT NULL.
- Biểu thức tính toán có
-
Khai thác biểu thức khớp mẫu nâng cao: Tài liệu phân định rõ việc sử dụng các ký tự đại diện trong toán tử
LIKE:_biểu diễn cho chính xác 1 ký tự bất kỳ.%biểu diễn cho chuỗi ký tự bất kỳ với độ dài tùy ý.[charlist](ví dụ:[nh]%) biểu diễn ký tự bắt đầu nằm trong danh sách.[^charlist](ví dụ:[^h]%) biểu diễn ký tự bắt đầu không nằm trong danh sách.
Đối tượng sử dụng giáo trình
| Nhóm đối tượng | Yêu cầu tiên quyết | Phạm vi sử dụng |
|---|---|---|
| Sinh viên đại học (Năm 2 - Năm 3 ngành CNTT, Kỹ thuật Phần mềm, Hệ thống Thông tin, Khoa học Dữ liệu) | Đã học Nhập môn lập trình, Cấu trúc dữ liệu và Giải thuật, Lý thuyết Mô hình dữ liệu quan hệ và Đại số quan hệ. | Học tập trên lớp, làm bài tập thực hành phòng máy, ôn tập thi kết thúc học phần Cơ sở dữ liệu. |
| Giảng viên | Chuyên môn về Khoa học máy tính hoặc Hệ thống thông tin. | Sử dụng làm khung bài giảng chuẩn cho Chương 5 (SQL), thiết kế đề thi lý thuyết và bài kiểm tra thực hành SQL. |
| Kỹ sư phần mềm / Tự học | Kiến thức logic học cơ bản, hiểu biết sơ bộ về cấu trúc bảng dữ liệu. | Tra cứu cú pháp DDL/DML, chuẩn hóa quy ước đặt tên CONSTRAINT, nắm bắt nguyên lý kết nối bảng và xử lý NULL. |
Câu hỏi thường gặp
1. Giáo trình này phù hợp nhất với những môn học nào?
Giáo trình được thiết kế trực tiếp cho môn học Cơ sở dữ liệu hoặc Hệ quản trị cơ sở dữ liệu ở bậc Đại học và Cao đẳng khối ngành Công nghệ thông tin và Kỹ thuật máy tính.
2. Sự khác biệt căn bản giữa quan hệ trong Đại số quan hệ và bảng trong SQL được trình bày như thế nào?
Theo tài liệu, trong Đại số quan hệ, một quan hệ là một tập hợp (set), nghĩa là không chứa các bộ trùng lặp. Ngược lại, trong SQL, một bảng là một đa tập hợp (bag/multiset), cho phép tồn tại các dòng có giá trị trùng lặp hoàn toàn, trừ khi người dùng chỉ định từ khóa DISTINCT hoặc thiết lập khóa chính PRIMARY KEY.
3. Tại sao trong SQL không được dùng phép so sánh WHERE cot = NULL?
Giá trị NULL đại diện cho trạng thái không biết (unknown), không áp dụng (inapplicable) hoặc không tồn tại (withheld). Do đó, mọi biểu thức so sánh đại số trực tiếp với NULL (như = NULL hoặc <> NULL) đều cho kết quả logic là UNKNOWN thay vì TRUE hay FALSE. Để kiểm tra giá trị rỗng, SQL cung cấp cú pháp chuẩn là IS NULL hoặc IS NOT NULL.
4. Quy ước đặt tên tường minh cho ràng buộc (CONSTRAINT) mang lại lợi ích gì?
Việc sử dụng cú pháp CONSTRAINT <Ten_RBTV> (như CONSTRAINT PK_GV PRIMARY KEY, CONSTRAINT FK_CONGVIEC_DETAI FOREIGN KEY...) cho phép người quản trị cơ sở dữ liệu định danh chính xác đối tượng ràng buộc, giúp việc xóa (DROP CONSTRAINT) hoặc sửa đổi ràng buộc thông qua lệnh ALTER TABLE diễn ra thuận tiện và không bị phụ thuộc vào tên tự sinh ngẫu nhiên của hệ quản trị.
5. Nội dung Chương 5 còn bao gồm những phần kiến thức nào tiếp theo?
Theo cấu trúc đề mục được giới thiệu ở đầu chương, ngoài phần Định nghĩa dữ liệu (DDL) và Truy vấn cơ bản (SELECT - FROM - WHERE), chương còn bao gồm các phần tiếp theo:
- Tập hợp, so sánh tập hợp và truy vấn lồng.
- Hàm kết hợp và gom nhóm dữ liệu (
GROUP BY,HAVING). - Các thao tác cập nhật dữ liệu (
INSERT,UPDATE,DELETE). - Định nghĩa và thao tác trên Khung nhìn (
VIEW). - Cơ chế tổ chức và tối ưu hóa truy vấn bằng Chỉ mục (
INDEX).
Kết luận
Chương 5: Ngôn ngữ SQL (Structured Query Language) cung cấp hệ thống tri thức hoàn chỉnh từ nền tảng chuẩn hóa quốc tế (ANSI SQL) đến kỹ năng triển khai chi tiết trên hệ quản trị cơ sở dữ liệu quan hệ. Nội dung giáo trình gắn kết chặt chẽ giữa lý thuyết mô hình quan hệ hình thức và thực tiễn thiết kế dữ liệu qua hệ thống bảng quản trị đại học minh họa (GIAOVIEN, BOMON, DETAI, CONGVIEC, KHOA).
Lộ trình học tập đề xuất:
- Nắm vững phân loại kiểu dữ liệu và cú pháp DDL (
CREATE,ALTER,DROP,CONSTRAINT). - Thành thạo cấu trúc truy vấn đơn bảng và các biểu thức điều kiện lọc (
WHERE,LIKE,BETWEEN,NULL). - Làm chủ kỹ thuật kết nối đa bảng dựa trên điều kiện khóa ngoại.
- Mở rộng sang các chuyên đề nâng cao về truy vấn lồng, gom nhóm, View và Index.