IT Learning HubIT Learning Hub
THỰC HÀNH 01 · BTHT1

Nền tảng cơ sở dữ liệu

5 tiếtDatabaseSQL Server

Mục tiêu: Làm quen với SQL Server, tạo cơ sở dữ liệu, tạo bảng, thiết lập các ràng buộc toàn vẹn và thực hiện các thao tác thêm, sửa, xóa dữ liệu.

01 · TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU

Cơ sở dữ liệu là gì?

Cơ sở dữ liệu (Database – CSDL) là tập hợp dữ liệu được tổ chức và lưu trữ theo một cấu trúc nhất định, giúp dữ liệu dễ dàng được quản lý, truy xuất và xử lý.

Trong thực tế, CSDL được sử dụng ở rất nhiều lĩnh vực:

Ngân hàngTài khoản, giao dịch, số dư
Khách sạnKhách hàng, phòng, đặt phòng
Hàng khôngHành khách, chuyến bay, lịch trình
Thư việnSách, độc giả, mượn/trả

Ví dụ

Một trường đại học có thể cần quản lý:

Sinh viên │ ├── Mã sinh viên ├── Họ tên ├── Ngày sinh └── Lớp

Nếu có hàng chục nghìn sinh viên, việc lưu trữ bằng các file rời rạc sẽ khó quản lý. CSDL giúp tổ chức dữ liệu thành các bảng có quan hệ với nhau:

1 - N LOP MaLop (PK) SINHVIEN MaLop (FK)

LOP (1) ➜ SINHVIEN (N): Một LOP có nhiều SINHVIEN - SINHVIEN giữ khóa ngoại MaLop tham chiếu đến LOP.

DATABASE: QuanLySinhVien

LOP (1) - Bảng cha
MaLop
TenLop
SINHVIEN (N) - Bảng con
MaSV
HoTen
NgaySinh
MaLop (FK)
Lỗi hay gặp khi vẽ sơ đồ: Đặt chiều mũi tên ngược, khiến người đọc hiểu nhầm là "1 Sinh viên có nhiều Lớp". Chiều đúng phải đi từ bảng cha xuống bảng con: LOP là bảng cha (giữ khóa chính MaLop), SINHVIEN là bảng con (giữ khóa ngoại MaLop tham chiếu đến LOP) - Một Lớp có nhiều Sinh viên (1-N), không phải ngược lại.

Hệ quản trị cơ sở dữ liệu (DBMS)

Hệ quản trị cơ sở dữ liệu (DBMS - Database Management System) là phần mềm chuyên dụng dùng để tạo lập, quản lý và vận hành CSDL, cho phép người dùng truy cập, điều khiển và xử lý dữ liệu một cách hiệu quả mà không cần thao tác trực tiếp lên file lưu trữ.

Một số DBMS phổ biến:

SQL Server ➜ DBMS của Microsoft, phổ biến trong doanh nghiệp - Dùng trong môn học này MySQL ➜ DBMS mã nguồn mở, phổ biến cho ứng dụng web Oracle ➜ DBMS mạnh, dùng trong tổ chức lớn, hệ thống phức tạp PostgreSQL, SQLite, MongoDB... ➜ Nhiều lựa chọn khác tùy nhu cầu

CSDL và DBMS kết hợp với nhau tạo thành một hệ cơ sở dữ liệu hoàn chỉnh: Người dùng/lập trình viên gửi truy vấn thông qua chương trình ứng dụng, DBMS tiếp nhận và xử lý truy vấn đó rồi truy xuất dữ liệu tương ứng từ CSDL trả về.

02 · SQL SERVER MANAGEMENT STUDIO

Cài đặt SQL Server & SSMS

Trước buổi thực hành, cần chuẩn bị sẵn 2 thành phần trên máy tính cá nhân: SQL Server (bộ máy CSDL) và SQL Server Management Studio - SSMS (công cụ giao diện để kết nối, viết truy vấn và quản lý SQL Server). SQL Server không có sẵn giao diện làm việc, nên bắt buộc phải cài thêm SSMS mới thao tác được.

Giới thiệu Microsoft SQL Server

SQL Server là hệ quản trị CSDL quan hệ (RDBMS) do Microsoft phát triển, ra đời từ năm 1989 và liên tục được cập nhật đến nay:

MỘT SỐ MỐC PHIÊN BẢN CHÍNH

