Tải bản đầy đủ (.docx) (16 trang)

Hệ quản trị cơ sở dữ liệu SQL Server

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (176.39 KB, 16 trang )

/*tao database moi*/
create database Quanlysinhvien
/*xóa database*/
drop database Quanlysinhvien
/*Sửa tên của database*/
alter database quanlysinhvien
modify name = QLSV
/* sử dụng database cụ thể*/
use Quanlysinhvien
GO
/* thêm bảng*/
create table Sinhvien
(
MaSV int not null primary key identity,
TenSV nvarchar(100) not null,
Gioitinh nvarchar(3) default 'NAM',
Ngaysinh date,
Que nvarchar(500),
Lop nvarchar(10)
)
create table Monhoc
(
MaMH int not null,
TenMH nvarchar(50) not null,
DVHT int
)
create table Ketqua
(
MaSV int,
MaMH int,
Diem int check (Diem>=0 and Diem<=10) /*Biểu thức luận lý */


constraint primary_key primary key (MaSV, MaMH)
)
/* Đổi tên cột */
exec sp_rename "sinhvien.tensv", "hoten"
/*Đổi tên bảng*/
exec sp_rename sv,"sinhvien"
/* Xóa bảng*/
/*drop table Sinhvien*/
/* Sửa bảng*/
/*Chèn thêm 1 cột*/
Alter table Sinhvien
ADD
Dienthoai varchar(11),
abc nvarchar(40)
/*thay đổi kiểu dữ liệu của cột*/
Alter table sinhvien
Alter column abc int not null
/*thêm khóa*/
alter table Monhoc
ADD
constraint pk_monhoc primary key(MaMH)

1


alter table sinhvien
add constraint u_sinhvien_abc unique (abc)
/*Xóa cột*/
Alter table Sinhvien
Drop column abc, Dienthoai

/*Xóa ràng buộc*/
Alter table sinhvien
Drop constraint pk_monhoc
/* tắt các constraint*/
ALTER TABLE Tên_bảng
NOCHECK CONSTRAINT ALL| Tên_constraint [ , ...]
/*Bật các Constraint */
ALTER TABLE Tên_bảng
CHECK CONSTRAINT ALL| Tên_constraint [ , ...]
/*Tạo khóa ngoại kết nối giữa 2 bảng */
Alter table Ketqua
ADD
constraint foreignkey_SV_KQ foreign key (MaSV) references Sinhvien(MaSV)
alter table ketqua
ADD
constraint foreignkey_MH_KQ foreign key (MaMH) references Monhoc(MaMH)
/*chèn
Insert
*/
insert
values

dữ liệu
into Tên_Bảng [(tên trường cần chèn)] values (Giá trị của trường)
into sinhvien
(N'Phạm Trung Tính','Nam','03/30/1996','Quảng Ninh','AT10D')

insert into sinhvien (TenSV,Gioitinh,Ngaysinh, Que, Lop)
values (N'Trần Bảo Trọng','Nam','2000/12/14','Hà Giang','AT10D')
insert sinhvien

values (N'Lê Thùy Dung',N'Nữ','05/12/1997','Hà Nội','AT10D')
insert Sinhvien
values (N'Lê Trường An',N'Nam','11/20/1995',N'Ninh Bình','AT10D')
insert sinhvien
values (N'Phạm Thị Hương Giang',N'Nữ','2/21/1999',N'Hòa Bình','AT10C')
insert sinhvien
values (N'Đoàn Duy Thức',N'Nam','4/12/1993',N'Hà Nội','AT10C')
insert sinhvien
values (N'Dương Tuấn Thông',N'Nam','4/12/1991',N'Nam Định','AT10D')
insert sinhvien
values (N'Lê Thành Đạt',N'Nam','4/15/1993',N'Phú Thọ','AT10A')
insert Monhoc (MaMH,TenMH)
values (1, N'Lý Thuyết Cơ sở dữ liệu')

2


insert Monhoc
values (2, N'Toán cao cấp',3)
insert Monhoc
values (3, N'Mạng máy tính',3)
insert Monhoc
values (4, N'Tin đại cương',4)
insert Ketqua
values (1,1,8)
insert Ketqua
values (1,2,5)
insert
values
insert

values
insert
values

