Tổng quan về giáo trình

Tài liệu bài giảng "SQL: Structured Query Language" được biên soạn bởi TS. Lê Thị Lan thuộc Viện Nghiên cứu Quốc tế MICA, Trường Đại học Bách Khoa Hà Nội (HUST), xuất bản năm 2011. Trong chương trình đào tạo đại học và sau đại học ngành Công nghệ Thông tin, Khoa học Máy tính và Hệ thống Thông tin, tài liệu này giữ vị trí trọng tâm trong học phần Cơ sở dữ liệu và Hệ quản trị cơ sở dữ liệu quan hệ (RDBMS).

Về mục tiêu đào tạo, bài giảng trang bị cho người học hệ thống lý thuyết chuẩn hóa về ngôn ngữ truy vấn quan hệ, từ bối cảnh lịch sử hình thành trong dự án System-R cho đến các phiên bản tiêu chuẩn ANSI/ISO (SQL-86, SQL-89, SQL-92, SQL-99). Sau khi hoàn thành nội dung, người học có khả năng tự xây dựng lược đồ cơ sở dữ liệu vật lý thông qua Ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL) và làm chủ các thao tác truy vấn, tổng hợp, trích xuất dữ liệu phức tạp thông qua Ngôn ngữ thao tác dữ liệu (Data Manipulation Language - DML).

Cấu trúc tài liệu được thiết kế theo 5 phần có mối liên kết tuần tự chặt chẽ:

  1. Giới thiệu về SQL
  2. Các thành phần của SQL
  3. Ngôn ngữ định nghĩa dữ liệu (DDL)
  4. Ngôn ngữ thao tác dữ liệu (DML)
  5. Kết luận và bài tập

Điểm đặc trưng trong phương pháp tiếp cận của bài giảng là việc xây dựng hệ thống cơ sở dữ liệu mẫu thực nghiệm đồng nhất (bảng student, bridge, chess, music). Các cấu trúc cú pháp không chỉ được trình bày dưới dạng công thức trừu tượng mà luôn đi kèm ví dụ câu lệnh cụ thể và bảng kết quả đầu ra trực quan dạng ma trận.


Nội dung kiến thức cốt lõi

+-------------------------------------------------------------------------+
|                  CẤU TRÚC HỆ THỐNG KIẾN THỨC SQL                         |
+-------------------------------------------------------------------------+
|  1. Tổng quan & Lịch sử: System-R (Sequel) -> SQL-86 -> SQL-92 -> SQL-99|
|  2. Phân hệ chính: DDL (Định nghĩa) | DML (Thao tác) | Quản lý Giao dịch|
|  3. DDL: CREATE TABLE, DROP TABLE, Kiểu dữ liệu, Ràng buộc Khóa chính   |
|  4. DML: INSERT INTO, SELECT cơ bản, Phép lọc, Phép nối, Sắp xếp        |
|  5. Gom nhóm & Thống kê: GROUP BY, HAVING, Hàm COUNT, AVG, SUM, MIN, MAX|
|  6. Đại số quan hệ mở rộng: Phép Hợp (UNION), Phép Giao & Hiệu (Subquery)|
+-------------------------------------------------------------------------+