Phiên bảnNăm ra mắtTính năng đặc trưng
SQL Server 1.01989Phiên bản đầu tiên (Microsoft hợp tác với Sybase), các tính năng CSDL quan hệ cơ bản
SQL Server 6.51996Phiên bản Windows NT đầu tiên hoàn toàn do Microsoft tự phát triển
SQL Server 7.01998Viết lại toàn bộ storage engine, cải tiến giao diện quản trị
SQL Server 20002000Hỗ trợ XML, cải thiện hiệu suất và bảo mật
SQL Server 20052005Ra mắt SQL Server Management Studio (SSMS), tích hợp .NET CLR, Reporting Services
SQL Server 20082008Nén dữ liệu (Data Compression), quản trị theo chính sách (Policy-Based Management)
SQL Server 20122012AlwaysOn Availability Groups, Columnstore Index
SQL Server 20162016Always Encrypted, hỗ trợ JSON, tích hợp ngôn ngữ R
SQL Server 20172017Lần đầu chạy được trên Linux, tích hợp Python
SQL Server 20192019Big Data Clusters, tích hợp AI, cải thiện tốc độ khôi phục CSDL
SQL Server 20222022Tích hợp sâu với Azure - phiên bản dùng trong môn học này
SQL Server 20252025Tích hợp AI ngay trong SQL Server (vector search, T-SQL gọi mô hình AI), phiên bản mới nhất hiện nay

SQL Server 2025 là phiên bản mới nhất, nhưng môn học vẫn dùng SQL Server 2022 để đảm bảo tính ổn định và đồng bộ thao tác giữa các sinh viên trong lớp.

CÁC ẤN BẢN (EDITION)

Mỗi phiên bản SQL Server còn được đóng gói thành nhiều ấn bản khác nhau, phục vụ các nhu cầu và ngân sách khác nhau:

Ấn bảnMô tảChi phí
EnterpriseĐầy đủ tính năng cao cấp nhất (bảo mật, hiệu năng, phân tích dữ liệu quy mô lớn) - Dùng cho doanh nghiệp/tổ chức lớnTrả phí, rất cao
StandardCác tính năng cốt lõi, đủ dùng cho doanh nghiệp vừa và nhỏTrả phí
WebTối ưu cho việc lưu trữ website, chỉ cung cấp qua các nhà cung cấp dịch vụ hostingTrả phí (thấp)
DeveloperĐầy đủ tính năng y hệt bản Enterprise, nhưng chỉ được cấp phép dùng để học tập/phát triển/kiểm thử - Không được dùng cho hệ thống thực tế đang vận hànhMiễn phí
ExpressPhiên bản rút gọn, giới hạn dung lượng CSDL (tối đa 10GB) và tài nguyên CPU/RAM sử dụng - Phù hợp ứng dụng nhỏMiễn phí
Môn học này cài ấn bản nào? Cài Developer Edition - Đây là bản miễn phí nhưng có đầy đủ tính năng giống hệt bản Enterprise, không bị giới hạn dung lượng CSDL hay tài nguyên như Express, phù hợp nhất để học và thực hành đúng với môi trường thực tế. Không chọn Express (bị giới hạn tính năng) và không cần các bản trả phí Enterprise/Standard/Web.

Cài đặt SQL Server 2022 (Developer Edition)

  1. Tải bộ cài từ trang chủ Microsoft, chọn Download Media để tải file cài đặt về máy trước, thay vì cài trực tiếp qua mạng.
  2. Chạy file SQLServer2022-DEV-x64-ENU.exe, vào mục Installation, chọn bản Developer để cài.
  3. Đồng ý điều khoản license. Có thể bỏ chọn mục tự động kiểm tra cập nhật nếu không cần.
  4. Ở bước chọn tính năng (Feature Selection), chỉ cần tick Database Engine Services là đủ dùng cho môn học này.
  5. Instance ID giữ nguyên mặc định MSSQLSERVER.
  6. Ở bước xác thực (Database Engine Configuration), giữ nguyên mặc định Windows Authentication Mode và bấm Next - Không cần đổi sang Mixed Mode hay đặt mật khẩu sa cho việc thực hành cá nhân.
  7. Đợi cài đặt hoàn tất, kiểm tra các thành phần đã cài thành công rồi bấm Close.

