TSQL (Transact Structured Query Language) là thực hiện ngôn ngữ truy vấn có cấu trúc (SQL) của Microsoft. TSQL được thiết kế để nhận, tương tác và thêm dữ liệu vào CSDL SQL Server. Vào giữa những năm 70, IBM đã thiết lập ra một chuẩn được gọi là Structed Enghlish Query Language được gọi tắt là SEQUEL. Sau này, tên viết tắt SEQUEL được rút gọn thành SQL. SQL là một loại ngôn ngữ máy tính phổ biến để tạo, sửa, và lấy dữ liệu từ một hệ quản trị cơ sở dữ liệu quan hệ. SQL được thừa nhận là tiêu chuẩn của ANSI (American National Standards Institute) vào năm 1986 và ISO (International Organization
Trang 1Chương 3
Phát biểu T-SQL dạng truy vấn dữ liệu
3.1 Giới thiệu ngôn ngữ T-SQL và SQL
3.2 Cú pháp chung của câu lệnh SELECT 3.3 Mệnh đề FROM
3.4 Danh sách chọn trong câu lệnh
SELECT
3.5 Chỉ định điều kiện truy vấn dữ liệu 3.6 Tạo mới bảng dữ liệu từ kết quả
Trang 33.1 Giới thiệu ngôn ngữ T-SQL và
SQL
• T-SQL (Transact - Structured Query
Language) là thực hiện ngôn ngữ truy vấn có cấu trúc (SQL) của Microsoft.
• T-SQL được thiết kế để nhận, tương
tác và thêm dữ liệu vào CSDL SQL
Server.
Trang 43.1 Giới thiệu ngôn ngữ T-SQL và
SQL
• Vào giữa những năm 70, IBM đã thiết
lập ra một chuẩn được gọi là Structed Enghlish Query Language được gọi tắt
là SEQUEL Sau này, tên viết tắt
SEQUEL được rút gọn thành SQL
• SQL là một loại ngôn ngữ máy tính
phổ biến để tạo, sửa, và lấy dữ liệu từ một hệ quản trị cơ sở dữ liệu quan hệ.
• SQL được thừa nhận là tiêu chuẩn của
ANSI (American National Standards
Institute) vào năm 1986 và ISO
(International Organization for
Trang 53.1 Giới thiệu ngôn ngữ T-SQL và
Trang 63.1 Giới thiệu ngôn ngữ T-SQL và
SQL
• Hầu hết các sản phẩm CSDL dựa trên SQL được thiết lập trên chuẩn ANSI SQL-92 (năm 1992 ANSI SQL được xem xét lại và được biết với tên là ISO ANSI SQL-92) và chúng không được xem xét để làm phù hợp theo các đặc tả của ANSI SQL-99 hay ANSI SQL-2003.
• SQL Server 2000 thực hiện theo ANSI SQL-92.
• SQL Server 2005 thực hiện theo ANSI
Trang 73.2 Cú pháp chung của câu lệnh
Select
• Câu lệnh SELECT được sử dụng để
truy xuất dữ liệu từ các dòng và các cột của một hay nhiều bảng, khung nhìn.
• Ngoài ra, câu lệnh này còn cung cấp
khả năng thực hiện các thao tác truy vấn và thống kê dữ liệu phức tạp
khác.
Trang 83.2 Cú pháp chung của câu lệnh
Trang 93.2 Cú pháp chung của câu lệnh
Select
• Câu lệnh SELECT được sử dụng để
tác động lên các bảng dữ liệu và kết quả của câu lệnh cũng được hiển thị dưới dạng bảng, tức là một tập hợp các dòng và các cột (ngoại trừ trường hợp sử dụng câu lệnh SELECT với
mệnh đề COMPUTE)
Trang 103.3 Danh sách chọn trong câu lệnh
SELECT
• Danh sách chọn trong câu lệnh
SELECT được sử dụng để chỉ định các trường, các biểu thức cần hiển thị
trong các cột của kết quả truy vấn.
• Các trường, các biểu thức được chỉ
định ngay sau từ khoá SELECT và
phân cách nhau bởi dấu phẩy.
• Sử dụng danh sách chọn trong câu
lệnh SELECT bao gồm các trường hợp sau:
Trang 113.3.1 Chọn tất cả các cột trong
bảng
• Khi cần hiển thị tất cả các trường
trong các bảng, sử dụng ký tự *
trong danh sách chọn thay vì phải
liệt kê danh sách tất cả các cột.
• Trong trường hợp này, các cột được
hiển thị trong kết quả truy vấn sẽ
tuân theo thứ tự mà chúng đã được tạo ra khi bảng được định nghĩa.
• Ví dụ: Câu lệnh
SELECT * FROM LOP
Trang 123.3.2 Tên cột trong danh sách chọn
• Trong trường hợp cần chỉ định cụ thể
các cột cần hiển thị trong kết quả
truy vấn, ta chỉ định danh sách các
tên cột trong danh sách chọn.
• Thứ tự của các cột trong kết quả
truy vấn tuân theo thứ tự của các
trường trong danh sách chọn
• Ví dụ: Câu lệnh
SELECT malop, tenlop, namnhaphoc
Trang 133.3.3 Thay đổi tiêu đề các cột
Để đặt tiêu đề cho một cột nào đó,
Trang 143.3.3 Thay đổi tiêu đề các cột
•Ví dụ: Câu lệnh dưới đây:
SELECT 'Mã lớp'= malop, tenlop 'Tên lớp', khoahoc AS 'Khóa học'
FROM lop
Cho kết quả là:
Trang 15•Ví dụ: Câu lệnh dưới đây cho biết tên
và số tiết của các môn học
SELECT tenhocphan,sotinchi*15 AS
sotiet
Trang 163.3.4 Hằng và biểu thức
•Nếu trong danh sách chọn có sự
xuất hiện của giá trị hằng thì giá trị
này sẽ xuât hiện trong một cột của kết quả truy vấn ở tất cả các dòng
•Ví dụ: Câu lệnh
SELECT tenhocphan,'Số tiết: ',
sotinchi*15 AS sotiet
FROM hocphan
Trang 173.3.4 Hằng và biểu thức
Trang 183.3.5 Loại bỏ các dòng dữ liệu
trùng nhau
•Trong kết quả của truy vấn có thể
xuất hiện các dòng dữ liệu trùng nhau Để loại bỏ bớt các dòng này, ta chỉ
định thêm từ khóa DISTINCT ngay sau
từ khoá SELECT.
Trang 193.3.5 Loại bỏ các dòng dữ liệu
trùng nhau
•Ví dụ: Hai câu lệnh dưới đây
SELECT khoahoc FROM lop
và:
SELECT DISTINCT khoahoc FROM lop
có kết quả lần lượt như sau:
Trang 203.3.6 Giới hạn số lượng dòng trong
kết quả truy vấn
•Ta chỉ định thêm mệnh đề TOP ngay
trước danh sách chọn của câu lệnh
SELECT hạn chế số lượng các dòng xuất hiện trong kết quả truy vấn.
•Ví dụ: Câu lệnh dưới đây hiển thị họ
tên và ngày sinh của 5 sinh viên đầu
tiên trong danh sách
SELECT TOP 5 hodem,ten,ngaysinh
Trang 213.3.6 Giới hạn số lượng dòng trong
kết quả truy vấn
•Ta có thể chỉ định số lượng các
dòng cần hiển thị theo tỷ lệ phần trăm bằng cách sử dụng thêm từ khoá
PERCENT như ở ví dụ dưới đây.
•Ví dụ: Câu lệnh dưới đây hiển thị họ
tên và ngày sinh của 10% số lượng
sinh viên hiện có trong bảng SINHVIEN
SELECT TOP 10 PERCENT hodem,
ten, ngaysinh
Trang 223.4 Mệnh đề FROM
• Mệnh đề FROM trong câu lệnh SELECT được sử dụng nhằm chỉ định các bảng
và khung nhìn cần truy xuất dữ liệu.
• Sau FROM là danh sách tên của các
bảng và khung nhìn tham gia vào truy vấn, tên của các bảng và khung nhìn
được phân cách nhau bởi dấu phẩy.
• Ví dụ : Câu lệnh dưới đây hiển thị danh sách các khoa trong trường
SELECT * FROM khoa
Trang 233.4 Mệnh đề FROM
•Ta có thể sử dụng các bí danh cho
các bảng hay khung nhìn trong câu
lệnh SELECT Bí danh được gán trong mệnh đề FROM bằng cách chỉ định bí danh ngay sau tên bảng
•Ví dụ: câu lệnh sau gán bí danh là
a cho bảng khoa
SELECT * FROM khoa a
Trang 243.5 Chỉ định điều kiện
•Mệnh đề WHERE được sử dụng
nhằm xác định các điều kiện đối với
việc truy xuất dữ liệu.
•Sau mệnh đề WHERE là một biểu
thức logic và chỉ những dòng dữ liệu nào thoả mãn điều kiện được chỉ định mới được hiển thị trong kết quả truy vấn.
Trang 273.5.2 Kiểm tra giới hạn của
Trang 283.5.2 Kiểm tra giới hạn của
Trang 293.5.3 Danh sách (IN và NOT
IN)
•Từ khoá IN được sử dụng khi ta
cần chỉ định điều kiện tìm kiếm
dữ liệu cho câu lệnh SELECT là
một danh sách các giá trị.
•Sau IN (hoặc NOT IN) có thể là
một danh sách các giá trị hoặc là một câu lệnh SELECT khác.
Trang 303.5.3 Danh sách (IN và NOT
IN)
•Ví dụ 1: Hiển thị mã sinh viên
thi lần 1 học phần có mã là ‘SQL’
có điểm là 6, 8 hoặc 10
•Ví dụ 2: Hiển thị tên khoa chưa
có (không quản lý) sinh viên.
Trang 313.5.4 Toán tử LIKE và các ký tự
đại diện
•Từ khoá LIKE (NOT LIKE) sử dụng nhằm mô
tả khuôn dạng của dữ liệu cần tìm kiếm.
•Chúng được kết hợp với các ký tự đại diện :
[] Ký tự đơn bất kỳ trong giới hạn được chỉ
định (ví dụ [a-f]) hay một tập (ví dụ [abcdef])
Trang 32•Ví dụ 3: Cho biết họ và tên của
các sinh viên có tên bắt đầu bằng
Trang 333.5.5 Giá trị NULL
•Trong mệnh đề WHERE, để kiểm tra
giá trị của một cột có giá trị NULL hay không, ta sử dụng cách viết:
WHERE tên_cột IS NULL hoặc:
WHERE tên_cột IS NOT NULL
•Ví dụ: Hiển thị tên khoa chưa nhập
dữ liệu về điện thoại.
Trang 343.6 Tạo mới bảng dữ liệu từ kết
quả của câu lệnh SELECT
•Câu lệnh SELECT INTO có tác dụng tạo một bảng mới có cấu trúc và dữ liệu được xác định từ kết quả của truy vấn.
•Bảng mới được tạo ra sẽ có số cột
bằng số cột được chỉ định trong danh
Trang 353.7 Sắp xếp kết quả truy vấn
•Mặc định, các dòng dữ liệu trong kết quả
của câu truy vấn tuân theo thứ tự của chúng trong bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục).
•Trong trường hợp muốn dữ liệu được sắp
xếp theo chiều tăng hoặc giảm của giá trị của một hoặc nhiều trường, ta sử dụng thêm
mệnh đề ORDER BY trong câu lệnh SELECT
•Sau ORDER BY là danh sách các cột cần sắp
xếp (tối đa là 16 cột) Dữ liệu được sắp xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theo chiều tăng.
Trang 36•Nếu sau ORDER BY có nhiều cột thì
việc sắp xếp dữ liệu sẽ được ưu tiên
theo thứ tự từ trái qua phải.
•Thay vì chỉ định tên cột sau ORDER
BY, ta có thể chỉ định số thứ tự của cột cần được sắp xếp Câu lệnh ở ví dụ trên
Trang 373.7 Sắp xếp kết quả truy vấn
•Ví dụ 1: Hiển thị danh sách sinh
viên nam, kết quả trả về sắp xếp tăng dần theo tên, họ đệm gồm các thông tin: hodem, ten, ngaysinh
•Ví dụ 2: Hiển thị masv của 2 sinh
viên thi học phần có mã là tindc có
điểm cao nhất
Trang 393.8.1 Toán tử Union
•Toán tử Union được sử dụng trong trường
hợp ta cần gộp kết quả của hai hay nhiều truy vấn thành một tập kết quả duy nhất SQL cung cấp toán tử UNION để thực hiện phép hợp Cú pháp như sau.
Câu_lệnh_1
UNION [ALL] Câu_lệnh_2
[UNION [ALL] Câu_lệnh_3]
Trang 403.8.1 Toán tử Union
•Ví dụ: Giả sử ta có hai bảng Table1
và Table2 lần lượt như sau:
Trang 413.8.1 Toán tử Union
•Câu lệnh
SELECT A,B FROM Table1
UNION
SELECT D,E FROM table2
Cho kết quả như sau:
Trang 423.8.1 Toán tử Union
•Mặc định, nếu trong các truy vấn
thành phần của phép hợp xuất hiện
những dòng dữ liệu giống nhau thì
trong kết quả truy vấn chỉ giữ lại một
dòng Nếu muốn giữ lại các dòng này, ta phải sử dụng thêm từ khoá ALL trong
truy vấn thành phần
•Ví dụ: Câu lệnh
SELECT A,B FROM Table1 UNION ALL
Trang 433.8.1 Toán tử Union
•Danh sách cột trong các truy vấn
thành phần phải có cùng số lượng.
•Các cột tương ứng trong tất cả các
bảng, hoặc tập con bất kỳ các cột được
sử dụng trong bản thân mỗi truy vấn
thành phần phải cùng kiểu dữ liệu.
•Các cột tương ứng trong bản thân
từng truy vấn thành phần của một câu lệnh UNION phải xuất hiện theo thứ tự như nhau.
Trang 443.8.1 Toán tử Union
•Khi các kiểu dữ liệu khác nhau
được kết hợp với nhau trong câu lệnh UNION, chúng sẽ được
chuyển sang kiểu dữ liệu cao hơn (nếu có thể được).
•Tiêu đề cột trong kết quả của
phép hợp sẽ là tiêu đề cột được
chỉ định trong truy vấn đầu tiên.
Trang 453.8.2 Toán tử Except
•Toán tử Except được sử dụng trong
trường hợp bạn cần liệt kê danh sách những bản ghi tồn tại bên bản thứ
nhất mà không tồn tại trong bảng thứ hai.
Ví dụ: Hiển thị Masv chưa có điểm
thi một học phần nào
SELECT MASV FROM SINHVIEN EXCEPT
Trang 463.8.2 Toán tử Except
•Toán tử Except được sử dụng trong
trường hợp bạn cần liệt kê danh sách những bản ghi tồn tại bên bản thứ
nhất mà không tồn tại trong bảng thứ hai.
Ví dụ: Hiển thị Masv chưa có điểm
thi một học phần nào
SELECT MASV FROM SINHVIEN EXCEPT
Trang 473.8.3 Toán tử Intersect
•Intersect dùng để lấy các bản ghi
vừa tồn tại trong bảng thứ nhất vừa
tồn tại trong bảng thứ hai.
Ví dụ: Hiển thị Makhoa có lớp trực
thuộc.
SELECT Makhoa FROM KHOA INTERSECT
SELECT MAKHOA FROM LOP
Ví dụ: Hiển thị Mã sinh viên thi lại cả
Trang 483.9 Phép nối
•Để truy vấn dữ liệu từ hai hay nhiều
bảng, ta phải sử dụng đến phép nối.
•Để thực hiện được một phép nối,
cần phải xác định được những yếu tố sau:
- Những cột nào cần hiển thị trong
Trang 493.9.1 Phép nối trong
•Phép nối trong sử dụng từ
khóa INNER JOIN là phép kết nối bằng Điều kiện để thực hiện
phép nối trong được chỉ định
trong mệnh đề FROM theo cú
pháp như sau:
Tên_bảng_1 [INNER] JOIN tên_bảng_2 ON điều_kiện_nối
Trang 503.9.1 Phép nối trong
•Ví dụ : Để hiển thị họ tên và ngày
sinh của các sinh viên lớp Dữ liệu 1, ta
sử dụng câu lệnh:
SELECT masv, hodem,ten,ngaysinh
FROM sinhvien s INNER JOIN lop l
ON s.malop=l.malop INNER JOIN diemthi d on s.masv=d.masv
WHERE tenlop=N'Dữ liệu 1'
Trang 523.9.2 Phép nối ngoài
Phép nối ngoài gồm các phép nối sau đây:
•Cũng tương tự như phép nối trong,
điều kiện của phép nối ngoài cũng
được chỉ định ngay trong mệnh đề
FROM theo cú pháp:
Tên_bảng_1 LEFT|RIGHT|FULL
[OUTER] JOIN
Trang 543.9.3 phép nối trên nhiều
bảng
•Khi thực hiện phép nối nhiều bảng, thứ
tự thực hiện phép nối giữa các bảng được xác định theo nghĩa là kết quả của phép nối này được sử dụng trong một phép nối khác.
•Ví dụ 1: Hiển thị họ tên và ngày sinh
của các sinh viên thuộc Khoa Khoa học
Máy tính
•Ví dụ 2: Hiển thị bảng điểm học phần
có tên là HQTCSDL SQL Server của lớp Dữ
Trang 553.10 Mệnh đề GROUP BY
•Mệnh đề GROUP BY sử dụng trong câu lệnh SELECT nhằm gộp các dòng dữ liệu trong bảng thành các nhóm dữ liệu, và
trên mỗi nhóm dữ liệu thực hiện tính
toán các giá trị thống kê như tính tổng, tính giá trị trung bình,
•Các hàm gộp được sử dụng để tính giá trị thống kê cho toàn bảng hoặc trên mỗi nhóm dữ liệu Chúng có thể được sử dụng như là các cột trong danh sách chọn của câu lệnh SELECT hoặc xuất hiện trong
mệnh đề HAVING, nhưng không được
Trang 563.10 Thống kê dữ liệu với GROUP
biểu_thức) Đếm số các giá trị trong biểu thức.
COUNT(*) Đếm số các dòng được
chọn.
MAX(biểu_thức) Tính giá trị lớn nhất
Trang 573.10.1 Thống kê trên toàn bộ dữ
liệu
• Khi cần tính toán giá trị thống kê
trên toàn bộ dữ liệu, bạn sử dụng
các hàm gộp trong danh sách chọn của câu lệnh SELECT.
• Trong trường hợp này, trong danh
sách chọn không được sử dụng bất
kỳ một tên cột hay biểu thức nào
ngoài các hàm gộp
• Chú ý: miền tác động của hàm gộp
lúc này là trên toàn bảng
Trang 583.10.1 Thống kê trên toàn bộ dữ
liệu
• Ví dụ 1: Hiển thị điểm trung bình lần
1 của sinh viên có mã là dl01-001.
• Ví dụ 2: Hiển thị điểm cao nhất của
học phần có tên là HQTCSDL SQL
Server.
• Ví dụ 3: Hiển thị năm sinh lớn nhất
của lớp có tên là dữ liệu 1
Trang 593.10.2 Thống kê dữ liệu trên các
hiện thao tác tính toán trên mỗi
nhóm và cho biết giá trị thống kê
theo các nhóm dữ liệu
Trang 603.10.2 Thống kê dữ liệu trên các
nhóm
• Ví du 1: Hiển thị mahocphan, điểm
lớn nhất ứng với học phần đó.
• Ví dụ 2: Cho biết masv,hodem,ten,
trung bình điểm thi lần 1 các học
phần của các sinh viên.
Trang 613.10.2 Thống kê dữ liệu trên các
nhóm
• Lưu ý: Trong trường hợp danh sách
chọn của câu lệnh SELECT có cả các hàm gộp và những biểu thức không phải là hàm gộp thì các trường trong danh sách phải có mặt đầy đủ trong mệnh đề GROUP BY, nếu không câu lệnh sẽ không hợp lệ.
• Ví dụ: Hiển thị malop, tenlop, số
sinh viên theo từng lớp.
Trang 623.10.3 Toán tử Rollup
• Cho phép thêm bản ghi ứng với hàm
tương ứng trong phát biểu Select
nhưng tính toán lại trên bản ghi đã được Group by
Trang 633.10.4 Toán tử Cube
• Bao gồm trường hợp Rollup
• Cho phép thêm bản ghi tương tự như
vậy cho cột thứ hai khai báo sau
mệnh đề Group by.
Trang 643.10.5 Hàm Grouping
• Cho phép thêm cột dữ liệu.
• Trả về 0 cho dữ liệu thực tế và có giá
trị 1 cho giá trị cột là null được tạo
ra bởi toán tử Cube hay Rollup.
Trang 653.10.6 Mệnh đề Having
• Mệnh đề HAVING được sử dụng cùng
mệnh đề GROUP BY
• Sau HAVING là biểu thức điều kiện
Biểu thức điều kiện này không tác
động lên toàn bảng mà chỉ tác động lần lượt lên từng nhóm các bản ghi
đã chỉ ra tại mệnh đề GROUP BY
Trang 66trung bình điểm thi lần 1 của các
sinh viên có điểm trung bình lớn hơn hoặc bằng 5.
• Ví dụ 4: Hiển thị makhoa, tenkhoa,
Trang 673.10.6 Mệnh đề Having
• Một truy vấn con có thể được sử
dụng trong mệnh đề HAVING của
một truy vấn khác.
• Trong trường hơp này, kết quả của
truy vấn con được sử dụng để tạo
nên điều kiện đối với các hàm gộp.
Trang 683.10.6 Mệnh đề Having
• Ví dụ: Câu lệnh dưới đây cho biết mã, tên và
trung bình điểm lần 1 của các học phần có
trung bình lớn hơn trung bình điểm lần 1 của tất cả các học phần
SELECT d.mahocphan, tenhocphan, AVG(diem) FROM diemthi d inner join hocphan h on
Trang 693.11 Thống kê dữ liệu với
• Điểm khác biệt giữa COMPUTE và
GROUP BY là kết quả thống kê xuất hiện dưới dạng một dòng trong kết quả truy vấn và còn cho biết cả chi tiết về dữ liệu trong mỗi nhóm
Trang 703.11 Thống kê dữ liệu với
Trang 713.11 Thống kê dữ liệu với
COMPUTE
Ví dụ: danh sách các lớp của mỗi
khoa và tổng số các lớp của mỗi khoa
SELECT khoa.makhoa, tenkhoa,