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

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

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 (201.06 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 toà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 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

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 toá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 <= 100 and dongia >= 50
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
MAÕ HÑ MAÕ SP SOÁ LÖÔÏNG ÑÔN GIAÙ
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

MAÕ HÑ 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 )

×