Cài đặt SQL Server Management Studio (SSMS)

  1. Tải bộ cài SSMS từ trang chủ Microsoft (tìm "Download SQL Server Management Studio").
  2. Chạy file SSMS-Setup-ENU.exe, bấm Install.
  3. Đợi vài phút để cài đặt hoàn tất, bấm Close khi xong.
Xem hướng dẫn cài đặt đầy đủ, có hình ảnh minh họa từng bước (tiếng Anh) tại SQL Server Tutorial. Xem hướng dẫn ›
Cài đặt gặp lỗi? Nếu quá trình cài đặt SQL Server hoặc SSMS gặp lỗi mà không tự khắc phục được, hãy liên hệ giảng viên phụ trách lớp thực hành để được hỗ trợ trực tiếp, tránh mất thời gian tự mò mẫm khi chưa quen.

Sau khi cài đặt, giao diện SSMS thường được sử dụng để:

  • Kết nối đến SQL Server
  • Tạo Database
  • Tạo Table
  • Viết và thực thi câu lệnh SQL
  • Xem dữ liệu
  • Quản lý các đối tượng trong Database

Quy trình cơ bản

Mở SSMS ↓ Connect đến SQL Server ↓ Chọn / tạo Database ↓ Mở New Query ↓ Viết câu lệnh SQL ↓ Execute ↓ Xem kết quả

Ví dụ câu lệnh đầu tiên

SELECT 'Hello SQL Server';

Kết quả:

Hello SQL Server

03 · KIỂU DỮ LIỆU TRONG SQL

Kiểu dữ liệu trong SQL

Khi tạo một bảng, mỗi cột phải được xác định kiểu dữ liệu - Quy định loại giá trị cột có thể lưu (số, chữ, ngày...) và dung lượng lưu trữ. Chọn đúng kiểu dữ liệu giúp dữ liệu chính xác, tiết kiệm dung lượng và các phép xử lý sau này hoạt động đúng.
SinhVien MaSV ➜ INT HoTen ➜ NVARCHAR(50) NgaySinh ➜ DATE DiemTB ➜ DECIMAL(4,2) DaTotNghiep ➜ BIT

Kiểu số nguyên

KiểuDung lượngPhạm vi giá trị
TINYINT1 byte0 ➜ 255
SMALLINT2 byte-32.768 ➜ 32.767
INT4 byte≈ -2,1 tỷ ➜ 2,1 tỷ
BIGINT8 bytePhạm vi rất lớn

SO SÁNH DUNG LƯỢNG (TỈ LỆ THEO BYTE)

TINYINT1 byte
SMALLINT2 byte
INT4 byte
BIGINT8 byte
MaSV INT
SoLuong INT
Tuoi TINYINT
Nguyên tắc chọn: Ưu tiên kiểu có phạm vi nhỏ nhất nhưng vẫn đủ chứa dữ liệu thực tế, để tiết kiệm dung lượng lưu trữ. Ví dụ Tuoi (0–150) nên dùng TINYINT thay vì INT.

Kiểu Boolean - BIT

BIT lưu giá trị đúng/sai, thường dùng cho các cột dạng "có/không":

DaTotNghiep BIT

Giá trị lưu trữ: 1 (true), 0 (false) hoặc NULL (chưa xác định).

Kiểu số thực

KiểuMô tảDùng khi
DECIMAL(p,s) / NUMERIC(p,s)Số thập phân chính xác tuyệt đối - p là tổng số chữ số, s là số chữ số sau dấu phẩyĐiểm số, số lượng, đơn giá - Cần kết quả chính xác
FLOATSố thực dấu phẩy động, độ chính xác gần đúng, phạm vi giá trị rất lớnTính toán khoa học, không đòi hỏi chính xác tuyệt đối
REALTương tự FLOAT nhưng độ chính xác và dung lượng thấp hơnSố liệu gần đúng, ít quan trọng độ chính xác
MONEYKiểu tiền tệ chuyên dụng, chính xác đến 4 chữ số thập phânGiá trị tiền có biên độ lớn
SMALLMONEYTương tự MONEY nhưng phạm vi giá trị nhỏ hơnGiá trị tiền có biên độ nhỏ

DECIMAL(p,s) cho phép xác định số chữ số tổng cộng (p) và số chữ số sau dấu phẩy (s). Ví dụ:

