Bài giảng Lập trình viên mã nguồn mở (Module 3) - Bài 3: Truy vấn trong CSDL MySQL - truy vấn con và cập nhật dữ liệu trình bày các nội dung chính sau: Truy vấn con trả về một giá trị, truy vấn con trả về danh sách các giá trị, giá trị trực tiếp, lệnh xóa dữ liệu. Mời các bạn cùng tham khảo để nắm nội dung chi tiết.
Trang 1Go Screen Capture Trường ĐH Khoa Học Tự Nhiên Tp Hồ Chí Minh
TRUNG TÂM TIN HỌC
LTV MA NGUON MO’ PHP
Module 3 — Bai 3: Truy van trong CSDL MySQL
Nganh LT & CSDL
www.t3h.vn
Cong GUC
MediaFire
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 42
Trang 2
LTV Mã nguồn mở PHP - Module 3
Truy vấn con
Khái niệm
e Truy vấn con là một câu lệnh truy vấn SELECT
được lồng vào các câu lệnh truy vấn khác nhằm
thực hiện các truy vấn tính toán phức tạp
e Lưu ý: khi dùng truy vấn con cần tuân theo các quy
tac
= Truy vấn con phải được đặt trong cặp ngoặc đơn ()
= Truy vấn con chỉ có thể tham chiếu đến 1 cột hoặc 1 biểu
thức
e Kết quả trả về của truy vấn con có thê là một giá trị
hoặc một danh sách các giá trị
LTV Mã nguồn mở PHP - Module 3
3
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 43
Cong GUC
MediaFire
Trang 3
Truy vấn con pc
UTruy van con trả vê một giá trị
eLà truy vấn mà kết quả trả về của nó là một
giá trị duy nhất eVí dụ: hãy cho biết sản phẩm sữa nào có
trọng lượng lớn nhất
= Tim trong lượng lớn nhất
SELECT MAX(Trong_ luong) MAX(Trong_luong)
LTV Ma nguồn mở PHP - Module 3 4
Đến,
Lọc ra các sữa có trọng lượng bằng với trọng lượng lớn nhất này
SELECT Ma sua, Ten_ sua,
Trong_ luong
FROM sua TNNG Ey —— Trøng lưông
WHERE Trong_luong = (SELECT = Conxinex 900
MAX(Trong_luong) FROM sua) apes aa
_Ml0004 EnfaPro 900
| MJ0005 EnfaPro A+ 900 VHM006 Dielac Alpha 900
VNM012 Dielac Mamma 900
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 44
Trang 4Truy vấn con
Truy vấn con trả về danh sách các giá
trị
eLà truy vấn con mà kết quả trả về là tập hợp
các giá trị
e Toán tử IN hoặc NOT IN thường được dùng
trong trường hợp này vì nó so sánh một
phân tử có thuộc (hay không thuộc) tập hợp
các giá trị hay không
| |
Truy van con
e Ví dụ: Hãy cho biết các khách hàng nào chưa mua
hàng (chưa có thông tin khách hàng trong bảng hóa đơn)
= Tim các khách hàng đã mua hàng
" Lọc ra những khách hàng chưa mua hàng
SELECT Ma khach_ hang | | SELECT Ma_khach_ hang
FROM hoa_ don FROM khach_hang
Ma khach hang | WHERE Ma_khach_ hang NOT IN kh001 -
(SELECT Ma_khach_hang Ma khach hang
LTV Mã nguồn mở PHP - Module 3 ae 7
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 45
Cong GUC
MediaFire
Trang 5Truy vấn con
Làm việc với toán tử so sánh
e Các toán tử so sánh thường được sử dụng
trong truy vẫn con có thê là: >, >=, <, <=, =,
<>
eLưu ý: Thông thường các toán tử so sánh
được sử dụng khi dùng truy vấn con trả về một giá trị
| |
Truy van con
O Lam viéc với toán tử truy vấn con
e Các toán tử truy vấn con thường hay sử dụng là:
ANY, SOME, ALL, IN, NOT IN, EXISTS, NOT EXISTS
e Lưu ý: thông thường các toán tử truy vẫn con được
sử dụng khi dùng truy vấn con trả về tập hợp các giá trị
e Quy tắc:
IN ® =ANY NOT IN & <>ALL
| |
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 46
Cong GUC
MediaFire
Trang 6
Truy vấn con pc
e Ví dụ: Viết lại câu lệnh truy vấn cho biết các
khách hàng chưa mua hàng
SELECT Ma_khach_ hang "Ma | khach_hang |
FROM khach_ hang _kh004 |
WHERE Ma_khach_hang <>ALL _kh005 |
(SELECT Ma_khach_hang _ kh006 |
FROM hoa_ don) _kh008_ lÌ
LTV Mã nguồn mở PHP - Module 3 10
ULam viéc voi toan tử truy vân con
eSử dụng từ khóa EXISTS hoặc NOT
EXISTS dé kiểm tra tính tồn tại (hay không
tồn tại) của dữ liệu
eSau EXISTS hoac NOT EXISTS la cau lệnh
truy van con ma két qua tra vé la mét tap hợp trống hoặc có phần tử
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 47
Cong GUC
MediaFire
Trang 7
sess°
eVí dụ: Tìm những khách hàng chưa mua
hang theo cach dung NOT EXISTS
SELECT Ma_khach_hang _Ma khach_hang
WHERE NOT EXISTS (SELECT * - kh005
WHERE khach_hang.Ma_khach_hang = eos
hoa_don.Ma_khach_hang) L kh008
đc:
ose
ee
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 48
Cong GIIC
MediaFire
Trang 8Insert
O Cau lénh INSERT INTO được dùng đề thêm
mới một hay nhiều dòng dữ liệu vào bên
trong một bảng
¬ Có thê thêm vào bảng:
e Giá trị trực tiếp
e Dữ liệu lấy từ các bảng khác
(GV demo cách thêm dữ liệu bằng GD đồ học cho HV)
If
Insert
ñ Giá trị trực tiếp
e Cú pháp:
INSERT INTO Tén_bang [(Ds cac cét trong bang)]
VALUES (Danh_sach_cac_gia_tri)
e Ví dụ: Thêm mới một khách hàng có các thông tin
sau vào bảng khach_ hang:
» Mã khách hàng: kh00Q7, Họ tên: Phan Nam, Phái:
0 (nam), Địa chỉ: 12A — Pasteur — Q.1 — TP
HCM, Điện thoại: 8497625, Email:
phannam@yahoo.com
3Ig
15
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 49
Cong GIIC
MediaFire
Trang 9Insert
e\V/i du
INSERT INTO khach_hang(Ma_khach_hang,
Ten_khach_hang, Phai, Dia_chi, Dien_thoai, Email)
VALUES(“kh001”, “Phan Nam”, 0, “12A — Pasteur — Q.1 — TP
HCM”, “8497625”, “phannam@yahoo.com”)
INSERT INTO khach_hang
VALUES(“kh001”, “Phan Nam”, 0, “12A — Pasteur — Q.1 — TP
HCM”, “8497625”, “phannam@yahoo.com”)
LTV Mã nguồn mở PHP - Module 3 16
Insert
Q Lay dir liéu ttr cac bảng khác
e Bằng cách kết hợp giữa INSERT và SELECT
e Cú pháp:
INSERT INTO Tén_bang
[(Danh sách các cột cần thêm dữ liệu)]
SELECT Danh_sách các cột lấy dữ liệu FROM Tên_ bảng_ nguồn
WHERE Điều kiện lọc dữ liệu
e Danh sách các cột cần thêm dữ: liệu và
Danh sách các cột_ lấy dữ: liệu phải tương ứng nhau
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 50
Cong GUC MediaFire
Trang 10
f LTV Mã nguồn mở PHP - Module 3
9229
eVí dụ: Thêm vào bảng ct_hoadon_07_2013
(bảng chưa có dữ liệu) các chỉ tiết hóa đơn
bán sữa của tháng 07/2013
INSERT INTO ct_hoadon_07_2013
SELECT ct_hoadon.So_hoa_don, Ma_sua, So_luong,
Don_gia
FROM ct_hoadon INNER JOIN hoa_don ON
ct_hoadon.So_hoa_don = hoa_don.So_hoa_don
WHERE month(Ngay_HD) = 7 AND year(Ngay_hd)=2013
g32:
33°
ee
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 51
Cong GUC
MediaFire
Trang 11Update
HGiá trị trực tiếp
e Dùng câu lệnh UPDATTE đề cập nhật giá trị
trực tiếp hay một biểu thức có giá trị trả về cho mẫu tin trong bảng
eCu pháp:
UPDATE Tên_ bảng
SET Tên_ cột = Giá trị (hoặc biểu thức) [ ]
WHERE Điều_ kiện cập nhật
(GV demo cách cập nhật dữ liệu bằng GD đồ học cho HV)
Update
e Ví dụ: Cập nhật lại đơn giá cho sữa có tên là
‘Abbott Grow’ voi đơn giá mới là 95000vnđ
_ Đon gia
87000
Ỉ Ten | sua
Đơn giá cũ
UPDATE sua
SET Don_gia = 95000
WHERE Ten_sua = “Abbott Grow"
3Ig
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 52
Cong GIIC
x MediaFire
Trang 12
e\/i du: cap nhat lai đơn giá cho các sữa có
mã hãng sữa là “AB” với đơn giá mới = đơn
giá cũ + 5% UPDATE sua
len sua Øon gia Ma hạngsus | SET Don_gia = Don_ gia + Don_ gia
Abbott Grow 67000 AB WHERE Ma_hang_sua = "AB"
Abbott Grow School 87000 AB
Abbott Pedia Sue 146000 AB Ten sua Don gia Ma hang sua
9mlscNeoOme | 145008 AB Gamn Advance 112350 AB
Đơn giá cũ oo —— — Bội
Đơn giá mới Abbott Grow School $1350 AB
Abbott Pedia Sure 15300 AB
Similac Neo Sure 152250 AB
LTV Mã nguồn mở PHP - Module 3 22
OLay dir liéu tir các bảng khác
eKét hop gitva UPDATE va SELECT dé lay
dữ liệu từ bảng khác cập nhật vào bảng eCu pháp:
UPDATE Tén_bang
SET Tén_cét = (SELECT FROM WHERE .)
WHERE Điều kiện cập nhật
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 53
Cong GUC
MediaFire
Trang 13Update
bảng sữa
eVí dụ: Cột đơn giá trong bảng c†_hoadon
chưa có giá trị, hãy cập nhật đơn giá cho cột
này với giá trị được lấy từ cột đơn giá của
Ma hoa đơn Ma sua So lượng Don gia
0001 VI84012 4 103500
UPDATE ct_hoadon D902 DL0001 2 41000
SET Don_ gia = (SELECT Don_ gia D001 DL0991 t2 41000
: 0003 AB0091 8 107000
FROM sua WHERE ct_hoadon.Ma_sua | a "
= sua.Ma_sua) D604 vraaor2 8 103800
D003 DL0006 13 — 11900
Dô04 AB0001 l§ 107000
D002 1430001 5 196000
0001 NTFOG2 8 45000
D004 AB0002 25 107000
eee eeoeo
eeeee
eeoee see®
eee
ee
LTV Ma nguon mở PHP - Module 3 25
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 54
Cong GUC
MediaFire
Trang 14Delete
¬ Lệnh xóa dữ liệu đơn giản
e Cú pháp:
DELETE FROM Tén_bang WHERE Diéu_kién_x6a
e Vi du: Hay xoa khach hang co ma khach hang la
“kh007” trong bảng khách hang
DELETE FROM khach_hang
WHERE Ma_khach_hang = ‘kh007’
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 55
LTV Mã nguồn mở PHP - Module 3 26
Lệnh xóa dữ liệu có điều kiện được
lầy từ các bảng khác
e khi việc xóa phức tạp hơn vì có liên quan
tới các quy tắc ràng buộc dữ liệu —› kết hợp câu lénh DELETE voi SELECT
eCu phap:
DELETE FROM Tén_bang WHERE Tén_cét toan_tuw (SELECT FROM
WHERE
Trang 15
đi
eVí dụ: xóa các hãng sữa không có sản
phẩm sữa nào
DELETE FROM hang_ sua
WHERE Ma_hang_sua NOT IN (SELECT DISTINCT
Ma_hang_sua FROM sua)
$333
eeee
cece eee
ee
Bản quyền © Trung Tâm Tin Học - Đại Học Khoa Học Tự Nhiên | Xuất bản bởi ®Công GMC Trang 56
Cong GMC
MediaFire