Các chương/chủ đề chính

  • Chủ đề 1: Giới thiệu và Lịch sử chuẩn hóa SQL: Trình bày nguồn gốc phát triển từ ngôn ngữ Sequel trong dự án thử nghiệm System-R. Giới thiệu các mốc tiêu chuẩn quốc tế: SQL-86 (chuẩn đầu tiên ra đời năm 1986), tiếp nối bởi SQL-89, SQL-92 và SQL-99. Nêu rõ các quy tắc cú pháp cơ bản: không phân biệt chữ hoa và chữ thường, yêu cầu dấu chấm phẩy kết thúc lệnh trên một số hệ thống quản trị, và hướng dẫn tham khảo tài liệu chuẩn tại địa chỉ www.learn-sql-tutorial.com/SQL/sql_syntax.asp.
  • Chủ đề 2: Phân loại các thành phần của SQL: Phân tách ngôn ngữ SQL thành 3 phân hệ chính:
    • Ngôn ngữ định nghĩa dữ liệu (DDL - Data Definition Language).
    • Ngôn ngữ thao tác dữ liệu (DML - Data Manipulation Language).
    • Ngôn ngữ điều khiển giao dịch (Transaction Control Language).
  • Chủ đề 3: Ngôn ngữ định nghĩa dữ liệu (DDL): Cung cấp cơ chế đặc tả lược đồ bảng, miền giá trị, các ràng buộc toàn vẹn, tập chỉ dẫn, thông tin an toàn/ủy quyền và cấu trúc lưu trữ vật lý. Phân loại chi tiết các kiểu dữ liệu:
    • Dữ liệu xâu ký tự: Char(n), Varchar(n) (chuỗi có độ dài thay đổi).
    • Dữ liệu số: Int / Integer (từ -2.147.483.648 đến 2.147.483.647), Smallint (từ -32.768 đến 32.767), Numeric(p,s), Real, double precision, Float(n).
    • Dữ liệu thời gian: Date (định dạng YYYY-MM-DD), Time (định dạng HH:MM.MMMM).
    • Cú pháp lệnh: CREATE TABLE <tên bảng> (<tên cột> <kiểu dữ liệu> [NOT NULL], [CONSTRAINT <tên ràng buộc> <kiểu ràng buộc>...]), thiết lập khóa chính, thao tác thêm/xóa cột và xóa bảng qua lệnh DROP TABLE relation_name (ví dụ: DROP TABLE branch).
  • Chủ đề 4: Ngôn ngữ thao tác dữ liệu (DML) - Thêm mới và Truy vấn cơ bản: Hướng dẫn 2 cú pháp chèn dữ liệu bằng lệnh INSERT INTO (chèn trực tiếp theo thứ tự giá trị hoặc chèn có chỉ định danh sách cột). Trình bày cấu trúc lệnh truy vấn cơ sở:
    SELECT [ALL / DISTINCT] expr1 [AS col1], expr2 [AS col2]
    FROM tablename
    WHERE condition;
    
    Phân tích chi tiết chức năng loại bỏ bộ lặp của từ khóa DISTINCT, phép chiếu đặt lại tên cột (AS), các biểu thức so sánh (>, <, =), toán tử chuỗi (LIKE "%_"), toán tử tập hợp (IN, NOT IN), khoảng giá trị (BETWEEN ... AND ...) và toán tử logic (AND, OR, NOT).
  • Chủ đề 5: Gom nhóm dữ liệu, Hàm thống kê và Sắp xếp: Trình bày mệnh đề GROUP BY groupexpr kết hợp điều kiện lọc nhóm HAVING requirement. Hệ thống hóa 5 hàm tổng hợp: COUNT(), SUM(), AVG(), MAX(), MIN(). Mệnh đề sắp xếp ORDER BY colname [ASC / DESC] với quy tắc mặc định là tăng dần (ASC), sắp xếp theo thứ tự giảm dần (DESC) hoặc sắp xếp đa tiêu chí.
  • Chủ đề 6: Phép toán tập hợp, Truy vấn con và Phép kết nối bảng: Mô tả trực quan các phép toán đại số quan hệ trên bảng:
    • Phép hợp ($A \cup B$): Mệnh đề UNION (ví dụ hợp nhất danh sách từ bảng bridge và chess).
    • Phép giao ($A \cap B$): Truy vấn con lồng nhau sử dụng mệnh đề WHERE col IN (SELECT col FROM table2).
    • Phép hiệu ($A \setminus B$): Sử dụng truy vấn con với mệnh đề WHERE col NOT IN (SELECT col FROM table2).
    • Phép kết nối (Join): Kết nối tự nhiên (Natural Join / Inner Join) bằng mệnh đề JOIN ... ON ... hoặc mệnh đề WHERE; Kết nối ngoài (Outer Join) bao gồm LEFT OUTER JOIN và RIGHT OUTER JOIN.

Kiến thức nền tảng được xây dựng

