SQL server

Published on June 2016 | Categories: Types, Brochures | Downloads: 45 | Comments: 0 | Views: 234
of 10
Download PDF   Embed   Report

SQL câu lệnh

Comments

Content


Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 46


Bài 07
TRUY XUẤT DỮ LIỆU BẰNG CÂU LỆNH SQL
Truy vấn đơn giản
Biến đổi dữ liệu
Truy vấn có điều kiện
Truy vấn nhiều Table
Sau khi bạn đã có thông tin trong CSDL của mình, bạn muốn trích ra những dữ liệu bạn mong
muốn. Từ các phát biểu SELECT đơn giản lấy các cột chỉ định. Sau đó mở rộng bằng các kỹ thuật
thao tác và chuyển đổi dữ liệu hạn chế dữ liệu trùng. Cuối cùng với các truy vấn cao cấp như các truy
vấn con, truy vấn kết nối và tương quan dữ liệu (truy vấn nhiều table).
Cú pháp đầy đủ của câu lênh SELECT








Các truy vấn lấy thông tin từ CSDL bằng cách sử dụng câu lênh SQL từ công cụ SQL Query
Analyzer. Ngòai ta ta cũng có thể sử dụng các công cụ kác và các tiện ích của hãng thứ 3.
SELECT [ALL | DISTINCT] [TOP N [PERCENT]] <DS các cột> [INTO <Tên Table>]
FROM <DS Các Table>
[Where <Điều kiện>]
[GROUP BY <DS các cột gom nhóm>]
[HAVING <Điều kiện của Group by>]
[ORDER BY <Tên cột> Asc|Desc , . . .]

I. PHÁT BIỂU SELECT ĐƠN GIẢN
1. Lệnh SELECT đơn giản

SELECT <DS Các cột>
FROM <Tên Table >

Mệnh đề :
SELECT : Xác định các cột cần lấy dữ liệu
FROM : Xác định Bảng (Table) chứa cột được lấy
Sử dụng dấu hoa thị (*) thay thế cho DS tất cả các cột trong bảng.
VD: SELECT *
FROM KHACHHANG




Để chọn các cột rõ ràng bạn phải
phân mỗi cột bằng dấu (,)
SELECT <Tên cột 1> [, <Tên cột 2> . . . .]
FROM <Tên Table>
VD: SELECT MaKH, TenKH, DiaChiKH
FROM KHACHHANG
Ghi chú : Khi sử dụng lệnh SELECT * , trật tự các cột sẽ
giống trật tự đã chỉ định khi tạo Table. Khi sử dụng lệnh
SELECT <DS các cột> thì trật tự là trật tự theo <DS các
cột>
2. Thay Thế Tiêu Đề Cột
Thay vì sử dụng các tiêu đề cột như đã chỉ định khi thiết kế Table bạn có thể thay đổi các tiêu
đề cột theo ý mình bằng cách đặt các bí danh cho tiêu đề. Có 2 cách:

SELECT <Têu đề cột>=<Tên cột>
FROM <Tên Table>
Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 47



SELECT <Tên cột> As <Tiêu đề cột>
FROM <Tên Table>
Ghi chú:
Nếu bí danh có sử dụng khoảng trắng thì phải đặt bí danh trong cặp nháy ‘ ‘
VD:
SELECT MaKH as 'M Khch Hng', TenKH Tenkhachhang, 'Địa Chỉ KH' =DiaChiKH
FROM khachhang

3. Sử dụng Literals
Sử dụng Literals để làm cho dữ liệu dễ đọc hơn. Một Literals là một chuỗi được đặt trong ngoặc kép
đơn. Thể hiển như một cột khác trong câu truy vấn.
VD: SELECT TenKH, DiaChiKH, 'M Khch Hng: ' , MaKH
From KhachHang

II. BIẾN ĐỔI DỮ LIỆU
1. Hàm toán học
Các hàm tóan học cho phép thực hiện xử lý các dữ liệu số
cú pháp:
SELECT <Tên hàm> (<Các tham số>)
VD: SELECT SQRT(9)