Ketqua
(2,2,1)
Ketqua
(3,2,7)
Ketqua
(4,2,3)

insert Ketqua
values (1,3,7)
insert Ketqua
values (2,1,9)
insert Ketqua
values (4,1,2)
insert Ketqua
values (3,1,4)
insert Ketqua
values (2,3,2)
insert Ketqua
values (5,1,4)
insert Ketqua
values (6,1,2)
insert Ketqua
values (6,3,9)
insert Ketqua
values (6,2,7)
insert Ketqua

values (6,5,10)
/* update dữ liệu
Update Ten_Bang set giá_trị_gán_cho_các_trường [where điều_kiện]
*/

3


update Sinhvien set TenSV=N'Lê Trung Tính', Lop=N'At10D' where
MaSV='SV001'
select * from Sinhvien
update Sinhvien set Gioitinh = N'Nữ' where MaSV=2
/* xóa bản ghi (dữ liệu)
Delete Ten_bang [where điều_kiện]
*/
delete Sinhvien where Gioitinh='Nữ'
delete Ketqua where Diem<4
/*chuyển ID tự tăng về 1 giá trị */
DBCC CHECKIDENT ('Sinhvien', RESEED,0)
/*chuyển id về 0 */
/*////////////////////////////////////////////////////////////////////////////
*/
/* Truy vấn dữ liệu */
/*Cấu trúc câu lệnh Select
Select
[Ten_Bang.]Ten_Cot[,…]
From Ten_Bang1 <Liên kết > Ten_Bang2
Where <Điều kiện>
Group by <các cột gom nhóm>
HaVing <Điều kiện lọc nhóm>

Order by [Ten_Bang.]Ten_cot [asc/desc,…]
Compute Hàm thống kê [By Ten_cot] */
/* lấy dữ liệu
select *
select *
select *

từ bảng*/
from Sinhvien
from Monhoc
from Ketqua

/* đặt định danh cho cột, bảng*/
select sv.MaSV, TenSV as 'Tên Sinh Viên'
from Sinhvien as sv
/* Kết nối dữ liệu từ nhiều bảng */
/* kết nối sử dụng where*/
select sv.MaSV, TenSV as 'Tên Sinh Viên', TenMH, Diem
from Sinhvien as sv, Monhoc as Mh, Ketqua as kq
Where sv.MaSV = kq.MaSV and kq.MaMH = mh.MaMH
/* Kết nối dùng JOIN chính là inner join*/
select sv.MaSV, TenSV as 'Tên Sinh Viên', TenMH, Diem
from ((Sinhvien as sv join Ketqua as kq on sv.MaSV = kq.MaSV) join
Monhoc as Mh on kq.MaMH=mh.MaMH)
/* Kết nối dùng left JOIN*/
select sv.MaSV, TenSV as 'Tên Sinh Viên', TenMH, Diem
from ((Sinhvien as sv left join Ketqua as kq on sv.MaSV = kq.MaSV)
left join Monhoc as Mh on kq.MaMH=mh.MaMH)
/* Kết nối dùng right JOIN*/
select sv.MaSV, TenSV as 'Tên Sinh Viên', TenMH, Diem

from ((Sinhvien as sv left join Ketqua as kq on sv.MaSV = kq.MaSV)
right join Monhoc as Mh on kq.MaMH=mh.MaMH)
/* Kết nối dùng full JOIN*/
select sv.MaSV, TenSV as 'Tên Sinh Viên', TenMH, Diem
from ((Sinhvien as sv full join Ketqua as kq on sv.MaSV = kq.MaSV)
full join Monhoc as Mh on kq.MaMH=mh.MaMH)
/* Sử dụng cấu trúc lệnh trong Select */

4


select Masv, TenSV,
case
when Gioitinh=N'NAM' then N'đây là nam'
when Gioitinh =N'Nữ' then N'Đây là nữ'
else N'Không Xác định' end as 'thông tin'
from Sinhvien
select sinhvien.Masv, TenSV, Monhoc.TenMH, Diem,
case
when Diem>=8 then N'Đạt điểm giỏi'
when Diem>=7 and Diem<8 then N'Đạt điểm khá'
when Diem>=5 and Diem<7 then N'Đạt điểm trung bình'
else N'Thi lại' end as 'thông tin'
from Sinhvien, Monhoc, Ketqua
where Sinhvien.MaSV=Ketqua.MaSV and Ketqua.MaMH=Monhoc.MaMH
/* Sử dụng các toán tử trong select
Distinct : loại bỏ các dòng dữ liệu trùng
Top n : lấy n dòng đầu tiên
Top n with ties : lấy những dòng thuộc n cấp đầu tiên
Top n PERCENT : lấy N % dòng đầu tiên */