Giáo trình thiết lập cơ sở lý thuyết vững chắc cho người học thông qua:

  1. Mô hình dữ liệu quan hệ (Relational Model): Ánh xạ các khái niệm toán học của đại số quan hệ (chiếu, chọn, tích Descartes, hợp, giao, hiệu, kết nối) thành các câu lệnh SQL cụ thể.
  2. Hệ thống kiểu dữ liệu và Miền giá trị: Phân biệt rõ ranh giới bộ nhớ và phạm vi lưu trữ giữa các kiểu số nguyên (Smallint vs Integer), số thực (Numeric vs Float), chuỗi cố định và biến đổi (Char vs Varchar).
  3. Toàn vẹn dữ liệu và Điều kiện logic: Xây dựng tư duy thiết lập ràng buộc khóa chính, kiểm tra tính duy nhất (DISTINCT), đánh giá tính đúng sai qua đại số Boole (AND, OR, NOT) và các điều kiện lọc phức hợp.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical Skills): Khởi tạo, chỉnh sửa và quản lý cấu trúc bảng dữ liệu; viết các câu lệnh truy vấn từ mức đơn giản đến các truy vấn lồng nhau (subqueries) và kết nối nhiều quan hệ (JOIN).
  • Kỹ năng phân tích (Analytical Skills): Phân biệt bản chất giữa lọc từng dòng dữ liệu bằng mệnh đề WHERE trước khi gom nhóm và lọc dữ liệu sau khi gom nhóm bằng mệnh đề HAVING; đánh giá sự khác biệt và tối ưu giữa hai cú pháp INSERT INTO.
  • Kỹ năng xử lý dữ liệu thực tế (Practical Competencies): Trích xuất thông tin ngày tháng qua các hàm tích hợp như DOW() (trả về thứ dạng số), CDOW() (trả về tên ngày trong tuần), MONTH() (trả về tháng); phân loại dữ liệu theo khu vực (dcode), phân loại theo nhà sinh viên (hcode) và tính toán các chỉ số thống kê trung bình, lớn nhất, nhỏ nhất.

Phương pháp giảng dạy và học tập

Tài liệu áp dụng phương pháp sư phạm quy nạp dựa trên ca thực nghiệm (Case-based Learning). Để học viên nắm bắt được các lý thuyết trừu tượng, tác giả xây dựng một mô hình cơ sở dữ liệu mẫu thực tế xuyên suốt bài giảng:

  • Lược đồ bảng student (Thông tin sinh viên):
    • id (numeric, 4): Số hiệu sinh viên.
    • name (character, 10): Tên sinh viên.
    • dob (date, 8): Ngày tháng năm sinh.
    • sex (character, 1): Giới tính (M / F).
    • class (character, 2): Lớp (1A, 1B, 1C, 2A, 2B, 2C).
    • hcode (character, 1): Mã nhà (R - Red, Y - Yellow, B - Blue, G - Green).
    • dcode (character, 3): Mã quận (HHM, KWC, MKK, SSP, TST, YMT, TSW, SHT).
    • remission (logical, 1): Quyền miễn phí đăng ký / nhập học (T / F).
    • mtest (numeric, 2): Điểm thi toán.
  • Lược đồ bảng bridge và chess: Quản lý thành viên câu lạc bộ cầu lông/cờ vua gồm các thuộc tính id, name, sex, class.
  • Lược đồ bảng music: Lưu trữ nhạc cụ sinh viên với các thuộc tính id, type.
                    MÔ HÌNH DỮ LIỆU MẪU DÙNG TRONG GIẢNG DẠY
                   
  +-----------------------------------------------------------------------+
  |                           BẢNG STUDENT                                |
  | +----+-------+----------+-----+-------+-------+-------+-------+-----+ |
  | | id | name  | dob      | sex | class | hcode | dcode | remis |mtest| |
  | +----+-------+----------+-----+-------+-------+-------+-------+-----+ |
  | |9801| Peter | 06/04/86 |  M  |  1A   |   R   |  SSP  |   F   | 70  | |
  | |... | ...   | ...      | ... |  ...  |  ...  |  ...  |  ...  | ... | |
  | +----+-------+----------+-----+-------+-------+-------+-------+-----+ |
  +-----------------------------------------------------------------------+
         |                                  |
         | (Tham gia CLB)                   | (Nhạc cụ)
         v                                  v
  +--------------------+             +--------------------+
  |   BRIDGE / CHESS   |             |       MUSIC        |
  | +----+------+----+ |             | +----+-----------+ |
  | | id | name |... | |             | | id | type      | |
  | +----+------+----+ |             | +----+-----------+ |
  +--------------------+             +--------------------+

