kể cả khi có 2 dòng cùng giá trị. Vì vậy, khi đánh giá một giá trị sắp xếp tiếp theo thì số thứ tự vẫn tiếp tục được đánh nhưng sẽ tăng thêm 1 giá trị vào các dòng tiếp theo trong tập hợp.
Ví dụ: Sắp xếp tuổi trong bảng thisinh. Những thí sinh cùng tuổi sẽ được sắp xếp cùng một bậc.
USE QLTS
SELECT sbd, hoten, RANK() OVER(ORDER BY DATEDIFF(YEAR,
ngaysinh, GETDATE())) sbd, DATEDIFF(YEAR, ngaysinh, GETDATE()) tuoi FROM thisinh
- Hàm DENSE_RANK()
Hàm DENSE_RANK cũng giống như hàm RANK. Tuy vậy, hàm này không cung cấp khoảng cách giữa các số xếp loại. Thay vào đó, hàm này sẽ xếp loại liên tục cho từng giá trị ORDER BY cụ thể. Với hàm DENSE_RANK, kể cả khi có hai dòng có cùng giá trị xếp loại thì dòng tiếp theo vẫn chỉ tăng thêm một giá trị so với dòng trên. Hàm DENSE_RANK có cú pháp như hàm RANK.
Cú pháp:
DENSE_RANK() OVER (ORDER BY expression)
Có thể bạn quan tâm!
- Dịch Vụ Sql Server Configuration Manager
- SQL Server - 5
- Thiết Lập Các Thông Số Cho Kiểu Dữ Liệu Người Dùng
- SQL Server - 8
- Kết Quả Khi Xác Định Tiêu Đề Trường
- SQL Server - 10
Xem toàn bộ 323 trang tài liệu này.
Trong đó: expression chỉ ra tên trường, hằng số, hàm, biến. Ví dụ: Sắp xếp tuổi trong bảng thisinh.
USE QLTS
SELECT sbd, hoten, DENSE_RANK() OVER(ORDER BY DATEDIFF(YEAR, ngaysinh, GETDATE())) sbd, DATEDIFF(YEAR,
ngaysinh, GETDATE()) tuoi FROM thisinh
- Hàm NTILE
Hàm NTILE được sử dụng để phá vỡ tập hợp bản ghi trong một số cụ thể của các nhóm. Hàm NTILE cũng sử dụng cú pháp như các hàm ranking khác. Hàm NTILE chỉ có tác dụng chia đều số lượng các bản ghi và đưa vào từng nhóm số. Sử dụng hàm NTILE cho từng bản ghi trong một nhóm sẽ đưa các giá trị xếp loại giống nhau. Hàm NTILE là một hàm rất có ích nếu bạn chỉ muốn trả lại một nhóm cụ thể trong các bản ghi.
trả về.
Cú pháp:
NTILE(n) OVER (ORDER BY expression)
Trong đó: expression chỉ ra tên trường, hằng số, hàm, biến; n là số nhóm muốn
Ví dụ
use qlts
SELECT sbd, hoten, ntile(3) OVER(ORDER BY DATEDIFF(YEAR,
ngaysinh, GETDATE())) sbd, DATEDIFF(YEAR, ngaysinh, GETDATE()) tuoi from Thisinh
Kết quả hàm Rank Kết quả hàm DENSE_Rank Kết quả hàm NTile
6) Giá trị NULL
Một cơ sở dữ liệu là sự phản ánh của một hệ thống trong thế giới thực, do đó các giá trị dữ liệu tồn tại trong cơ sở dữ liệu có thể không xác định được. Một giá trị không xác định được xuất hiện trong cơ sở dữ liệu có thể do một số nguyên nhân sau:
- Giá trị đó có tồn tại nhưng không biết.
- Không xác định được giá trị đó có tồn tại hay không.
- Tại một thời điểm nào đó giá trị chưa có nhưng rồi có thể sẽ có.
- Giá trị bị lỗi do tính toán (tràn số, chia cho không,...).
- Những giá trị không xác định được biểu diễn trong cơ sở dữ liệu quan hệ bởi các giá trị NULL. Đây là giá trị đặc biệt và không nên nhầm lẫn với chuỗi rỗng (đối với dữ liệu kiểu chuỗi) hay giá trị không (đối với giá trị kiểu số). Giá trị NULL đóng một vai trò quan trọng trong các cơ sở dữ liệu và hầu hết các hệ quản trị cơ sở dữ liệu quan hệ hiện nay đều hỗ trợ việc sử dụng giá trị này.
7) Các cấu trúc điều khiển chương trình Giới thiệu về xử lý một khối câu lệnh SQL
- BEGIN..END
Tác dụng: Dùng để nhóm các câu lệnh T-SQL Cú pháp:
BEGIN
{ statement | statement_block} END
Ví dụ:
USE QLTS BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements. SET NOCOUNT ON;
-- Insert statements for procedure here
select dbo.Thisinh.sbd, dbo.Thisinh.hoten , dbo.Thisinh.ngaysinh , dbo.Thisinh.quequan, dbo.Thisinh.gioitinh, dbo.Nganh.tenn
from dbo.Thisinh, dbo.Nganh
where dbo.Thisinh.man = dbo.Nganh.man
and (dbo.Nganh.tenn='Ke toan' or dbo.Nganh.tenn='Cong nghe thong tin')
END
- IF..ELSE
Tác dụng: Dùng để thực hiện câu lệnh T-SQL theo điều kiện Cú pháp:
IF Boolean_expression sql_statement|statement_block [ELSE
sql_statement|statement_block]
Ví dụ:
USE QLTS
if(select count(man) from thisinh where man='MN01') >1 begin
else
end begin
select * from Thisinh
select * from Nganh end
- CASE
Biểu thức CASE trong Transaction-SQL vô cùng hữu ích. Hoạt động của biểu thức CASE rất đơn giản chỉ là thực hiện việc so sánh một biểu thức bất kỳ với hàng loạt các giá trị chỉ định trước đó, nếu bạn là người lập trình trong môi trường Visual Basic thì biểu thức CASE của Transaction-SQL gần giống như cấu trúc điều khiển Select Case.
Tác dụng: Cho phép trả về một giá trị dựa trên một biểu thức đúng. Cú pháp:
CASE expression
WHEN expression1 THEN expression1 [WHEN expression2 THEN expression2] […]] ELSE expression]
END
Ví dụ 1: USE QLTS
Select SBD, Hoten,
Case Gioitinh When 1 Then 'Nam' ELSE 'Nu' end , Case Datepart(dw, thisinh.ngaysinh)
When 1 then 'Chu nhat' When 2 then 'Thu 2'
When 3 then 'Thu 3'
When 4 then 'Thu 4'
When 5 then 'Thu 5'
When 6 then 'Thu 6'
When 7 then 'Thu 7'
end
From Thisinh Ví dụ 2:
USE QLTS
UPDATE Thisinh SET quequan = CASE
WHEN quequan = 'Ha Tay' THEN 'Ha Noi'
ELSE quequan END,
man = CASE
WHEN man = 'NH01' THEN 'MN01'
ELSE man END
- WHILE
Với cấu trúc lặp, người lập trình có thể chỉ định một hoặc nhiều câu lệnh sẽ được thực hiện lặp lại nhiều lần trong khi giá trị của biểu thức so sánh vẫn còn đúng. Giống như cấu trúc rẽ nhánh, cấu trúc lặp được phép sử dụng bên trong một lô (batch) các lệnh hoặc bên trong một thủ tục lưu trữ. Giữa cấu trúc rẽ nhánh và cấu trúc lặp không có thứ tự ưu tiên khi chúng lồng vào nhau và cấp độ lồng nhau là không có giới hạn.
Tác dụng: Vòng lặp sẽ được thực hiện cho đến khi biểu thức trong WHILE sai Cú pháp:
WHILE Boolean_expression
{ statement | statement_block } [ BREAK ]
{ statement | statement_block } [ CONTINUE ]
Ví dụ 1:
use qlmbh GO
WHILE (SELECT AVG(dongia) FROM muaban where muaban=1) < 50 BEGIN
UPDATE muaban
SET dongia = dongia + dongia*0.1 SELECT MAX(dongia) FROM muaban
IF (SELECT MAX(dongia) FROM muaban) > 50 BREAK
ELSE
END
CONTINUE
Ví dụ 2: In ra 10 số nguyên dương bắt đầu từ 100.
Declare @sn int Set @sn=100 While (@sn<110) Begin
Print 'So nguyen: ' +convert(char(3),@sn) Set @sn=@sn+1
End
Ví dụ 3: Thực hiện việc lặp giống ví dụ trên, tuy nhiên muốn rằng vòng lặp sẽ bị kết thúc khi mới in tới số nguyên 105.
Declare @sn int Set @sn=100 While (@sn<110) Begin
Print 'So nguyen: ' +convert(char(3),@sn)
If @sn=105
break
Set @sn=@sn+1 End
Print 'Ket thuc vong lap'
Ví dụ 4: Thực hiện việc lặp giống các ví dụ trên, tuy nhiên muốn rằng vòng lặp sẽ không in số nguyên 105
Declare @sn int Set @sn=99 While (@sn<110) Begin
Set @sn=@sn+1 If @sn=105
Continue
Print 'So nguyen: ' +convert(char(3),@sn) End
Print 'Ket thuc vong lap'
Kết quả ví dụ 2 Kết quả ví dụ 3 Kết quả ví dụ 4
- RETURN
Tác dụng: Sử dụng RETURN tại bất kỳ đâu trong chương trình để thoát ra khỏi một khối, một thủ tục. Các câu lệnh sau RETURN không được thực hiện.
Cú pháp:
RETURN [ integer_expression ] Ví dụ 1:
USE [QLTS] GO
create PROCEDURE [dbo].[sp_thu] AS
BEGIN
declare @slts int
select @slts=(select COUNT(sbd) from thisinh where man='MN01') return @slts
print 'So luong thi sinh:' + str(@slts)
END
- WAITFOR
Tác dụng: Câu lệnh WAITFOR chỉ thị cho SQL Server tạm dừng một thời gian nhất định trước khi xử lý tiếp các câu lệnh sau đó.
Cú pháp:
WAITFOR DELAY <'Time'> | TIME <'Time'>
Trong đó: DELAY là thời gian chờ nhất định tính bằng giờ phút giây, thời gian lớn nhất là 24 giờ; không thể sử dụng các tham số là ngày tháng năm.
TIME là thời gian chờ cho đến khi thời gian được chỉ định mới thực hiện tiếp các lệnh sau đó.
Ví dụ 1: Máy tính chờ trong 2 giây rồi mới hiện dòng thông báo „Bat dau‟.
WAITFOR DELAY '00:00:02'
print 'Bat dau'
Ví dụ 2: Máy tính chờ đến 2 giờ 27 phút 0 giây rồi mới hiện dòng thông báo
„Bat dau‟.
WAITFOR time '2:27:00'
print 'Bat dau chay'
Tác dụng: Đưa thông báo tới máy khách Cú pháp:
PRINT msg_str|@local_variable|string_expr Trong đó :
- msg_str: Là một xâu kí tự thông báo hoặc một hằng xâu Unicode.
- @ local_variable: Là một biến xâu, phải có kiểu dữ liệu là char hoặc varchar
- string_expr: Là một biểu thức trả về một xâu.
Ví dụ: Đưa ra số thí sinh đăng kí dự thi ngành „MN01‟. use qlts
declare @sots int
select @sots=(select COUNT(*) from thisinh where man='MN01') print 'Số thí sinh đăng kí dự thi ngành MN001 là: ' +str(@sots)
8) Chú thích
Chú thích là các diễn giải trong chương trình (đoạn lệnh) mà trình biên dịch sẽ bỏ qua. Mục đích của việc dùng chú thích là giải thích mã lệnh để bảo trì hoặc sửa đổi về sau dễ dàng. Chúng ta có thể sử dụng chú thích trong từng câu lệnh, tập lệnh hoặc dùng trong thủ tục lưu trữ . Microsoft SQL Server hỗ trợ hai loại chú thích sau:
- chú thích trên 1 dòng dùng hai dấu trừ: --
- chú thích nhiều dòng: /* . . . */ Ví dụ 1: Chú thích trên 1 dòng USE AdventureWorks
-- Employee table contains the details of an employee.
-- This statement retrieves all the rows of the table Employee. SELECT * FROM Employee
Ví dụ 2: Chú thích trên nhiều dòng
/* Employee table contains the details of an employee.
This statement retrieves all the rows of the table Employee.*/
SELECT * FROM Employee
.....