select distinct TenSV
from Sinhvien, Ketqua
where Sinhvien.MaSV = Ketqua.MaSV
select top (2) TenSV,TenMH, Diem
from Sinhvien, Ketqua, Monhoc
where Sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH
select top (50) percent TenSV,TenMH, Diem
from Sinhvien, Ketqua, Monhoc
where Sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH
/* Sử dụng mệnh đề where để lọc dữ liệu hoặc để gom nhóm*/
select TenMH,DVHT from Monhoc where DVHT<>''
select MaSV, TenSV from Sinhvien where Gioitinh=N'Nam' and Que=N'Hà nội'
/*Có thể sử dụng các toán tử:
like: tìm chuỗi gần đúng
%: Thay thế 1 chuỗi
-: thay thế 1 ký tự
Between GT1 AND GT2: giá trị nằm giữa 2 giá trị. */
select * from Sinhvien where TenSV like '%trung%'
select * from Sinhvien where TenSV like '%tí[k-o][^M-Z]'
select TenSV,TenMH, Diem
from Sinhvien, Ketqua, Monhoc
where Sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH and
(Diem between 5 and 8)
select distinct tensv
from Sinhvien, Ketqua, Monhoc
where Sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH and
(Monhoc.MaMH=1 or Monhoc.MaMH=2)
select distinct tensv

5



from Sinhvien, Ketqua, Monhoc
where Sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH and
Monhoc.MaMH=1
Intersect
/*EXCEPT phép trừ, phép hợp là UNION, phép giao là
Intersect */
select distinct tensv
from Sinhvien, Ketqua, Monhoc
where Sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH and
Monhoc.MaMH=3
/* sắp xếp theo thứ tự tăng, giảm*/
select * from Ketqua
order by Diem DESC,MaSV ASC
select TenSV, TenMH,Diem
from sinhvien, Monhoc,Ketqua
where Sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH
order by Diem DESC
/* Mệnh đề Group by : mệnh đề gom nhóm dữ liệu
Mệnh đề này phải có khi trong câu truy vấn có sử dụng hàm thống kê và trên
mệnh đề Select có lấy các giá trị không sử dụng hàm thống kê
Cú pháp : Group By Danh sách cột,Biểu thức
Với Danh sách cột,Biểu thức :được lấy trên mệnh đề Select không sử dụng hàm
thống kê
Các Hàm thống kê:
Sum(Ten_Cot) :tính tổng với cột có kiểu số
Count(Ten_Cot/*) :tính tổng số dòng
AVG(Ten_Cot) :tính giá trị trung bình
Max(Ten_cot) : giá trị lớn nhất

Min(Ten_Cot) :giá trị nhỏ nhất)
*/ */
/*
Mệnh đề HaVing : mệnh đề Lọc nhóm dữ liệu
Mệnh đề này chỉ tồn tại khi trong câu truy vấn có mệnh đề Group By và điều
kiện lọc dữ liệu có hàm thống kê
Chú ý : trong câu truy vấn có hai mệnh đề lọc dữ liêu là Where và havinh
Where :lọc dữ liệu để tạo nhóm ( có điều kiện không sữ dụng hàm thống kê)
Having :lọc nhóm( các điều kiện có thống kê)
Mệnh đề OrDer By : Mệnh đề sắp xếp dữ liệu
Cú pháp Order by [Ten_bang.]Ten_Cot [asc/Desc] [,…]
Mệnh đề Compute /Compute .. By : là mệnh đề tạo giá trị thống kê cuối kết quả
hoặc thống kê theo cột
Cú pháp
Compute Hàm thống kê : tạo thống kê cuối kết quả
Compute Hàm thống kê By [Ten_Bang.]Ten_cot :thống kê theo cột,dữ liệu phải
được sắp xếp theo cột này
Chú ý: Trong View không có mệnh đề này
*/
select COUNT(*)
from Ketqua
/* sử dụng group by*/
select tensv, avg(ketqua.Diem)
from Sinhvien, Monhoc, Ketqua
where Sinhvien.masv = Ketqua.MaSV and Monhoc.MaMH = Ketqua.MaMH
Group by tensv

