Cơ sở dữ liệu T-SQL

- Các kiểu dữ liệu thường dùng:

+ Kiểu số:

Số nguyên: tinyint(8bit), smallint(16bit), int(32bit), bigint(64bit)

Số thực: float(32-64bit), real(32bit), decimal(5-17B), numberic(5-17B), money(8B)

+ Kiểu chữ: char(n), varchar(n), nchar(n), nvarchar(n), text với n là số kí tự. Kiểu

nchar(n) và nvarchar(n) biểu diễn các kí tự mã Unicode. Kiểu char(n), varchar(n) biểu

diễn các kí tự mã Ascii

Char(n): 1 <= n <= 8000 mỗi kí tự cần 8bit để lưu trữ

Nchar(n): 1 <= n <= 4000 mỗi kí tự cần 16bit để lưu trữ

Varchar(n): 1 <= n <= 8000 mỗi kí tự cần 8bit để lưu trữ

pdf34 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 2343 | Lượt tải: 1download
Tóm tắt nội dung Cơ sở dữ liệu T-SQL, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 không phải là s hoặc d 
+ in (a,b,…): hoặc là a hoặc là b 
+ not in (a,b,…): không là a mà cũng không là b 
+ all(a,b): là cả a và b 
+ any/some(a,b): là giá trị nào đó 
+ is null: dùng is null chứ không phải = null khi ô thuộc cột đó có 
giá trị null 
+ exists/not exists: nếu khối chọn select ở mệnh đề where trả lại bản ghi rỗng/không 
rỗng thì lấy/không lấy hàng đang duyệt 
- Group by 
+ Số cột cần đem gom nhóm ở group by phải >= số cột được chọn ở select(>=2) trừ đi 
1 
ANHMATTROI – TIN5A 
23 
+ Nếu có các hàm count/sum/avg/min/max() ở select: những hàm này chỉ có 
tác dụng trên nhóm 
- Having -- chỉ có tác dụng trên nhóm không có tác dụng đến toàn bảng 
- Order by asc/desc 
 + asc: sắp xếp tăng dần(mặc định) 
 + desc: sắp xếp giảm dần 
- Compute count/avg/min/max/sum(),… by <là một/nhiều trong các cột ở order 
by 
và thứ tự các cột phải giống như ở order by> 
+ Bắt đầu từ hàng trên cùng đến cuối bảng của những cột sắp xếp ở order by tách lấy 
những hàng có giá trị trùng nhau: các lệnh ở compute sẽ thực hiện trên những phần đã 
tách ra 
+ Đã có compute … by … phải có order by …. nếu compute không có by thì không 
compute sẽ thực hiện trên toàn bảng 
- Offset rows 
- Fetch next rows only 
- Thứ tự chạy các khối lệnh: khối lệnh from chạy đầu tiên -> khối lệnh where -> group 
by/order by -> …. -> cuối cùng là khối lệnh select 
- Nối kết quả của hai khối lệnh truy vấn bằng union hoặc union all, các cột ở kết quả hai 
khối truy vấn phải cùng kiểu dữ liệu. 
+ Union: nối hai khối đó lại xong sắp xếp theo thứ tự từ điển, những giá trị bị trùng chỉ 
dữ lại một giá trị 
+ Union all: chỉ nối khối 2 vào khối 1 xong không làm thay đổi gì 
select from 
union/union all 
select from 
Ví dụ: 
select masv from SinhVien 
union all 
ANHMATTROI – TIN5A 
24 
select tensv from SinhVien 
- Loại những giá trị bị trùng ở kết quả truy vấn của khối truy vấn 1 với giá trị ở kết quả 
truy vấn của khối truy vấn 2 
(khối truy vấn 1) 
 minus 
(khối truy vấn 2) 
 Ví dụ: 
select hoten from SinhVien 
minus 
select hoten from SinhVien 
where masv = 10001 
6. Biến và câu lệnh rẽ nhánh, vòng lặp 
- Biến 
+ Khai báo biến: declare @ 
Biến do người dùng khai báo luôn có @ trước tên biến, lúc khai báo có thể gán giá mặc 
định cho biến: declare @x int = 0, @y float = 1 
ANHMATTROI – TIN5A 
25 
+ Gán giá trị: set @ = 
 Mỗi lần gán giá trị cho một biến là một set 
+ Một số biến hệ thông thường dùng: biến hệ thống có hai chữ @@ trước tên biến và 
chỉ được dùng không thay đổi giá trị của nó theo ý muốn được 
+ Con trỏ: khai báo 
declare @<khai báo các biến, số biến khai báo ở dòng này = số cột ở câu lệnh truy 
vấn ở dưới> 
declare cursor for 
 select 
 from 
 ………………… 