DiemTB DECIMAL(4,2)

Có thể lưu: 8.50, 9.25, 10.00

MONEY và SMALLMONEY dùng riêng cho giá trị tiền tệ, chính xác hơn FLOAT/REAL khi tính toán:

DonGia MONEY
Khuyến nghị: Với điểm số, đơn giá, tiền - Ưu tiên DECIMAL(p,s) hoặc MONEY vì cho kết quả chính xác. FLOAT/REAL là số gần đúng, dễ sai lệch khi tính toán nhiều lần.

Kiểu chuỗi

CHAR(n) - Chuỗi có độ dài cố định (luôn chiếm đủ n ký tự, phần dư được đệm khoảng trắng):

MaSV CHAR(8)

Ví dụ giá trị: "23520001"

VARCHAR(n) - Chuỗi có độ dài thay đổi (chỉ chiếm dung lượng đúng bằng số ký tự thực tế):

Email VARCHAR(100)

NCHAR và NVARCHAR - Tương tự CHAR/VARCHAR nhưng lưu chuỗi Unicode, phù hợp khi lưu tiếng Việt có dấu:

HoTen NVARCHAR(50)
DiaChi NVARCHAR(200)

Khi dữ liệu văn bản rất dài (không xác định trước độ dài, ví dụ mô tả sản phẩm), dùng VARCHAR(MAX) hoặc NVARCHAR(MAX) thay vì khai báo số cố định.

So sánh nhanh - Chọn kiểu chuỗi nào?

KiểuĐộ dàiUnicode (tiếng Việt)Dùng khi
CHAR(n)Cố địnhKhôngMã có độ dài luôn giống nhau (VD: Mã SV 8 ký tự)
VARCHAR(n)Thay đổiKhôngChuỗi tiếng Anh/số, độ dài không cố định
NCHAR(n)Cố địnhCóMã tiếng Việt có độ dài luôn giống nhau
NVARCHAR(n)Thay đổiCóHọ tên, địa chỉ, mô tả tiếng Việt - dùng phổ biến nhất
Khuyến nghị: Khi lưu dữ liệu tiếng Việt trong SQL Server, thường sử dụng NVARCHAR và chuỗi Unicode với tiền tố N khi nhập giá trị.
INSERT INTO SinhVien
VALUES (1, N'Nguyễn Văn An', 'HTTT2022.1');

Kiểu ngày giờ

KiểuLưuVí dụ giá trị
DATEChỉ ngày'2004-05-20'
TIMEChỉ giờ'14:30:00'
DATETIMENgày + giờ'2004-05-20 14:30:00'
SMALLDATETIMENgày + giờ (ít chính xác hơn)'2004-05-20 14:30:00'
DATETIME2Ngày + giờ (chính xác cao, khuyến nghị dùng thay DATETIME ở hệ thống mới)'2004-05-20 14:30:00.123'
NgaySinh DATE
NgayLap DATETIME
Lưu ý khi nhập dữ liệu ngày tháng: Giá trị ngày tháng phải đặt trong cặp dấu nháy đơn và theo đúng định dạng mặc định 'yyyy-mm-dd'. Ví dụ '2004-05-20' là ngày 20 tháng 5 năm 2004.

Có thể đổi định dạng nhập bằng lệnh SET DATEFORMAT. Ví dụ, để nhập theo thứ tự ngày-tháng-năm 'dd-mm-yyyy':

SET DATEFORMAT dmy;

INSERT INTO SinhVien (MaSV, HoTen, NgaySinh, Lop)
VALUES (104, N'Phạm Thị Dung', '20-05-2004', N'HTTT2022.1');

Lệnh SET DATEFORMAT chỉ ảnh hưởng đến phiên làm việc (session) hiện tại trong SSMS, không thay đổi vĩnh viễn cấu hình Database.

04 · DATABASE - CƠ SỞ DỮ LIỆU

Database

Tạo Database

Cú pháp:

CREATE DATABASE <Tên Database>;

Ví dụ:

CREATE DATABASE QuanLySinhVien;

Chọn Database để làm việc

Sau khi tạo Database, sử dụng USE:

USE QuanLySinhVien;

Từ thời điểm này, các câu lệnh tiếp theo sẽ được thực hiện trên Database QuanLySinhVien. Cần kiểm tra Database đang được chọn trong SSMS trước khi thao tác.

