Bài giảng Cơ sở dữ liệu - Chương 3: SQL cung cấp cho người học các kiến thức cơ bản về Structured Query Language, câu truy vấn đơn giản, câu truy vấn đơn giản, lệnh Select - Mệnh đề Where, mệnh đề Order By, sử dụng các hàm thống kê, mệnh đề Group by,... Mời các bạn cùng tham khảo nội dung chi tiết.
Trang 1Chương 3
SQL
Structured Query Language
Phần 1
Trang 2Giới thiệu
SQL là ngôn ngữ CSDL Quan hệ chuẩn
Được sử dụng trong các DBMS thương mại
Được phát triển từ IBM (vào đầu 70s, Sequel)
Phiên bản chuẩn được ANSI công bố đầu tiên vào 1986
SQL là ngôn ngữ khai báo cấp cao
Người dùng chỉ ra kết quả cần đạt là gì
Tối ưu hóa và quyết định thi hành ntn là do DBMS
Trang 3 Các thao tác thêm, xóa , sửa dữ liệu
Kiểm soát các transaction
DCL (Data Control Language)
Phân quyền người dùng
Trang 4Giới thiệu
tăng khả năng lập trình thủ tục
T-SQL trong MS SQL Server cho phép
dùng cấu trúc điều khiển, biến cục bộ, cursor
Tạo các procedure, trigger
Trang 5Ngôn ngữ thao tác dữ liệu - DML
UPDATE, DELETE
Lệnh Select là lệnh thường dùng nhất
Dùng để truy vấn dữ liệu (query data)
Lấy và hiển thị dữ liệu từ một hay nhiều bảng
Trang 7Câu truy vấn đơn giản
Vd: Hiển thị Họ, tên , phái của các nhân viên
Select Honv, Tennv, Phai
Trang 8Câu truy vấn đơn giản
Sử dụng Distinct để loại bỏ các bộ trùng nhau Vd: Danh sách nơi sinh của các nhân viên
Select DISTINCT noisinh
From Nhanvien
Trang 9Câu truy vấn đơn giản
Hiển thị các cột tính toán (Calculated fields)
Sử dụng hàm trong cột tính toán
Các cột có thể đặt tên mới – alias
Vd1: hiển thị chi tiết hóa đơn gồm mahd, masp, soluong, dongia và thành tiền
Select mahd, masp, soluong,dongia, soluong*dongia AS thanhtien From chitiethoadon
Vd2: hiển thị họ tên, và năm sinh của nhân viên
Select Honv+Tennv as HT , year(ngaysinh) as NS
From Nhanvien
Trang 10Lệnh Select - Mệnh đề Where
Sử dụng để chọn một số bộ
Chứa các biểu thức logic, xác định các bộ sẽ
được chọn :
Các cột nằm trong bảng có trong mệnh đề From
Các toán tử so sánh, toán tử logic And, Or, Not, tóan
tử Between
Các toán tử khác : Like, in, …
Trang 11Lệnh Select - Mệnh đề Where
Vd1: Hiển thị các mặt hàng có đơn giá >100
Select Tensp , dongia
From Sanpham
Where dongia > 100
Vd2: Hiển thị các mặt hàng có đơn giá >100 hoặc đơn giá <50
Select Tensp , dongia
From Sanpham
Where dongia > 100 or dongia < 50
Vd3: Hiển thị các mặt hàng có đơn giá trong khoảng từ 50 đến 100
Select Tensp , dongia
From Sanpham
Where dongia between 50 and 100
Trang 12Where Honv like “Nguyễn%”
Vd5: hiển thị danh sách các nhân viên có địa chỉ ở đường Nguyễn Trãi
Trang 13Lệnh Select - Mệnh đề Where
Sử dụng IS NULL / IS NOT NULL để so sánh với giá trị NULL
Vd: Hiển thị danh sách các Nhân viên chưa biết số điện thoại
Select * From Nhanvien
Where dienthoai IS NULL
Vd: mệnh đề Where có thể chứa biểu thức cột
select Honv, Tennv
From Nhanvien
where left(Honv,1) like ‘N'
Trang 15Lệnh Select – sử dụng các hàm
thống kê
Còn gọi là Aggregate Functions
Hàm Count, Sum, Avg, Min, Max
Vd: hiển thị tổng trị giá tất cả các hóa đơn
Trang 16Lệnh Select – sử dụng các hàm
thống kê
Hàm count(tencot), count(*) và count(distinct)
Vd1: cho biết số lượng nhân viên
Select Count(Noisinh) From Nhanvien
Select Count(Distinct Noisinh) From Nhanvien Select Count(*) From Nhanvien
Vd2: Hiển thị tổng số hóa đơn , tổng trị giá các hóa đơn ?
Trang 17Vd2: Hiển thị tổng trị giá của từng hóa đơn
Select Mahd, maSp, sum(soluong*dongia) As TongTg
From Chitiethoadon
Group By Mahd
Trang 19Lệnh Select – mệnh đề Group by
Chú ý : các cột xuất hiện trong mệnh đề Select phải
có trong mệnh đề Group By, ngoại trừ các cột được tạo từ hàm thống kê
Trang 21Truy vấn lồng - Subqueries
Một câu lệnh select (inner) được nhúng vào
trong một câu lệnh select khác (outer)
Kết quả của lệnh inner select, hay subselect được
sử dụng trong lệnh outer select để xác định tập kết quả
Thường đặt trong mệnh đề Where, Having của lệnh outer select
Câu subselect cũng được sử dụng trong một số lệnh khác như INSERT, DELETE, UPDATE
Trang 24Truy vấn lồng - Subqueries
Vd2: hiển thị những nhân viên có lương lớn hơn lương của ít nhất
Select T.Manv, T.Chucvu
From Nhanvien As T, Nhanvien As S
Where T.Luong > S.Luong
And S.Chucvu like ‘trưởng phòng’
Dùng subQuery:
Select Manv
From Nhanvien
Where Luong >Any (Select Luong From Nhanvien
Where Chucvu like ‘trưởng phòng’)
Trang 25Where Luong >All (Select Luong From Nhanvien
Where Chucvu like ‘trưởng phòng’ )
Vd4: hiển thị những nhân viên có bán hàng trong tháng 5
Select Manv, Honv, Tennv
From Nhanvien
Where Manv IN (Select Manv From Hoadon
Where Month(NgaylapHD) = 5 )
Trang 26Truy vấn lồng - Subqueries
Kiểm tra kết quả của câu truy vấn con có rỗng
Where Exists (Select * From Hoadon
Where Manv = t.Manv)
Trang 27Lệnh Select – truy vấn từ nhiều bảng
Tương tự phép kết trong ĐSQH
Nên tạo bí danh (alias) cho tên bảng để tránh
gõ tên dài và làm truy vấn dễ đọc hơn
Nếu số bảng kết nối nhiều hơn 2, thì kết nối 2 bảng trước, sau đó kết nối nhóm này với
bảng thứ ba…
Hai loại kết: inner join, outer join
Trang 28Lệnh Select – truy vấn từ nhiều bảng
Vd1: Hiển thị Mahd, TenKH, NgaylapHD của hóa đơn 10148
Select Mahd, Tenkh, NgaylapHD
From Hoadon As H INNER JOIN Khachhang As K
ON H.Makh = K.MakhWhere Mahd = ‘10148’
Hoặc :
Select Mahd, Tenkh, NgaylapHD
From Hoadon As H , Khachhang As K
Where H.Makh = K.Makh and Mahd = ‘10148’
Trang 29Lệnh Select – truy vấn từ nhiều bảng
Vd2: Hiển thị tên khách hàng mua hàng trong tháng 2
Select K.Makh, Tenkh
From Khachhang As K INNER JOIN Hoadon As H
ON K.Makh = H.Makh Where Month(ngaylapHD) =2
Vd3: Hiển thị tên khách hàng chưa từng mua hàng
Select K.Makh, Tenkh
From Khachhang As K LEFT JOIN Hoadon As H
ON K.Makh = H.Makh Where Mahd IS NULL
Trang 30Lệnh Select – truy vấn từ nhiều bảng
Vd4: Hiển thị tên nhân viên và chi tiết các
hóa đơn do nhân viên đã lập
Select Tennv, Mahd, Masp, Soluong, Dongia
From (Nhanvien As N INNER JOIN Hoadon As H ON N.Manv= H.Manv ) INNER JOIN Chitiethoadon As C
ON H.Mahd=C.Mahd
Trang 31Lệnh Select – toán tử Union
Sử dụng toán tử Union để hợp tập dữ liệu của các câu lệnh Select vào quan hệ kết quả
Vd: hiển thị các thành phố có trong cả hai bảng
Khachhang và Nhanvien
Select Thanhpho From Khachhang
UNION
Select Thanhpho From Nhanvien
Sử dụng toán tử Except (phép hiệu), Intersect (phép giao) : trong SQLServer2005
Trang 32Lệnh Insert
Nhập dữ liệu vào bảng
Cú pháp 1 :
INSERT INTO tênbảng [dscột]
VALUES (danhsách giá trị)
Thứ tự giá trị trong mệnh đề VALUES trùng với thứ tự các thuộc tính được nêu trong lệnh
CREATE TABLE
Dùng [dscột] để chỉ rõ các cột được nhập liệu
Trang 33Lệnh Insert
Insert into Sanpham
Values(12, ‘Sữa bột’, ‘Kg’, 200, NULL)
Insert into
Sanpham(Tensp, Donvitinh, Dongia) Values(‘Mì ăn liền’, ‘Thùng’, 100)
Trang 34Lệnh Insert
Cú pháp 2:
Insert Into tênbảng [dscột]
Select … From …Where…
Vd: giả sử có bảng HOADONLUU( MAHD,LOAIHD,
MAKH, MANV, NGAYLAPHD, NGAYGNHANG, DIENGIAI )
Insert Into HoadonLuu
Select * From Hoadon
Where Year(Ngaylaphd) <2009
Trang 36Lệnh Update
Vd1: tăng giá của tất cả cácmặt hàng lên 10%
Update Sanpham
Set Dongia = Dongia*1.1
Vd2: nhân viên có mã 101 được bổ nhiệm làm ‘quản lý’
và lương mới là 310
Update Nhanvien
Set Chucvu = ‘quảnlý’ , Luong = 310
Where Manv = 101
Trang 37 Vd1: Xóa nhân viên có mã là 101
Delete From Nhanvien
Where Manv = ‘101’
Trang 38Lệnh Delete
Vd2:
Delete From Nhanvien
Vd3:
Delete From Nhanvien
Where Manv NOT IN
(Select Manv From Hoadon
Where Year(Ngaylaphd)=2009 )
Trang 39Cascade Update & Cascade
Delete
Các lệnh Insert, Update, Delete sẽ bị lỗi nếu
vi phạm các Ràng buộc toàn vẹn đã cài đặt
Bị từ chối thực hiện
Lệnh Update, Delete có thể dẫn đến sửa, xóa những bộ tham chiếu đến (cascade update, cascade delete)
Khi thực hiện thao tác trên bảng cha
Trang 40DB quản lý bán hàng