6



/* truy vấn lồng nhau*/
select tensv, Diem from Ketqua, sinhvien
where sinhvien.masv = Ketqua.MaSV and MaMH = 'MH001' and
Diem = (select MAX(Diem) from Ketqua where MaMH = 'MH001')
(select tensv, Diem from Ketqua, sinhvien
where sinhvien.masv = Ketqua.MaSV)
EXCEPT
/*EXCEPT phép trừ, dùng phép hợp là UNION, phép giao là
Intersect */
(select tensv, Diem from Ketqua, sinhvien
where sinhvien.masv = Ketqua.MaSV and Diem<5)
select tensv, Diem from Ketqua, sinhvien
where sinhvien.masv = Ketqua.MaSV
and Diem not IN (select Diem from Ketqua, sinhvien
where sinhvien.masv = Ketqua.MaSV and Diem<5)
select TenSV
from Sinhvien where Masv = 'SV001'
/*Update dữ liệu*/
update Sinhvien set Gioitinh=N'Nữ', Que = 'HCM' where Masv = 'SV001'
select COUNT(distinct Masv)
from Ketqua
select top 50 percent * from sinhvien
select Top 1 Masv
from ketqua
select MaSV,avg(Diem)
from Ketqua
group by Masv
/*Câu 1: Cho biết mã số, tên, điểm thi tất cả các môn của sv: abc*/
select Sinhvien.MaSV, Tensv, TenMH, Diem
from Sinhvien, Ketqua, Monhoc

where Sinhvien.Masv = Ketqua.MaSV and Ketqua.MaMH=Monhoc.MaMH and Tensv=N'Phạm
Trung Tính'
select Sinhvien.MaSV, Tensv, TenMH, Diem
from ((Sinhvien join Ketqua on sinhvien.masv = Ketqua.MaSV) join Monhoc on
Ketqua.MaMH=Monhoc.MaMH)
where Tensv=N'Phạm Trung Tính'
/*câu 2: Cho biết mã số, tên môn và điểm thi ở những môn mà sinh viên abc phải
thi lại (điểm<5)*/
select sinhvien.masv, TenMH, Diem
from ((Sinhvien join Ketqua on sinhvien.masv = Ketqua.MaSV) join Monhoc on
Ketqua.MaMH=Monhoc.MaMH)
where Tensv=N'Phạm Trung Tính' and Diem<5
/*câu 3: Cho biết mã số, tên những sinh viên đã thi ít nhất là 1 trong 3 môn
Cơ sở dữ liệu,
cấu trúc dữ liệu, mạng máy tính.*/
select distinct sinhvien.Masv, tensv
from ((Sinhvien join Ketqua on sinhvien.masv = Ketqua.MaSV) join Monhoc on
Ketqua.MaMH=Monhoc.MaMH)

7


where TenMH in (select TenMH from Monhoc where
TenMH =N'Mạng máy tính' or TenMH=N'Toán cao cấp' or
TenMH=N'Hệ quản trị cơ sở dữ liệu')
/* câu 4: Cho biết mã số, tên những môn mà sinh viên có mã số ms001 chưa có
điểm */
(select Mamh, tenmh from Monhoc)
EXCEPT
/*phép trừ, dùng phép hợp là UNION, phép giao là Intersect */