Xóa Database

DROP DATABASE QuanLySinhVien;
Không thể hoàn tác: Thao tác này xóa Database và toàn bộ dữ liệu bên trong. Database đang được sử dụng hoặc còn kết nối không thể xóa trực tiếp.

05 · TABLE - BẢNG DỮ LIỆU

Table

Một Table bao gồm Column (thuộc tính của dữ liệu) và Row (một bản ghi). Table là tập hợp các bản ghi có cùng cấu trúc. Ví dụ:

SINHVIEN

MaSVHoTenNgaySinh
1Nguyễn Văn An2004-05-20
2Trần Thị Bình2004-08-15
3Lê Văn Cường2004-11-02

SQL sử dụng một số thuật ngữ riêng, tương ứng với các thuật ngữ trong lý thuyết CSDL quan hệ:

Thuật ngữ SQLThuật ngữ CSDL
Bảng (Table)Quan hệ (Relation)
Cột (Column)Thuộc tính (Attribute)
Dòng dữ liệu (Row)Bộ giá trị (Tuple)

Để định nghĩa một bảng trong SQL, cần xác định: Tên bảng, các cột, kiểu dữ liệu của từng cột và các ràng buộc toàn vẹn (RBTV) trên nó.

Tạo Table

Cú pháp cơ bản:

CREATE TABLE <Tên Table>
(
    <Tên cột 1> <Kiểu dữ liệu>,
    <Tên cột 2> <Kiểu dữ liệu>,
    ...
);

Ví dụ:

CREATE TABLE SinhVien
(
    MaSV INT,
    HoTen NVARCHAR(50),
    NgaySinh DATE,
    Lop NVARCHAR(20)
);

KIỂM TRA NHANH

Câu lệnh nào dùng để tạo một Table?

Xóa Table

DROP TABLE SinhVien;
Không thể hoàn tác: Khi Table bị xóa, dữ liệu bên trong cũng bị xóa. Không thể xóa một Table nếu đang có Foreign Key từ Table khác tham chiếu đến nó.

ALTER TABLE

ALTER TABLE dùng để thay đổi cấu trúc của Table sau khi đã tạo.

Thêm cột

ALTER TABLE SinhVien
ADD Email NVARCHAR(100);

Xóa cột

ALTER TABLE SinhVien
DROP COLUMN Email;

Thay đổi kiểu dữ liệu

ALTER TABLE SinhVien
ALTER COLUMN NgaySinh DATE;

06 · RÀNG BUỘC TOÀN VẸN - CONSTRAINTS

Constraints

Constraint giúp đảm bảo dữ liệu trong Database tuân thủ các quy tắc nhất định.

Phân loại ràng buộc toàn vẹn

Ràng buộc toàn vẹn trong SQL Server được chia làm 2 loại chính:

LoạiMô tả
Ràng buộc đơn giản Simple constraintsDùng từ khóa CONSTRAINT để mô tả trực tiếp trong CREATE TABLE/ALTER TABLE - Áp dụng cho hầu hết các quy tắc toàn vẹn thông thường.
Ràng buộc phức tạp Complex constraintsDùng TRIGGER để xử lý các quy tắc toàn vẹn phức tạp hơn mà CONSTRAINT không hỗ trợ được (ví dụ ràng buộc liên quan đến nhiều bảng, nhiều dòng dữ liệu).

Tuần 1 chỉ tập trung vào các ràng buộc đơn giản dưới đây - TRIGGER sẽ được học ở các tuần sau. Bấm vào tên để đi thẳng đến phần tương ứng:

PRIMARY KEY

Khóa chính dùng để xác định duy nhất một bản ghi trong Table.

CREATE TABLE SinhVien
(
    MaSV INT PRIMARY KEY,
    HoTen NVARCHAR(50),
    NgaySinh DATE
);

Khi đó không được phép có hai sinh viên cùng MaSV.

Khóa chính nhiều thuộc tính (Composite Primary Key)

Đôi khi khóa chính không chỉ có 1 cột mà là tổ hợp nhiều cột - Thường gặp ở các bảng "chi tiết" biểu diễn quan hệ N-N. Ví dụ bảng CTHD (chi tiết hóa đơn) không có cột mã riêng, mà dùng cặp (SOHD, MASP) để xác định duy nhất một dòng:

CREATE TABLE CTHD
(
    SOHD INT,
    MASP CHAR(4),
    SL INT,

    CONSTRAINT PK_CTHD PRIMARY KEY (SOHD, MASP)
);

Đặt CONSTRAINT ở dòng cuối cùng là cách duy nhất để khai báo khóa chính gồm nhiều cột - Không thể viết PRIMARY KEY ngay sau từng cột riêng lẻ trong trường hợp này.

NOT NULL

NOT NULL yêu cầu cột phải có giá trị.

CREATE TABLE SinhVien
(
    MaSV INT PRIMARY KEY,
    HoTen NVARCHAR(50) NOT NULL,
    NgaySinh DATE
);

Câu lệnh sau sẽ không hợp lệ vì HoTen được khai báo NOT NULL:

INSERT INTO SinhVien
VALUES (1, NULL, '2004-05-20');

UNIQUE

Đảm bảo giá trị trong cột không bị trùng.

CREATE TABLE SinhVien
(
    MaSV INT PRIMARY KEY,
    Email NVARCHAR(100) UNIQUE
);
SV001 ➜ kha@uit.edu.vn SV002 ➜ kha@uit.edu.vn ✗ trùng

FOREIGN KEY

FOREIGN KEY dùng để tạo mối liên hệ giữa các bảng. Ví dụ có hai bảng:

LOP

MaLopTenLop
1HTTT2022.1
2HTTT2022.2

SINHVIEN

MaSVMaLop
1011
1021
1032
FK ➜ PK LOP MaLop (PK) SINHVIEN MaLop (FK)

SINHVIEN.MaLop (FK) ➜ LOP.MaLop (PK): Mỗi dòng SINHVIEN tham chiếu đến đúng 1 dòng LOP.

CREATE TABLE Lop
(
    MaLop INT PRIMARY KEY,
    TenLop NVARCHAR(50)
);

CREATE TABLE SinhVien
(
    MaSV INT PRIMARY KEY,
    HoTen NVARCHAR(50),
    MaLop INT,

    FOREIGN KEY (MaLop)
        REFERENCES Lop(MaLop)
);

Khi đó, câu lệnh sau sẽ bị từ chối nếu 999 không tồn tại trong Lop.MaLop:

INSERT INTO SinhVien
VALUES (101, N'Nguyễn Văn An', 999);

Khóa ngoại phải được thiết lập ở Table chứa khóa ngoại.

CHECK

CHECK dùng để giới hạn dữ liệu phải thỏa một điều kiện. Ví dụ điểm sinh viên phải từ 0 đến 10:

CREATE TABLE KetQua
(
    MaSV INT,
    Diem DECIMAL(4,2),

    CHECK (Diem >= 0 AND Diem <= 10)
);
INSERT INTO KetQua
VALUES (101, 8.5);

✓ Hợp lệ. Nhưng:

INSERT INTO KetQua
VALUES (102, 15);

✗ Không hợp lệ.

DEFAULT

DEFAULT cung cấp giá trị mặc định nếu người dùng không nhập giá trị.

CREATE TABLE SinhVien
(
    MaSV INT PRIMARY KEY,
    HoTen NVARCHAR(50),
    GioiTinh CHAR(1) DEFAULT 'M'
);

Nếu:

INSERT INTO SinhVien(MaSV, HoTen)
VALUES (101, N'Nguyễn Văn An');

thì SQL Server tự động đặt GioiTinh = 'M'.

Khai báo nhiều Constraint

Có thể kết hợp nhiều ràng buộc - Kiểu dữ liệu và ràng buộc luôn đi cùng nhau khi thiết kế Table:

CREATE TABLE SinhVien
(
    MaSV INT PRIMARY KEY,

    HoTen NVARCHAR(50) NOT NULL,

    Email NVARCHAR(100) UNIQUE,

    MaLop INT
        FOREIGN KEY REFERENCES Lop(MaLop),

    NgaySinh DATE
        CHECK (NgaySinh >= '1900-01-01'),

    GioiTinh CHAR(1)
        DEFAULT 'M'
);

07 · THAO TÁC DỮ LIỆU - DML

Data Manipulation Language

DML (Data Manipulation Language) là nhóm lệnh dùng để thao tác với dữ liệu trong Table.

Trong Tuần 1, sinh viên làm quen với:

INSERT ➜ Thêm dữ liệu DELETE ➜ Xóa dữ liệu UPDATE ➜ Cập nhật dữ liệu SELECT INTO ➜ Sao chép dữ liệu

INSERT - Thêm dữ liệu

Cách 1: Không chỉ định tên cột

INSERT INTO SinhVien
VALUES (101, N'Nguyễn Văn An', '2004-05-20', N'HTTT2022.1');

Cách 2: Chỉ định tên cột - nên ưu tiên cách này, vì câu lệnh rõ ràng hơn và ít phụ thuộc vào thứ tự cột.

INSERT INTO SinhVien
(
    MaSV,
    HoTen,
    NgaySinh,
    Lop
)
VALUES
(
    101,
    N'Nguyễn Văn An',
    '2004-05-20',
    N'HTTT2022.1'
);

Có thể thêm nhiều bản ghi trong một câu lệnh:

INSERT INTO SinhVien
VALUES
    (101, N'Nguyễn Văn An', '2004-05-20', N'HTTT2022.1'),
    (102, N'Trần Thị Bình', '2004-08-15', N'HTTT2022.1'),
    (103, N'Lê Văn Cường', '2004-11-02', N'HTTT2022.2');

Sau đó kiểm tra:

SELECT *
FROM SinhVien;

DELETE - Xóa dữ liệu

DELETE FROM <Tên bảng>
WHERE <Điều kiện>;

Ví dụ - Chỉ sinh viên có MaSV = 101 bị xóa:

DELETE FROM SinhVien
WHERE MaSV = 101;
Không thể hoàn tác: Nếu không có WHERE -
DELETE FROM SinhVien;
➜ Tất cả các dòng trong bảng sẽ bị xóa.

UPDATE - Cập nhật dữ liệu

UPDATE <Tên bảng>
SET <Cột 1> = <Giá trị mới>
WHERE <Điều kiện>;
UPDATE SinhVien
SET HoTen = N'Nguyễn Văn Nam'
WHERE MaSV = 101;

Có thể cập nhật nhiều cột cùng lúc:

UPDATE SinhVien
SET
    HoTen = N'Nguyễn Văn Nam',
    Lop = N'HTTT2022.2'
WHERE MaSV = 101;

SELECT INTO - Sao chép dữ liệu

SELECT INTO cho phép tạo một Table mới từ kết quả truy vấn.

SELECT *
INTO SinhVien_Backup
FROM SinhVien;
SINHVIEN ↓ SELECT INTO ↓ SINHVIEN_BACKUP

Nếu chỉ muốn sao chép một phần dữ liệu, có thể lọc bằng WHERE kết hợp toán tử LIKE - Dùng để so khớp chuỗi theo một mẫu (pattern) với 2 ký tự đại diện:

Ký tựÝ nghĩaVí dụ
_Đại diện cho đúng 1 ký tựLIKE 'a__' - Chuỗi bắt đầu bằng "a", theo sau đúng 2 ký tự bất kỳ
%Đại diện cho 0, 1 hoặc nhiều ký tựLIKE 'HTTT%' - Chuỗi bắt đầu bằng "HTTT", theo sau là bất kỳ đoạn nào
SELECT *
INTO SinhVien_HTTT
FROM SinhVien
WHERE Lop LIKE 'HTTT%';

Ví dụ tổng hợp - Quản lý sinh viên

Bước 1 - Tạo Database

CREATE DATABASE QuanLySinhVien;
GO

USE QuanLySinhVien;
GO

Bước 2 - Tạo bảng Lớp

CREATE TABLE Lop
(
    MaLop INT PRIMARY KEY,
    TenLop NVARCHAR(50) NOT NULL
);

Bước 3 - Tạo bảng Sinh viên

CREATE TABLE SinhVien
(
    MaSV INT PRIMARY KEY,
    HoTen NVARCHAR(50) NOT NULL,
    NgaySinh DATE,
    MaLop INT,

    CONSTRAINT FK_SinhVien_Lop
        FOREIGN KEY (MaLop)
        REFERENCES Lop(MaLop),

    CONSTRAINT CK_SinhVien_NgaySinh
        CHECK (NgaySinh >= '1900-01-01')
);

Bước 4 - Thêm lớp

INSERT INTO Lop
VALUES
    (1, N'HTTT2022.1'),
    (2, N'HTTT2022.2');

