SQL Server - 7


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!

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 1Kết quả hàm Rank Kết quả hàm DENSE Rank Kết quả hàm NTile 6 Giá trị NULL Một 2Kết quả hàm Rank Kết quả hàm DENSE Rank Kết quả hàm NTile 6 Giá trị NULL Một 3

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 4

- 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ử 5Kết quả ví dụ 2 Kết quả ví dụ 3 Kết quả ví dụ 4 RETURN Tác dụng Sử 6Kết quả ví dụ 2 Kết quả ví dụ 3 Kết quả ví dụ 4 RETURN Tác dụng Sử 7

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'

- PRINT

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

.....

⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 16/07/2022