(select Monhoc.MaMH, TenMH
from (Ketqua join Monhoc on Ketqua.MaMH=Monhoc.MaMH)
where masv ='SV001')
select * from sinhvien
select * from Ketqua
select * from Monhoc
/* câu 5: Cho biết mã số, tên những sinh viên có điểm thi môn MH001 không thấp
nhất khoa*/
select Sinhvien.Masv, tensv, diem
from Sinhvien, Ketqua
where sinhvien.masv = Ketqua.MaSV and MaMH='MH001' and Diem>(select MIN(Diem)
from Ketqua where MaMH='MH001')
/*câu 6: Cho biết mã số và tên những sinh viên có điểm thi môn MH001 lớn hơn
điểm thi môn MH001 của sinh viên SV003*/
/* câu 7: Cho biết số sinh viên phải thi lại môn Cơ sở dữ liệu */
select TenMH as 'Tên Môn Học', COUNT(*) as 'Số sinh viên thi lại'
from Ketqua, Monhoc
where Ketqua.MaMH = Monhoc.MaMH and TenMH=N'Lý thuyết cơ sở dữ liệu' and
Diem<5
group by TenMH
/* câu 8: Đối với mỗi môn, cho biết tên môn và số sinh viên phải thi lại môn
đó mà số sinh viên thi lại >=2*/
select TenMH as 'Tên Môn Học', COUNT(*) as 'Số sinh viên thi lại'
from Ketqua join Monhoc on Ketqua.MaMH = Monhoc.MaMH
where Diem<5
group by TenMH
having COUNT(*) >=2
Order by TenMH desc
/*Câu 9: Cho biết điểm cao nhất môn MH001 mà các sinh viên đạt được*/
select sinhvien.MaSV, Tensv

from Ketqua join sinhvien on Ketqua.MaSV = sinhvien.masv
where MaMH='MH001' and Diem=(select MAX(Diem) from Ketqua where MaMH='MH001')
/*Câu 10: Cho biết mã số, tên và lớp của sinh viên đạt điểm cao nhất môn Lý
thuyết cơ sở dữ liệu */
/*câu 11: Cho biết sinh viên có điểm trung bình chung >=5 */
use QLSV
select Tensv as 'tên sinh viên', AVG(CAST(Diem as float)) as 'Điểm trung bình'
from sinhvien, Ketqua
where sinhvien.masv = Ketqua.MaSV and ketqua.MaSV='SV001'
group by Tensv
having AVG(DIEM)>=5
/*test*/

8


select * from Ketqua where MaSV='SV001'
/*Câu 12: Với mỗi sinh viên cho biết mã số, tên và điểm trung bình chung học
tập của sinh viên đó*/
/* câu 13: Đối với mỗi lớp, lập bảng điểm gồm mã số, tên sinh viên và điểm
trung bình chung học tập.
Sắp xếp danh sách theo chiều giảm dần của điểm trung bình chung
học tập và chiều tăng dần của họ tên*/
select Lop, Tensv, AVG(Diem)
from sinhvien, Ketqua
where sinhvien.masv = Ketqua.MaSV
Group by Lop, Tensv
order by Lop desc, tensv asc
/* Câu 14: Cho biết mã số và số điểm lớn hơn 7 của những sinh viên có hơn một
nửa số điểm là >=7 *//////////

select * from Ketqua order by MaSV
select ketqua.masv, count(mamh)
from ketqua
where Diem>=5
group by Ketqua.MaSV
having COUNT(MaMH) >=(select count(distinct mamh)/2 from ketqua)
select distinct mamh from Ketqua
/* Câu 15: Cho biết mã số và tên nhưng sinh viên có hơn một nửa số điểm >=5*/
/* Câu 16: Đối với mỗi lớp, cho biết mã số và tên
từ 2 môn trở lên*/
select ketqua.MaSV,tensv, COUNT(*)
from sinhvien, ketqua
where sinhvien.masv = ketqua.MaSV and Diem<5
group by Ketqua.MaSV, tensv
having COUNT(*)>=2
/* câu 17: Cho biết mã số và tên những môn học mà
điểm >=5*/
((select MaMH, TenMH
from Monhoc)
EXCEPT
(select Distinct Ketqua.MaMH, Tenmh from Monhoc,
Monhoc.MaMH=Ketqua.MaMH and Diem<5))
EXCEPT
((select MaMH, TenMH
from Monhoc)
EXCEPT
(select Distinct Ketqua.MaMH, Tenmh from Monhoc,
Monhoc.MaMH=Ketqua.MaMH))

nhưng sinh viên phải thi lại


tất cả các sinh viên đều đạt

Ketqua where

Ketqua where

/*C2*/
select MaMH, TenMH
from Monhoc
Where MaMH not in (select Distinct Ketqua.MaMH from Ketqua where Diem<5) and
MaMH in (select MaMH from Ketqua)
/* Câu 18: cho biết mã số và tên của sinh viên có điểm trung bình chung học
tập >=8 */

9