Bước 5 - Thêm sinh viên

INSERT INTO SinhVien
VALUES
    (101, N'Nguyễn Văn An', '2004-05-20', 1),
    (102, N'Trần Thị Bình', '2004-08-15', 1),
    (103, N'Lê Văn Cường', '2004-11-02', 2);

Bước 6 - Kiểm tra

SELECT *
FROM SinhVien;
MaSVHoTenNgaySinhMaLop
101Nguyễn Văn An2004-05-201
102Trần Thị Bình2004-08-151
103Lê Văn Cường2004-11-022

Bước 7 - Cập nhật

UPDATE SinhVien
SET HoTen = N'Nguyễn Văn Nam'
WHERE MaSV = 101;

Bước 8 - Xóa

DELETE FROM SinhVien
WHERE MaSV = 103;

08 · BÀI TẬP THỰC HÀNH VÀ HỎI ĐÁP

Thực hành tổng hợp

BÀI TẬP CHÍNH THỨC · BTTH1

Trung tâm Thể dục Thể thao (TrungTam_TDTT)

Xem đề bài đầy đủ, file đính kèm và đáp án chi tiết (cần mã truy cập) của BTTH1.

Xem bài tập & đáp án ›
LUYỆN THÊM · KHÔNG BẮT BUỘC

Ví dụ minh họa thêm với cơ sở dữ liệu mẫu QuanLyBanHang để luyện lại toàn bộ nội dung DDL/Constraint của tuần này - Không thuộc bài nộp BTTH1.

PRACTICE LAB

Quản lý bán hàng

  1. Bài 1 - Tạo Database: Tạo Database QuanLyBanHang
  2. Bài 2 - Tạo bảng: KHACHHANG, NHANVIEN, SANPHAM, HOADON, CTHD
  3. Bài 3 - Thiết lập ràng buộc: Primary Key, Foreign Key, NOT NULL, UNIQUE, CHECK, DEFAULT
  4. Bài 4 - Thêm dữ liệu: Tối thiểu 5 khách hàng, 5 nhân viên, 10 sản phẩm, 10 hóa đơn
  5. Bài 5 - Thao tác dữ liệu: Thực hiện INSERT, UPDATE, DELETE, SELECT INTO
  6. Bài 6 - Kiểm tra ràng buộc: Thử nhập dữ liệu sai để quan sát SQL Server báo lỗi

Bài 6 - Ví dụ kiểm tra ràng buộc

Thử nhập dữ liệu sai để quan sát SQL Server báo lỗi:

INSERT INTO SinhVien
VALUES (101, N'Sinh viên trùng mã', '2004-01-01', 1);

➜ Vi phạm PRIMARY KEY.

INSERT INTO SinhVien
VALUES (104, N'Sinh viên không có lớp', '2004-01-01', 999);

➜ Vi phạm FOREIGN KEY.

INSERT INTO SinhVien
VALUES (105, N'Sinh viên lỗi ngày', '1800-01-01', 1);

➜ Vi phạm CHECK.

09 · CHECKLIST CUỐI TUẦN 1

Tự kiểm tra kiến thức

Sau khi hoàn thành, sinh viên nên tự kiểm tra:

  • Biết Database là gì
  • Biết sử dụng SQL Server Management Studio
  • Biết các kiểu dữ liệu cơ bản
  • Biết CREATE DATABASE
  • Biết USE DATABASE
  • Biết CREATE TABLE
  • Biết DROP TABLE
  • Biết ALTER TABLE
  • Hiểu PRIMARY KEY
  • Hiểu FOREIGN KEY
  • Hiểu UNIQUE
  • Hiểu NOT NULL
  • Hiểu CHECK
  • Hiểu DEFAULT
  • Biết INSERT
  • Biết UPDATE
  • Biết DELETE
  • Biết SELECT INTO
  • Biết kiểm tra dữ liệu sau khi thao tác

Kiến thức cốt lõi cần nhớ

DATABASE ↓ TABLE ↓ COLUMN + DATA TYPE ↓ CONSTRAINT ↓ DATA ↓ INSERT / UPDATE / DELETE

Đây là phần nền tảng của toàn bộ IT004. Sang Tuần 2, sinh viên bắt đầu sử dụng dữ liệu đã tạo để thực hiện SELECT, toán tử, hàm, JOIN, phép toán tập hợp và Subquery.