Hàm Diễn Giải
Power(X,Y) Giá trị của X lũy thừa Y
Round(X,n) Số X làm tròn n chữ số tính từ dấu thập phân.
Square(X) Bình phương giá trị X
SQRT(X) Căn bậc 2 của giá trị X
2. Các hàm về chuỗi
Thực hiện xử lý dữ liệu chuổi ký tự .
Cú pháp: SELECT <Tên hàm>(<Các tham số>)
VD: Select Right('ABCDE',3)
Hàm Diễn Giải
‘Chuỗi 1’ + ‘Chuỗi 2’ Nối 2 Hay nhiều chuổi ký tự
Lower(Chuỗi kí tự) Chuyển thành chữ thường
Upper(Chuỗi kí tự) Chuyển thành chữ Hoa
LTrim(Chuỗi kí tự) Trả về dữ liệu không có khảng trắng bên trái
RTrim(Chuỗi kí tự) Trả về dữ liệu không có khảng trắng bên phải
Left(Chuỗi kí tự, n) Trả về một chuổi n ký tự tính từ bên trái
Right(Chuỗi kí tự, n) Trả về một chuổi n ký tự tính từ bên phải
SubString(Chuỗi kí tự, n1, n2) Trả về 1 chuổi ký tự bắt đầu từ vị trí n1 có chiều dài n2 kí tự
Replace(‘Chuỗi1’,’Chuổi2’,’Chuỗi3’) Thay thế tất cả lần xuất hiện Chuỗi2 trong Chuỗi1 bằng Chuỗi3
3. Các hàm ngày tháng
Để biến đổi các giá trị kiểu DateTime
Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 48

Cú pháp: SELECT <Tên hàm>(<Các tham số>)
VD: SELECT GetDate()

Đối với các hàm có sử dụng tham số gọi là DatePart các giá trị của DatePart liệt kê như sau:
DatePart Giá Trị Diễn Giải
DD 1-31 Ngày trong tháng
MM 1-12 Tháng trong năm
QQ 1-4 Quý trong năm
DW 1-7(Sun-Sat) Thứ trong tuần
YY 1753-9999 Năm
Các hàm về ngày
Hàm Diễn Giải
GetDate() Trả về ngày giờ hiện hành
DateAdd(Datepart, n, Ngày) Thêm n DateParts vào Ngày
DateDiff(DatePart, Ngày1, Ngày 2) Trả Về Số Datepart Giữa 2 Ngày
DatePart(Datepart, Ngày) Trà về giá trị DatePart của Ngày
Day(Ngày) Trả về trị thể hiện ngày của Ngày
Month(Ngày) Trả về trị thể hiện tháng của Ngày
Year(Ngày) Trả về trị thể hiện năm của Ngày
VD: Select DateAdd(mm,-3,’10/6/2004’)
III. CHỌN LỰA CÁC DÒNG KẾT XUẤT
Cú pháp: SELECT <DS Các cột>
FROM <Tên Table>
WHERE <Biểu thức điều kiện>
Để xác định các dòng nào cần trích xuất dựa trên dựa trên mệnh đề tìm kiếm WHERE của phát biểu
SELECT. Các điều kiện tìm kiếm bao gồm các phép toán so sánh, các phạm vi, các danh sách, so
khớp chuỗi, các giá trị không xác định và sự phủ định của các điều kiện này
1. Các phép toán so sánh
Phép toán Diễn giải Phép toán Diễn giải
= Bằng <> Không bằng
> Lớn hơn != Không bằng
< Nhỏ hơn !> Không lớn hơn
>= Lớn hơn hoặc bằng !< Không nhỏ hơn
<= Nhỏ hơn hoặc bằng () Thứ tự ưu tiên

Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 49

VD: Select Masv, Tensv, Hocbong
From Sinhvien
Where Hocbong >=200000
2. Phạm Vi
Trích xuất dữ liệu dựa trên điều kiện là 1 phạm vi các giá trị sử dụng
từ khoá BETTWEEN.
Cú pháp : SELECT <DS các cột>
FROM <TênTable>
WHERE <Tên cột> [Not] BetWeen <Giá trị đầu> and <Giá trị cuối>
VD: Select Masv, Tensv,Ngaysinh
From Sinhvien
Where Ngaysinh Between '1/1/1978' and '12/31/1980'
3. Danh Sách
Trích xuất dữ liệu dựa trên điều kiện là 1 danh sách các giá trị bằng
cách sử dụng từ khoá IN
Cú pháp : SELECT <DS các cột>
FROM <TênTable>
WHERE <Tên cột> [Not] IN(<DS các giá trị>)
VD: Select Masv, Hosv,TenSV
From Sinhvien
Where Masv IN ('SV01','SV03','SV06')
4. Chuỗi ký tự
Trích xuất các dòng dữ liệu dựa trên 1 phần của chuổi ký tự ta sử dụng từ khoá LIKE, Có thể sử dụng
4 ký tự thay thế trong biểu thức.
% : Đại diện không hay nhiều ký tự
- : Một ký tự
[] : Một ký tự bên trong phạm vi xác định
[^] : Một ký tự không nằm trong phạm vi xác định
Cú pháp : SELECT <DS các cột>
FROM <TênTable>
WHERE <Tên cột> [Not] LIKE ‘Chuỗi ký tự’
VD: Select masv, Hosv,TenSV, DiaChi
From sinhvien
Where DiaChi Like '%Q3%'