select sinhvien.masv, tensv
from sinhvien, Ketqua
where sinhvien.masv = Ketqua.MaSV
group by sinhvien.masv, tensv
having AVG(Diem)>=5
/*test*/
select ketqua.MaSV,AVG(Diem) from sinhvien, Ketqua where
sinhvien.masv = ketqua.MaSV group by Ketqua.MaSV
/*câu 19: Cho biết mã số và tên những sinh viên có điểm trung bình chung học
tập cao nhất*/
select sinhvien.masv, tensv
from sinhvien, Ketqua

where sinhvien.masv = Ketqua.MaSV
group by sinhvien.masv, tensv
having AVG(Diem)>=ALL(select AVG(DIEM) from Ketqua group by MaSV)
/*Câu 20: Cho biết mã số và tên những sinh viên phai thi lại ở ít nhất là
những môn mà sin h viên có mã số SV003 phải thi lại*/
select DIStinct Ketqua.MaSV, tensv
from sinhvien, Ketqua
where sinhvien.masv = Ketqua.MaSV and MaMH in(select MaMH from Ketqua where
Diem<5 and MaSV='SV003') and Diem<5
select * from Ketqua
create view view_sinhvien
as
select * from Sinhvien
select * from view_sinhvien
drop view view_sinhvien
delete from view_sinhvien where Masv= 'SV002'
create view view_ketqua
select * from Ketqua ()
select * from view_ketqua
delete from view_ketqua where MaSV='SV001' and MaMH='MH001'
update view_ketqua set Diem=6 where MaSV='SV001' and MaMH='MH002'
insert into view_ketqua values ('SV001','MH001',8)
create view view_sinhvien_ketqua
as
select Sinhvien.MaSV as 'Masinhvien', TenSV, Ketqua.MaSV, MaMH, Diem
from Sinhvien join Ketqua on Sinhvien.MaSV=Ketqua.MaSV
insert into view_sinhvien_ketqua (Masinhvien,TenSV) values ('SV007','lê bùi
mão')
select * from view_sinhvien_ketqua


10


alter view view_sinhvien_ketqua
as
select Sinhvien.MaSV as 'Msv', TenSV, Ketqua.MaSV, MaMH, Diem
from Sinhvien join Ketqua on Sinhvien.MaSV=Ketqua.MaSV
drop view view_sinhvien_ketqua
create procedure sp_sinhvien2
(@masv varchar(10))
AS
BEGIN
select * from Sinhvien where MaSV = @masv
select * from Ketqua where MaSV = @masv
END
exec sp_sinhvien2 @masv='SV005'
alter procedure sp_sinhvien3
(
@masv varchar(10)
)
AS
Declare @malop varchar(10),
@Gioitinh varchar(3)
select @malop= Lop, @Gioitinh=Gioitinh from Sinhvien where MaSV = @masv
print 'lop cua sinh vien vua truy van la:' + @malop
if @Gioitinh='NAM'
Begin
print 'Sinhvien ' + @masv + ' có giới tính là nam'
print 'abc'
end

else
begin
print 'Sinhvien ' + @masv + ' có giới tính là nữ'
print 'dev'
end
select * from Sinhvien
exec sp_sinhvien3 @masv='SV002'
use QuanLySV
select * from sinhvien
select *,
case
when GT=N'NAM' then N'đây là nam'
else N'Đây là nữ' end as 'thông tin'
from Sinhvien

11


/*xem nội dung 1 bảng*/
select *
from Sinhvien
select * from Ketqua

Một số hàm liên quan tới chuỗi string trong SQL
1. Hàm Ascii

1.

-- 1. Ascii


2.

-- trả về mã ascii của ký tự

3.

select ascii('A')

4.

-- kết quả: 65

2. Hàm Char

1.

-- 2. Char

2.

-- trả về ký tự của mã ASCII

3.

select char(65)

4.

-- kết quả: A


3. Hàm charindex

1.

-- 3. charindex

2.

-- trả về vị trí xuất hiện của 1 chuỗi con trong 1 chuỗi bắt đầu từ 1 vị trí xác định

3.

select charindex('abc','cabcaaaa',2)

12


4.

-- giải thích: từ vị trí số 2 của chuỗi 'cabcaaaa' tức là từ ký tự 'a' trở đi tìm vị tr
í xuất hiện của chuỗi 'abc'

5.

-- kết quả là chuỗi 'abc' xuất hiện ở vị trí ký tự thứ 2 của chuỗi 'cabcaaaa'

4. Hàm Left

1.


-- 4. left

2.

-- lấy ra n ký tự đầu tiên của chuỗi.

3.

select left('123456',3)

4.

-- ví dụ: lấy ra 3 ký tự đầu tiên của chuỗi '123456'

5.

-- kết quả: '123'

5. Hàm Right

1.

-- 5. right

2.

-- lấy ra n ký tự cuối cùng của chuỗi

3.


-- ví dụ: lấy ra 3 ký tự cuối cùng của chuỗi '123456'

4.

select right('123456',3)

5.

-- kết quả: '456'

6. Hàm Len

1.

-- 6. len()

2.

-- trả về số lượng ký tự hay độ dài của chuỗi

3.

select len('abcd')

4.

-- kết quả: 4

7. Hàm Lower


1.

-- 7. lower

2.

-- viết thường tất cả các ký tự

3.

select lower('aaBBcCdGG')

4.

-- kết quả: aabbccdgg

8. Hàm Upper

13


1.

-- 8. upper

2.

-- viết hoa tất cả các ký tự

3.


select upper('aaBBcCdGG')

4.

-- kết quả: AABBCCDGG

9. Hàm LTrim

1.

-- 9. Ltrim

2.

-- Xóa tất cả các ký tự rỗng, khoảng trắng ở ĐẦU chuỗi.

3.

select Ltrim('

4.

-- kết quả: 'abc

abc

')

'


10. Hàm RTrim

1.

-- 10. Rtrim

2.

-- Xóa tất cả các ký tự rỗng, khoảng trắng ở CUỐI chuỗi.

3.

select Rtrim('

abc

4.

-- kết quả: '

abc'

')

11. Hàm PatIndex

1.

-- 11. patindex


2.

-- trả về vị trí xuất hiện của 1 mẫu trong 1 chuỗi

3.

SELECT PATINDEX('%ensure%', 'please ensure the door is locked');

4.

-- kết quả: 8

5.

-- note: sử dụng ký tự _ để thay thế cho 1 ký tự bất kỳ

6.

SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');

7.

-- kết quả vẫn là: 8

12. Hàm Quote

1.

-- 12. quotename


2.

-- trích dẫn

14


3.

select quotename('hanh trang lap trinh dot com')

4.

-- kết quả: [hanh trang lap trinh dot com]

5.

-- có thể đổi ký tự trích dẫn khác như :ngoặc đơn ( hay dấu nháy '

6.

select quotename('hanh trang lap trinh dot com',')')

7.

-- kết quả: (hanh trang lap trinh dot com)

13. Hàm Replace


1.

-- 13. replace

2.

-- thay thế tất cả các chuỗi con nào đó trong 1 chuỗi thành 1 chuỗi con khác

3.

select replace('hanh trang lap trinh dot com accom','com','net')

4.

-- Tất cả các từ 'com' trong chuỗi sẽ được thay bằng từ 'net'

5.

-- Kết quả: hanh trang lap trinh dot net acnet

14. Hàm replicate

1.

-- 14. replicate

2.

-- nhân 1 chuỗi lên nhiều lần


3.

select replicate('acb',5)

4.

-- chuỗi 'acb' được lặp lại 5 lần.

5.

-- kết quả: acbacbacbacbacb

15. Hàm Reverse

1.

-- 15. reverse

2.

-- quay ngược chuỗi lại

3.

select reverse('abcdef')

4.

-- kết quả: fedcba


16. Hàm Space

1.

-- 16. space

2.

-- trả về 1 chuỗi gồm n ký tự khoảng trắng.

15


3.

select 'a' +space(54) +'b'

4.

-- kết quả: 'a

5.

-- ký tự a + 54 ký tự khoảng trắng + ký tự b

b'

17. Hàm Str

1.


-- 17. Str

2.

-- chuyển một số thành một chuỗi. Hàm này rắc rối, mình chưa biết ích lợi để làm gì nữa

3.

select str(5.333333,20,2)

.

4.

-- giải thích: chuyển số 5.333333 thành chuỗi có độ dài là 20 ký tự, chỉ lấy 2 ký tự th
ập phân sau dấu '.'

5.

-- nếu số trên khi chuyển thành chuỗi mà chưa đủ 20 ký tự thì sẽ tự thêm các khoảng trắ
ng vào phía trước sao cho đủ 20 ký tự.

6.

-- kết quả: '

5.33'

7.

8.

-- nếu số lượng chữ số phần nguyên của số mà nhiều hơn độ dài chuỗi trả về thì sẽ trả v
ề các giá trị là ký tự '*'

9.

select str(5555.333333,3,2)

10.

-- kết quả trả về là 3 ký tự '*' : '***' vì độ dài chuỗi trả về là 3 trong khi số lượng
chữ số phần nguyên là 4.

18. Hàm Stuff

1.

-- 18. stuff

2.

-- hàm này sẽ thay thế n ký tự bắt đầu từ 1 vị trí xác định bằng 1 chuỗi muốn thay vào

3.

SELECT STUFF('abcdef', 2, 3, 'ijklmn');

4.


-- giải thích: từ vị trí 2 tức là ký tự 'b' lấy ra 3 ký tự -> 'bcd' và thay thế bằng 'i

jklmn'

5.

-- kết quả: aijklmnef

19. Hàm Substring

1.

-- 19. substring

16


2.

-- cắt ra 1 chuỗi nhỏ từ chuỗi ban đầu

3.

select substring('abcdefgh',2,5)

4.

-- giải thích: từ vị trí thứ 2 lấy ra 5 ký tự liên tiếp

5.


-- kết quả: bcdef

20. Hàm Unicode

1.

-- 20. unicode

2.

-- trả về giá trị unicode của ký tự đầu tiên của chuỗi

3.

select unicode(N'Áac')

4.

-- kết quả: 193

21. Hàm NChar

1.

-- 21. Nchar

2.

-- trả về ký tự unicode của mã unicode


3.

select Nchar( unicode(N'Áac'))

4.

select Nchar( 193)

5.

-- kết quả cả 2 câu truy vấn đề là : Á

22. Hàm Soundex

1.

-- 22. soundex

2.

-- Soundex là một thuật toán ngữ âm để liệt kê các từ theo âm sắc, theo cách phát âm củ
a tiếng Anh. Mục đích là mã hóa những từ có cùng cách phát âm qua những đặc trưng giống nhau,
từ đó người ta có thể tìm được một từ nào đó dù có sai sót nhỏ trong chính tả từ đó

3.

select soundex('Brothers')

4.


-- kết quả là 1 chuỗi gồm 4 ký tự: B636. Ký tự đầu tiên của kết quả cũng chính là ký tự
đầu tiên của chuỗi ban đầu

23. Hàm Difference

1.

-- 23. difference

2.

-- hàm trả về số lượng ký tự giống nhau của 2 chuỗi sau khi đã mã hóa soundex. Giá trị
kết quả nằm trong khoảng từ 0 đến 4

17


3.

select difference('Brothers','Brothers')

Một số câu hỏi ôn tập Hệ quản trị CSDL
1. Có thể khai báo những ràng buộc toàn vẹn nào? Phân biệt ràng buộc toàn vẹn mức cột
và mức bảng?
2. Các phương pháp đảm bảo toàn vẹn thực thể
3. Object permissions là gì? Có những quyền nào thuộc loại này?
4. Tìm hiểu chỉ mục clustered, nonclustered? Giống nhau và khác nhau?
5. Các tham số cần quan tâm khi tạo 1 CSDL (khi dùng câu lệnh tạo CSDL, các sách đều
nói rất kỹ)

6. Cách thêm người dùng vào nhóm sử dụng CSDL, cấp quyền cho người dùng đó. (câu
lệnh + dùng giao diện).
7. Có bao nhiêu CSDL hệ thống của mỗi thể hiện SQL? Nêu chi tiết chức năng của mỗi
CSDL hệ thống đó
8. Các loại toàn vẹn? Ý nghĩa của từng loại toàn vẹn?
9. Tìm hiểu ràng buộc mặc định với đối tượng mặc định?
10. Các câu lệnh cấp phát quyền cho người dùng.
11. Tìm hiểu quy tắc (rule), ràng buộc kiểm tra (check).
12. Chế độ bảo mật khi sử dụng SQL? Nêu đăc trưng của mỗi chế độ bảo mật?

18



×