Phương pháp tổ chức bài học đi từ việc định nghĩa cú pháp tổng quát đến 19 yêu cầu truy vấn cụ thể:

  1. Yêu cầu 1 - 5: Lọc dữ liệu sinh viên cơ bản theo lớp, khử trùng lặp mã quận với DISTINCT, kết hợp logic điều kiện AND và phủ định NOT remission.
  2. Yêu cầu 6 - 8: Lọc dữ liệu theo hàm ngày tháng DOW(dob) IN (4,7), phủ định tập hợp MONTH(dob) NOT IN (1,3,6,9) và miền giá trị BETWEEN 80 AND 90.
  3. Yêu cầu 9 - 13: Thống kê số lượng sinh viên theo lớp (COUNT(*)), điểm trung bình (AVG(mtest)), điểm cực trị theo quận (MAX, MIN), và lọc nhóm lớp có từ 3 nam sinh trở lên bằng HAVING COUNT(*) >= 3.
  4. Yêu cầu 14 - 17: Sắp xếp thứ tự danh sách theo bảng chữ cái, theo mã quận, theo số lượng giảm dần (ORDER BY cnt DESC) và sắp xếp đa cấp độ theo hcode, class.
  5. Yêu cầu 18 - 19 & Phần Kết nối: Thực hiện phép hợp UNION, tìm sinh viên tham gia cả 2 câu lạc bộ bằng toán tử lồng IN, tìm sinh viên chỉ tham gia Bridge bằng NOT IN, và kết nối tự nhiên bảng student với bảng music.

Hệ thống đánh giá được tích hợp qua các câu hỏi mở xen kẽ (yêu cầu phân tích ưu nhược điểm của 2 cách viết INSERT INTO, giải thích cơ chế DISTINCT) và các bài tập yêu cầu chuyển đổi cú pháp (viết lại câu truy vấn NOT IN bằng toán tử IN, tính điểm trung bình nữ sinh của từng lớp).


Điểm nổi bật và cập nhật

  • Tính chuẩn hóa theo tiến trình lịch sử: Giáo trình vạch rõ sự phát triển chuẩn mực của SQL từ dự án System-R đến các chuẩn SQL-86, SQL-89, SQL-92 và SQL-99. Điều này giúp sinh viên hiểu rõ tính kế thừa và khả năng tương thích của các câu lệnh trên nhiều hệ quản trị khác nhau.
  • Hệ thống bảng dữ liệu mẫu có cấu trúc hoàn chỉnh: Việc tích hợp đầy đủ các kiểu dữ liệu phong phú (số, chuỗi, ngày tháng, kiểu logic remission) trên cùng một bảng student giúp bài giảng bao quát được toàn bộ các toán tử và hàm tích hợp sẵn của ngôn ngữ SQL mà không bị rời rạc.
  • Trực quan hóa kết quả đầu ra: Đi kèm mỗi câu truy vấn mẫu trong 19 yêu cầu là bảng kết quả cụ thể (ví dụ kết quả lọc lớp 1A, kết quả gom nhóm dcode, kết quả ORDER BY), cho phép người học đối chiếu ngay lập tức giữa logic câu lệnh và tập dữ liệu hiển thị.
  • Tích hợp đại số quan hệ và xử lý tập hợp: Bài giảng không chỉ dừng lại ở các truy vấn đơn bảng mà mở rộng trực tiếp sang các phép toán tập hợp ($A \cup B$, $A \cap B$, $A \setminus B$) và các dạng kết nối bảng (Inner Join, Left Outer Join, Right Outer Join).

