Bài tập & đáp án
Đề bài đọc tự do. Phần đáp án và giải thích chi tiết chỉ dành cho sinh viên đang học lớp thực hành IT004, cần mã truy cập từ giảng viên.
ĐỀ BÀI
Trung tâm Thể dục Thể thao (TrungTam_TDTT)
Bài tập Tuần 1 gồm 2 yêu cầu độc lập, sử dụng SQL Server Management Studio để thực hiện. Mỗi yêu cầu nộp thành 1 file script riêng.
Yêu cầu bài tập 1 - Thiết kế và nhập dữ liệu
Cho lược đồ cơ sở dữ liệu "Quản lý Trung tâm Thể dục Thể thao" gồm 6 quan hệ sau:
PHONGTAP (MAPH, TENPHONG, DIACHI, SUCCHUA, TRANGTHAI)
Tân từ: Lưu trữ thông tin phòng tập: Mã phòng, tên phòng, địa chỉ, sức chứa tối đa (số người) và trạng thái phòng (hoạt động, bảo trì, đóng cửa…).
| Thuộc tính | Kiểu dữ liệu | Diễn giải |
|---|---|---|
MAPH | char(5) | Mã phòng tập - Khóa chính |
TENPHONG | varchar(50) | Tên phòng tập |
DIACHI | varchar(100) | Địa chỉ phòng tập |
SUCCHUA | int | Sức chứa tối đa (số người) |
TRANGTHAI | varchar(20) | Trạng thái phòng (hoạt động, bảo trì, đóng cửa…) |
HUANLUYENVIEN (MAHLV, HOTEN, CHUYENMON, SDT, EMAIL)
Tân từ: Lưu trữ thông tin huấn luyện viên: Mã huấn luyện viên, họ tên, chuyên môn (Yoga, Gym,...), số điện thoại và email liên lạc.
| Thuộc tính | Kiểu dữ liệu | Diễn giải |
|---|---|---|
MAHLV | char(5) | Mã huấn luyện viên - Khóa chính |
HOTEN | varchar(50) | Họ tên |
CHUYENMON | varchar(50) | Chuyên môn (Yoga, Gym,...) |
SDT | varchar(15) | Số điện thoại |
EMAIL | varchar(50) | Email để liên lạc |
HOCVIEN (MAHV, HOTEN, NGSINH, SDT, DIACHI, GIOITINH, NGTG)
Tân từ: Lưu trữ thông tin học viên: Mã học viên, họ tên, ngày sinh, số điện thoại, địa chỉ, giới tính (Nam, Nữ) và ngày bắt đầu tham gia là học viên.
| Thuộc tính | Kiểu dữ liệu | Diễn giải |
|---|---|---|
MAHV | char(5) | Mã học viên - Khóa chính |
HOTEN | varchar(50) | Họ tên |
NGSINH | smalldatetime | Ngày sinh |
SDT | varchar(15) | Số điện thoại |
DIACHI | varchar(100) | Địa chỉ học viên |
GIOITINH | varchar(10) | Giới tính học viên (Nam, Nữ) |
NGTG | smalldatetime | Ngày bắt đầu tham gia là học viên |
LOPTAP (MALOP, MAPH, MAHLV, TENLOP, NGAYBD, NGAYKT, TRANGTHAI)
Tân từ: Lưu trữ thông tin lớp tập: Mã lớp, phòng tập diễn ra, huấn luyện viên phụ trách, tên lớp, ngày bắt đầu, ngày kết thúc và trạng thái lớp (đang hoạt động, đã kết thúc, tạm dừng…).
| Thuộc tính | Kiểu dữ liệu | Diễn giải |
|---|---|---|
MALOP | char(5) | Mã lớp tập - Khóa chính |
MAPH | char(5) | Mã phòng tập - Khóa ngoại đến PHONGTAP |
MAHLV | char(5) | Mã huấn luyện viên - Khóa ngoại đến HUANLUYENVIEN |
TENLOP | varchar(50) | Tên lớp tập |
NGAYBD | smalldatetime | Ngày bắt đầu lớp tập |
NGAYKT | smalldatetime | Ngày kết thúc lớp tập |
TRANGTHAI | varchar(20) | Trạng thái lớp (đang hoạt động, đã kết thúc, tạm dừng…) |
DANGKY (MAHV, MALOP, NGAYDK)
Tân từ: Chi tiết đăng ký: Học viên nào đăng ký lớp tập nào, vào ngày nào.
| Thuộc tính | Kiểu dữ liệu | Diễn giải |
|---|---|---|
MAHV | char(5) | Mã học viên - Khóa chính, khóa ngoại đến HOCVIEN |
MALOP | char(5) | Mã lớp tập - Khóa chính, khóa ngoại đến LOPTAP |
NGAYDK | smalldatetime | Ngày đăng ký |
LICHTAP (MALOP, NGAYTAP, GIOBATDAU, GIOKETTHUC)
Tân từ: Lưu trữ lịch tập của từng lớp: Ngày diễn ra buổi tập, giờ bắt đầu và giờ kết thúc.
| Thuộc tính | Kiểu dữ liệu | Diễn giải |
|---|---|---|
MALOP | char(5) | Mã lớp tập - Khóa chính, khóa ngoại đến LOPTAP |
NGAYTAP | smalldatetime | Ngày diễn ra buổi tập - Khóa chính |
GIOBATDAU | time | Giờ bắt đầu buổi tập - Khóa chính |
GIOKETTHUC | time | Giờ kết thúc buổi tập |
<MSSV>_<HoVaTen>_BTTH1_YC1.sql (MSSV là mã số sinh viên, HoVaTen là họ và tên).- Tạo cơ sở dữ liệu
TrungTam_TDTT, gồm 6 quan hệPHONGTAP,HUANLUYENVIEN,HOCVIEN,LOPTAP,DANGKY,LICHTAP. - Tạo khóa chính, khóa ngoại cho các quan hệ trên.
- Nhập dữ liệu cho 6 quan hệ theo như dữ liệu mẫu trong file đề bài đã cung cấp.
Yêu cầu bài tập 2 - Định nghĩa và thao tác dữ liệu
Từ đây trở đi, đề bài chuyển sang dùng lược đồ dùng chung Quản lý bán hàng (KHACHHANG, NHANVIEN, SANPHAM, HOADON, CTHD).
<MSSV>_<HoVaTen>_BTTH1_YC2.sql (MSSV là mã số sinh viên, HoVaTen là họ và tên).Phần I - Ngôn ngữ định nghĩa dữ liệu (Data Definition Language)
- Thêm vào thuộc tính
GHICHUcó kiểu dữ liệuvarchar(20)cho quan hệSANPHAM. - Thêm vào thuộc tính
LOAIKHcó kiểu dữ liệu làtinyintcho quan hệKHACHHANG. - Sửa kiểu dữ liệu của thuộc tính
GHICHUtrong quan hệSANPHAMthànhvarchar(100). - Xóa thuộc tính
GHICHUtrong quan hệSANPHAM. - Làm thế nào để thuộc tính
LOAIKHtrong quan hệKHACHHANGcó thể lưu các giá trị là: "Vang lai", "Thuong xuyen", "Vip", … - Đơn vị tính của sản phẩm chỉ có thể là ("cay", "hop", "cai", "quyen", "chuc").
- Giá bán của sản phẩm từ 500 đồng trở lên.
- Số điện thoại của nhân viên phải bắt đầu bằng chữ số "0".
- Mỗi lần mua hàng, khách hàng phải mua ít nhất 1 sản phẩm.
- Ngày khách hàng đăng ký là khách hàng thành viên phải lớn hơn ngày sinh của người đó.
Phần II - Ngôn ngữ thao tác dữ liệu (Data Manipulation Language)
- Tạo quan hệ
SANPHAM1chứa toàn bộ dữ liệu của quan hệSANPHAM. Tạo quan hệKHACHHANG1chứa toàn bộ dữ liệu của quan hệKHACHHANG. - Cập nhật giá tăng 5% đối với những sản phẩm do "Thai Lan" sản xuất (cho quan hệ
SANPHAM1). - Cập nhật giá giảm 5% đối với những sản phẩm do "Trung Quoc" sản xuất có giá từ 10.000 trở xuống (cho quan hệ
SANPHAM1). - Cập nhật giá trị
LOAIKHlà "Vip" đối với những khách hàng đăng ký thành viên trước ngày 1/1/2007 có doanh số từ 10.000.000 trở lên, hoặc khách hàng đăng ký thành viên từ 1/1/2007 trở về sau có doanh số từ 2.000.000 trở lên (cho quan hệKHACHHANG1).
ĐÁP ÁN
Xem đáp án
Nội dung được bảo vệ
Nhập mã truy cập để xem đáp án Tuần 1.
Mã truy cập được cung cấp bởi giảng viên.
Đáp án đầy đủ cho Yêu cầu 1 (3 câu) và Yêu cầu 2 (10 câu Phần I, 4 câu Phần II). Gõ lại từng câu vào SSMS để nhớ lâu hơn nhé - Nút Copy ở đây chỉ mang tính hình thức thôi.
CÂU 1 (YC1) · CREATE DATABASE
Đề bài: Tạo cơ sở dữ liệu TrungTam_TDTT, gồm 6 quan hệ PHONGTAP, HUANLUYENVIEN, HOCVIEN, LOPTAP, DANGKY, LICHTAP.
CREATE DATABASE TrungTam_TDTT;
GO
USE TrungTam_TDTT;
GO
CREATE TABLE PHONGTAP
(
MAPH CHAR(5) PRIMARY KEY,
TENPHONG VARCHAR(50),
DIACHI VARCHAR(100),
SUCCHUA INT,
TRANGTHAI VARCHAR(20)
);
CREATE TABLE HUANLUYENVIEN
(
MAHLV CHAR(5) PRIMARY KEY,
HOTEN VARCHAR(50),
CHUYENMON VARCHAR(50),
SDT VARCHAR(15),
EMAIL VARCHAR(50)
);
CREATE TABLE HOCVIEN
(
MAHV CHAR(5) PRIMARY KEY,
HOTEN VARCHAR(50),
NGSINH SMALLDATETIME,
SDT VARCHAR(15),
DIACHI VARCHAR(100),
GIOITINH VARCHAR(10),
NGTG SMALLDATETIME
);
CREATE TABLE LOPTAP
(
MALOP CHAR(5) PRIMARY KEY,
MAPH CHAR(5),
MAHLV CHAR(5),
TENLOP VARCHAR(50),
NGAYBD SMALLDATETIME,
NGAYKT SMALLDATETIME,
TRANGTHAI VARCHAR(20)
);
CREATE TABLE DANGKY
(
MAHV CHAR(5),
MALOP CHAR(5),
NGAYDK SMALLDATETIME,
PRIMARY KEY (MAHV, MALOP)
);
CREATE TABLE LICHTAP
(
MALOP CHAR(5),
NGAYTAP SMALLDATETIME,
GIOBATDAU TIME,
GIOKETTHUC TIME,
PRIMARY KEY (MALOP, NGAYTAP, GIOBATDAU)
);CREATE DATABASE tạo 1 CSDL rỗng, sau đó phải USE để chuyển ngữ cảnh làm việc sang CSDL đó trước khi tạo bảng. Khóa chính được khai báo ngay lúc tạo bảng: Khóa đơn dùng PRIMARY KEY ngay sau cột, khóa phức hợp (DANGKY, LICHTAP) dùng dòng PRIMARY KEY (...) riêng ở cuối.
Khóa chính là ràng buộc nội tại của chính bảng đó nên khai báo ngay khi tạo bảng là hợp lý nhất. Khóa ngoại thì khác - Nó tham chiếu sang bảng khác, nên phải đợi bảng được tham chiếu tồn tại trước, do đó để dành sang Câu 2.
CÂU 2 (YC1) · FOREIGN KEY
Đề bài: Tạo khóa chính, khóa ngoại cho các quan hệ trên.
ALTER TABLE LOPTAP ADD CONSTRAINT FK_LOPTAP_PHONGTAP
FOREIGN KEY (MAPH) REFERENCES PHONGTAP(MAPH);
ALTER TABLE LOPTAP ADD CONSTRAINT FK_LOPTAP_HLV
FOREIGN KEY (MAHLV) REFERENCES HUANLUYENVIEN(MAHLV);
ALTER TABLE DANGKY ADD CONSTRAINT FK_DANGKY_HOCVIEN
FOREIGN KEY (MAHV) REFERENCES HOCVIEN(MAHV);
ALTER TABLE DANGKY ADD CONSTRAINT FK_DANGKY_LOPTAP
FOREIGN KEY (MALOP) REFERENCES LOPTAP(MALOP);
ALTER TABLE LICHTAP ADD CONSTRAINT FK_LICHTAP_LOPTAP
FOREIGN KEY (MALOP) REFERENCES LOPTAP(MALOP);Khóa chính đã được tạo sẵn ở Câu 1, nên Câu 2 chỉ còn thêm khóa ngoại bằng ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY (...) REFERENCES ...(...) cho từng cặp bảng có liên kết.
LOPTAP phải đã tồn tại (với khóa chính MAPH ở PHONGTAP, MAHLV ở HUANLUYENVIEN) trước khi tạo được khóa ngoại trỏ tới nó - Đây chính là lý do khóa ngoại luôn phải đợi đến sau khi các bảng liên quan đã hình thành xong.
CÂU 3 (YC1) · INSERT
Đề bài: Nhập dữ liệu cho 6 quan hệ theo như dữ liệu mẫu trong file đề bài đã cung cấp.
INSERT INTO PHONGTAP (MAPH, TENPHONG, DIACHI, SUCCHUA, TRANGTHAI)
VALUES
('PH001', N'Yoga Linh Dam', N'Ha Noi', 25, N'Hoat dong'),
('PH002', N'Gym Nguyen Van Cu', N'TP. HCM', 60, N'Hoat dong');
INSERT INTO HUANLUYENVIEN (MAHLV, HOTEN, CHUYENMON, SDT, EMAIL)
VALUES
('HL001', N'Nguyen Van An', N'Yoga', '0901234567', 'an.nguyen@tdtt.vn'),
('HL002', N'Tran Thi Binh', N'Gym', '0912345678', 'binh.tran@tdtt.vn');
INSERT INTO LOPTAP (MALOP, MAPH, MAHLV, TENLOP, NGAYBD, NGAYKT, TRANGTHAI)
VALUES
('LOP001', 'PH001', 'HL001', N'Yoga co ban', '2024-01-05', '2024-03-05', N'Dang hoat dong'),
('LOP002', 'PH002', 'HL002', N'Gym tang co', '2024-01-10', '2024-04-10', N'Dang hoat dong');
INSERT INTO HOCVIEN (MAHV, HOTEN, NGSINH, SDT, DIACHI, GIOITINH, NGTG)
VALUES
('HV001', N'Le Van Cuong', '2000-05-20', '0923456789', N'12 Tran Phu, Ha Noi', N'Nam', '2024-01-02'),
('HV002', N'Pham Thi Dung', '1999-08-15', '0934567890', N'34 Le Loi, TP. HCM', N'Nu', '2024-01-03');
INSERT INTO DANGKY (MAHV, MALOP, NGAYDK)
VALUES
('HV001', 'LOP001', '2024-01-05'),
('HV002', 'LOP002', '2024-01-10');
INSERT INTO LICHTAP (MALOP, NGAYTAP, GIOBATDAU, GIOKETTHUC)
VALUES
('LOP001', '2024-01-08', '18:00:00', '19:00:00'),
('LOP002', '2024-01-12', '19:00:00', '20:30:00');INSERT INTO ... VALUES (...) thêm từng dòng dữ liệu vào bảng; nhiều dòng có thể gộp trong 1 câu lệnh bằng cách liệt kê nhiều nhóm giá trị, ngăn cách bởi dấu phẩy.
Thứ tự nhập bắt buộc phải theo đúng chiều khóa ngoại: PHONGTAP và HUANLUYENVIEN trước LOPTAP (vì LOPTAP tham chiếu đến cả 2 bảng này); HOCVIEN và LOPTAP trước DANGKY; LOPTAP trước LICHTAP - Vì khóa ngoại đã tạo ở Câu 2 sẽ chặn INSERT nếu dòng cha chưa tồn tại. Dữ liệu ở đây chỉ mang tính minh họa cách viết đúng cú pháp - Khi làm bài thực tế, hãy nhập đủ dữ liệu mẫu trong file PDF đính kèm ở phần Đề bài.
CÂU 1 (YC2 - PHẦN I) · ADD COLUMN
Đề bài: Thêm vào thuộc tính GHICHU có kiểu dữ liệu varchar(20) cho quan hệ SANPHAM.
ALTER TABLE SANPHAM ADD GHICHU VARCHAR(20);ALTER TABLE ... ADD thêm 1 cột mới vào bảng đã tồn tại; các dòng dữ liệu cũ sẽ nhận giá trị NULL ở cột mới này.
SANPHAM đã có dữ liệu từ trước, không thể CREATE TABLE lại - Phải dùng ALTER TABLE để bổ sung cột mà không mất dữ liệu hiện có.
CÂU 2 (YC2 - PHẦN I) · ADD COLUMN
Đề bài: Thêm vào thuộc tính LOAIKH có kiểu dữ liệu là tinyint cho quan hệ KHACHHANG.
ALTER TABLE KHACHHANG ADD LOAIKH TINYINT;TINYINT lưu số nguyên nhỏ (0-255), phù hợp khi LOAIKH chỉ cần vài mã số cố định.
Đề chỉ yêu cầu thêm cột, chưa yêu cầu ràng buộc giá trị - Việc giới hạn LOAIKH chỉ được lưu vài nhãn cụ thể sẽ làm ở Câu 5.
CÂU 3 (YC2 - PHẦN I) · ALTER COLUMN
Đề bài: Sửa kiểu dữ liệu của thuộc tính GHICHU trong quan hệ SANPHAM thành varchar(100).
ALTER TABLE SANPHAM ALTER COLUMN GHICHU VARCHAR(100);ALTER COLUMN thay đổi kiểu dữ liệu (hoặc độ dài) của 1 cột đã tồn tại.
varchar(20) ở Câu 1 có thể không đủ chỗ lưu ghi chú dài hơn, nên phải mở rộng độ dài thay vì xóa cột rồi tạo lại.
CÂU 4 (YC2 - PHẦN I) · DROP COLUMN
Đề bài: Xóa thuộc tính GHICHU trong quan hệ SANPHAM.
ALTER TABLE SANPHAM DROP COLUMN GHICHU;DROP COLUMN xóa vĩnh viễn 1 cột cùng toàn bộ dữ liệu đã lưu trong cột đó.
Không còn dùng đến GHICHU nữa thì nên xóa hẳn để tránh cột thừa gây rối khi SELECT * sau này.
CÂU 5 (YC2 - PHẦN I) · CHECK ... IN
Đề bài: Làm thế nào để thuộc tính LOAIKH trong quan hệ KHACHHANG có thể lưu các giá trị là: "Vang lai", "Thuong xuyen", "Vip", …
ALTER TABLE KHACHHANG ALTER COLUMN LOAIKH VARCHAR(20);LOAIKH cần lưu chuỗi ký tự ("Vang lai", "Thuong xuyen", "Vip"...) nên chỉ cần đổi kiểu dữ liệu từ TINYINT (ở Câu 2) sang VARCHAR(20) để cột có đủ chỗ chứa chuỗi.
Đề bài kết thúc bằng dấu "…" sau "Vang lai", "Thuong xuyen", "Vip" - Nghĩa là danh sách giá trị chưa đóng, còn có thể phát sinh loại khách hàng khác ngoài 3 loại này. Do đó không nên thêm CHECK ... IN (...) giới hạn cứng đúng 3 giá trị như Câu 6 - Làm vậy sẽ vô tình chặn luôn các loại khách hàng hợp lệ khác chưa được liệt kê. Câu hỏi chỉ yêu cầu cột "có thể lưu" được các giá trị dạng chuỗi này, nên đổi kiểu dữ liệu là đủ.
CÂU 6 (YC2 - PHẦN I) · CHECK ... IN
Đề bài: Đơn vị tính của sản phẩm chỉ có thể là ("cay", "hop", "cai", "quyen", "chuc").
ALTER TABLE SANPHAM ADD CONSTRAINT CK_SANPHAM_DVT
CHECK (DVT IN (N'cay', N'hop', N'cai', N'quyen', N'chuc'));Cách khác
ALTER TABLE SANPHAM ADD CONSTRAINT CK_SANPHAM_DVT
CHECK (DVT = N'cay' OR DVT = N'hop' OR DVT = N'cai'
OR DVT = N'quyen' OR DVT = N'chuc');Chuỗi các phép so sánh = nối bằng OR cho kết quả tương đương IN (...), nhưng dài dòng hơn khi danh sách có nhiều giá trị - IN vẫn là cách viết được khuyến khích.
Cùng kỹ thuật CHECK ... IN như hướng đã cân nhắc ở Câu 5, áp dụng cho cột DVT (đơn vị tính) của SANPHAM.
Khác với Câu 5, đề bài ở đây liệt kê đúng 5 đơn vị tính và không có dấu "…" - Đây là danh sách đóng, cố định, không phải nhập tự do. Vì vậy CHECK ... IN giới hạn cứng là hoàn toàn phù hợp, giúp tránh nhập sai chính tả hoặc phát sinh đơn vị tính ngoài ý muốn.
CÂU 7 (YC2 - PHẦN I) · CHECK
Đề bài: Giá bán của sản phẩm từ 500 đồng trở lên.
ALTER TABLE SANPHAM ADD CONSTRAINT CK_SANPHAM_GIA CHECK (GIA >= 500);CHECK với biểu thức so sánh (khác IN) dùng khi ràng buộc là 1 khoảng giá trị chứ không phải danh sách liệt kê.
"Từ 500 đồng trở lên" là điều kiện >=, không thể liệt kê hết giá trị hợp lệ như Câu 6, nên phải dùng phép so sánh trực tiếp.
CÂU 8 (YC2 - PHẦN I) · CHECK ... LIKE
Đề bài: Số điện thoại của nhân viên phải bắt đầu bằng chữ số "0".
ALTER TABLE NHANVIEN ADD CONSTRAINT CK_NHANVIEN_SODT CHECK (SODT LIKE '0%');LIKE '0%' khớp mọi chuỗi bắt đầu bằng ký tự "0", dấu % đại diện cho phần còn lại (độ dài bất kỳ).
Ràng buộc "bắt đầu bằng" là ràng buộc về định dạng chuỗi, không phải giá trị cụ thể hay khoảng số - CHECK ... LIKE là công cụ đúng cho trường hợp này.
CÂU 9 (YC2 - PHẦN I) · CHECK
Đề bài: Mỗi lần mua hàng, khách hàng phải mua ít nhất 1 sản phẩm.
ALTER TABLE CTHD ADD CONSTRAINT CK_CTHD_SL CHECK (SL >= 1);Ràng buộc đặt trên cột SL (số lượng) của CTHD - Mỗi dòng chi tiết hóa đơn phải có số lượng mua từ 1 trở lên.
"Mua ít nhất 1 sản phẩm" thực chất là ràng buộc số lượng của từng dòng CTHD, không phải trên HOADON - Vì HOADON không lưu trực tiếp thông tin sản phẩm.
CÂU 10 (YC2 - PHẦN I) · CHECK
Đề bài: Ngày khách hàng đăng ký là khách hàng thành viên phải lớn hơn ngày sinh của người đó.
ALTER TABLE KHACHHANG ADD CONSTRAINT CK_KHACHHANG_NGDK CHECK (NGDK > NGSINH);CHECK có thể so sánh 2 cột trong cùng 1 bảng với nhau, không chỉ so sánh với 1 giá trị cố định.
Về mặt logic, 1 người không thể đăng ký làm thành viên trước khi họ được sinh ra - Ràng buộc này giữ dữ liệu luôn hợp lý theo đúng ý nghĩa thực tế.
CÂU 1 (YC2 - PHẦN II) · SELECT INTO
Đề bài: Tạo quan hệ SANPHAM1 chứa toàn bộ dữ liệu của quan hệ SANPHAM. Tạo quan hệ KHACHHANG1 chứa toàn bộ dữ liệu của quan hệ KHACHHANG.
SELECT * INTO SANPHAM1 FROM SANPHAM;
SELECT * INTO KHACHHANG1 FROM KHACHHANG;SELECT * INTO <bảng mới> FROM <bảng nguồn> vừa tạo bảng mới vừa sao chép toàn bộ dữ liệu, không cần CREATE TABLE riêng.
Các câu sau đều là UPDATE có thể làm sai lệch dữ liệu gốc - Tạo bản sao trước giúp thao tác thử nghiệm trên SANPHAM1/KHACHHANG1 mà không ảnh hưởng đến SANPHAM/KHACHHANG thật.
CÂU 2 (YC2 - PHẦN II) · UPDATE
Đề bài: Cập nhật giá tăng 5% đối với những sản phẩm do "Thai Lan" sản xuất (cho quan hệ SANPHAM1).
UPDATE SANPHAM1
SET GIA = GIA * 1.05
WHERE NUOCSX = N'Thai Lan';GIA * 1.05 nghĩa là giữ nguyên 100% giá cũ và cộng thêm 5%, tương đương tăng 5%.
Không dùng GIA = GIA + 5 vì 5% không phải 1 con số cố định mà phụ thuộc vào giá của từng sản phẩm - Phải nhân với hệ số 1.05 để tỷ lệ tăng đúng cho mọi mức giá khác nhau.
CÂU 3 (YC2 - PHẦN II) · UPDATE
Đề bài: Cập nhật giá giảm 5% đối với những sản phẩm do "Trung Quoc" sản xuất có giá từ 10.000 trở xuống (cho quan hệ SANPHAM1).
UPDATE SANPHAM1
SET GIA = GIA * 0.95
WHERE NUOCSX = N'Trung Quoc' AND GIA <= 10000;GIA * 0.95 tương đương giảm 5% (giữ lại 95% giá cũ); mệnh đề WHERE kết hợp 2 điều kiện bằng AND.
Phải lọc đúng 2 điều kiện cùng lúc (nước sản xuất và mức giá) - Thiếu 1 trong 2 sẽ giảm giá nhầm cả những sản phẩm không thuộc diện áp dụng.
CÂU 4 (YC2 - PHẦN II) · UPDATE
Đề bài: Cập nhật giá trị LOAIKH là "Vip" đối với những khách hàng đăng ký thành viên trước ngày 1/1/2007 có doanh số từ 10.000.000 trở lên, hoặc khách hàng đăng ký thành viên từ 1/1/2007 trở về sau có doanh số từ 2.000.000 trở lên (cho quan hệ KHACHHANG1).
UPDATE KHACHHANG1
SET LOAIKH = N'Vip'
WHERE (NGDK < '1/1/2007' AND DOANHSO >= 10000000)
OR (NGDK >= '1/1/2007' AND DOANHSO >= 2000000);Điều kiện gồm 2 nhóm độc lập nối bằng OR, mỗi nhóm lại gồm 2 điều kiện nối bằng AND - Dùng dấu ngoặc để phân nhóm rõ ràng, tránh sai thứ tự ưu tiên AND/OR.
Ngưỡng doanh số để đạt Vip khác nhau tùy thời điểm đăng ký (10 triệu nếu đăng ký trước 1/1/2007, chỉ cần 2 triệu nếu đăng ký từ 1/1/2007 trở đi) - Phải tách 2 trường hợp bằng OR thay vì gộp chung 1 điều kiện.
