INTO Câu lệnh Update Câu lệnh Delete Cấu trúc lệnh Select Mệnh đề FROM Mệnh đề WHERE Mệnh đề HAVING Các hàm hệ thống Kết nối bảng Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slid
Trang 1Chương 4 THAO TÁC DỮ LIỆU
Lecturer: Nguyễn Đức Cương - FIT
Email: cuongnguyenduc@gmail.com
Website: http://www.nguyenduccuong.com
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 2
Nội dung
Câu lệnh INSERT INTO
Câu lệnh Update
Câu lệnh Delete
Cấu trúc lệnh Select
Mệnh đề FROM
Mệnh đề WHERE
Mệnh đề HAVING
Các hàm hệ thống
Kết nối bảng
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 3
Mục tiêu
Mô tả được các lệnh thao tác thêm, xóa, sửa dữ
liệu
Có thể thêm dữ liệu, hiệu chỉnh dữ liệu, xóa dữ liệu
trực tiếp trên CSDL
Mô tả được lệnh tìm kiếm, lọc dữ liệu
Có thể liệt kê, tìm kiếm lọc dữ liệu từ 1 hoặc nhiều
bảng
Mô tả ý nghĩa và cách sử dụng của một số hàm hệ
thống
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 4
Bảo trì dữ liệu
Liên quan đến việc bổ sung thông tin mới, sửa lại
dữ liệu không chính xác, có thể xóa đi dữ liệu không cần thiết
Nhóm lệnh DML dùng để bảo trì dữ liệu gồm 3 lệnh
INSERT
UPDATE
DELETE
Trang 2Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 5
Câu lệnh INSERT VALUES
Cú pháp:
INSERT [INTO] <Tên bảng>[(<danh sách cột>)]
VALUES (giá trị, )[,(giá trị, ), ]);
Ý nghĩa:
Thêm 1 hoặc nhiều dòng dữ liệu vào trong bảng
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 6
Câu lệnh INSERT VALUES
Ví dụ: Thêm phòng TCHC vào bảng PhongBan
INSERT PhongBan VALUES (‘HCTH’,’Phòng Hành chính tổng hợp’,’12, Nguyễn Văn Bảo, Gò Vấp,’08.38940390’);
Nhận xét
Khi không chỉ ra tên cột sau tên bảng
Có chỉ ra tên cột sau tên bảng
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 7
Câu lệnh INSERT SELECT
Cú pháp:
INSERT [INTO] <Tên bảng>[(<danh sách cột>)]
SELECT {danh sách cột}
FROM {danh sách bảng}
[WHERE <Điều kiện>];
Ý nghĩa:
Thêm 1 hoặc nhiều dòng dữ liệu từ 1 hay nhiều
bảng vào trong bảng khác
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 8
Câu lệnh INSERT SELECT
Ví dụ:
INSERT EmployeeSales Select EmployeeId, LastName FROM Employee WHERE EmployeeID LIKE ‘3%’
Trang 3Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 9
Câu lệnh SELECT
Cú pháp
SELECT *|{[DISTINCT] column|expression
[alias], }
FROM table(s)
[WHERE condition(s)]
[HAVING group_condition]
[ORDER BY {column, expr, alias}
[ASC|DESC]];
Ý nghĩa: lọc thông tin từ 1, nhiều bảng
Lưu ý thứ tự thực hiện lệnh
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 10
Câu lệnh SELECT
Ví dụ 1: Cho biết thông tin về các phòng ban?
SELECT Maphong,Tenphong, DiaChi, Tel FROM PhongBan
hoặc:
SELECT * FROM PhongBan
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 11
Câu lệnh SELECT
Ví dụ 2: Cho biết danh sách thưởng của các nhân
viên bao gồm các thông tin mã nhân viên, họ tên,
lương, và thưởng (bằng lương + 40% lương)?
Câu lệnh:
SELECT Manv, Hoten, Luong, 1.4* Luong as
Thuong
FROM Nhanvien
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 12
Câu lệnh SELECT
Ví dụ 3: Cho biết mã các ngoại ngữ mà các nhân viên trong cơ quan đã học?
Câu lệnh:
Select Mann From TDNN hoặc
Select Distinct Mann From TDNN
Trang 4Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 13
Câu lệnh SELECT
Ví dụ 4: Đưa ra thông tin về 2 nhân
viên đầu tiên trong bảng nhân viên?
Câu lệnh:
Select top 2 *
From NHANVIEN
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 14
Câu lệnh SELECT – mệnh đề WHERE
Lọc kết quả ra của mệnh đề FROM, hạn chế dòng
dữ liệu được trả về trong kết quả
Biểu thức điều kiện
Biểu thức
Dữ liệu trong bảng
Các toán tử
Các hàm hệ thống hoặc do người dùng định nghịa
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 15
Câu lệnh SELECT
Các phép toán trong Biểu thức điều kiện
• Toán tử so sánh: >, <, >=, <>
• Toán tử logic: AND, OR, NOT
• Toán tử phạm vi: BETWEEN… AND
• Thuộc DS giá trị: IN and NOT IN
• Giá trị chưa biết:IS NULL and IS NOT NULL
• Tồn tại trong Subquery :EXISTS and NOT EXISTS
• DISTINCT : loại bỏ trùng lắp
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 16
Câu lệnh SELECT
Ví dụ 5: Cho biết danh sách các nhân viên làm việc ở phòng có mã số là HCA?
Câu lệnh:
Select * From Nhanvien Where Maphong = ‘HCA’
16
Trang 5Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 17
Câu lệnh SELECT
Ví dụ 6: Cho biết mã nhân viên, họ tên,
ngày sinh, lương của các nhân viên có
lương nằm trong khoảng từ 2000000 đồng
đến 3000000 đồng ?
Câu lệnh:
Select Manv, Hoten, Ngaysinh, Luong
From Nhanvien
Where (Luong 2000000) and (Luong
3000000)
17
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 18
Câu lệnh SELECT
Ví dụ 7: Cho biết mã nhân viên, họ tên, ngày sinh, lương của các nhân viên có lương không nằm trong khoảng từ 1000000 đồng đến 2000000 đồng?
Thực hiện:
Select Manv, Hoten, Ngaysinh, Luong From Nhanvien
Where Luong not between 1000 and 2000
18
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 19
Câu lệnh SELECT
Ví dụ 8: Đưa ra danh sách các nhân
viên chưa có số điện thoại?
Select *
From Nhanvien
Where SDT is Null
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 20
Câu lệnh SELECT
Ví dụ 09: Cho biết các nhân viên làm
việc ở phòng có mã phòng là ‘HCA
‘hoặc ‘KDA’?
Câu lệnh:
Select * From Nhanvien Where Maphong = ‘P1’ or Maphong = ‘P2’
Trang 6Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 21
Câu lệnh SELECT
Ví dụ 10: Cho biết danh sách các nhân viên
có tên bắt đầu bằng ‘N’?
Câu lệnh:
Select *
Where HoTen like ‘N%’
21
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 22
Câu lệnh SELECT Mệnh đề ORDER BY
=> Sắp thứ tự hàng tăng, giảm
Ví dụ 11: Hãy đưa ra danh sách nhân viên theo theo chiều tăng dần của lương?
Câu lệnh Select Manv, Hoten, Ngaysinh, Luong From NHANVIEN
Order By Luong Asc
22
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 23
Câu lệnh SELECT
Ví dụ 12: Hãy đưa ra danh sách nhân viên
theo theo chiều tăng dần của lương, nếu 2
nhân viên có cùng lương thì sắp xếp theo
ngày sinh giảm dần?
Select Manv, Hoten, Ngaysinh, Luong
From NHANVIEN
Order By Luong Asc, Ngaysinh Desc
23
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 24
Câu lệnh SELECT
Ví dụ 13: Liệt kê họ, tên của khách hàng và sắp xếp thành 1 cột tăng dần
SELECT LastName + ‘-’ + FirstName as FullName FROM Customer
ORDER BY FullName ASC
Trang 7Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 25
Bài tập
Hiển thị số hóa đơn (order number), cách gửi quà
(shipping mode), các phí gói quà (gift-wrap
charges) và tổng số tiền (total cost ) của tất cả hóa
đơn đã được bán
Hiển thị tên, họ của tất cả người mua hàng
(shopper) sống ở tiểu bang California
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 26
MỘT SỐ HÀM THÔNG DỤNG
Hàm toán học
AVG(), – MIN(), – MAX(), – SUM()
COUNT()
SQUARE()
SQRT()
ROUND()
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 27
MỘT SỐ HÀM THÔNG DỤNG
Các hàm xử lý xâu kí tự
ASCII(s): trả về giá trị mã ASCII của kí
tự bên nhất trái của xâu
Char(n): trả ra kí tự thứ n trong bảng
mã ASCII
Upper(s): chuyển đổi xâu sang chữ hoa
Lower(s): chuyển đổi xâu sang chữ
thường
27
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 28
MỘT SỐ HÀM THÔNG DỤNG
Các hàm xử lý xâu kí tự (tiếp)
+: phép toán ghép các xâu
Len(s): trả về độ dài của xâu
LTRIM(s): loại bỏ các kí tự trắng bên trái xâu
RTRIM(s): loại bỏ các kí tự trắng bên phải xâu
Left(s, n): trả về n kí tự (xâu con) phía bên trái nhất xâu s
Right(s, n): trả về n kí tự (xâu con) phía bên phải nhất xâu s
28
Trang 8Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 29
MỘT SỐ HÀM THÔNG DỤNG
SubString(s, m ,n): trả về xâu con dài n kí
tự của xâu s bắt đầu từ ví trí thứ m
Replace(s, s1, s2): thay thế các xâu con s1
xuất hiện trong xâu s bằng xâu s2
Stuff (s, m, n, s1): xóa xâu con n kí tự bắt
đầu từ vị trí thứ m trong xâu s và thay thế
vào đó xâu s1
Reverse(s): trả về xâu đảo ngược của xâu
s
29
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 30
MỘT SỐ HÀM THÔNG DỤNG
Hàm thời gian:
Getdate(): trả về ngày tháng năm của hệ thống
DatePart(tham số datepart,date): trả về giá trị nguyên là thành phần của giá trị date
Các tham số của datepart:
qq,q :Quarter
yy, yyyy: Year
mm, m:Month
dy,y :Dayofyear
dd,d :Day
30
wk, ww :Week
mi,n :Minute
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 31
MỘT SỐ HÀM THÔNG DỤNG
Hàm thời gian (TT):
DateDiff(datepart, date1,date2): trả về khoảng
ngày, tháng, năm, giữa 2 ngày date1 và
date2
Dateadd(datepart,n,date): thêm một số n
datepart vào date
Datename()
DAY(D); MONTH(D); YEAR(D)
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 32
MỘT SỐ HÀM THÔNG DỤNG
Hàm chuyển đổi kiểu dữ liệu – Convert(datatype[(size) ], exp [,style]) – Hàm CAST()
32
Trang 9Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 33
MỘT SỐ HÀM THÔNG DỤNG
Các hàm nhóm dữ liệu:
•Count ([All | Distinct] Biểu thức):
Hàm đếm số lượng các bộ thỏa mãn
điều kiện
•Max (Biểu thức), Min (Biểu thức ):
Hàm tính giá trị lớn nhất, nhỏ nhất của
tập giá trị được tính theo biểu thức
33
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 34
MỘT SỐ HÀM THÔNG DỤNG
Sum ([All | Distinct] Biểu thức kiểu số):
Hàm tính tổng của tập giá trị được tính theo biểu thức
Avg ([All | Distinct] Biểu thức kiểu số): Hàm tính giá trị trung bình của tập giá trị thuộc tính kiểu số:
34
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 35
MỘT SỐ HÀM THÔNG DỤNG
Ví dụ 13: Cho biết lương trung bình của
phòng có mã KDA?
Select Avg(Luong) as TBluong
From NHANVIEN
Where Maphong= ’KDA’
35
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 36
MỘT SỐ HÀM THÔNG DỤNG
Ví dụ 14: Cho biết tổng số nhân viên và trung bình lương của cơ quan?
Select count(*) as TongNv, Avg(Luong) as
TBluong
From NHANVIEN
Trang 10Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 37
Mệnh đề Compute
Dùng để tính thống kê (trung bình, tổng, ) theo cột
Ví dụ: Liệt kê thông tin Productname, CategoryName,
Unitprice các product Dùng mệnh đề COMPUTE để
thống kê đơn giá trung bình của sản phẩm
Thực hiện
SelectProductName,CategoryName,UnitPrice
FromCategories c,Products p
wherec.CategoryID= p.CategoryID
order by CategoryName
Computeavg(UnitPrice)
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 38
Mệnh đề Compute by
Dùng để tính thống kê (trung bình, tổng, ) theo từng nhóm (kết hợp thêm mệnh đề order by)
Ví dụ: Liệt kê thông tin Productname, CategoryName, Unitprice các product Dùng mệnh đề COMPUTE để liệt kê đơn giá trung bình theo từng CategoryName
Thực hiện
SelectProductName,CategoryName,UnitPrice
FromCategories c,Products p
wherec.CategoryID= p.CategoryID
order by CategoryName
Computeavg(UnitPrice) by CategoryName
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 39
Câu lệnh UPDATE SET
Cú pháp
UPDATE <table_name>
SET <col_name1>=<exp1>
[, <col_name2> = <exp2>, ]
[WHERE <codition>(s)]
Ý nghĩa:
Cập nhật thông tin trên các cột col_name1,
col_name2, cho các bản ghi thỏa mãn điều
kiện sau Where
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 40
Câu lệnh UPDATE SET
Ví dụ:
update SinhVien set MaLop=‘DHTH5TLT' where MaSV=‘A012'
Ví dụ 2: Tăng giá sản phẩm có tên Heneiken lên 1%
Trang 11Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 41
Câu lệnh DELETE
Cú pháp:
DELETE FROM table name
[WHERE condition]
Ý nghĩa:
Xóa các bản ghi thỏa mãn điều kiện WHERE
Xóa toàn bộ dữ liệu trong bảng
TRUNCATE TABLE <tên bảng>
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 42
Câu lệnh DELETE
Ví dụ:
Delete from Sinhvien Where Malop=‘CDTH14A’
Bài tập:
Xóa những thông tin của những hóa đơn được lập bởi nhân viên có mã ‘NV01’
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 43
CSDL - Northwind
Customers (CustomerID, CompanyName, Address, City,
) - thông tin khách hàng
Categories (CategoryID, CategoryName, )- Thông tin
DM sản phẩm
Products (ProductID, ProductName, UnitPrice,
)-Thông tin sản phẩm
Employees (EmployeeID, LastName, FirstName, City, )
- Thông tin nhân viên
Orders (OrderID, Orderdate, CustID, EmpID) - Thông
tin hóa đơn được lập
Order Details (OrderID, ProID, Price, Quanlity)- Thông
tin chi tiết của hóa đơn
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 44
Bài tập
1/ Lọc các hóa đơn (Orders) được lập cho khách hàng (Customers) có mã 'ALFKI'
2/ Lấy thông tin của các sản phẩm (Products) của loại mặt hàng 'Seafood' (Category)
3/ Viết câu lệnh để xem thông tin khách hàng tại thành phố 'London'
4/ Viết câu lệnh để hiển thị giá (UnitPrice) của mặt hàng 'Chai' khi tăng thêm 10%
Trang 12Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 45
Bài tập
5/ Lọc thông tin của các sản phẩm có đơn giá lớn
hơn 15 và bắt đầu bởi ký tự 'C'
6/ Lọc thông tin của các sản phẩm có đơn giá từ 15
-20 và có chứa ký tự 'C'
7/ Hiển thị tên của các nhân viên có năm sinh
>=1960
8/ Tính tuổi trung bình, nhỏ nhất, lớn nhất của các
nhân viên
9/ Tăng đơn giá của sản phẩm có tên 'Konbu' lên 3%
10/ Giảm giá tất cả sản phẩm của loại 'Seafood'
xuống 5%
SQL NGÔN NGỮ THAO TÁC
DỮ LIỆU (tiếp)
Lecturer: Nguyễn Đức Cương - FIT Email: cuongnguyenduc@gmail.com Website: http://www.nguyenduccuong.com
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 47
Nội dung
Kết nối các bảng
Truy vấn con
Sử dụng lượng từ trong truy vấn
Truy vấn hợp (UNION)
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 48
Kết nối giữa các bảng
Chỉ tồn tại trong thời gian truy vấn
Không thay đổi dữ liệu
Sử dụng bí danh để dễ đọc
Các loại liên kết:
INNER JOIN
OUTERJOIN
CROSSJOIN
Trang 13Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 49
Kết nối giữa các bảng - INNER
INNER JOIN: Trả về những dòng mà giá trị
trong cột liên kết giữa hai bảng là bằng nhau
Cú pháp:
SELECT col_name(s)
FROM table1
INNER JOIN table2
ON table1.col_name=table2.col_name
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 50
Kết nối giữa các bảng - INNER
Ví dụ: Lọc ra thông tin Tên khách hàng, Mã hóa đơn và ngày lập hóa đơn của các khách hàng
Câu lệnh SELECT KhachHang.MaKH, TenKH, MaHD, NgayHD FROM KhachHang INNER JOIN HoaDon
ON Khachhang.MaKH = HoaDon.MaHD
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 51
Kết nối giữa các bảng - INNER
Ví dụ 1: Đưa ra danh sách họ tên các nhân viên
làm việc ở phòng kinh doanh hoặc phòng kỹ thuật?
Selecthoten
FromNHANVIEN NV
Inner join PHONG P
On NV.MAPHONG = P.MAPHONG
WhereTenphong in ( “Kinh doanh”, “Kỹ thuật”)
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 52
Kết nối giữa các bảng - OUTTER
OUTER JOIN:
LEFT OUTER JOIN: trả về kết quả là những dòng trong bảng bên trái (Bảng cha), ngay cả những dòng không so trùng với bảng bên phải (Bảng con)
RIGHT OUTER JOIN: trả về tất cả những dòng của bảng bên phải (bảng con), ngay
cả những dòng không so trùng với bảng bên trái (bảng cha)
Trang 14Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 53
Kết nối giữa các bảng - OUTTER
Cú pháp:
SELECT colname(s)
FROM table1 {LEFT OUTER JOIN |
RIGHT OUTER JOIN} table2
ON table1.colname=table2.colname
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 54
Kết nối giữa các bảng - OUTER
Ví dụ: Hiển thị các tác giả không xét đến nơi tác giả sống có tồn tại nhà xuất bản nào không
Câu lệnh Select a.au_fname, a.au_lname, p.pub_name FROM authors a LEFT OUTER JOIN publishers p ON a.city = p.city
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 55
Kết nối giữa các bảng - OUTER
Ví dụ: Hiển thị tất cả các nhà xuất bản bất kể thành
phố nhà xuất bản có cùng thành phố với tác giả
không?
Câu lệnh
Select a.au_fname, a.au_lname, p.pub_name
FROM authors a RIGHT OUTER JOIN publishers p ON
a.city = p.city
Nguyễn Đức Cương – cuongnguyenduc@gmail.com Slide 56
Kết nối giữa các bảng - CROSS JOIN
CROSS JOIN: trả về tất cả các record mà mỗi dòng trong bảng thứ nhất kết hợp với tất cả các dòng trong bảng thứ hai, CROSS JOIN tương đương với tích descartes của các record trong hai bảng tham gia
Cú pháp:
SELECT column_list FROM table1 CROSS JOIN table2