Đối tượng sử dụng giáo trình

  • Sinh viên đại học và cao đẳng: Phục vụ trực tiếp sinh viên năm thứ hai hoặc năm thứ ba thuộc các chuyên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm, Hệ thống Thông tin, Khoa học Dữ liệu trong các học phần "Cơ sở dữ liệu", "Hệ quản trị cơ sở dữ liệu".
  • Điều kiện tiên quyết (Prerequisites): Người học cần nắm được các khái niệm cơ bản về tin học đại cương, biểu diễn dữ liệu và lý thuyết tập hợp cơ bản trong toán rời rạc.
  • Giảng viên: Sử dụng tài liệu làm khung đề cương bài giảng lý thuyết trên lớp, làm tài liệu hướng dẫn thực hành tại phòng máy tính, hoặc làm nguồn bài tập mẫu để kiểm tra đánh giá kỹ năng viết truy vấn của sinh viên.
  • Người tự học và lập trình viên: Là tài liệu tham khảo hệ thống hóa ngắn gọn, chuẩn xác cho các kỹ sư phần mềm cần ôn tập các cú pháp SQL chuẩn ANSI, nắm vững cách hoạt động của các hàm tổng hợp, gom nhóm và kết nối quan hệ.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với đối tượng nào?

Giáo trình được thiết kế chuẩn mực cho sinh viên đại học ngành Công nghệ Thông tin, Hệ thống Thông tin và lập trình viên đang bắt đầu học hoặc củng cố kiến thức về ngôn ngữ SQL và hệ quản trị cơ sở dữ liệu quan hệ.

2. Cần chuẩn bị kiến thức nền tảng nào trước khi học?

Người học chỉ cần nắm vững kiến thức tin học cơ bản, cấu trúc dữ liệu bảng đơn giản và các phép toán logic cơ bản (AND, OR, NOT). Không bắt buộc phải thành thạo một ngôn ngữ lập trình trước đó.

3. Cú pháp SQL trong giáo trình có phân biệt chữ hoa và chữ thường không?

Theo nội dung bài giảng, cú pháp SQL không phân biệt chữ hoa và chữ thường đối với các từ khóa và tên bảng/cột. Tuy nhiên, người học cần lưu ý một số hệ quản trị cơ sở dữ liệu yêu cầu dấu chấm phẩy (;) để kết thúc câu lệnh.

4. Bảng dữ liệu mẫu student trong giáo trình gồm những thông tin gì?

Bảng student gồm 9 thuộc tính: id (số hiệu), name (tên), dob (ngày sinh), sex (giới tính), class (lớp), hcode (mã nhà), dcode (mã quận), remission (quyền nhập học) và mtest (điểm kiểm tra toán).

5. Sự khác biệt giữa hai mệnh đề WHERE và HAVING trong bài giảng là gì?

Mệnh đề WHERE được dùng để xác định điều kiện lọc trên từng dòng dữ liệu trước khi thực hiện gom nhóm (GROUP BY). Trong khi đó, mệnh đề HAVING được dùng để xác định điều kiện lọc áp dụng trên toàn bộ nhóm sau khi các hàm tổng hợp (COUNT, AVG, SUM, MAX, MIN) đã được tính toán.


Kết luận

Tài liệu bài giảng "SQL: Structured Query Language" của TS. Lê Thị Lan (MICA - HUST) cung cấp một cấu trúc học tập hoàn chỉnh và mạch lạc về ngôn ngữ truy vấn quan hệ. Giáo trình liên kết chặt chẽ giữa cú pháp định nghĩa dữ liệu (DDL), các kỹ thuật truy vấn và thao tác dữ liệu (DML), cùng hệ thống bài tập thực hành trên bộ dữ liệu mẫu điển hình.

Lộ trình học tập đề xuất:

  1. Nắm vững cấu trúc DDL và hệ thống kiểu dữ liệu (Char, Varchar, Integer, Date, Time) -> Khởi tạo bảng với CREATE TABLE.
  2. Thực hành các truy vấn lựa chọn, chiếu dữ liệu và lọc điều kiện cơ bản (SELECT, WHERE, DISTINCT).
  3. Làm chủ kỹ thuật gom nhóm và hàm tổng hợp (GROUP BY, HAVING, COUNT, AVG).
  4. Nâng cao kỹ năng với sắp xếp đa tiêu chí (ORDER BY), các phép toán tập hợp (UNION, Subquery) và kết nối bảng dữ liệu (JOIN).

Tài liệu tham khảo bổ trợ được giới thiệu: www.learn-sql-tutorial.com/SQL/sql_syntax.asp và hệ thống bài tập trên website Thi-Lan.vn.