open 
fetch next from into 
while @@fetch_status = 0 begin 
@@fetch_status Số nguyên Nếu là 0 đọc thành công 
còn nếu không ngược lại 
@@connections Số nguyên Tổng số kết nối tới 
MSSQL 
@error Số nguyên 
Nếu là 0 không có lỗi còn 
nếu không tương ứng với 
các lỗi 
@@language Chuỗi Tên ngôn ngữ mà 
MSSQL đang sử dụng 
@@rowcount Số nguyên 
Tổng số mẫu tin được tác 
động vào câu lệnh truy 
vấn gần nhất 
@@servername Chuỗi Tên máy 
@@servicename Chuỗi Tên dịch vụ 
@@version Chuỗi Phiên bản MSSQL đang 
cài trên máy 
ANHMATTROI – TIN5A 
26 
 fetch next from into 
end 
close 
deallocate 
Ví dụ: khai báo biến @ToaDo có kiểu dữ liệu table chứa hai cột x, y sau đó duyệt 
bảng bằng con trỏ 
-- Tạo bảng ToaDo lưu tọa đọ của các điểm 
declare @ToaDo table 
( 
 x int, 
 y int 
) 
insert into @ToaDo 
 values(1,2) 
insert into @ToaDo 
 values(-3,2) 
insert into @ToaDo 
 values(6,8) 
insert into @ToaDo 
 values(2,4) 
insert into @ToaDo 
 values(9,1) 
insert into @ToaDo 
 values(12,5) 
-- Duyệt tọa độ các điểm 
declare @x int, @y int 
declare contro cursor for 
 select x, y 
 from @ToaDo 
open contro 
declare @i int = 1 
fetch next from contro into @x, @y 
while @@FETCH_STATUS = 0 begin 
 print N'Tọa độ điểm thứ ' + cast(@i as varchar(2)) 
 + N' là: (' + cast(@x as varchar(2)) 
 + ',' + cast(@y as varchar(2)) + ')' 
 set @i = @i + 1 
 fetch next from contro into @x, @y 
end 
close contro 
deallocate contro 
ANHMATTROI – TIN5A 
27 
- Câu lệnh rẽ nhánh if … else 
if begin 
end 
else begin 
end 
+ Nếu điều kiện ở khối if đúng thì các lệnh ở khối if chạy còn nếu sai thì các lệnh 
ở khối else chạy 
+ Nếu chỉ cần các lệnh ở khối if chạy hay không thì không cần khối else 
Ví dụ: if 10>9 print N'Đúng' 
+ Dùng exists, not exists trong if: nếu tồn tại hoặc không tồn tại 
Ví dụ: tạo cơ sở dữ liệu quản lí sinh viên có kiểm tra xem cơ sở dữ liệu đã có chưa. 
Nếu chưa có thì tạo cơ sở dữ liệu đó. Nếu có rồi thì hiện ra thông báo cơ sở dữ liệu 
này đã có rồi. 
use master 
if not exists(select 'true' from sys.databases where name = 'QLSV') 
begin 
 create database QLSV on 
 ( 
 name = 'Quanlysinhvien', 
 filename = 'C:\Bai tap\Quanlysinvien.mdf', 
 size = 10mb, 
 maxsize = 30mb, 
 filegrowth = 5% 
 ) 
 log on 
 ( 
 name = 'Quanlysinhvien_log', 
 filename = 'C:\Bai tap\Quanlysinvien_log.ldf', 
ANHMATTROI – TIN5A 
28 
 size = 5mb, 
 maxsize = 20mb, 
 filegrowth = 5% 
 ) 
end 
else print N'Cơ sở dữ liệu QLSV đã có rồi' 
Ví dụ: với bảng 
use QLSV 
if not exists(select * from QLSV.sys.objects where name = 'LopHoc') 
begin 
 create table LopHoc 
 ( 
 malop nchar(30) constraint KhoaChinh primary key, 
 tenlop nchar(20) not null, 
 diadiem nchar(20) not null, 
 magvql int not null 
 ) 
end 
else print N'Bảng lớp học đã có rồi' 
Ví dụ: với view 
use QLSV 
if exists(select * from QLSV.sys.views where name = 'Diem_View') 
begin 
 drop view Diem_View 
 print N'Diem_View đã xóa thành công' 
end 
else print N'Diem_view không có trong cơ sở dữ liệu QLSV nên không xóa 
được' 
- Câu lệnh chuyển case 
case 
when 
then 
when 
then 
else <nếu không phải là những giá trị ở các when thì thực hiện 
công việc> 
end 
VD: tạo biến có kiểu dữ liệu là bảng có một cột x lưu các số và kiểm tra các số này có 
chia hết cho 2 không 
ANHMATTROI – TIN5A 
29 
declare @a table 
( 
 x int not null 
) 
insert into @a values(9) 
insert into @a values(2) 
insert into @a values(0) 
insert into @a values(1) 
insert into @a values(8) 
insert into @a values(2) 
------------------------ 
select x,case x%2 
 when 0 then N'Có' 
 else N'Không' 
 end as N'Chia hết cho 2' 
