Bài giảng Hệ quản trị Cơ sở dữ liệu SQL Server - Bài 4: Các phát biểu T-SQL dạng lựa chọn dữ liệu
Sử dụng các phép so sánh thông thường: =,<,>,<>,.
trong truy vấn con để trả về một danh sách các giá trị
bắt buộc phải kết hợp các từ khóa Any, All ở phía
trước câu truy vấn con.
* Lưu ý:
In tương đương với Any
Not in tương đương với <>All
Ví dụ 50: Danh sách các nhà cung cấp chưa bao giờ đặt
hàng:
Select TenNCC,DienThoai from NHACC
where MaNCC not in
(select distinct MaNCC from DONDH)
10 trang |
Chia sẻ: huongthu9 | Lượt xem: 485 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng Hệ quản trị Cơ sở dữ liệu SQL Server - Bài 4: Các phát biểu T-SQL dạng lựa chọn dữ liệu, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
12/8/2018 Microsoft SQL Server 2005 1
Bài 4: Các phát biểu T-SQL dạng
lựa chọn dữ liệu
2/8/2018 Microsoft SQL Server 2005 2
Phát biểu Select dạng đơn giản
Chọn tất cả các cột từ một bảng dữ liệu
Select * from Tên_bảng
Ví dụ 21:
Select * from VATTU
Chọn các cột xác định từ một bảng:
Select Danh_sách_các_cột
From Tên_bảng
Ví dụ 22:
Select MaVTu,TenVTu,PhanTram
From VATTU
2/8/2018 Microsoft SQL Server 2005 3
Phát biểu Select From dạng đơn giản
Đặt tên hiệu cho cột trong mệnh đề select:
Cú pháp: Tên cột [as] Bí_danh
Ví dụ 23: Select MaVTu as Ma,TenVTu as Tenvattu,PhanTram
From VATTU Tên cột
Bí
danh
2/8/2018 Microsoft SQL Server 2005 4
Phát biểu Select dạng đơn giản
Tạo cột mới từ các biểu thức tính toán:
Cú pháp: Biểu_thức [as] Tên_cột_mới
Ví dụ 24: Select STT,rtrim(Hodem)+' '+Rtrim(Ten) as Hoten, Diem
From Diem
Biểu thức
22/8/2018 Microsoft SQL Server 2005 5
Phát biểu Select dạng đơn giản
Ví dụ 25: Truy vấn hiển thị dữ liệu bảng CTPNHAP
có bổ sung cột Thanhtien (tính = số lượng nhập* đơn
giá nhập)
2/8/2018 Microsoft SQL Server 2005 6
Từ khóa Distinct
Cho phép loại bỏ những bản ghi trùng lặp (được tính
trên những cột dữ liệu khai báo trong phát biểu select)
Ví dụ 26:
Các cặp
MaVTu
trùng nhau
Truy vấn chọn các MaVTu
không trùng nhau
2/8/2018 Microsoft SQL Server 2005 7
Mệnh đề Order By
Cho phép sắp xếp dữ liệu kết quả theo chiều
tăng/giảm của cột/biểu thức:
Select Danh_sách_các_cột
From Tên_bảng
Order by Danh_sách_tên_cột/Biểu thức [ASC|DESC]
Ví dụ 27:
Select *
From CTPNHAP
Order by SoPn,MaVTu
Kết quả
2/8/2018 Microsoft SQL Server 2005 8
Từ khóa Top
Cú pháp:
Select Top n [Percent] [With ties]
From Tên_bảng [Order by ...]
Trong đó:
- Nếu n không đi kèm từ khóa Percent sẽ cho phép
chọn ra n bản ghi đầu tiên
- Nếu n có kèm từ khóa Percent cho phép lọc ra n %
các bản ghi đầu tiên
- Lựa chọn With ties cho phép trả về cả các bản ghi
cùng giá trị với bản ghi cuối cùng tìm thấy theo
trường sắp xếp (bắt buộc phải đi kèm với Order by)
32/8/2018 Microsoft SQL Server 2005 9
Từ khóa Top
Ví dụ 28: Lọc ra 3 bản ghi đầu tiên trong bảng
CTPNHAP (các trường hiển thị gồm MaVTu,
SlNhap, DgNhap):
Select Top 3 MaVTu, SlNhap, DgNhap
from CTPNHAP
Ví dụ 29: Lọc ra 3 % bản ghi đầu tiên trong bảng
CTPNHAP:
Select Top 3 Percent MaVTu, SlNhap, DgNhap
from CTPNHAP
2/8/2018 Microsoft SQL Server 2005 10
Từ khóa Top
Ví dụ 30: Lọc ra 2 bản ghi trong bảng CTPNHAP với
số lượng nhập nhỏ nhất
Trường hợp không có with ties Trường hợp có with ties
2/8/2018 Microsoft SQL Server 2005 11
Sao chép dữ liệu sang bảng dữ liệu mới
với mệnh đề Into
Cú pháp:
Select Danh_sách_các_cột
Into Tên_bảng_mới
From Tên_bảng_dl
* Lưu ý: Bảng mới có thể là:
- Bảng dữ liệu mới
- Bảng tạm cục bộ (thêm ký hiệu # trước tên
bảng)
- Bảng tạm toàn cục (thêm cặp ký hiệu ## trước
tên bảng)
2/8/2018 Microsoft SQL Server 2005 12
Sao chép dữ liệu sang bảng dữ liệu mới
với mệnh đề Into
Ví dụ 31: Sao chép dữ liệu từ bảng CTPNHAP sang
bảng CTPNHAP_tam, có bổ sung cột ThanhTien
(tính = số lượng nhập * đơn giá nhập)
Select *, SlNhap*DgNhap as ThanhTien
Into #CTPNHAP_tam
From CTPNHAP
42/8/2018 Microsoft SQL Server 2005 13
Lọc dữ liệu với mệnh đề Where
Cú pháp:
Where (điều_kiện_lọc)
Trong đó: điều_kiện_lọc là một biểu thức logic thường
được xây dựng từ các phép so sánh: , >=, ,
!= và các toán tử like, and, or, not, between and, is null,
is not null, in
Ví dụ 32: Lọc các bản ghi từ bảng CTPNHAP mà mã
vật tư có chứa xâu ký tự ‘DD’
Select *
From CTPNHAP
where MaVTu like '%DD%'
2/8/2018 Microsoft SQL Server 2005 14
Phát biểu Select với mệnh đề Group By
Thường dùng khi cần tính toán các giá trị theo từng
nhóm dữ liệu
Cú pháp:
Group by Danh_sách_tên_trường
Lưu ý: Những trường nằm sau Group by được dùng làm
tiêu chí nhóm dữ liệu, những trường còn lại sau mệnh đề
Select mà không tham gia vào Group by thì phải sử dụng
các hàm thống kê để tính giá trị, ví dụ: max, min, sum,
avg, count,
2/8/2018 Microsoft SQL Server 2005 15
Phát biểu Select với mệnh đề Group By
Ví dụ 33: Thống kê giá trị cho từng phiếu nhập (bổ sung
cột ThanhTien)
2/8/2018 Microsoft SQL Server 2005 16
Phát biểu Select với mệnh đề Having
Cho phép lọc lại dữ liệu sau khi sử dụng mệnh đề Group by để
nhóm dữ liệu
Cú pháp: Having điều_kiện_lọc_dữ_liệu
Ví dụ 34: Lọc lại dữ liệu ở ví dụ 33 với điều kiện Sopn'N001'
52/8/2018 Microsoft SQL Server 2005 17
Phát biểu Select với mệnh đề Having
Lưu ý: Trường hợp điều kiện lọc liên quan đến cột mới tạo,
cần viết lại biểu thức tạo cột chứ không sử dụng tên cột mới
Ví dụ 35: Sửa điều kiện lọc ở ví dụ 34 thành
ThanhTien>60000000
Không sử dụng tên cột
ThanhTien ở đây
2/8/2018 Microsoft SQL Server 2005 18
Phát biểu Select với mệnh đề Compute
Thống kê dữ liệu ở cuối kết quả truy vấn
Cú pháp: Compute count/max/min/sum/avg(Tên_cột)
Ví dụ 36: Tổng Số lượng nhập, Đơn giá nhập cho bảng CTPNHAP
Kết quả
thống kê
2/8/2018 Microsoft SQL Server 2005 19
Phát biểu Select với mệnh đề Compute by
Thống kê dữ liệu theo từng nhóm giá trị của trường
thống kê nằm sau By
Cú pháp:
Order By Tên_cột
Compute count/max/min/sum/avg(Tên_cột)
By Tên_cột
Lưu ý: Tên_cột nhóm dữ liệu đứng sau Order By chính
là Tên_cột đứng sau By cuối cùng và không được
xuất hiện trong danh sách Tên_cột đứng sau Compute
2/8/2018 Microsoft SQL Server 2005 20
Phát biểu Select với mệnh đề Compute by
Ví dụ 37: Thống kê tổng SlNhap, tổng DgNhap theo từng Sopn
62/8/2018 Microsoft SQL Server 2005 21
Phát biểu Select với mệnh đề Join
Liên kết 2/nhiều bảng có quan hệ để lấy ra dữ liệu chung
Cú pháp: (trường hợp liên kết 2 bảng)
Select Danh_sách_cột
From Tên_bảng
Inner {left/right/full [outer] }
Join Tên_bảng_quan_hệ
On Điều_kiện_quan_hệ
Trong đó:
Inner join: dữ liệu bắt buộc phải xuất hiện ở cả 2 bảng
Left/right/full: dữ liệu bắt buộc phải xuất hiện bên bảng
thuộc nhánh trái/nhánh phải/hoặc nhánh trái hoặc nhánh
phải
* Lưu ý: Liên kết Full join chỉ sử dụng khi trong CSDL, 2
bảng không có mối liên kết nào với nhau
2/8/2018 Microsoft SQL Server 2005 22
Phát biểu Select với mệnh đề Join
Ví dụ 38: Thống kê các Nhà cung cấp đã từng được
đặt hàng, dữ liệu hiển thị gồm: Tên nhà cung cấp, số
đơn hàng, ngày đặt hàng
2/8/2018 Microsoft SQL Server 2005 23
Phát biểu Select với mệnh đề Join
Ví dụ 39: Thống kê các nhà cung cấp (kể cả các nhà cung cấp
chưa từng được đặt hàng) với các đơn đặt hàng tương ứng
Dùng left join Dùng right join
2/8/2018 Microsoft SQL Server 2005 24
Phát biểu Select với mệnh đề Join
Trường hợp liên kết nhiều bảng: làm tương tự như liên
kết 2 bảng
Lưu ý: Trường hợp trường được chọn xuất hiện trong cả
2 bảng, cần chỉ rõ giá trị được lấy từ bảng nào
Ví dụ 40: Hiển thị danh sách Tên vật tư (lấy từ bảng
VATTU) với số phiếu xuất, số lượng xuất (lấy từ bảng
CTPXUAT) và ngày xuất (lấy từ bảng PXUAT) tương
ứng
Select TenVTu, CTPXUAT.SoPX, SlXuat, DgXuat,
Ngayxuat from VATTU inner join CTPXUAT
on VATTU.MaVTu = CTPXUAT.MaVTu
inner join PXUAT on CTPXUAT.SoPX = PXUAT.SoPX
72/8/2018 Microsoft SQL Server 2005 25
Phép toán Union
Cho phép nối các dữ liệu tương thích là kết quả từ 2
câu truy vấn select
Cú pháp:
Select Danh_sách_cột1 From Tên_bảng1
Union
Select Danh_sách_cột2 From Tên_bảng2
[Order by Danh_sách_cột_sxếp]
Ví dụ 41: Hiển thị danh sách Mã vật tư, Tên vật tư
kèm theo Loại nhập/xuất với Tổng số lượng
nhập/xuất tương ứng
2/8/2018 Microsoft SQL Server 2005 26
Phép toán Union
Giải ví dụ 41:
Select CTPX.MaVTu,TenVTu,'Xuat' as Loai, sum(SlXuat) as TongSL
From CTPXUAT CTPX inner join VATTU VT
on CTPX.MaVTu=VT.MaVTu
Group by CTPX.MaVTu,TenVTu
Union
Select CTPN.MaVTu,TenVTu,'Nhap', sum(SlNhap)
From CTPNHAP CTPN inner join VATTU VT
on CTPN.MaVTu=VT.MaVTu
Group by CTPN.MaVTu,TenVTu
Order by MaVTu
Bảng kết quả
2/8/2018 Microsoft SQL Server 2005 27
Phép toán Except
Lấy ra các dữ liệu là kết quả của lệnh select 1 nhưng
không được là kết quả của lệnh select2
Cú pháp:
Select Danh_sách_cột1 From Tên_bảng1
Except
Select Danh_sách_cột2 From Tên_bảng2
[Order by Danh_sách_cột_sxếp]
Ví dụ 42: Hiển thị danh sách mã vật tư, tên vật tư của
các vật tư được nhập vào kho nhưng chưa được xuất
lần nào
2/8/2018 Microsoft SQL Server 2005 28
Minh họa ví dụ 42
2. Bang CTPXUAT
1. Bảng CTPNHAP1.
2.
3. Truy vấn và kết quả
82/8/2018 Microsoft SQL Server 2005 29
Phép toán Intersect
Lấy ra các dữ liệu vừa là kết quả của lệnh truy vấn
select 1 vừa là kết quả của lệnh truy vấn select2
Cú pháp:
Select Danh_sách_cột1 From Tên_bảng1
Intersect
Select Danh_sách_cột2 From Tên_bảng2
[Order by Danh_sách_cột_sxếp]
Ví dụ 43: Hiển thị danh sách mã vật tư, tên vật tư của các
vật tư được nhập vào kho và đã được xuất ít nhất một
lần
2/8/2018 Microsoft SQL Server 2005 30
Minh họa ví dụ 43
2. Bang CTPXUAT
1. Bảng CTPNHAP1.
2.
3. Truy vấn và kết quả
2/8/2018 Microsoft SQL Server 2005 31
Phân trang với phát biểu with
Xét ví dụ 44 về tạo bảng dữ liệu với cột phân trang
2/8/2018 Microsoft SQL Server 2005 32
Phân trang với phát biểu with
Nếu muốn hiển thị các dòng dữ liệu thứ 2 và thứ 3 trong
bảng vừa tạo, ta thực hiện câu lệnh như trong hình:
92/8/2018 Microsoft SQL Server 2005 33
Lựa chọn ngẫu nhiên với NewID()
Ví dụ 45: Lấy ra 2 bản ghi ngẫu nhiên từ bảng
CTPNHAP, ta sử dụng câu lệnh
Select top 2 *
From CTPNHAP
Order by NewID()
Bảng CTPNHAP
Kết quả lần thực hiện
truy vấn thứ nhất
Kết quả lần thực hiện
truy vấn thứ hai
2/8/2018 Microsoft SQL Server 2005 34
Khái niệm:
Là một câu lệnh truy vấn chọn lựa được lồng vào
các câu lệnh truy vấn khác
Được đặt trong cặp dấu ngoặc đơn
Chỉ được phép tham chiếu đến 1 cột hoặc một biểu
thức sẽ trả về giá trị
Trả về một giá trị đơn lẻ hoặc một danh sách các giá
trị
Cấp độ lồng nhau của các truy vấn con là không giới
hạn
Truy vấn con
2/8/2018 Microsoft SQL Server 2005 35
Truy vấn con
Truy vấn con trả về một giá trị đơn:
Ví dụ 46: Hiển thị danh sách các đơn đặt hàng gần đây
nhất:
Select * From DONDH
Where NgayDh=(Select max(NgayDh)
From DONDH)
Ví dụ 47: Tìm phần trăm số lượng đã đặt hàng của từng
vật tư trên tổng cộng các số lượng đã đặt hàng của toàn
bộ vật tư. Dữ liệu hiển thị gồm tên vật tư, tổng số lượng
đặt theo vật tư, tổng toàn bộ số lượng đặt, phần trăm
2/8/2018 Microsoft SQL Server 2005 36
Truy vấn con
Giải ví dụ 47:
Select TenVTu, sum(SlDat)as TongSLDat,
(select sum(SlDat) from CTDONDH) as Tongcong,
(convert(money,Sum(SlDat))/(select sum(SlDat)
from CTDONDH)*100) as PhanTram
From CTDONDH CTDH inner join VATTU VT
on CTDH.MaVTu=VT.MaVTu
Group by TenVTu
10
2/8/2018 Microsoft SQL Server 2005 37
Truy vấn con trả về một danh sách các giá trị:
Thường sử dụng kèm với In, not in, exists, hoặc các
phép so sánh =,,,...
Ví dụ 48:
Select TenNCC,DienThoai from NHACC
Where MaNCC in
(Select MaNCC from DONDH
where convert(char(7),NgayDh,21)='2002-01')
Truy vấn con
2/8/2018 Microsoft SQL Server 2005 38
* Sử dụng exists trong truy vấn:
Ví dụ 49:
Select TenNCC,DienThoai
From NHACC NCC
Where exists
(Select * From DONDH DH
where convert(char(7),NgayDh,21)='2002-01'
and NCC.MaNCC=DH.MaNCC)
Truy vấn con
2/8/2018 Microsoft SQL Server 2005 39
Truy vấn con
Sử dụng các phép so sánh thông thường: =,,,...
trong truy vấn con để trả về một danh sách các giá trị
bắt buộc phải kết hợp các từ khóa Any, All ở phía
trước câu truy vấn con.
* Lưu ý:
In tương đương với Any
Not in tương đương với All
Ví dụ 50: Danh sách các nhà cung cấp chưa bao giờ đặt
hàng:
Select TenNCC,DienThoai from NHACC
where MaNCC not in
(select distinct MaNCC from DONDH)
Các file đính kèm theo tài liệu này:
- bai_giang_he_quan_tri_co_so_du_lieu_sql_server_bai_4_cac_pha.pdf