Tải bản đầy đủ (.ppt) (40 trang)

Bài giảng Cơ sở dữ liệu: Chương 3 - Nguyễn Việt Cường (p1)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (195.21 KB, 40 trang )

Chương 3
SQL
Structured Query Language
Phần 1


Giớ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


Giới thiệu



SQL bao gồm các phần :






DDL (Data Definition Language)
 Định nghĩa Database
 Định nghĩa cấu trúc Bảng
 Định nghĩa ràng buộc tồn vẹn
 Định nghĩa khung nhìn
DML (Data Manipulation Language)
 Truy vấn dữ liệu
 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


Giới thiệu
 Trong

một số DBMS, SQL được mở rộng để
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


Ngôn ngữ thao tác dữ liệu - DML
 DML

bao gồm các lệnh : SELECT, INSERT,
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


Lệnh Select
 Cú

pháp :

SELECT [ DISTINCT | ALL] [ * | têncột [AS tên mới]
[,…]
FROM tênbảng [alias] [,…]
[WHERE điềukiện ]
[GROUP BY danhsáchcột ] [HAVING điềukiện ]
[ORDER BY danhsáchcột ]


(*) Các ví dụ trong chương này sử dụng CSDL Quản lý Bán hàng , xem slide
cuối


Câu truy vấn đơn giản
Câu lệnh Select… From…
Vd: Hiển thị Họ, tên , phái của các nhân viên
Select Honv, Tennv, Phai
From Nhanvien


Tương đương với phép chiếu trong ĐSQH
 Honv, Tennv, Phai (NHANVIEN)
Hiển thị tất cả các cột , bằng sử dụng *
Vd: Hiển thị danh sách các nhân viên
Select *
From Nhanvien



Câ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


Câu truy vấn đơn giản



Hiển thị các cột tính tốn (Calculated fields)



Sử dụng hàm trong cột tính tố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


Lệ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 tốn tử khác : Like, in, …


Lệ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



Lệnh Select - Mệnh đề Where


Sử dụng toán tử Like/ Not Like trong biểu thức so sánh
với chuỗi



Like khác với toán tử =

Sử dụng các ký tự thay thế %, _

Vd4: Hiển thị danh sách nhân viên có họ “Nguyễn”

Select *
From Nhanvien
Where 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


Lệ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'



Lệnh Select - Mệnh đề Order
By
 Sắp

xếp các bộ trong quan hệ kết quả theo
giá trị của một / một số cột
 Sử dụng ASC hay DESC để chỉ ra chiều sắp
xếp (mặc định là ASC)
 Vd
Select *
From Nhanvien
Order by Ngaysinh ASC, Tennv DESC


Lệ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
Select sum(soluong*dongia)
From Chitiethoadon
Vd: Hiển thị đơn giá lớn nhất, nhỏ nhất và trung bình của
các mặt hàng
Select Max(dongia) , Min(dongia), AVG(dongia)
From Sanpham



Lệ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 ?


Lệnh Select – mệnh đề Group by
Gom nhóm các dịng dữ liệu và tạo ra một dịng chung
cho mỗi nhóm
 Hiển thị các tổng phụ (subtotal)
Vd1: Hiển thị tổng trị giá của tất cả các hóa đơn
Select sum(soluong*dongia)
From Chitiethoadon
Vd2: 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




Lệnh Select – mệnh đề Group by




SP

SỐ
LƯNG

ĐƠN
GIÁ

10148

3

20.00

2.20

10148

4

30.00

16.50

10148


9

20.00

13.20

10150

2

22.00

44.00

10150

4

10.00

16.50

10156

8

20.00

68.75





TONGTGÙ

10148

803

10150

1133

10156

68.75

Select Mahd, sum(soluong*dongia)
From Chitiethoadon
Group By Mahd


Lệ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ê.
 Vd3:
Select Manv, LoaiHD, count(Mahd)
From Hoadon

Group by Manv, LoaiHD



Lệnh Select – mệnh đề Having
Đi sau mệnh đề Group by, được sử dụng để lọc các
nhóm
 Giống như mệnh đề Where : Chứa các biểu thức
điều kiện
Select Mahd, sum(soluong*dongia)
From Chitiethoadon
Group By Mahd
Having sum(soluong*dongia) > 1000



Truy 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


Truy vấn lồng - Subqueries
 Câu

subSelect có thể trả về một giá trị đơn,
hay một table
Vd1:
Select Masp, Tensp, Dongia
From Sanpham
Where Dongia > (Select Avg(Dongia) From
Sanpham)


Truy vấn lồng - Subqueries
 So

sánh với một tập hợp, sử dụng
 IN/NOT IN,
 >ALL,
 >ANY (hay SOME)
Xét lược đồ quan hệ:
Nhanvien(Manv, Honv, Tennv, Phai, Diachi,
Chucvu, Luong)



Truy 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
một nhân viên có chức vụ là ‘trưởng phịng’

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’)


Truy vấn lồng - Subqueries
Vd3: hiển thị những nhân viên có lương lớn hơn lương của tất cả
các nhân viên có chức vụ là ‘trưởng phịng’
Select Manv
From Nhanvien
Where 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 )



×