from @a 
- Vòng lặp while 
while begin 
 + nếu gặp lệnh continue ở đây sẽ bỏ qua những lệnh ở dưới continue và chuyển 
sang vòng lặp tiếp theo 
 + nếu gặp break thì dừng hẳn vòng lặp 
 + continue và break chỉ xuất hiện trong vòng lặp 
end 
VD: hiện thị các số từ 1 đến 15 nếu gặp số 6, 10 thì không hiện thị những số này 
declare @i int 
set @i = 1 
print N'Các số i là' 
while @i<16 begin 
 if @i=6 or @i=10 begin 
 set @i = @i + 1 
ANHMATTROI – TIN5A 
30 
 continue 
 end 
 print 'i = ' + cast(@i as varchar(3)) 
 set @i = @i + 1 
end 
VD: tìm ước chung lớn nhất của 112 va 68 
print N'Ước chung lớn nhất của 112 và 68 là: ' 
declare @a int,@b int, @phandu int 
set @a = 112 
set @b = 68 
while 1>0 begin 
 if @b=0 break 
 set @phandu = @a%@b 
 set @a = @b 
 set @b = @phandu 
end 
print cast(@a as char(3)) 
7. Thủ tục 
- Tạo thủ tục: 
ANHMATTROI – TIN5A 
31 
create procedure/proc (<các biên tham số truyền vào output/out(không 
nhất thiết phải có)>) as 
with recompile/with encryption -- dòng này có hoặc không 
begin 
end 
+ with recompile: mỗi lần gọi thủ tục – thủ tục sẽ biên dịch lại 
+ with encryption: không xem được nội dung của thủ tục 
- Sửa thủ tục: 
Thay create bằng alter và bắt đầu thay đổi thủ tục đã tạo 
- Xóa thủ tục: 
drop procedure 
- Lời gọi thủ tục: 
exec 
+ Nếu tham số truyền vào khai báo ở lệnh tạo thủ tục là output/out thì các tham số 
truyền vào cũng bị thay đổi theo 
Ví dụ: Tạo thủ tục có tên CTGD_Ngay nhận ngày giao dịch là tham số truyền vào, 
hiện thị thông tin giao dịch ngày như: số tài khoản, loại giao dịch, số tiền giao dịch 
trong ngày đó và tổng số tiền theo từng loại giao dịch. Hiển thị tông tin giao dịch 
ngày 2-2-2012 
create procedure CTGD_Ngay(@Ngay datetime) as 
begin 
 select SoTK, LoaiGD, sum(SoTienGD) 
as N'Tổng số tiền giao dịch' 
 from ChiTietGD 
 where NgayGD = @Ngay 
 group by SoTK, LoaiGD 
end 
exec CTGD_Ngay '2-2-2012' 
ANHMATTROI – TIN5A 
32 
8. Hàm 
- Tạo hàm 
+ Dạng chung: 
create function () 
returns as begin 
 return 
end 
+ Tạo hàm với kiểu giá trị trả lại là bảng: 
create function () 
returns @ table 
( 
 khai báo các biến ở đây những biến này phải có kiểu dữ liệu phù hợp với các 
cột được chọn ở 
 khối lệnh select sẽ được định nghĩa ở dưới đây 
) as begin 
 insert into @ 
 select 
 from 
 ……………… 
 return 
end 
- Sửa hàm: 
Thay create bằng alter 
- Xóa hàm: 
drop function 
ANHMATTROI – TIN5A 
33 
- Lời gọi hàm: 
+ Với hàm trả lạ một giá trị 
select dbo.() 
Ví dụ: tạo hàm TienTK nhận số tài khoản là tham số truyền vào và trả về số tiền trong 
tai khoản này. In ra số tiền của tài khoản 9513 
create function TienTK(@SoTK char(12)) 
returns int as 
begin 
 return 
 ( 
 select SoTien 
 from TaiKhoan 
 where @SoTK = SoTK 
 ) 
end 
declare @sotien int = 0 
set @sotien = dbo.TienTK('9513') 
print N'Số dư: ' 
print @sotien 
+ Với hàm trả lại một bảng dữ liệu 
select */…… 
from dbo.() 
Ví dụ: tạo hàm CTTGD_TK nhận tham số truyền vào là số tài khoản và trả về bản 
ghi chứa thông tin sau: loại giao dịch, ngày giao dịch, số tiền giao dịch. Viêt lời gọi 
hàm cho tài khoản 9512 
create function CTGD_TK(@SoTK char(12)) 
returns @Bang table 
( 
 LoaiGD char(3), 
 NgayGD datetime, 
 SoTienGD int 
) as 
begin 
 insert into @Bang 
 select LoaiGD, NgayGD, SoTienGD 
 from ChiTietGD 
ANHMATTROI – TIN5A 
34 
 where @SoTK = SoTK 
 return 
end 
select * from dbo.CTGD_TK(‘9512’) 

File đính kèm:

  • pdfCơ sở dữ liệu T-SQL.pdf
Tài liệu liên quan