You are on page 1of 30

CẬP NHẬT DỮ LIỆU

• Biểu thức điều kiện


• Thêm từng bản ghi mới
• Thêm nhiều bản ghi từ bảng
khác
• Chỉnh sửa các bản ghi
• Xóa bản ghi
Các hàm hay sử dụng
• Hàm sử dụng ngày tháng: Getdate(),
Day, Month, Year,...
• Hàm với chuỗi: Upper, Lower,
ltrim/rtrim,...
• Hàm chuyển đổi dữ liệu: Convert,
Cast
Biểu thức điều kiện
• Sử dụng các thành phần:
–Toán tử điều kiện (And, Or, Not)
–Toán tử so sánh
–Kiểm tra giới hạn của dữ liệu
–Danh sách giá trị
–Kiểm tra khuôn dạng dữ liệu
–Các giá trị Null
Biểu thức điều kiện
• Toán tử so sánh:
Toán tử ý nghĩa
= Bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
<> Khác
!> Không lớn hơn
!< Không nhỏ hơn
Biểu thức điều kiện
• Kiểm tra giới hạn dữ liệu: BETWEEN (NOT
BETWEEN)
Cách sử dụng Ý nghĩa
giá_trị BETWEEN a AND b a ≤ giá_trị ≤ b
giá_trị NOT BETWEEN a (giá_trị < a) AND
AND b (giá_trị>b)
• Ví dụ:
- YEAR(GETDATE())-YEAR(ngaysinh) BETWEEN
20 AND 25
- Nam not between 2005 and 2010
Biểu thức điều kiện
• Kiểm tra danh sách: In/Not In
 Từ khoá IN được sử dụng khi ta cần chỉ định điều
kiện tìm kiếm dữ liệu là một danh sách các giá trị

 Sau IN (hoặc NOT IN) có thể là một danh sách các