VD: Select masv, Hosv,TenSV, DiaChi
From sinhvien
Where Tensv Like '[DM]%'

Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 50

5. Các giá trị không xác định
Một giá trị Nul là giá trị rỗng (không có dữ liệu. Dó đó để xác định các dòng có chứa giá trị
Null trong table ta sử dụng các từ khóa IS NULL và IS NOT NULL.
Cú pháp: SELECT <DS các cột>
FROM <TênTable>
WHERE <Tên cột> IS [NOT] NULL
VD: Select Makh,Tenkh,Diachikh
From Khachhang
Where Dienthoaikh IS NULL

VD: Select Makh,Tenkh,Diachikh, Dienthoaikh, Emailkh
From Khachhang
Where EmailKH IS NOT NULL

6. Sử dụng nhiều điều kiện để trích xuất các dòng
Chúng ta có thể liên kết nhiều điều kiện tìm kiếm bằng cách sử dụng các tóan tử logic
• AND trả về kết quả khi tất cả điều kiện là đúng,
• OR trả về kết quả khi bất kỳ điều kiện nào đúng.
Cú pháp: SELECT <DS các cột>
FROM <TênTable>
WHERE <Điều kiện 1> AND | OR <Điều kiện 2> . . .
VD:
Select *
From Sanpham
Where Maloai in (1,2,3) and Dongia>100000


7. Giới hạn các thông tin trùng DISTINCT
Khi chọn thông tin từ một Table có thể nhận được các dòng thông tin trùng nhau. Để giới hạn thông
tin trùng dùng từ khoá DISTINCT nằm trong mệnh đề SELECT
Cú pháp: SELECT DISTINCT <DS Các cột>
FROM <Tên Table>
WHERE <Điều kiện>
VD: Select Distinct Masp Select Distinct Masp,sldat
From Chitietdh From Chitietdh





Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 51

8. Sắp xếp dữ liệu với mệnh đề ORDER BY
Để sắp xếp kết quả truy vấn theo một trật tự nào đó ta sử dụng mệnh đề Order By
Cú pháp : SELECT <DS các cột>
FROM <TênTable>
WHERE <Điều kiện>
Order By <DS Các cột> ASC | DESC
Asc: Tăng dần
Desc: Giảm dần
VD: Select Maloai, MaSP, TenSp
From SanPham
Order By MaSP Desc
9. Các hàm tập hợp
Các hàm tập hợp có thể trả về các giá trị tóm tắt đối với tòan bộ một bảng hoặc đối với các
nhóm của các dòng trong bảng. Các hàm tập hợp thông thường được sử dụng với các mệnh đề Group
By và trong mệnh đề Having
Hàm Kết Quả
COUNT(*) Trả về số dòng được chọn
MAX(Tên cột) Trả về giá trị lớn nhất trong cột
MIN(Tên cột) Trả về giá trị nhỏ nhất trong cột
AVG(Tên cột) Trả về trị trung bình cộng của các giá trị trong cột
SUM(Tên cột) Trả về tổng số các giá trị trong cột
VD: Select count(*)
From KhachHang

VD: Select Max(DonGia) as GiaCaoNhat
From SanPham
a. Group By và Having
Mệnh đề Group By nhóm dữ liệu tổng hợp thỏa mãn điều kiện Where để trả về như dòng đơn.
Mệnh đề Having thiết lập các điều kiện để định rõ dòng nào sẽ được trả về bởi mệnh đề Group By
Cú pháp: SELECT <DS các cột>
FROM <TênTable>
WHERE <Điều kiện>
[Group By <DS Các cột gom nhóm>]
[HAVING <Điều kiện cho Group By>]
VD: Select MaKH, Count(*) As SolanDH
From Dondathang
Group By Makh
Having Count(*) >=2
Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 52

b. Compute và Compute By
Các mệnh đề Compute và Conpute By sinh ra các dòng dữ liệu tổng hợp và chi tiết mới.
• Mênh đề Compute trả về các dòng chi tiết và một dòng tổng chính.
• Mệnh đề Compute By trả về các dòng mới của dữ liệu tổng hợp, giống với mệnh đề Group By
nhưng trả về các dòng như các nhóm con cùng với các giá trị tổng hợp. Muốn sử dụng
Compute By bạn phải sử dụng mệnh đề Group By, trật tự các cột trong Compute By phải giống
trật tự trong Order By
Cú pháp: SELECT <DS các cột>
FROM <TênTable>
WHERE <Điều kiện>
[COMPUTE <BT Tính toán >]
[BY <Tên cột phân nhóm>]
VD: Mênh đề Group By
Select Maloai, Sum(SLTon) as TongSLTon
From SanPham
Group By MaLoai
VD: Mênh đề Compute
Select Maloai, SLTon
From SanPham
Compute Sum(SLTon)

VD: Mênh đề Compute By
Select Maloai, SLTon
From SanPham
Order By Maloai
Compute Sum(SLTon) By MaLoai



10. Siêu tập hợp Rollup và Cube
Để thêm các dòng tóm tắt bổ sung tham khảo như là các siêu tập hợp, sử dụng các
tóan tử Rollup và Cube với mệnh đề Group By
Cú pháp: SELECT <DS các cột>
FROM <TênTable>
WHERE <Điều kiện>
[Group By <DS Các cột gom nhóm> ]
[With ROLLUP | CUBE]
Tóan tử Rollup sinh ra các dòng siêu kết hợp
VD:
Select Sodh,Masp, Sum(SLDat) as TongSLDat
From Chitietdh
Where Sodh in('00001','00002','00003')
Group By sodh,masp
With RoLLup
Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 53

ồn.
Sinh ra một dòng đối với mỗi đơn hàng cùng với thông tin tổng hợp các dòng với giá trị Null
trong MaSP thể hiển tổng số của tất cả các MaSP. Và sinh ra một dòng tổng cộng cho tất cả các đơn
đặt hàng
Tóan tử Cube sinh ra các dòng siêu kết hợp
Giống như tóan tử Rollup tóan tử Cube chẳng những sinh ra các giá trị trung
bình và tổng cộng động mà còn trả về các dòng tổng bổ sung.
VD: Select Sodh,Masp, Sum(SLDat) as TongSLDat
From chitietDH
Where Sodh in('00001','00002')
Group By Sodh,Masp
With Cube
IV. TƯƠNG QUAN DỮ LIỆU
Cách thực hiện kết nối để trích dữ liệu từ 1 hoặc nhiều bảng. Các kết quả
sẽ xuất hiện như một bảng đơn với các cột từ tất cả các bảng được chỉ định
trong SELECT Column_List và so khớp với điều kiện tìm kiếm. Khi sử dụng nhiều Table nguồn
chúng ta cần chú ý đến mối liên kết giữa các Table ngu
1. Khái niệm
a. Loại kết nối - JoinType
• Inner Join (Liên kết trong bảng A và B) : Khi chọn các thông tin của bảng A hoặc bảng B thì
các thông tin ấy bắt buột phải có mặt đồng thời trong cả 2 bảng A,B
• Left Join (Liên kết ngoài bên trái của A với B ):
Khi chọn thông tin của A: Thông tin ấy mặc nhiên được lấy
Khi chọn thông tin của B : Thông tin ấy phải có mặt trong A thì mới lấy được
• Right Join: (Liên kết ngoài bên phải của A với B ):
Khi chọn thông tin của A: Thông tin ấy phải có mặt trong B thì mới lấy được
Khi chọn thông tin của B : Thông tin ấy mặc nhiên được lấy
• Full Join (Liên kết ngoài toàn phần):
Khi chọn thông tin của A: Thông tin ấy mặc nhiên được lấy
Khi chọn thông tin của B : Thông tin ấy mặc nhiên được lấy
b. Toán tử kết nối- JoinOperator
Trong SQL Server 2000 có toán tử kết nối =
2. Cú pháp kết nối
Khi thực hiện kết nối các bảng bạn có thể sử dụng 2 cú pháp:
SELECT <Tên Table>.<Tên cột> [, . . .]
FROM <DS Các Table>
WHERE <Tên Table 1>.<Tên cột> <Toán tử> <Tên Table2>.<Tên cột>[, . .]
Hoặc
SELECT <Tên Table>.<Tên cột>[, . . .]
FROM <Tên Table 1> [Loại kết nối> <Tên Table 2>
ON <Tên Table 1>.<Tên cột>=<Tên Table 2>.<Tên cột> [, . . .]
WHERE <BT Điều kiện>
VD: Liệt kê kết quả học tập sinh viên khoa “TH” thông tin gồm : Masv, Hosv, Tensv, Phai, Ngaysinh,
Makhoa, Mamh, Diem
SELECT Sinhvien.masv, Sinhvien.hosv, Sinhvien.tensv, Sinhvien.phai, Sinhvien.ngaysinh,
Sinhvien.makhoa, Ketqua.mamh, Ketqua.diem;
FROM sinhvien , Ketqua
WHERE sinhvien.masv=ketqua.masv and Sinhvien.makhoa = "TH"
Hoặc
Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 54

SELECT Sinhvien.masv, Sinhvien.hosv, Sinhvien.tensv, Sinhvien.phai, Sinhvien.ngaysinh,
Sinhvien.makhoa, Ketqua.mamh, Ketqua.diem;
FROM sinhvien INNER JOIN ketqua ON Sinhvien.masv = Ketqua.masv;
WHERE Sinhvien.makhoa = "TH"
Ghi chú: Tập kết quả của 2 cú pháp này sẽ giống nhau. Tuy nhiên có một sự khác nhau
VD: Liệt kê các sản phNm thuộc loại 1 chưa có đặt hàng
Cú pháp 1:
Select MaSp, TenSP, QuiCach
From SanPham
Where MaLoai=1 and MaSP N ot In
(Select MaSP
From ChitietDH)
Cú pháp 2:
Select MaSp, TenSP, QuiCach
From SanPham Left Join ChiTietDH ON SanPham.MaSP=ChiTietDh.MaSP
Where MaLoai=1
Nhận xét:
• Đối với các câu truy vấn thông thường thì sử dụng cú pháp 1 rõ ràng và dễ hiểu hơn
• Đối câu truy vấn liên kết thì cú pháp 2 ngắn gọn hơn. Tuy nhiên nếu câu truy vấn có nhiều
bảng thì sẽ phức tạp hơn.
• Sử dụng cú pháp nào tùy theo người sử dụng.
3. Làm việc với các truy vấn con
Một truy vấn con có thể trả về một cột đơn hoặc một giá trị đơn ở bất kỳ nơi đâu 1 giá trị đơn
có thể sử dụng. Và có thể được so sanh bởi các toá tử so sánh. Các từ khoá In và Exist
VD : Liệt kê các sản phNm Mã loại là 1 có đặt hàng
Cú pháp 1 : Select MaSp, TenSP, QuiCach
From SanPham
Where MaLoai=1 and MaSP In (Select MaSP From ChitietDH)
Cú pháp 2 :
Select MaSp, TenSP, QuiCach
From SanPham
Where Exists (Select * From ChiTietDh Whrere MaSP=SanPham.MaSP and MaLoai=1)
4. Tạo Union Query – Query Hợp Nhất
SELECT <DS Các cột>
FROM <DS Các Table>
[WHERE <Điều kiện>]
UNION
SELECT <DS Các cột>
FROM <DS Các Table>
[WHERE <Điều kiện>]
UNION . . . .
DSVùng chọn phải giống nhau trong các mệnh đề SELECT
VD: Lliệt kê ds khách mời dự họp tất niên gồm khách hàng và nhân viên
Select TenKH AS TenKM, DiaChiKh As DiaChiKM, DienThoaiKh As DienThoaiKM
From KhachHang
Giaùo Trình Heä Quaûn Trò CSDL SQLServer 2000 Trang 55

UN ION
Select Trim(HoN V)+” “+ Trim(TenN V) , DiaChiN V, DienThoaiN V
From N hanVien
5. SELECT INTO
Phát biểu Select InTo cho phép tạo kết quả mới dựa trên kết quả truy vấn. Bảng mới được tạo
dựa trên các cột bạn xác định trong danh sách chọn lựa.
Cú pháp :
Select <DS Các cột> Into <Tên Table>
From <DS Các Table>
[Where <Điều kiện>]
VD: Select * Into TempKhachHang
From KhachHang
Có 2 loại bảng:
Bảng thường trực : Sử dụng Select InTo định nghĩa một bảng và đưa dữ liệu vào trong đó
Bảng tạm thời : Các bảng này sẽ nằm trong CSDL TempDb
VD: Select * Into #TempKhachHang
From KhachHang
Ghi chú :
N ếu muốn thêm các dòng vào một bảng đã có ta sử dụng IN SERT Hoặc IN SERT IN TO
VD: IN SERT TempKhachHang
Select *
From KhachHang

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close