giá trị hoặc là một câu lệnh SELECT khác.
• Ví dụ:
- YEAR(ngaysinh) in (2005, 2010, 2015)
- DiemChu in (‘A’, ‘A+’, ‘B’)
- DiemChu not in (‘F’)
Biểu thức điều kiện
• Khuôn dạng dữ liệu: Toán tử LIKE và các ký tự
đại diện
Ký tự Ý nghĩa
% Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự
_ Ký tự đơn bất kỳ
Ký tự đơn bất kỳ trong giới hạn được chỉ định
[]
(ví dụ [a-f]) hay một tập (ví dụ [abcdef])
Ký tự đơn bất kỳ không nằm trong giới hạn
[^] được chỉ định ( ví dụ [^a-f] hay một tập (ví dụ
[^abcdef]).
Biểu thức điều kiện
• Ví dụ: xét bảng SinhVien(Ma, HoTen, Email,...)
– Sinh viên có họ ‘Lư’
HoTen like N‘Lư %’
– Sinh viên có đệm ‘Thị’
HoTen like N‘_% Thị _%’
– Sinh viên có họ ‘Lê’, tên ‘Vân’
HoTen like N‘Lê % Vân’
– Sinh viên có tên gồm 3 ký tự
HoTen like N‘% _ _ _’
Biểu thức điều kiện
• Giá trị NULL:
tên_cột IS NULL
hoặc:
tên_cột IS NOT NULL

• Ví dụ:
- NgaySinh is Null (Chưa nhập ngày sinh)
- GiaBan is not Null (Đã nhập giá bán)
Thêm từng bản ghi
• Cấu trúc
INSERT INTO tên_bảng[(danh sách cột)] VALUES
(danh sách giá trị)
• Lưu ý:
– Danh sách cột không cần thiết phải chỉ định nếu thêm
đầy đủ các trường dữ liệu.
– Danh sách giá trị phải bằng với số lượng các trường và
đúng thứ tự.
– Các trường không được gán giá trị sẽ có giá trị mặc
định hoặc NULL nếu không đặt giá trị mặc định
– Không truyền giá trị cho trường tự tăng
Thêm từng bản ghi
• Các kiểu dữ liệu cần chú ý khi thêm
–Kiểu char, varchar: ‘<chuỗi> ’
–Kiểu nvarchar, nchar: N’<chuỗi>’
–Kiểu Date: ‘<chuỗi ngày tháng>’
(không truyền định dạng
dd/MM/yyyy)
–Kiểu số: theo định dạng US (dấu thập
phân là “.”; ngăn cách phần nghìn là
“,”)
Thêm từng bản ghi
• Ví dụ 1: xét 2 bảng dữ liệu
- Khoa(MaKhoa varchar(10), TenKhoa nvarchar(10))
- SinhVien(MaSv varchar(10), HoTen nvarchar(30), GT
nvarchar(3), MaKhoa varchar(10), NgaySinh Date)
Chèn bản ghi vào bảng Khoa:
Insert into Khoa values(‘CNTT’, N’Công nghệ
thông tin’)
Chèn bản ghi vào bảng SinhVien:
Insert into Khoa values(‘51123’, N’Trần Thị Lan’,
N’Nữ’,‘CNTT’,’2015-06-25’)
Thêm từng bản ghi
• Ví dụ 2: Xét 2 bảng dữ liệu
- LoaiHang (MaLoai int identity(1,1) , TenLoai
nvarchar(50)); MaLoai tự tăng
- HangHoa (MaHang varchar(10), TenHang
nvarchar(30), DVT nvarchar(3), MaLoai int, GiaBan
float); DVT đặt mặc định là “Cái”
Chèn bản ghi vào bảng Loai:
Insert into Loai(TenLoai) values(N’Bàn’)
Chèn bản ghi vào bảng SinhVien:
Insert into HangHoa(MaHang, TenHang, MaLoai,
GiaBan) values(‘H002’, N‘Ghế học sinh’, 2, 125000)
Thêm nhiều bản ghi từ bảng khác
• Một cách sử dụng khác của câu lệnh INSERT
được sử dụng để bổ sung nhiều dòng dữ liệu,
các dòng dữ liệu này được lấy từ một bảng khác
thông qua câu lệnh SELECT
• Cấu trúc
INSERT INTO tên_bảng[(danh_sách_cột)] câu_lệnh_SELECT
• Lưu ý
– Kết quả của câu lệnh SELECT phải có số cột bằng với
số cột được chỉ định trong bảng đích và phải tương
thích về kiểu dữ liệu.
– Câu lệnh SELECT được sử dụng mệnh đề COMPUTE
Thêm nhiều bản ghi từ bảng khác
Ví dụ: Xét bảng LUUSINHVIEN bao gồm các
trường HODEM, TEN, NGAYSINH. Câu lệnh
dưới đây bổ sung vào bảng LUUSINHVIEN các
dòng dữ liệu có được từ câu truy vấn SELECT:

INSERT INTO luusinhvien


SELECT hodem,ten,ngaysinh
FROM sinhvien
WHERE noisinh like ‘%Huế%’
Cập nhật bản ghi
• Câu lệnh này có cú pháp như sau:
UPDATE tên_bảng
SET tên_cột = biểu_thức
[, ..., tên_cột_k = biểu_thức_k]
[FROM danh_sách_bảng]
[WHERE điều_kiện]
Cập nhật bản ghi
• Trong đó:
– Tên_bảng: bảng sẽ được cập nhật dữ liệu
– danh_sách_bảng: danh sách các bảng
tham chiếu
– điều_kiện: điều kiện cho các dòng dữ liệu
được cập nhật
– Nếu không có “điều_kiện” sẽ cập nhật cho
tất các dòng dữ liệu
– Các dòng, trường không được cập nhật sẽ
giữ nguyên giá trị
Cập nhật bản ghi
• Ví dụ:
- Cật nhật giới tính các sinh viên khoa có mã “MTB” là
Nam:
Update SinhVien set GT=N’Nam’ where MaKhoa=‘MTB’
- Cập nhật đơn vị tính tất cả hàng hóa về “Chiếc”
Update HangHoa set DVT=N’Chiếc’
- Cập nhật DVT về ‘Bộ’, tên hàng thêm ‘Bộ’ vào đầu,
tăng giá bán thêm 10% với hàng hóa có mã loại là 1
Update HangHoa set DVT=N‘Bộ’, TenHang=N’Bộ’+
TenHang, GiaBan=GiaBan*1.1 where MaLoai=1
Cập nhật bản ghi

- Cập nhật ThanhTien=SoLuong*DonGia:

UPDATE nhatkybanhang
SET thanhtien = soluong*gia
FROM mathang
WHERE nhatkybanhang.mahang = mathang.mahang
Cập nhật bản ghi
SoPhong LoaiPhong DonGia
101 A
102 A
103 B
104 C
201 B

- Với bảng GiaPhong như trên, hãy cập


nhật Đơn Giá= 150000 với loại A, 120000
với loại B và 100000 với loại C
Cập nhật bản ghi
• Sử dụng cấu trúc CASE trong câu lệnh UPDATE : Cấu
trúc CASE được sử dụng trong biểu thức khi cần
phải đưa ra các quyết định khác nhau về giá trị của
biểu thức
• Cấu trúc:
Case
When <Điều kiện 1> Then <Giá Trị 1>
When <Điều kiện 2> Then <Giá Trị 2>
.....
When <Điều kiện n> Then <Giá Trị n>
Else <Giá Trị (n+1)>
End
Cập nhật bản ghi
SoPhong LoaiPhong DonGia
101 A
102 A
103 B
104 C
201 B
UPDATE GiaPhong
SET DonGia=
CASE
WHEN loaiphong='A' THEN 150000
WHEN loaiphong='B' THEN 120000
ELSE 100000
END
Xóa bản ghi
• Để xoá dữ liệu trong một bảng, ta sử dụng câu lệnh
DELETE.
• Cấu trúc:
DELETE FROM tên_bảng
[FROM danh_sách_bảng]
[WHERE điều_kiện]
• Trong đó:
+ Tên_bảng: bảng cần xóa
+ điều_kiện: điều kiện cho các dòng dữ liệu được
cập nhật
+ Nếu không có điều_kiện sẽ xóa toàn bộ dữ liệu
bảng
Xóa bản ghi
Ví dụ:
• Xoá khỏi bảng SINHVIEN những sinh viên Nam
DELETE FROM SinhVien WHERE Gt=N‘Nam’

• Xóa các mặt hàng có GiaBan bằng 0


DELETE FROM HangHoa WHERE GiaBan=0

• Xoá ra khỏi bảng SINHVIEN những sinh viên Khoa


‘Công nghệ thông tin’
DELETE FROM sinhvien
FROM Khoa
WHERE Khoa.maKhoa=sinhvien.maKhoa AND
tenkhoa=N‘Công nghệ thông tin’
Xóa bản ghi
• Sử dụng truy vấn con trong câu lệnh DELETE
Một câu lệnh SELECT có thể được lồng vào trong
mệnh đề WHERE trong câu lệnh DELETE để làm
điều kiện cho câu lệnh tương tự như câu lệnh
UPDATE.

Ví dụ: Câu lệnh dưới đây xoá khỏi bảng Khoa


những Khoa không có sinh viên
DELETE FROM Khoa
WHERE MaKhoa NOT IN (SELECT MaKhoa FROM
sinhvien)
Xóa bản ghi

• Xóa tất cả bản ghi


Delete from <Tên_Bảng>
• Hoặc
TRUNCATE table <Tên_Bảng>

• Ví dụ:
Delete from SinhVien
Truncate table SinhVien
Delete TRUNCATE
Ghi lại hành động xóa cho mỗi Ghi lại các trang dữ liệu được
dòng. hủy cấp phát khi xóa.
Xóa từng dòng một và ghi lại Xóa dữ liệu bằng cách hủy cấp
thay đổi trong transaction log phát các trang dữ liệu lưu trữ
cho mỗi dòng được xóa dữ liệu trong bảng và ghi lại địa
chỉ các trang hủy cấp phát
trong transaction log
Xóa hẳn dữ liệu Không xóa dữ liệu, nó hủy cấp
=> dùng nhiều tài nguyên máy phát các trang dữ liệu và xóa
chủ, transaction log sẽ phình to con trỏ đến chỉ mục
do lưu lại cả dữ liệu nên chạy => Không yêu cầu nhiều tài
chậm nguyên nên vì thế rất nhanh
Dễ dàng trong việc khôi phục Dữ liệu sẽ vẫn tồn tại cho đến
cơ sở dữ liệu về trạng thái gần khi nó bị ghi đè hoặc cơ sở dữ
nhất liệu bị thu hẹp
Nội dung ôn tập
• Các hàm hay sử dụng
trong SQL Server
• Cấu trúc <Điều_Kiện>
trong T_SQL
• Thêm một dòng/
nhiều dòng dữ liệu
vào bảng
• Sửa đổi dữ liệu
• Xóa dữ liệu
• Phân biệt giữa Delete
và Truncate
BÀI TẬP CẬP NHẬT DỮ LIỆU
• Tạo CSDL như sau:
– LoaiHang (MaLoai int , TenLoai nvarchar(50))
– HangHoa (MaHang char(10), TenHang nvarchar(50), DVT
nvarchar(10), GiaBan float, MaLoai int )
– NhaCungCap (MaNCC varchar(10), TenNCC nvarchar(100), DiaChi
nvarchar(200), DT nvarchar(50))
– HoaDonNhap (MaHD varchar(10), NgayHD date, MaNCC
varchar(10), GhiChu nvarchar(200))
– HoaDonNhapCT (MaHD varchar(10), MaHang varchar(10),
SoLuong int, GiaNhap float)
• Thực hiện các thao tác sau:
– Cập nhật ít nhất 5 dòng dữ liệu cho các bảng
– Thay đổi 01 mã hàng nào đó
– Xóa 01 loại hàng nào đó đã khai báo HangHoa
– Xóa toàn bộ dữ liệu các bảng
– Xóa toàn bộ CSDL

You might also like