You are on page 1of 59

Th tc lu tr (stored procedure) Cc khi nim SQL c thit k v ci t nh l mt ngn ng thc hin cc thao tc trn c s d liu nh to lp cc cu trc trong c s d liu,

, b sung, cp nht, xo v truy vn d liu trong c s d liu. Cc cu lnh SQL c ngi s dng vit v yu cu h qun tr c s d liu thc hin theo ch tng tc Cc cu lnh SQL c th c nhng vo trong cc ngn ng lp trnh, thng qua chui cc thao tc trn c s d liu c xc nh v thc thi nh vo cc cu lnh, cc cu trc iu khin ca bn thn ngn ng lp trnh c s dng. Vi th tc lu tr, mt phn no kh nng ca ngn ng lp trnh c a vo trong ngn ng SQL. Mt th tc l mt i tng trong c s d liu bao gm mt tp nhiu cu lnh SQL c nhm li vi nhau thnh mt nhm vi nhng kh nng sau: Cc cu trc iu khin (IF, WHILE, FOR) c th c s dng trong th tc. Bn trong th tc lu tr c th s dng cc bin nh trong ngn ng lp trnh nhm lu gi cc gi tr tnh ton c, cc gi tr c truy xut c t c s d liu. Mt tp cc cu lnh SQL c kt hp li vi nhau thnh mt khi lnh bn trong mt th tc. Mt th tc c th nhn cc tham s truyn vo cng nh c th tr v cc gi tr thng qua cc tham s (nh trong cc ngn ng lp trnh). Khi mt th tc lu tr c nh ngha, n c th c gi thng qua tn th tc, nhn cc tham s truyn vo, thc thi cc cu lnh SQL bn trong th tc v c th tr v cc gi tr sau khi thc hin xong. S dng cc th tc lu tr trong c s d liu s gip tng hiu nng ca c s d liu, mang li cc li ch sau: n gin ho cc thao tc trn c s d liu nh vo kh nng module ho cc thao tc ny. Th tc lu tr c phn tch, ti u khi to ra nn vic thc thi chng nhanh hn nhiu so vi vic phi thc hin mt tp ri rc cc cu lnh SQL tng ng theo cch thng thng. Th tc lu tr cho php chng ta thc hin cng mt yu cu bng mt cu lnh n gin thay v phi s dng nhiu dng lnh SQL. iu ny s lm gim thiu s lu thng trn mng. Thay v cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL v trn cc i tng c s d liu, ta c th cp pht quyn cho ngi s dng thng qua cc th tc lu tr, nh tng kh nng bo mt i vi h thng.

To th tc lu tr Th tc lu tr c to bi cu lnh CREATE PROCEDURE vi c php nh sau:


CREATE PROCEDURE tn_th_tc [(danh_sch_tham_s)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Cc_cu_lnh_ca_th_tc Trong : Tn ca th tc cn to. Tn phi tun theo qui tc nh danh v khng c tn_th_tc vt qu 128 k t. Cc tham s ca th tc c khai bo ngay sau tn th tc v nu th tc c nhiu tham s th cc khai bo phn cch nhau bi du phy. Khai bo ca danh_sch_tham_s mi mt tham s ti thiu phi bao gm hai phn: tn tham s c bt u bi du @. kiu d liu ca tham s Thng thng, th tc s c phn tch, ti u v dch sn ln gi u tin. RECOMPILE Nu tu chn WITH RECOMPILE c ch nh, th tc s c dch li mi khi c gi. Th tc s c m ho nu tu chn WITH ENCRYPTION c ch nh. ENCRYPTION Nu th tc c m ho, ta khng th xem c ni dung ca th tc.

Tp hp cc cu lnh s dng trong ni dung th tc. Cc cu lnh ny c th t trong cp t kho BEGIN...END hoc c th khng. Gi s ta cn thc hin mt chui cc thao tc nh sau trn c s d liu 1. B sung thm mn hc c s d liu c m TI-005 v s n v hc trnh l 5 vo bng MONHOC 2. Ln danh sch nhp im thi mn c s d liu cho cc sinh vin hc lp c m C24102 (tc l b sung thm vo bng DIEMTHI cc bn ghi vi ct MAMONHOC nhn gi tr TI-005, ct MASV nhn gi tr ln lt l m cc sinh vin hc lp c m C24105 v cc ct im l NULL). Nu thc hin yu cu trn thng qua cc cu lnh SQL nh thng thng, ta phi thc thi hai cu lnh nh sau: cc_cu_lnh_ca_th_tc INSERT INTO MONHOC VALUES('TI-005','C s d liu',5) INSERT INTO DIEMTHI(MAMONHOC,MASV) SELECT TI-005',MASV FROM SINHVIEN WHERE MALOP='C24102' Thay v phi s dng hai cu lnh nh trn, ta c th nh ngha mt th tc lu tr vi cc tham s vo l @mamonhoc, @tenmonhoc, @sodvht v @malop nh sau:
CREATE PROC sp_LenDanhSachDiem( @mamonhoc NVARCHAR(10), @tenmonhoc NVARCHAR(50), @sodvht SMALLINT, @malop NVARCHAR(10)) AS BEGIN INSERT INTO monhoc VALUES(@mamonhoc,@tenmonhoc,@sodvht) INSERT INTO diemthi(mamonhoc,masv) SELECT @mamonhoc,masv FROM sinhvien WHERE malop=@malop END

Khi th tc trn c to ra, ta c th thc hin c hai yu cu t ra trn mt cch n gin thng qua li gi th tc:
sp_LenDanhSachDiem 'TI-005','C s d liu',5,'C24102'

Li gi th tc lu tr Nh thy v d trn, khi mt th tc lu tr c to ra, ta c th yu cu h qun tr c s d liu thc thi th tc bng li gi th tc c dng:
tn_th_tc [danh_sch_cc_i_s]

S lng cc i s cng nh th t ca chng phi ph hp vi s lng v th t ca cc tham s khi nh ngha th tc. Trong trng hp li gi th tc c thc hin bn trong mt th tc khc, bn trong mt trigger hay kt hp vi cc cu lnh SQL khc, ta s dng c php nh sau:
EXECUTE tn_th_tc [danh_sch_cc_i_s]

Th t ca cc i s c truyn cho th tc c th khng cn phi tun theo th t ca cc tham s nh khi nh ngha th tc nu tt c cc i s c vit di dng:
@tn_tham_s = gi_tr

Li gi th tc v d trn c th vit nh sau:


sp_LenDanhSachDiem @malop='C24102',

@tenmonhoc='C s d liu', @mamonhoc='TI-005', @sodvht=5 S dng bin trong th tc

Ngoi nhng tham s c truyn cho th tc, bn trong th tc cn c th s dng cc bin nhm lu gi cc gi tr tnh ton c hoc truy xut c t c s d liu. Cc bin trong th tc c khai bo bng t kho DECLARE theo c php nh sau:
DECLARE @tn_bin kiu_d_liu

Tn bin phi bt u bi k t @ v tun theo qui tc v nh danh. V d di y minh ho vic s dng bin trong th tc V d : Trong nh ngha ca th tc di y s dung cc bin cha cc gi tr truy xut c t c s d liu.
CREATE PROCEDURE sp_Vidu( @malop1 NVARCHAR(10), @malop2 NVARCHAR(10)) AS DECLARE @tenlop1 NVARCHAR(30) DECLARE @namnhaphoc1 INT DECLARE @tenlop2 NVARCHAR(30) DECLARE @namnhaphoc2 INT SELECT @tenlop1=tenlop, @namnhaphoc1=namnhaphoc FROM lop WHERE malop=@malop1 SELECT @tenlop2=tenlop, @namnhaphoc2=namnhaphoc FROM lop WHERE malop=@malop2 PRINT @tenlop1+' nhap hoc nam '+str(@namnhaphoc1) print @tenlop2+' nhap hoc nam '+str(@namnhaphoc2) IF @namnhaphoc1=@namnhaphoc2 PRINT 'Hai lp nhp hc cng nm' ELSE PRINT 'Hai lp nhp hc khc nm'

Gi tr tr v ca tham s trong th tc lu tr Trong cc v d trc, nu i s truyn cho th tc khi c li gi n th tc l bin, nhng thay i gi tr ca bin trong th tc s khng c gi li khi kt thc qu trnh thc hin th tc. V d : Xt cu lnh sau y
CREATE PROCEDURE sp_Conghaiso(@a AS SELECT @c=@a+@b
DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso 100,200,@tong SELECT @tong

INT,@b INT, @c INT)

Nu sau khi to th tc vi cu lnh trn, ta thc thi mt tp cc cu lnh nh sau:

Cu lnh "SELECT @tong" cui cng trong lot cc cu lnh trn s cho kt qu l: 0 Trong trng hp cn phi gi li gi tr ca i s sau khi kt thc th tc, ta phi khai bo tham s ca th tc theo c php nh sau:
@tn_tham_s kiu_d_liu
OUT

OUTPUT

hoc:
@tn_tham_s kiu_d_liu

v trong li gi th tc, sau i s c truyn cho th tc, ta cng phi ch nh thm t kho OUTPUT (hoc OUT)

V d : Ta nh ngha li th tc v d 5.4 nh sau:


CREATE PROCEDURE sp_Conghaiso( @a INT, @b INT, @c INT OUTPUT) AS SELECT @c=@a+@b v thc hin li gi th tc trong mt tp cc cu lnh nh sau: DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso 100,200,@tong OUTPUT SELECT @tong

th cu lnh "SELECT @tong" s cho kt qu l: 300 Tham s vi gi tr mc nh Cc tham s c khai bo trong th tc c th nhn cc gi tr mc nh. Gi tr mc nh s c gn cho tham s trong trng hp khng truyn i s cho tham s khi c li gi n th tc. Tham s vi gi tr mc nh c khai bo theo c php nh sau:
@tn_tham_s kiu_d_liu = gi_tr_mc_nh

V d : Trong cu lnh di y:
CREATE PROC sp_TestDefault( @tenlop NVARCHAR(30)=NULL, @noisinh NVARCHAR(100)='Hu') AS BEGIN IF @tenlop IS NULL SELECT hodem,ten FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh ELSE SELECT hodem,ten FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh AND tenlop=@tenlop END

th tc sp_TestDefault c nh ngha vi tham s @tenlop c gi tr mc nh l NULL v tham s @noisinh c gi tr mc nh l Hu. Vi th tc c nh ngha nh trn, ta c th thc hin cc li gi vi cc mc ch khc nhau nh sau: Cho bit h tn ca cc sinh vin sinh ti Hu:
sp_testdefault

Cho bit h tn ca cc sinh vin lp Tin K24 sinh ti Hu:


sp_testdefault @tenlop='Tin K24'

Cho bit h tn ca cc sinh vin sinh ti Ngh An:


sp_testDefault @noisinh=N'Ngh An'

Cho bit h tn ca cc sinh vin lp Tin K26 sinh ti Nng


sp_testdefault @tenlop='Tin K26',@noisinh=' Nng'

Sa i th tc Khi mt th tc c to ra, ta c th tin hnh nh ngha li th tc bng cu lnh ALTER PROCEDURE c c php nh sau:
ALTER PROCEDURE tn_th_tc [(danh_sch_tham_s)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Cc_cu_lnh_Ca_th_tc

Cu lnh ny s dng tng t nh cu lnh CREATE PROCEDURE. Vic sa i li mt th tc c khng lm thay i n cc quyn cp pht trn th tc cng nh khng tc ng n cc th tc khc hay trigger ph thuc vo th tc ny. Xo th tc xo mt th tc c, ta s dng cu lnh DROP PROCEDURE vi c php nh sau: DROP PROCEDURE tn_th_tc Khi xo mt th tc, tt c cc quyn cp cho ngi s dng trn th tc cng ng thi b xo b. Do , nu to li th tc, ta phi tin hnh cp pht li cc quyn trn th tc .
Hm do ngi dng nh ngha Hm l i tng c s d liu tng t nh th tc. im khc bit gia hm v th tc l hm tr v mt gi tr thng qua tn hm cn th tc th khng. iu ny cho php ta s dng hm nh l mt thnh phn ca mt biu thc (chng hn trong danh sch chn ca cu lnh SELECT). Ngoi nhng hm do h qun tr c s d liu cung cp sn, ngi s dng c th nh ngha thm cc hm nhm phc v cho mc ch ring ca mnh. nh ngha v s dng hm Hm c nh ngha thng qua cu lnh CREATE FUNCTION vi c php nh sau:
CREATE FUNCTION tn_hm ([danh_sch_tham_s]) RETURNS (kiu_tr_v_ca_hm) AS BEGIN cc_cu_lnh_ca_hm END

V d : Cu lnh di y nh ngha hm tnh ngy trong tun (th trong tun) ca mt gi tr kiu ngy
CREATE FUNCTION thu(@ngay DATETIME) RETURNS NVARCHAR(10) AS BEGIN DECLARE @st NVARCHAR(10) SELECT @st=CASE DATEPART(DW,@ngay) WHEN 1 THEN 'Chu nht' WHEN 2 THEN 'Th hai' WHEN 3 THEN 'Th ba' WHEN 4 THEN 'Th t' WHEN 5 THEN 'Th nm' WHEN 6 THEN 'Th su' ELSE 'Th by' END RETURN (@st) /* Tr tr v ca hm */ END

Mt hm khi c nh ngha c th c s dng nh cc hm do h qun tr c s d liu cung cp (thng thng trc tn hm ta phi ch nh thm tn ca ngi s hu hm) V d Cu lnh SELECT di y s dng hm c nh ngha v d trc:
SELECT masv,hodem,ten,dbo.thu(ngaysinh),ngaysinh FROM sinhvien WHERE malop='C24102'

Hm vi gi tr tr v l "d liu kiu bng" Ta bit c chc nng cng nh s tin li ca vic s dng cc khung nhn trong c s d liu. Tuy nhin, nu cn phi s dng cc tham s trong khung nhn (chng hn cc tham s trong mnh WHERE ca cu lnh SELECT) th ta li khng th thc hin c. iu ny phn no lm gim tnh linh hot trong vic s dng khung nhn. V d : Xt khung nhn c nh ngha nh sau:

CREATE VIEW sinhvien_k25 AS SELECT masv,hodem,ten,ngaysinh FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE khoa=25

vi khung nhn trn, thng qua cu lnh:


SELECT * FROM sinhvien_K25

ta c th bit c danh sch cc sinh vin kho 25 mt cch d dng nhng r rng khng th thng qua khung nhn ny bit c danh sch sinh vin cc kho khc do khng th s dng iu kin c dng KHOA = @thamso trong mnh WHERE ca cu lnh SELECT c. Nhc im trn ca khung nhn c th khc phc bng cch s dng hm vi gi tr tr v di dng bng v c gi l hm ni tuyn (inline function). Vic s dng hm loi ny cung cp kh nng nh khung nhn nhng cho php chng ta s dng c cc tham s v nh tnh linh hot s cao hn. Mt hm ni tuyn c nh ngha bi cu lnh CREATE TABLE vi c php nh sau:
CREATE FUNCTION tn_hm ([danh_sch_tham_s]) RETURNS TABLE AS RETURN (cu_lnh_select)

C php ca hm ni tuyn phi tun theo cc qui tc sau: Kiu tr v ca hm phi c ch nh bi mnh RETURNS TABLE. Trong phn thn ca hm ch c duy nht mt cu lnh RETURN xc nh gi tr tr v ca hm thng qua duy nht mt cu lnh SELECT. Ngoi ra, khng s dng bt k cu lnh no khc trong phn thn ca hm. V d : Ta nh ngha hm func_XemSV nh sau:
CREATE FUNCTION func_XemSV(@khoa SMALLINT) RETURNS TABLE AS RETURN(SELECT masv,hodem,ten,ngaysinh FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE khoa=@khoa)

hm trn nhn tham s u vo l kha ca sinh vin cn xem v gi tr tr v ca hm l tp cc dng d liu cho bit thng tin v cc sinh vin ca kho . Cc hm tr v gi tr di dng bng c s dng nh l cc bng hay khung nhn trong cc cu lnh SQL. Vi hm c nh ngha nh trn, bit danh sch cc sinh vin kho 25, ta s dng cu lnh nh sau:
SELECT * FROM dbo.func_XemSV(25)

cn cu lnh di y cho ta bit c danh sch sinh vin kho 26


SELECT * FROM dbo.func_XemSV(26)

i vi hm ni tuyn, phn thn ca hm ch cho php s xut hin duy nht ca cu lnh RETURN. Trong trng hp cn phi s dng n nhiu cu lnh trong phn thn ca hm, ta s dng c php nh sau nh ngha hm:
CREATE FUNCTION tn_hm([danh_sch_tham_s]) RETURNS @bin_bng TABLE nh_ngha_bng AS BEGIN cc_cu_lnh_trong_thn_hm RETURN END

Khi nh ngha hm dng ny cn lu mt s im sau: Cu trc ca bng tr v bi hm c xc nh da vo nh ngha ca bng trong mnh RETURNS. Bin @bin_bng trong mnh RETURNS c phm vi s dng trong hm v c s dng nh l mt tn bng.

Cu lnh RETURN trong thn hm khng ch nh gi tr tr v. Gi tr tr v ca hm chnh l cc dng d liu trong bng c tn l @binbng c nh ngha trong mnh RETURNS Cng tng t nh hm ni tuyn, dng hm ny cng c s dng trong cc cu lnh SQL vi vai tr nh bng hay khung nhn. V d di y minh ho cch s dng dng hm ny trong SQL. V d : Ta nh ngha hm func_TongSV nh sau:
CREATE FUNCTION Func_Tongsv(@khoa SMALLINT) RETURNS @bangthongke TABLE ( makhoa NVARCHAR(5), tenkhoa NVARCHAR(50), tongsosv INT ) AS BEGIN IF @khoa=0 INSERT INTO @bangthongke SELECT khoa.makhoa,tenkhoa,COUNT(masv) FROM (khoa INNER JOIN lop ON khoa.makhoa=lop.makhoa) INNER JOIN sinhvien on lop.malop=sinhvien.malop GROUP BY khoa.makhoa,tenkhoa ELSE INSERT INTO @bangthongke SELECT khoa.makhoa,tenkhoa,COUNT(masv) FROM (khoa INNER JOIN lop ON khoa.makhoa=lop.makhoa) INNER JOIN sinhvien ON lop.malop=sinhvien.malop WHERE khoa=@khoa GROUP BY khoa.makhoa,tenkhoa RETURN /*Tr kt qu v cho hm*/ END

Vi hm c nh ngha nh trn, cu lnh:


SELECT * FROM dbo.func_TongSV(25)

S cho kt qu thng k tng s sinh vin kho 25 ca mi khoa: Cn cu lnh:


SELECT * FROM dbo.func_TongSV(0)

Trigger
Ta bit cc rng buc c s dng m bo tnh ton vn d liu trong c s d liu. Mt i tng khc cng thng c s dng trong cc c s d liu cng vi mc ch ny l cc trigger. Cng tng t nh th tc lu tr, mt trigger l mt i tng cha mt tp cc cu lnh SQL v tp cc cu lnh ny s c thc thi khi trigger c gi. im khc bit gia th tc lu tr v trigger l: cc th tc lu tr c thc thi khi ngi s dng c li gi n chng cn cc trigger li c "gi" t ng khi xy ra nhng giao tc lm thay i d liu trong cc bng. Mi mt trigger c to ra v gn lin vi mt bng no trong c s d liu. Khi d liu trong bng b thay i (tc l khi bng chu tc ng ca cc cu lnh INSERT, UPDATE hay DELETE) th trigger s c t ng kch hot. S dng trigger mt cch hp l trong c s d liu s c tc ng rt ln trong vic tng hiu nng ca c s d liu. Cc trigger thc s hu dng vi nhng kh nng sau: Mt trigger c th nhn bit, ngn chn v hu b c nhng thao tc lm thay i tri php d liu trong c s d liu. Cc thao tc trn d liu (xo, cp nht v b sung) c th c trigger pht hin ra v t ng thc hin mt lot cc thao tc khc trn c s d liu nhm m bo tnh hp l ca d liu. Thng qua trigger, ta c th to v kim tra c nhng mi quan h phc tp hn gia cc bng trong c s d liu m bn thn cc rng buc khng th thc hin c. nh ngha trigger Mt trigger l mt i tng gn lin vi mt bng v c t ng kch hot khi xy ra nhng giao tc lm thay i d liu trong bng. nh ngha mt trigger bao gm cc yu t sau: Trigger s c p dng i vi bng no? Trigger c kch hot khi cu lnh no c thc thi trn bng: INSERT, UPDATE, DELETE?

Trigger s lm g khi c kch hot? Cu lnh CREATE TRIGGER c s dng inh ngha trigger v c c php nh sau:

CREATE TRIGGER tn_trigger ON tn_bng FOR {[INSERT][,][UPDATE][,][DELETE]} AS [IF UPDATE(tn_ct) [AND UPDATE(tn_ct)|OR UPDATE(tn_ct)] ...] cc_cu_lnh_ca_trigger

V d : Ta nh ngha cc bng nh sau: Bng MATHANG lu tr d liu v cc mt hng:


CREATE TABLE mathang ( mahang NVARCHAR(5) PRIMARY KEY, /*m hng*/ tenhang NVARCHAR(50) NOT NULL, /*tn hng*/ soluong INT, /*s lng hng hin c*/ )

Bng NHATKYBANHANG lu tr thng tin v cc ln bn hng


CREATE TABLE nhatkybanhang ( stt INT IDENTITY PRIMARY KEY, ngay DATETIME, /*ngy bn hng*/ nguoimua NVARCHAR(30), /*tn ngi mua hng*/ mahang NVARCHAR(5) /*m mt hng c bn*/ FOREIGN KEY REFERENCES mathang(mahang), soluong INT, /*gi bn hng*/ giaban MONEY /*s lng hng c bn*/ )

Cu lnh di y nh ngha trigger trg_nhatkybanhang_insert. Trigger ny c chc nng t ng gim s lng hng hin c khi mt mt hng no c bn (tc l khi cu lnh INSERT c thc thi trn bng
NHATKYBANHANG). CREATE TRIGGER trg_nhatkybanhang_insert ON nhatkybanhang FOR INSERT AS UPDATE mathang SET mathang.soluong=mathang.soluong-inserted.soluong FROM mathang INNER JOIN inserted ON mathang.mahang=inserted.mahang

Vi trigger va to trn, nu d liu trong bng MATHANG l: th sau khi ta thc hin cu lnh: INSERT INTO nhatkybanhang (ngay,nguoimua,mahang,soluong,giaban) VALUES('5/5/2004','Tran Ngoc Thanh','H1',10,5200) Trong cu lnh CREATE TRIGGER v d trn, sau mnh ON l tn ca bng m trigger cn to s tc ng n. Mnh tip theo ch nh cu lnh s kch hot trigger (FOR INSERT). Ngoi INSERT, ta cn c th ch nh UPDATE hoc DELETE cho mnh ny, hoc c th kt hp chng li vi nhau. Phn thn ca trigger nm sau t kho AS bao gm cc cu lnh m trigger s thc thi khi c kch hot. Chun SQL nh ngha hai bng logic INSERTED v DELETED s dng trong cc trigger. Cu trc ca hai bng ny tng t nh cu trc ca bng m trigger tc ng. D liu trong hai bng ny tu thuc vo cu lnh tc ng ln bng lm kch hot trigger; c th trong cc trng hp sau: Khi cu lnh DELETE c thc thi trn bng, cc dng d liu b xo s c sao chp vo trong bng DELETED. Bng INSERTED trong trng hp ny khng c d liu. D liu trong bng INSERTED s l dng d liu c b sung vo bng gy nn s kch hot i vi trigger bng cu lnh INSERT. Bng DELETED trong trng hp ny khng c d liu.

Khi cu lnh UPDATE c thc thi trn bng, cc dng d liu c chu s tc ng ca cu lnh s c sao chp vo bng DELETED, cn trong bng INSERTED s l cc dng sau khi c cp nht. S dng mnh IF UPDATE trong trigger Thay v ch nh mt trigger c kch hot trn mt bng, ta c th ch nh trigger c kch hot v thc hin nhng thao tc c th khi vic thay i d liu ch lin quan n mt s ct nht nh no ca ct. Trong trng hp ny, ta s dng mnh IF UPDATE trong trigger. IF UPDATE khng s dng c i vi cu lnh DELETE. V d 5.13: Xt li v d vi hai bng MATHANG v NHATKYBANHANG, trigger di y c kch hot khi ta tin hnh cp nht ct SOLUONG cho mt bn ghi ca bng NHATKYBANHANG (lu l ch cp nht ng mt bn ghi)
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON nhatkybanhang FOR UPDATE AS IF UPDATE(soluong) UPDATE mathang SET mathang.soluong = mathang.soluong (inserted.soluong-deleted.soluong) FROM (deleted INNER JOIN inserted ON deleted.stt = inserted.stt) INNER JOIN mathang ON mathang.mahang = deleted.mahang Vi trigger v d trn, cu lnh: UPDATE nhatkybanhang SET soluong=soluong+20 WHERE stt=1 s kch hot trigger ng vi mnh IF UPDATE (soluong) v cu lnh UPDATE trong trigger s c thc thi. Tuy nhin cu lnh: UPDATE nhatkybanhang SET nguoimua='Mai Hu Ton' WHERE stt=3

li khng kch hot trigger ny. Mnh IF UPDATE c th xut hin nhiu ln trong phn thn ca trigger. Khi , mnh IF UPDATE no ng th phn cu lnh ca mnh s c thc thi khi trigger c kch hot. V d : Gi s ta nh ngha bng R nh sau:
CREATE TABLE R ( A INT, B INT, C INT ) v trigger trg_R_update cho bng R: CREATE TRIGGER trg_R_test ON R FOR UPDATE AS IF UPDATE(A) Print 'A updated' IF UPDATE(C) Print 'C updated'

Cu lnh:
UPDATE R SET A=100 WHERE A=1

s kch hot trigger v cho kt qu l: A updated v cu lnh:


UPDATE R SET C=100 WHERE C=2

cng kch hot trigger v cho kt qu l: C updated cn cu lnh: UPDATE R SET B=100 WHERE B=3 hin nhin s khng kch hot trigger

Hm sa 1 sinh vin:
CREATE proc sp_updateSinhVien @masv_old as nvarchar(20), @masv_new as nvarchar(20) AS BEGIN IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_MaSV') DROP TABLE temp_MaSV -- tao bang tam ket qua SELECT * INTO temp_MaSV from KETQUA WHERE MaSV = @masv_old -- xoa sinh vien trong ket qua DELETE FROM KETQUA WHERE MaSV = @masv_old -- sua masv trong sinhvien UPDATE SINHVIEN SET MaSV = @masv_new WHERE MaSV = @masv_old -- sua masv moi trong bang ta, UPDATE temp_MaSV SET MaSV = @masv_new -- them vao ket qua bang tam do INSERT INTO KETQUA SELECT * FROM temp_MaSV END; -- S dng exec sp_updateSinhVien @masv_old = '90002', @masv_new = '91002'

Sa MaKhoa trong table Khoa i vi bi ny hi kh hn 1 cht. V sao? Nu nh bi trn th MaKhoa nm trong 2 table l Khoa v SinhVien. Nu ta sa table SinhVien (trong lc delete MaSV c sa trn table temp_SV) th gy ra nhng MaSV khng c thng tin trong bng KetQua (MaSV tn ti trong KetQua m khng tn ti trong SinhVien). V th lc ny phi pht sinh ra thm sa bng KetQua
CREATE proc sp_updateKhoa @makh_old as nvarchar(20), @makh_new as nvarchar(20) AS BEGIN IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_sv') DROP TABLE temp_sv IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_kq') DROP TABLE temp_kq -- tao bang tam sinhvien SELECT * INTO temp_sv from SINHVIEN WHERE MaKhoa = @makh_old -- tao bang tam ket qua SELECT * INTO temp_kq from KETQUA WHERE MaSV in (SELECT MaSV FROM temp_sv) -- xoa sinh vien trong ket qua DELETE FROM KETQUA WHERE MaSV in (SELECT MaSV FROM temp_kq) -- xoa sinh vien trong sinh vien DELETE FROM SINHVIEN WHERE MaKhoa = @makh_old -- sua makh trong khoa UPDATE KHOA SET MaKhoa = @makh_new WHERE MaKhoa = @makh_old -- sua makhoa moi trong bang tam temp_sv UPDATE temp_sv SET MaKhoa = @makh_new

-- do du lieu temp_sv ve sinhvien insert into SINHVIEN select * from temp_sv -- xoa bang tam temp_sv drop table temp_sv -- do du lieu temp_kq ve ketqua insert into KETQUA select * from temp_kq -- xoa bang tam temp_kq drop table temp_kq END; exec sp_updateKhoa @makh_old = 'CNTT', @makh_new = 'KCNTT'

Nng im ca sinhvien c MASV l [input], tn mn hc [input], ln thi[input],so diem duoc nang [input]
if exists (select name from sysobjects where name = 'nangdiem' and type ='p') drop proc nangdiem go create proc nangdiem @masv nvarchar(5), @mamh nvarchar(50), @lanthi nvarchar(1), @diem smallint as begin update KETQUA set DIEM=@diem where MASV=@masv and MAMH =@mamh and LANTHI =@lanthi end;

Lit k cc sv tha k a vo ( ty theo user quy nh iu kin trn filed no s lc ra nhng sv tng ng
if exists (select name from sysobjects where name ='sp_loc' and type='p') drop proc sp_loc go create proc sp_loc @loc as nvarchar(50)='' as if( @loc='') select * from SINHVIEN else begin select * from SINHVIEN where MASV like @loc or TENSV like ' @loc ' or TINH like @loc or MAKHOA=@loc end --test: lc theo masv hoc tensv, or tnh, or makhoa, ko nhp g s ly tt c. exec sp_loc

Yu cu sa TenMH v nng im l s im thm vo


create proc sp_nangdiem @masv nvarchar(20), @tenmh nvarchar(20), @lanthi nvarchar(1), @sodiem real as update kq set diem = diem + @sodiem from MONHOC as mh, KETQUA as kq where masv = @masv and mh.mamh = kq.mamh

and tenmh = @tenmh -- Thc thi exec sp_nangdiem @masv = '91002', @tenmh = 'Co so du lieu', @lanthi = '1', @sodiem = '1' select * from KETQUA where MaSV = '91002'

Thng tin nhn vin sp tui hu (nam 59 tui, n 54 tui)


create procedure sp_tuoihuu as select * from NHANVIEN where YEAR(GETDATE()) - YEAR(NGSINH) = 59 and PHAI = 'Nam' union select * from NHANVIEN where YEAR(GETDATE()) - YEAR(NGSINH) = 54 and PHAI = 'Nu'

Cp nht thng tin trng phng ca 1 phng ban theo yu cu: - Nhn tham s m phng ban, tn trng phng, ngy nhn chc l ngy h thng
create proc sp_suaPHONGBAN @maphong nvarchar(10), @tentruongphong nvarchar(30) as begin declare @matruongphong nvarchar(10) -- lay ma truong phong select @matruongphong = MaNV from NhanVien WHERE (HONV+' '+TENLOT+' '+TENNV) like @tentruongphong -- update update PHONGBAN set TRPHG = @matruongphong, NG_NHANCHUC = (select GETDATE()) WHERE MA PHG = @maphong end;

Danh sach nhan vien tham gia mot de an va tinh luong cho ho theo y/c sau: ---- nhan tham so ten de an, nv tham gia lam viec >30 ngay, luong tang 5000 ---- nhan vien nu tang 3% ---- nhan vien >2 con co tuoi < 18 thi luong tang 5000
create proc sp_tinhluong @tendean nvarchar(20) as begin; update nv set LUONG = (LUONG + 5000) from DEAN da, PHANCONG pc, NHANVIEN nv WHERE nv.MANV = pc.MA_NVIEN and da.MADA = pc.SODA and THOIGIAN > 30 and TENDA like @tendean update nv set LUONG =( LUONG + ((LUONG * 3) / 100) ) from DEAN da, PHANCONG pc, NHANVIEN nv WHERE nv.MANV = pc.MA_NVIEN

and da.MADA = pc.SODA and PHAI = 'NU' and TENDA like @tendean update nv set LUONG = LUONG = (LUONG + 5000) from DEAN da, PHANCONG pc, NHANVIEN nv WHERE nv.MANV = pc.MA_NVIEN and da.MADA = pc.SODA and YEAR(GETDATE()) - YEAR(NGSINH) < 18 -- tuoi < 18 and (select COUNT (*) from THANNHAN as tn where tn.MA_NVIEN = nv.MANV and QUANHE like '%Con%' group by MA_NVIEN) > 2 -- 2 con and TENDA like @tendean end;

1. Cho bit trung bnh im thi theo tng mn, gm cc thng tin: M mn, Tn mn,Trung bnh im thi 2. Danh sch s mn thi ca tng sinh vin, gm cc thng tin: H tn sinh vin, Tn khoa, Tng s mn thi 3. Tng im thi ca tng sinh vin, cc thng tin: Tn sinh vin, Tn khoa, Phi, Tng im thi 4. Cho bit tng s sinh vin mi khoa, gm cc thng tin: Tn khoa, Tng s sinh vin 5. Cho bit im cao nht ca mi sinh vin, gm thng tin: H tn sinh vin, im 6. Thng tin ca mn hc c s tit nhiu nht: Tn mn hc, S tit 7. Cho bit hc bng cao nht ca tng khoa, gm M khoa, Tn khoa, Hc bng cao nht 8. Cho bit im cao nht ca mi mn, gm: Tn mn, im cao nht 9. Thng k s sinh vin hc ca tng mn, thng tin c: M mn, Tn mn, S sinh vin ang hc 10. Cho bit mn no c im thi cao nht, gm cc thng tin: Tn mn, S tit, Tn sinh vin, im 11. Cho bit khoa no c ng sinh vin nht, gm M khoa, Tn khoa, Tng s sinh vin 12. Cho bit khoa no c sinh vin lnh hc bng cao nht, gm cc thng tin sau: Tn khoa, H tn sinh vin, Hc bng 13. Cho bit sinh vin ca khoa Tin hc c c hc bng cao nht, gm cc thng tin: M sinh vin, H sinh vin, Tn sinh vin, Tn khoa, Hc bng 14. Cho bit sinh vin no c im mn C s d liu ln nht, gm thng tin: H sinh vin, Tn mn, im 15. Cho bit 3 sinh vin c im thi mn ho thp nht, thng tin: H tn sinh vin, Tn khoa, Tn mn, im 16. Cho bit no c nhiu sinh vin n nht, gm cc thng tin: M khoa, Tn khoa 17. Thng k sinh vin theo khoa, gm cc thng tin: M khoa, Tn khoa, Tng s sinh vin, Tng s sinh vin n 19. Danh sch nhng sinh vin khng c mn no nh hn 4 im, gm cc thng tin: H tn sinh vin, Tn khoa, Phi 20. Cho bit danh sch nhng mn khng c im thi nh hn 4, gm cc thng tin: M mn, Tn Mn 21. Cho bit nhng khoa khng c sinh vin rt, sinh vin rt nu im thi ca mn nh hn 5, gm cc thng tin: M khoa, Tn khoa 23. Cho bit mn no khng c sinh vin rt, gm c: M mn, Tn mn 24. Danh sch sinh vin khng c mn no rt, thng tin gm: M sinh vin, H tn, M khoa 25. Danh sch cc sinh vin rt trn 2 mn, gm M sinh vin, H sinh vin, Tn sinh vin, M khoa

26. Cho bit danh sch nhng khoa c nhiu hn 10 sinh vin, gm M khoa, Tn khoa,Tng s sinh vin ca khoa 27. Danh sch nhng sinh vin thi nhiu hn 4 mn, gm c M sinh vin, H tn sinh vin, S mn thi 28. Cho bit khoa c 5 sinh vin nam tr ln, thng tin gm c: M khoa, Tn khoa, Tng s sinh vin nam 29. Danh sch nhng sinh vin c trung bnh im thi ln hn 4, gm cc thng tin sau: H tn sinh vin, Tn khoa, Phi, im trung bnh cc mn 30. Cho bit trung bnh im thi ca tng mn, ch ly mn no c trung bnh im thi ln hn 6, thng tin gm c: M mn, Tn mn, Trung bnh im
--1 select KETQUA.MaMH, MON.TenMH, AVG(diem) as [Diem trung binh] from KETQUA join MON on MON.MaMH=KETQUA.MaMH group by ketqua.mamh,mon.tenmh

--2 select a.tensv, b.TenKH, count(c.mamh) from SINHVIEN a join KETQUA c on a.MaSV=c.MaSV join khoa b on a.makh=b.makh group by a.MaSV, a.TenSV, b.tenkh

--4 select b.TenKH, count(masv) from SINHVIEN a join KHOA b on a.MaKH=b.MaKH group by b.MaKH, b.TenKH --5 select a.MaSV, HoTen=a.HoSV+' '+a.TenSV, MAX(b.Diem) from SINHVIEN a join KETQUA b on a.MaSV=b.MaSV group by a.MaSV, a.HoSV, a.TenSV --7 select b.TenKH, MAX(a.hocbong) from SINHVIEN a join KHOA b on a.MaKH=b.MaKH group by a.MaKH, b.TenKH --8 select a.TenMH, MAX(diem) from MON a join KETQUA b on a.MaMH=b.MaMH group by a.MaMH, a.TenMH --9 select A.mamh, a.TenMH, COUNT(b.MaMH) from MON a join KETQUA b on a.MaMH=b.mamh group by a.MaMH, a.TenMH --10 select * from sinhvien a join KETQUA b on a.MaSV=b.MaSV join MON c on c.MaMH=b.MaMH where b.Diem =(select max(diem) from ketqua) --11 select a.MaKH, COUNT(a.masv) from SINHVIEN a join KHOA b on a.MaKH=b.MaKH where a.MaKH in (select top 1 MaKH from SINHVIEN group by MaKH order by COUNT(masv) desc) group by a.MaKH --12 select a.TenKH, b.HoSV+b.TenSV, b.HocBong from khoa a join sinhvien b on a.MaKH=b.MaKH and b.HocBong=(select MAX(Hocbong) from SINHVIEN) --13 select * from SINHVIEN a join KHOA b on a.MaKH=b.MaKH where a.HocBong=(select MAX(hocbong) from SINHVIEN where MaKH=(select Makh from khoa where tenkh=N'Tin Hc') ) --select MAX(a.Diem) from KETQUA a join MON b on a.MaMH=b.MaMH where b.TenMH=N'C s d liu' and a.Diem=MAX(a.Diem)

--15 select top 3 * from SINHVIEN a join KETQUA b on a.MaSV=b.MaSV join MON c on b.MaMH=c.MaMH where b.MaMH=(select MaMH from MON where TenMH=N' Ha') order by b.Diem asc

--17 select a.MaKH, a.[tong so sinh vien], b.[tong so sinh vien nu] from (select makh,COUNT(masv) as [tong so sinh vien] from SINHVIEN group by MaKH) as a join (select makh, COUNT(masv) as [tong so sinh vien nu]from SINHVIEN where Phai=0 group by MaKH) as b on a.MaKH=b.MaKH --19 select a.HoSV, c.TenKH, a.Phai from SINHVIEN a join KETQUA b on a.MaSV=b.MaSV join KHOA c on a.MaKH=c.MaKH group by a.MaSV, a.HoSV, c.TenKH, a.Phai having MIN(b.diem)>=4 --20 select b.MaMH, a.TenMH from MON a join KETQUA b on a.MaMH=b.MaMH group by b.MaMH, a.TenMH having MIN(b.Diem)>=4 --21 select a.MaKH, c.TenKH from SINHVIEN a join KETQUA b on a.MaSV=b.MaSV join KHOA c on a.MaKH=c.MaKH group by a.MaKH, c.TenKH having MIN(b.diem)>=5 --23 select a.MaMH, a.TenMH from MON a join KETQUA b on a.MaMH=b.MaMH group by a.MaMH, a.TenMH having MIN(b.Diem)>=5 --24 select a.MaSV, a.HoSV, a.MaKH from SINHVIEN a join KETQUA b on a.MaSV=b.MaSV group by a.MaSV, a.HoSV, a.MaKH having MIN(b.diem)>=5 --25 select b.MaSV, a.HoSV, a.MaKH from SINHVIEN a join KETQUA b on a.MaSV=b.MaSV where b.Diem<5 group by b.MaSV, a.HoSV, a.MaKH having COUNT(b.diem)>=2 --26 khoa co nhieu hon 3 nguoi select MaKH, COUNT(masv) as [tong so sinh vien] from SINHVIEN group by MaKH having COUNT(masv)>3 --27 danh sach sinh vien thi nhieu hon 2 mon select b.masv from SINHVIEN a join KETQUA b on a.MaSV=b.MaSV group by b.MaSV having COUNT(*)>2 --28 KHOA co 3 sinh vien nam tro len select MaKH, COUNT(masv) as [tong so sinh vien nam] from SINHVIEN where Phai=1 group by MaKH having COUNT(masv)>3 --29 select b.Masv, a.HoSV, c.TenKH, AVG(b.diem) from SINHVIEN a join KETQUA b on a.MaSV=b.MaSV join KHOA c on c.MaKH=a.MaKH group by b.MaSV, a.HoSV, c.TenKH having AVG(b.Diem)>4 --30 select a.MaMH, b.TenMH, AVG(diem) from KETQUA a join MON b on a.MaMH=b.MaMH group by a.MaMH, b.TenMH having AVG(diem)>6

View thng k s sinh vin nam, s sinh vin n ca cc lp. Kt xut c dng: MALOP TENLOP SOSV_NAM SOSV_NU Ch : ch thng k i vi cc sinh vin hin cn ang hc

SINHVIEN (MASV,HO,TEN,NGAYSINH,PHAI,NOISINH,DIACHI,NGHIHOC,MALOP) LOP(MALOP,TENLOP)


select a.malop,b.TENLOP, sum(a.sosv_nam) as sosv_nam, sum(a.flag_nu) as sosv_nu from ( select malop, 0 as flag_nu, COUNT(Phai) as sosv_nam from SINHVIEN where PHAI ='nam' and NGHIHOC = '0' group by MALOP union select malop, COUNT(Phai) as sosv_nu , 0 as flag_nam from SINHVIEN where PHAI ='nu' and NGHIHOC = '0' group by MALOP ) a, Lop b where a.MALOP = b.MALOP group by a.malop, b.TENLOP

or
select malop = isnull(a.malop,b.malop), tenlop, sosv_nam = isnull(a.sosv_nam,0),sosv_nu = isnull(b.sosv_nu,0) from (select malop, COUNT(Phai) as sosv_nam from SINHVIEN where PHAI ='nam' and NGHIHOC = '0' group by MALOP) a full join ( select malop, COUNT(Phai) as sosv_nu from SINHVIEN where PHAI ='nu' and NGHIHOC = '0' group by MALOP) b on a.malop = b.malop, LOP c where c.MALOP = isnull(a.malop,b.malop)

thi

Yu cu: 1. Hy vit lnh SQL to cu trc cc bng trn vi s lng 1 ln mn khng qu 3 quyn. 2. Lp danh sch nhng c gi nam ca lp MM04A c mn sch th vin. 3. Lp danh sch nhng c gi ca lp MM04A c mn sch th vin nhng cha tr, gm c cc trng sau: MaDG, Hoten, Masach, Tensach, Ngaymuon, Ngayhen. 4. Thng k trong th vin c bao nhiu sch ca mi tc gi. 5. Lp danh sch lit k ngy c tng s lng sch c mn ln hn tng s lng sch m nhn vin NV02 cho mn. 6. Tnh tng s sch do c gi Nguyn Vn An mn nhng cha tr. 7. Thm mt bn ghi mi vo bng DMSach; d liu ph hp nhng khng c nhp gi tr null. 8. Thay i ngy hn tr ca c gi DG01 thnh 1/7/2010; v xa sch Ton kinh t trong bng DMSach. 9. Tnh s sch mn trung bnh trong 1 ngy. 10. Lit k nhng sch trong th vin nhng cha tng c ngi mn, sp xp theo th t tng dn ca tc gi. 11. Hin th thng tin v cun sch c mn nhiu nht gm: Masach, Tensach, tacgia. 12. Hin th nhng cun sch lng mn trung bnh trong 1 ln ln hn 2. 13. Hin th nhng cun sch c mn trong thng 2 nm 2011.

14. Tnh tng s lng sch c mn trong thng 3 nm 2010. 15. Hin th nhng c gi cha bao gi mn sch. -- bai tap quan ly thu vien -- cau 1--Hy vit lnh SQL to cu trc cc bng trn vi s lng 1 ln mn khng qu 3 quyn.
CREATE TABLE DMSACH (MASACH varchar(10) not null constraint FK_DMS primary key, TENSACH varchar(100) not null, TACGIA varchar(50) not null, NHAXB varchar(100), NAMXB float(10), SOTRANG float(10)); CREATE TABLE DOCGIA (MADG varchar(10) not null constraint FK_DG primary key, HOTEN varchar(100) not null, NGAYSINH datetime, GIOITINH varchar(10), DIACHI varchar(100), DIENTHOAI varchar(20)); CREATE TABLE MUONTRA (MADG varchar(10) not null references DOCGIA(MADG), MASACH varchar(10) not null references DMSACH(MASACH), MANV varchar(10) not null, NGAYMUON datetime not null, NGAYHEN datetime, NGAYTRA datetime, SOLUONG float(10) not null check(SOLUONG<=3), GHICHU varchar(100), constraint FK_DKM primary key (MADG,MASACH,NGAYMUON)); INSERT INTO DMSACH VALUES('TM02','Quan tri du an','Nguyen Quang Dung','NXB Tai Chinh',2010,300); INSERT INTO DOCGIA VALUES('DG01','Nguyen Van An',12/01/1990,'Nam','MM04A',0904636232);

-- cau 2--Lp danh sch nhng c gi nam ca lp MM04A c mn sch th vin.


SELECT DOCGIA.HOTEN, DOCGIA.DIACHI, DOCGIA.GIOITINH FROM DOCGIA, MUONTRA WHERE DOCGIA.MADG = MUONTRA.MADG and DOCGIA.GIOITINH='Nam' and DOCGIA.DIACHI='MM04A' GROUP BY DOCGIA.HOTEN, DOCGIA.DIACHI, DOCGIA.GIOITINH

-- Cau 3-Lp danh sch nhng c gi ca lp MM04A c mn sch th vin nhng cha tr, gm c cc trng sau: MaDG, Hoten, Masach, Tensach, Ngaymuon, Ngayhen.
SELECT MUONTRA.MADG, DOCGIA.HOTEN, MUONTRA.MASACH, DMSACH.TENSACH, MUONTRA.NGAYMUON, MUON TRA.NGAYHEN FROM DMSACH, MUONTRA, DOCGIA WHERE MUONTRA.MADG = DOCGIA.MADG and DMSACH.MASACH = MUONTRA.MASACH and DOCGIA.DIACHI = ' MM04A' and MUONTRA.NGAYTRA is null GROUP BY MUONTRA.MADG, DOCGIA.HOTEN, MUONTRA.MASACH, DMSACH.TENSACH, MUONTRA.NGAYMUON, MU ONTRA.NGAYHEN

--Cau 4--Thng k trong th vin c bao nhiu sch ca mi tc gi.


SELECT DMSACH.TACGIA, COUNT(DMSACH.MASACH) as SOLUONG FROM DMSACH GROUP BY DMSACH.TACGIA

-- cau 5 -Lp danh sch lit k ngy c tng s lng sch c mn ln hn tng s lng sch m nh n vin NV02 cho mn.
SELECT MUONTRA.NGAYMUON, SUM(MUONTRA.SOLUONG) as TONGMUON FROM MUONTRA GROUP BY MUONTRA.NGAYMUON HAVING SUM(MUONTRA.SOLUONG)>= (SELECT SUM(MUONTRA.SOLUONG) as TONG FROM MUONTRA WHERE MUONTRA.MANV='NV02')

-- cau 6-- Tnh tng s sch do c gi Nguyn Vn An mn nhng cha tr.


SELECT DOCGIA.HOTEN, SUM(MUONTRA.SOLUONG) FROM DOCGIA, MUONTRA WHERE DOCGIA.HOTEN='Nguyen Van An' and DOCGIA.MADG=MUONTRA.MADG and MUONTRA.NGAYTRA is nu ll GROUP BY DOCGIA.HOTEN

--cau 7-Thm mt bn ghi mi vo bng DMSach; d liu ph hp nhng khng c nhp gi tr null.
INSERT INTO DMSACH VALUES('MM02','Thiet Ke Website voi Joomla!','Bui Tan Viet','VietHanITC',2011,350);

--cau 8- Thay i ngy hn tr ca c gi DG01 thnh 1/7/2010; v xa sch Ton kinh t trong b ng DMSach.
UPDATE MUONTRA SET MUONTRA.NGAYHEN=01/07/2010 WHERE MUONTRA.MADG='DG01' DELETE FROM DMSACH WHERE DMSACH.TENSACH='Toan Kinh Te'

-- cau 10- Lit k nhng sch trong th vin nhng cha tng c ngi mn, sp xp theo th t tng d n ca tc gi.

SELECT DMSACH.MASACH, DMSACH.TENSACH FROM DMSACH, MUONTRA WHERE DMSACH.MASACH not in (SELECT MUONTRA.MASACH FROM MUONTRA GROUP BY MUONTRA.MASACH) GROUP BY DMSACH.MASACH, DMSACH.TENSACH ORDER BY 2 ASC

-- cau 11 - Hin th thng tin v cun sch c mn nhiu nht gm: Masach, Tensach, tacgia.
SELECT MUONTRA.MASACH, DMSACH.TENSACH, DMSACH.TACGIA, MUONTRA.SOLUONG FROM MUONTRA,DMSACH WHERE MUONTRA.MASACH = DMSACH.MASACH and MUONTRA.SOLUONG = (select max(MUONTRA.SOLUONG) F ROM MUONTRA)

-- cau 12 --Hin th nhng cun sch lng mn trung bnh trong 1 ln ln hn 2.


SELECT MUONTRA.MASACH, DMSACH.TENSACH FROM MUONTRA, DMSACH WHERE MUONTRA.MASACH = DMSACH.MASACH and MUONTRA.SOLUONG >=2

-- cau 13 -- Hin th nhng cun sch c mn trong thng 2 nm 2011.


SELECT MUONTRA.MASACH, DMSACH.TENSACH, MUONTRA.NGAYMUON FROM MUONTRA, DMSACH WHERE MUONTRA.MASACH = DMSACH.MASACH and month(MUONTRA.NGAYMUON)=02

-- cau 14 -- Tnh tng s lng sch c mn trong thng 3 nm 2010.


SELECT SUM(MUONTRA.SOLUONG) FROM MUONTRA, DMSACH WHERE MUONTRA.MASACH = DMSACH.MASACH and month(MUONTRA.NGAYMUON) = 02 and year(MUONTRA.NG AYMUON) = 2010

-- cau 15-- Hin th nhng c gi cha bao gi mn sch.


SELECT DOCGIA.MADG, DOCGIA.HOTEN FROM DOCGIA WHERE DOCGIA.MADG not in (SELECT MUONTRA.MADG FROM MUONTRA) GROUP BY DOCGIA.MADG, DOCGIA.HOTEN

QUN L BN HNG
use master if DB_ID (N'HIEU_039') is not null drop database HIEU_039 create database HIEU_039 go use HIEU_039 go -- <<< DE 02 >>> -----------------------------------================================================= create table DANHMUC_SP ( MaSP int identity (1,1) primary key, TenSP nvarchar(100), DonGia float ) go insert into DANHMUC_SP values(N'My Git',60) insert into DANHMUC_SP values(N'TV',50) insert into DANHMUC_SP values(N'Qut My',15) insert into DANHMUC_SP values(N'Bn HS',10) insert into DANHMUC_SP values(N'n Ng',20) go --================================================= create table PHIEU_NHAP ( SoPN int identity(1,1) primary key, TenNhaCC nvarchar(100), NgayNhap datetime default getdate(), TongTien float default 0 ) go insert into PHIEU_NHAP (TenNhaCC) values (N'Thanh L ') insert into PHIEU_NHAP (TenNhaCC) values (N'i Nam') go

--==================================================== create table CHITIET_PHIEUNHAP ( SoPN int, MaSP int, Solg int, ThanhTien float default 0, primary key (SoPN,MaSP), foreign key (SoPN) references PHIEU_NHAP(SoPN), foreign key (MaSP) references DANHMUC_SP(MaSP) ) go insert into CHITIET_PHIEUNHAP (SoPN,MaSP,Solg) values(1,1,2) insert into CHITIET_PHIEUNHAP (SoPN,MaSP,Solg) values(1,2,4) insert into CHITIET_PHIEUNHAP (SoPN,MaSP,Solg) values(1,3,5) insert into CHITIET_PHIEUNHAP (SoPN,MaSP,Solg) values(2,1,5) insert into CHITIET_PHIEUNHAP (SoPN,MaSP,Solg) values(2,2,10) go --==================================================== create table PHIEU_XUAT ( SoPX int identity(1,1) primary key, TenKH nvarchar(100), NgayXuat datetime default getdate(), TongTien float default 0 ) go insert into PHIEU_XUAT (TenKH) values (N'Phm Thnh Cng') insert into PHIEU_XUAT (TenKH) values (N'Nguyn Thng Li') go --==================================================== create table CHITIET_PHIEUXUAT ( SoPX int, MaSP int, Solg int, ThanhTien float default 0, primary key (SoPX,MaSP), foreign key (SoPX) references PHIEU_XUAT(SoPX), foreign key (MaSP) references DANHMUC_SP(MaSP) ) go insert into CHITIET_PHIEUXUAT (SoPX,MaSP,Solg) values(1,1,1) insert into CHITIET_PHIEUXUAT (SoPX,MaSP,Solg) values(2,1,5) insert into CHITIET_PHIEUXUAT (SoPX,MaSP,Solg) values(1,2,2) insert into CHITIET_PHIEUXUAT (SoPX,MaSP,Solg) values(2,2,10) go --==================================================== create table TON_KHO ( MaSP int primary key, SolgTonDau int default 0, SolgNhap int default 0, SolgXuat int default 0, SolgTonCuoi int default 0, NgayCapNhat datetime default getdate(), foreign key (MaSP) references DANHMUC_SP (MaSP) ) go --=========================================================

-- CAU 1: -- Tao TRIGGER dung de THEM 1 sp co cac kiem tra sau: -- 1.TenSP phai duy nhat hoac khong rong -- 2.DonGia > 10 -- 3.Sau khi cap nhat DANHMUC_SP tu dong them vao MaSP moi -- trong bang TON_KHO
go create trigger them_DM_SP on DANHMUC_SP instead of insert

as declare @MaSP int,@TenSP nvarchar(100),@DonGia float select @MaSP=MaSP,@TenSP=TenSP,@DonGia=DonGia from inserted -- KIEM TRA RONG if (@TenSP is null) BEGIN raiserror (N'TenSP khng c rng!',16,1) return END -------------------------------------- KIEM TRA DUY NHAT if EXISTS (select * from DANHMUC_SP where TenSP=@TenSP) BEGIN raiserror (N'TenSP phi duy nht!',16,1) return END -------------------------------------- KIEM TRA MIEN GIA TRI if (@DonGia <= 10) BEGIN raiserror (N'DonGia phi > 10!',16,1) return END --------------------------------------- CAP NHAT SP MOI insert into DANHMUC_SP values (@TenSP,@DonGia) set @MaSP= (select MaSP from DANHMUC_SP where (TenSP=@TenSP)) insert into TON_KHO (MaSP) values (@MaSP) go insert into TON_KHO (MaSP) select MaSP from DANHMUC_SP --insert into DANHMUC_SP (TenSP,DonGia) values (N'ABC',15) --select * from DANHMUC_SP --select * from TON_KHO go --=========================================================

-- CAU 2: -- Tao TRIGGER THEM CHITIET_PHIEUNHAP co cac RBTV sau: -- 1.SoPN phai ton tai trong bang PHIEU_NHAP -- 2.MaSP phai ton tai trong bang DANHMUC_SP -- 3.Solg phai > 0 -- 4.SoPN + MaSP phai la duy nhat trong CHITIET_PHIEUNHAP -- 5.Tu MaSP hay tim DonGia san pham -- 6.Tinh ThanhTien cho mau tin dang them (ThanhTien=Solg*DonGia) -- 7.Phat lenh cap nhat them CHITIET_PHIEUNHAP -- Sau khi them hay tinh lai tong SolgNhap cua SP hien hanh trong TON_KHO -- bang cach cong don Solg moi vao Solg cu -- Va SolgTonCuoi theo cong thuc SolgTonCuoi = SolgTonDau + SolgNhap - SolgXuat go
--=========================================================

-- CAU 3: -- Tao TRIGGER XOA CHITIET_PHIEUXUAT co cac RBTV sau: -- 1.SoPX + MaSP phai ton tai trong CHITIET_PHIEUXUAT -- 2.Phat lenh XOA CHITIET_PHIEUXUAT -- Cap nhat lai tong SolgXuat trong TON_KHO -- bang cach cong don SolgXuat moi vao SolgXuat cu -- Va SolgTonCuoi theo cong thuc SolgTonCuoi = SolgTonDau + SolgNhap - SolgXuat go
create trigger xoa_CHITIET_PHIEUXUAT on CHITIET_PHIEUXUAT instead of delete as declare @MaSP int,@SoPX int,@SolgXuat int,@SolgNhap int,@SolgTonDau int,@SolgTonCuoi int select @MaSP=MaSP,@SoPX=SoPX from deleted -- KIEM TRA TON TAI if NOT EXISTS (select * from CHITIET_PHIEUXUAT where MaSP=@MaSP and SoPX=@SoPX) BEGIN raiserror (N'(MaSP+SoPX) ny khng tn ti!',16,1) return END --------------------------------------- PHAT LENH XOA

delete from CHITIET_PHIEUXUAT where MaSP=@MaSP and SoPX=@SoPX -- CAP NHAT set @SolgXuat = (select SUM(Solg) from CHITIET_PHIEUXUAT where MaSP=@MaSP) set @SolgNhap = (select SUM(Solg) from CHITIET_PHIEUNHAP where MaSP=@MaSP) set @SolgTonDau = (select SolgTonDau from TON_KHO where MaSP=@MaSP) set @SolgTonCuoi = @SolgTonDau+@SolgNhap-@SolgXuat update TON_KHO set MaSP=@MaSP,SolgTonDau=@SolgTonDau,SolgNhap=@SolgNhap,SolgXuat=@SolgXuat,SolgTonCuoi=@SolgTonCuoi where MaSP=@MaSP go --delete from CHITIET_PHIEUXUAT where MaSP=1 and SoPX=1 go select * from CHITIET_PHIEUXUAT select * from CHITIET_PHIEUNHAP select * from TON_KHO go --=========================================================

-- CAU 4: -- Tao TRIGGER SUA CHITIET_PHIEUNHAP co cac RBTV sau: -- 1.SoPN + MaSP phai ton tai trong CHITIET_PHIEUNHAP -- 2.Tim Solg nhap cu roi kiem tra Solg nhap moi > Solg nhap cu -- 3.Tu MaSP hay tim DonGia san pham -- 4.Tinh ThanhTien = Solg moi * DonGia -- 5.Phat lenh cap nhat -- 6.Tinh lai TongTien cho SoPN hien tai go
--=========================================================

-- CAU 5: -- Tao TRIGGER SUA CHITIET_PHIEUXUAT co cac RBTV sau: -- 1.SoPX + MaSP phai ton tai trong CHITIET_PHIEUXUAT, -- SoPX phai ton tai trong PHIEU_XUAT -- MaSP phai ton tai trong DANHMUC_SP -- 2.Tim Solg xuat cu roi kiem tra Solg xuat moi > Solg xuat cu -- 3.Tu MaSP hay tim DonGia san pham -- 4.Tinh ThanhTien = Solg moi * DonGia -- 5.Phat lenh cap nhat -- 6.Tinh lai TongTien cho SoPX hien tai
go create trigger sua_CHITIET_PHIEUXUAT on CHITIET_PHIEUXUAT instead of update as declare @MaSP int,@SoPX int,@Solg int,@ThanhTien float,@SolgCu int,@DonGia int select @MaSP=MaSP,@SoPX=SoPX,@Solg=Solg,@ThanhTien=ThanhTien from inserted -- KIEM TRA TON TAI if NOT EXISTS (select * from CHITIET_PHIEUXUAT where MaSP=@MaSP and SoPX=@SoPX) BEGIN raiserror (N'(MaSP+SoPX) ny khng tn ti!',16,1) return END -------------------------------------if NOT EXISTS (select * from PHIEU_XUAT where SoPX=@SoPX) BEGIN raiserror (N'SoPX ny khng tn ti!',16,1) return END -------------------------------------if NOT EXISTS (select * from DANHMUC_SP where MaSP=@MaSP) BEGIN raiserror (N'MaSP+SoPX ny khng tn ti!',16,1) return END -------------------------------------set @SolgCu = (select Solg from CHITIET_PHIEUXUAT where MaSP=@MaSP and SoPX=@SoPX) if (@Solg <= @SolgCu) BEGIN raiserror (N'Solg mi phi ln hn Solg c!',16,1) return END -------------------------------------set @DonGia = (select DonGia from DANHMUC_SP where MaSP=@MaSP) set @ThanhTien=@Solg*@DonGia

update CHITIET_PHIEUXUAT set MaSP=@MaSP,SoPX=@SoPX,Solg=@Solg,ThanhTien=@ThanhTien where MaSP=@MaSP and SoPX=@SoPX update PHIEU_XUAT set TongTien=(select SUM(ThanhTien) from CHITIET_PHIEUXUAT where SoPX=@SoPX) where SoPX=@SoPX go --update CHITIET_PHIEUXUAT set MaSP=2,SoPX=2,Solg=10 where MaSP=2 and SoPX=2 --select * from PHIEU_XUAT --select * from CHITIET_PHIEUXUAT

USE [QLBanHang] GO --TAO BANG AO --CREATE VIEW TenBangAo --AS --Select... --GO

-- Vi du: tao bang ao liet ke thong tin cua vat tu -- chua co trong chi tiet don dat hang.
CREATE VIEW ViewThongTinVatTuChuaDuocDatHang AS Select * From VatTu Where Not Exists (Select * From CTDonDH Where VatTu.mavtu = CTDonDH.mavtu) GO Select * From VatTu Where Not Exists (Select * From CTDonDH Where VatTu.mavtu = CTDonDH.mavtu) Select * From VatTu left join CTDonDH on VatTu.mavtu = CTDonDH.mavtu Where CTDonDH.sldat is null

--Tao bang ao bao gom cac thong tin: SoPhieuNhap, NgayNhap, TongThanhTien --Nhung chi in ra cac phieu nhap co tong thanh tien > 60 trieu.
Create VIEW ViewPhieuNhapTongTienLonHon60Trieu AS Select PNhap.sopn, PNhap.ngaynhap, Sum(CTPNhap.dgnhap * CTPNhap.slnhap) AS TongThanhTien From PNhap, CTPNhap Where PNhap.sopn = CTPNhap.sopn Group by PNhap.sopn, PNhap.ngaynhap Having Sum(CTPNhap.dgnhap * CTPNhap.slnhap) > 60000000 GO --Case: can cu vao gia tri cua cot da co --> suy ra nhung gia tri moi. --TenCotMoi = Case --When DieuKien1 Then GiaTri1 --When DieuKien2 Then GiaTri2 --When DieuKien3 Then GiaTri3 --... --Else GiaTriKhac. --End

----------------------------Vi du: --Tao bang ao the hien thong tin: --NamThang, MaVatTu, GhiChu --Voi cot ghi chu duoc tinh nhu sau: --Neu mat hang nao co tong so luong xuat --Lon hon 9: hang ban chay --Lon hon 6: trung binh --Con lai: ban cham.
Select TonKho.namthang, TonKho.mavtu, GhiChu = Case When TonKho.tongslnhap > 9 Then 'Ban Chay' When TonKho.tongslnhap between 6 and 9 Then 'Trung Binh' Else 'Ban Cham' End From TonKho

-- Lap trinh CSDL -- Khai bao bien -- Gan gia tri cho bien: Dung tu khoa Set hoac Select @TenBien = GiaTri. -- Neu gia tri duoc lay tu bang nao do thi chi co the dung tu khoa Select. -- Select @TenBien = TenCot From Table.

--Vi du:
Declare @x int Set @x = 10 Print N'Gia Tri cua x La: ' + Convert(nvarchar(10), @x) Print N'Gia Tri cua x La: ' + Cast(@x As nvarchar(10)) Declare @MaVatTu nvarchar(20) Select Top 1 @MaVatTu = VatTu.mavtu From VatTu Print N'Gia Tri cua MaVatTu La: ' + @MaVatTu GO

--Vi du: --Viet ma lenh in thong tin vat tu co ma vat tu tuy y. --Neu khong tim thay ma vat tu: thong bao la khong tim thay.
Declare @MaVatTu nvarchar(20) Set @MaVatTu = 'DD01' If Exists(Select * From VatTu Where VatTu.mavtu = @MaVatTu) Begin Select * From VatTu Where VatTu.mavtu = @MaVatTu End Else Begin Print N'Khong tim thay vat tu co ma ' + @MaVatTu End

--While --While DieuKien --Begin --Cau lenh --Co the dung Break --End

--Vi du: viet chuong trinh tinh tong S = 1 + 2 + 3 + ... + n


Declare @n int Set @n = 10 Declare @Sum int Set @Sum = 0 Declare @i int Set @i = 1 While @i <= @n Begin Set @Sum = @Sum + @i Set @i = @i + 1 End Print N'Tong la: ' + Convert(Nvarchar(10), @Sum)

Vi du: Tao Proc in tong so luong xuat cua ma vat tu tuy y trong CTPXuat
Use [QLBanHang] Go Alter Proc TongSoLuongXuat @MaVatTu nchar(4) As Declare @Sum int Select @Sum = SUM(CTPXuat.slxuat) From CTPXuat Where CTPXuat.mavtu = @MaVatTu Print N'Tong so luong la: ' + Convert(nvarchar(10), @Sum) Go Exec TongSoLuongXuat 'DD01' Go

--Dang 2: xuat ra 1 bang --Viet doan ma cho phep hien the thong tin gom: --MaVatTu, TenVatTu, TongSoLuongXuat cua VatTu co ma tuy y
Alter Proc spuThongTinVatTuTheoMa @MaVatTu nvarchar(20) As Select VatTu.mavtu, VatTu.tenvtu, SUM(CTPXuat.slxuat) As TongSoLuong From VatTu, CTPXuat Where VatTu.mavtu = CTPXuat.mavtu And CTPXuat.mavtu = @MaVatTu Group By VatTu.mavtu, VatTu.tenvtu Go

create table DMSP ( MaSP int identity(1,1) primary key, TenSP nvarchar(50), DVTinh nvarchar(10), DonGia int ) go

insert into DMSP values(N'TiVi LCD',N'Chic',10) insert into DMSP values(N'Bia Tiger',N'Thng',15) insert into DMSP values(N'Nn Bo Him',N'Ci',20) insert into DMSP values(N'Sa VINAMILK',N'Lon',5) insert into DMSP values(N'Xe My',N'Chic',30) go --============================================== create table HOADON ( SoHD int identity(1,1) primary key, TenKH nvarchar(50), NgayHD datetime default getdate(), TongTien float default 0 ) go insert into HOADON (TenKH) values(N'Phan Thanh Hi') insert into HOADON (TenKH) values(N'L Bo Long') insert into HOADON (TenKH) values(N'V Ngc Ha') insert into HOADON (TenKH) values(N'Nguyn Thanh Vn') insert into HOADON (TenKH) values(N'Trn Cng Lun') go --============================================== create table CTHD ( SoHD int, MaSP int, Solg int, ThanhTien int default 0, Trang 2 primary key (SoHD,MaSP), foreign key (MaSP) references DMSP (MaSP), foreign key (SoHD) references HOADON (SoHD) ) go insert into CTHD (SoHD,MaSP,Solg) values(1,1,5) insert into CTHD (SoHD,MaSP,Solg) values(1,2,10) insert into CTHD (SoHD,MaSP,Solg) values(1,3,20) insert into CTHD (SoHD,MaSP,Solg) values(2,1,15) insert into CTHD (SoHD,MaSP,Solg) values(2,2,5) insert into CTHD (SoHD,MaSP,Solg) values(3,3,15) insert into CTHD (SoHD,MaSP,Solg) values(5,3,10) insert into CTHD (SoHD,MaSP,Solg) values(5,5,20) go

--===================================================================
--CU 1: To TRIGGER THM SP vo bng DMSP -- 1. TenSP duy nht, khng rng -- 2. DonGia > 10

--===================================================================
go create trigger THEM_SP on DMSP instead of insert as declare @TenSP nvarchar(50),@DVTinh nvarchar(10),@DonGia int select @TenSP=TenSP,@DVTinh=DVTinh,@DonGia=DonGia from inserted -- KIEM TRA DUY NHAT ------------------------------------------if EXISTS (select * from DMSP where TenSP=@TenSP) BEGIN raiserror (N'TenSP ny tn ti!',16,1) return END -- KIEM TRA RONG ----------------------------------------------if (@TenSP is null or @TenSP = '') BEGIN raiserror (N'TenSP khng c rng!',16,1)

return END -- KIEM TRA MIEN GIA TRI --------------------------------------if (@DonGia <= 10) BEGIN raiserror (N'DonGia phi > 10',16,1) return END insert into DMSP values(@TenSP,@DVTinh,@DonGia) go --insert into DMSP values(N'ABC',N'Chic',15) --select * from DMSP go

--===================================================================
--CU 2: To TRIGGER SA d liu trong bng CTHD -- 1. MaSP + SoHD phi tn ti -- 2. Solg mi phi > hn Solg c -- 3. Tnh li ThanhTien = Solg * DonGia -- trong DonGia ly t bng DMSP ca mu tin hin hnh -- 4. Tnh li TongTien trong bng HOADON ca SoHD hin hnh

--===================================================================
go create trigger SUA_CTHD on CTHD instead of update as declare @SoHD int,@MaSP int,@Solg int,@DonGia int,@ThanhTien int select @SoHD=SoHD,@MaSP=MaSP,@Solg=Solg,@ThanhTien=ThanhTien from inserted -- KIEM TRA TON TAI ------------------------------------------if NOT EXISTS (select * from CTHD where SoHD=@SoHD and MaSP=@MaSP) BEGIN raiserror (N'(SoHD + MaSP) ny khng tn ti!',16,1) return END -- KIEM TRA MIEN GIA TRI --------------------------------------if @Solg <= (select Solg from CTHD where SoHD=@SoHD and MaSP=@MaSP) BEGIN raiserror (N'Solg mi phi ln hn Solg c!',16,1) return END -- LAY DON GIA, TINH THANH TIEN -------------------------------select @DonGia=DonGia from DMSP where MaSP=@MaSP set @ThanhTien=@Solg*@DonGia update CTHD set Solg=@Solg,ThanhTien=@ThanhTien where SoHD=@SoHD and MaSP=@MaSP -- TINH LAI TONG TIEN -----------------------------------------update HOADON set TongTien=(select sum(ThanhTien) from CTHD where SoHD=@SoHD)where SoHD=@SoHD go --update CTHD set Solg=30 where SoHD=1 and MaSP=1 --update CTHD set Solg=30 where SoHD=1 and MaSP=2 --update CTHD set Solg=20 where SoHD=3 and MaSP=3 --select * from CTHD --select * from HOADON go

--===================================================================
--CU 3: To TRIGGER XA d liu trong bng HOADON -- 1. SoHD phi tn ti -- 2. SoHD phi cha c trong bng CTHD

--===================================================================
go create trigger XOA_HOADON on HOADON instead of delete as declare @SoHD int select @SoHD=SoHD from deleted

-- KIEM TRA TON TAI ------------------------------------------if NOT EXISTS (select * from HOADON where SoHD=@SoHD) BEGIN raiserror (N'SoHD ny khng tn ti!',16,1) return END -- KIEM TRA CHUA DUOC SU DUNG --------------------------------if EXISTS (select * from CTHD where SoHD=@SoHD) BEGIN raiserror (N'SoHD ny c trong bng CTHD, khng c xa!',16,1) return END delete from HOADON where SoHD=@SoHD go --delete from HOADON where SoHD=4 --select * from HOADON go

1) Trn c s d liu (database) Cc phin bn ca SQL Server: Enterprise, Personal, Desktop, Developer,.. Cc b phn ca SQL Server: Enterprise Manager, Query Analyzer, Books Online,.. Cc loi tp tin ca SQL Server: data file (primary, secondary), log file Cc loi c s d liu ca SQL Server: system database, user database create database: to c s d liu create database HoSoSinhVien create database HoSoSinhVien on (name=HSSV_data, filename=c:\HSSV_data.mdf) log on (name=HSSV_log, filename=c:\HSSV_log.ldf) drop database: xa c s d liu drop database HoSoSinhVien alter database: sa cc thng tin ca c s d liu alter database HoSoSinhVien modify name = HSSV exec sp_dboption: sa cc thng tin ca c s d liu exec sp_dboption HoSoSinhVien, read only, true exec sp_dboption HoSoSinhVien, autoshrink, true exec sp_dboption HoSoSinhVien, single_user dbcc: iu khin c s d liu dbcc shrinkdatabase(HoSoSinhVien, 10) 2) Trn bng (table) Nh cc kiu s liu: text, binary, numberic, money, datetime, bit, variant Nh cc cc rng buc: default, check, unique, foreign, primary Nh cc kiu ton vn: entity, domain, referential, user Nh cc thuc tnh b tr: identity, null create table: to bng To bng vi cc ct create table SinhVien ( MaSV int, TenSV nchar(50) )

To vi cc rng buc create table SinhVien ( MaSV int primary key, TenSV nvarchar(50) not null, QueQuan int references DiaPhuong(MaDP) ) drop table: xa bng drop table SinhVien alter table..add: thm ct Thm ct bng cch dng lnh alter table alter table SinhVien add QueQuan int alter table..drop column: xa ct alter table SinhVien drop column QueQuan alter table..alter column: thm thuc tnh not null alter table SinhVien alter column TenSV nchar(50) not null alter table..add primary key: thm kha chnh Thm rng buc kha chnh cn phi bin mt ct null thnh not null trc khi thm. Nu lnh chuyn i thuc tnh not null ngay cnh lnh thm kha chnh th phi chn t kha go vo v c th lnh trn cha c thc hin do lnh di bo li alter table SinhVien alter column MaSV int not null go alter table SinhVien add primary key (MaSV) alter table..add foreign key: thm rng buc kha ngoi alter table SinhVien add foreign key (QueQuan) references DiaPhuong(MaDP) alter table..add default: thm rng buc mc nh alter table SinhVien add default 'khong ten' for TenSV exec sp_help: xem thng tin bng exec sp_help SinhVien 3) Trn bn ghi (record) Nh thm phn biu thc iu kin Nh thm phn k t thay th

insert..values: thm cc bn ghi vo bng insert into SinhVien (MaSV, TenSV, QueQuan) values (1, NNguyn Vn A, 1) insert..select: thm cc bn ghi t bng khc vo bng insert into DocGia select MaSV, TenSV, QueQuan from SinhVien insert into DocGia select MaGV, TenGV, QueQuan from GiaoVien select..into: a kt qu la chn vo bng mi select MaSV, TenSV, Diem into SinhVienKha from SinhVien where Diem > 7.0 delete: xa cc bn ghi t bng delete from SinhVien delete from SinhVien where MaSV=1234 truncate: xa ton b bn ghi ca bng truncate table SinhVien update: sa cc bn ghi trong bng update SinhVien set NhomTruong = 1 where MaSV < 4 update SinhVien set NhomTruong = 4 where (MaSV > 3 and MaSV < 8) 4) Truy vn (query) H tr truy vn: distinct, top, as, identity Php ton tp hp: in, like, between Cc hm tng nhm: sum, max, min, avg 4.1) Truy vn n gin select *: Hin tt c bng select * from SinhVien select: Hin mt s ct select TenSV, DiemTB from SinhVien select..where: Hin mt s dng / bn ghi select TenSV, DiemTB from SinhVien where DiemTB > 6.0 select..order by: Hin v sp xp theo im ri theo tn select TenSV, DiemTB

from SinhVien order by DiemTB desc, TenSV asc select..distinct: Hin danh sch gi tr khng trng lp select distinct QueQuan from SinhVien select..top: Hin cc dng u tin trong bng select top 3 TenSV, DiemTB from SinhVien order by DiemTB desc, TenSV asc 4.2) Truy vn lng nhau (nested query) select..where (select) Hin tt c nhng ngi trong bng nhn vin c lng bng lng ln nht ca nhng ngi c trong cng ty: select TenNV, Luong from NhanVien where Luong = (select max(Luong) from NhanVien) select..where (in) Hin tt c nhng ngi trong bng nhn vin c lng ln nht hoc ln nh ca nhng ngi c trong cng ty:. select TenNV, Luong from NhanVien where Luong in (select top 2 Luong from NhanVien order by Luong) Cu lnh select trong s to ra mt tp hai gi tr (top 2) l lng ln nht v lng ln nh. V cu lnh select th nht s chn ra nhng ngi m lng nm trong tp ln nht v ln nh select..where (in sub) Hin ra tt c nhng ngi c lng ln nht phng ca anh ta (khng phi ln nht trong cng ty m ln nht trong phng hoc n v m anh ta thuc v) select nv1.TenNV, nv1.Luong from NhanVien as nv1 where nv1.Luong = (select max(Luong) from NhanVien where Phong=nv1.Phong) Cu lnh select trong s tr v gi tr lng ln nht nhng khng phi ln nht trong ton cng ty m ln nht trong phng ca nv1. Sau cu lnh select ngoi cng s xc nh xem nv1 c c chn khng bng cch kim tra lng anh ta vi lng ln nht ca phng anh ta. 4.3) Truy vn tng nhm (subtotal query / grouping query) select..group by: Thng k theo tiu ch Hin ra s lng cc nhn vin ng vi tng qu select QueQuan, count(*) from NhanVien group by QueQuan m s nam v s n trong cng ty select GioiTinh, count(*) from NhanVien group by GioiTinh Tnh tng thu nhp theo tng phng

select Phong, sum(Luong) from NhanVien group by Phong select..having: Hin ra mt s nhm ph hp Ch m s lng ngi Hi Phng v s lng ngi H ni select QueQuan, count(*) from NhanVien group by QueQuan having (QueQuan = HP, QueQuan = HN) Ch hin ra nhng phng no c tng thu nhp ln hn 500000 select Phong, sum(Luong) from NhanVien group by Phong having sum(Luong) > 5000000 Ch hin ra nhng tnh no c s lng ngi ln hn 10 select QueQuan, count(*) from NhanVien group by QueQuan having count(*) > 10 4.4) Truy vn lin bng (cross table query / joining query) select..inner join: ghp cc cp bn ghi tha mn iu kin Ghp bng nhn vin v hin ra tn nhn vin v tn a phng select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien inner join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP select..left outer join: ly tt c pha tri v ghp (nu c) vi phi Ly tt c nhng nhn vin k c nhng nhn vin c qu qun khng hp l (ngha l m qu qun khng c trong bng a phng) select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien left outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP select..right outer join: ly tt c pha phi v ghp (nu c) vi pha tri Ly tt c nhng a phng ghp vi nhn vin, cc a phng khng hp l s c ghp vi b d liu rng. Khng hin ra cc nhn vin khng c m qu qun ph hp select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien right outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP select..full outer join: ly t hai pha v ghp nu c Ly tt c nhng nhn vin (nu khng c qu qun ph hp th ghp vi b d liu rng) v tt c nhng a phng k c khng c nhn vin. select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien right outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP select..cross join: tr v tt c cc cp c th ghp Ghp tng nhn vin vi tt c cc a phng. Nh vy nu c m nhn vin v c n a phng th bng ch s c m*n dng. n dng u cho nhn vin th nht ghp vi cc a phng. n dng sau cho nhn vin th hai ghp vi cc a phng. v tip tc nh th ti nhn vin th

m. select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien cross join DiaPhuong ref: Tham kho thm mt s lnh Xem tt c cc C S D LIU ngi dng trong MY CH Mi khi mt c s d liu c to ra, bng sysdatabase trong c s d liu master s cha thng tin v bng mi to ra . Do vy chng ta c th lit k tt c cc c s d liu trong mt my ch bng cch lit k cc bn ghi trong bng sysdatabase select * from master.dbo.sysdatabases where sid <> 1 Xem tt c cc BNG ngi dng trong C S D LIU Mi khi mt bng c to ra trong mt c s d liu, thng tin v bng s c cha trong bng sysobjects ca chnh c s d liu cha bng va to. V vy chng ta c th xem danh sch cc bng trong c s d liu bng cch truy vn bng sysobjects. Cc bng do ngi dng to c kiu l U select * from Northwind.dbo.sysobjects where xtype='U' Trong v d ny, chng ta ly tt c cc bn ghi bng sysobjects ca c s d liu Northwind nhng ch ly nhng bng ngi dng, ngha l nhng bng c xtype l U Xem tt c cc CT thuc v mt BNG Mi khi mt ct trong bng c to, bng syscolumns trong c s d liu s cha thng tin v ct va to. Thuc tnh id ca ct s cha nh danh ca bng m ct thuc v. V vy xem cc ct trong mt bng d liu, chng ta c th truy vn bng syscolumns declare @x int set @x = (select id from sysobjects where name='Employees') select * from syscolumns where id = @x Trong v d ny, ta khai bo bin @x kiu int, sau ly id ca bng Employees vo bin @x, ri ta ly tt c cc ct trong bng syscolumns m c id bng @x, cng c ngha l id ca bng Employees. Do vy ta s lit k c tt c cc ct trong bng Employees S dng bng tm Khai bo bng, cp nht bng, v hin bng declare @x table(MaSV int, TenSV nvarchar(20)) insert into @x values(1, N'Thng') insert into @x values(2, N'Yn') select * from @x Khai bo bng, ti bng khc t trong c s d liu ln bng va khai bo, v hin bng declare @x table(MaSV int, TenSV nvarchar(20)) insert into @x select EmployeeID, firstname from Northwind.dbo.Employees

select * from @x S dng bin tm declare @t money set @t = (select max(UnitPrice) from Northwind.dbo.products) select * from Northwind.dbo.products where UnitPrice >= @t ref: Cc khi nim c bn ca c s d liu Cc m hnh d liu (data model) + M hnh th bc (hierarchical) + M hnh mng li (network) + M hnh quan h (relational) Cc vn ca lu tr + S d tha (redundance) + S nht qun (consistence) + Tnh ton vn (integrity) + S an ton (security) + S chia s (sharing) Cc khi nim c bn + C s d liu (database) + Bng (table) hoc quan h (relation) + Bn ghi (record) hoc dng (row) hoc b (tuple) + Trng (field) hoc ct (column) + Mi quan h (relationship) c biu hin bng bng (table) hoc kha (key) Mi quan h gia cc + Ti sao phi lu mi quan h + Phng php lu cc mi quan h (dng kha, dng bng) + Kha chnh (primary key) v kha ngoi (foreign key) + Vn ton vn tham chiu (referential integrity) Ngn ng nh ngha v x l d liu + Thao tc trn cc i tng nh c s d liu, bng, ct + Phn nh ngha c s d liu v bng: create, drop, alter + Phn cp nht d liu: insert, delete, update + Phn truy vn d liu: join, union, projection, selection, sort, group + Phn lp trnh v thao tc: declare, set, use, go ref: Lin quan ti nh ngha bng Cc vn v ton vn d liu + Ton vn thc th (entity integrity): primary key, unique, identity + Ton vn tham chiu (referential integrity): foreign key, check + Ton vn min d liu (domain integrity): default, foreign key, check, not null + Ton vn ngi dng (user integrity): rules, stored procedures, triggers Cc h tr vi ton vn + Rng buc kim tra (check constraint): phi tha mn iu kin no + Rng buc mc nh (default constraint): phi c mt gi tr mc nh + Rng buc duy nht (unique constraint): cc gi tr trong ct khng c trng lp + Rng buc kha ngoi (foreign key constraint): cc gi tr phi hp l vi ct kha chnh tng ng + Rng buc kha chnh (primary key constraint): phi duy nht v khng trng + Thuc tnh nh danh (identity property): c th c tng t ng

+ Thuc tnh khng trng (not null property): khng c php trng Cc kiu d liu Gi tr nh phn: bit Cc s nguyn: bigint, int, smallint, tinyint Cc s thc xp x: float, real Gi tr s thc chnh xc: decimal, numberic Gi tr tin t: money, smallmoney Gi tr hi gian: datetime, smalldatetime Cc chui: char, varchar, text, nchar, nvarchar, ntext, Cc chui nh phn: binary, varbinary, image Cc kiu khc: cursor, table, variant, timestamp, uniqueidentifier NH NGHA D LIU (DATA DEFINITION LAGUAGE -DDL). Phn ny s xem xt cc lnh lin quan n to mi, sa i, xa cc i tng lin quan n Table, View v cc i tng khc. To kiu d liu mi. To kiu d liu dng user-defined. C php:
sp_addtype[ @typename = ] type, [ @phystype = ] system_data_type [ , [ @nulltype = ] 'null_type' ] [ ,[ @owner = ] 'owner_name' ]

V d:
sp_addtype ssn, varchar(11), NOT NULL

Xa kiu d liu to. C php: sp_droptype[ @typename = ] 'type' V d: Sp_droptype ssn To rng buc (Constraint). To rng buc c thc hin trong 2 cu lnh Create Table hoc Alter Table: Check, Default, Foreign Key, Primary Key, Unique. Xt mt s v d sau: + To mt Check. trong bng authors.
ALTER TABLE authors ADD CONSTRAINT chau_id CHECK(au_id LIKE [0-9][0-9][0-9]-[0-9][0-9]- [0-9][0-9] [0-9][0-9])

+ To Check trong bng Publishers.

ALTER TABLE publishers ADD chpub_id CHECK(pub_id IN (1389, 0736, 0877, 1622, 1756)OR pub_id LIKE 99[0-9][0-9])

+ To rng buc Default.


ALTER TABLE authors ADD DEFAULT UNKNOWN for au_lname

+ To rng buc Foreign Key.


ALTER TABLE titles ADD CONSTRAINT REFERENCES publishers(pub_id) FK_pub_id FOREIGN KEY(pub_id)

+ To rng buc Primary Key.


ALTER TABLE authors ADD CONSTRAINT UPKCL_auidind PRIMARY KEY CLUSTERED (au_id)

+ To rng buc Unique.


ALTER TABLE stores ADD CONSTRAINT UNIQUENONCLUSTERED(store_name, city) UNC_name_city

Xa rng buc. S dng Drop trong cc cu lnh Create Table hoc Alter Table . + V d xa Constraint s dng cu lnh Alter Table.
ALTER TABLE authors DROP CONSTRAINT UPKCL_auidind

Hin th rng buc.


sp_helpconstraint titltes

To bng. to bng d liu c th s dng 2 cu lnh Create Table hoc Select Into. + To bng tm thi local (l bng ch hin vi phin hin thi, tn bng c bt u bng mt du #).
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY) INSERT INTO #MyTempTable VALUES (1)

+ To bng tm thi global (hin vi tt c cc phin, tn bng c bt u bng 2 du #).


CREATE TABLE ##MyTempTable (cola INT PRIMARY KEY) 150 INSERT INTO ##MyTempTable VALUES (1) + To bng d liu. /* ************************** jobs table ********* */ CREATE TABLE jobs ( job_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, job_desc varchar(50) NOT NULL DEFAULT 'New Position -title not formalized yet', min_lvl tinyint NOT NULL CHECK (min_lvl >= 10),

max_lvl tinyint NOT NULL CHECK (max_lvl <= 250) ) /* ************************* employee table */ CREATE TABLE employee ( emp_id empid CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED CONSTRAINT CK_emp_id CHECK (emp_id LIKE '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' or emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'), fname varchar(20) NOT NULL, minit char(1) NULL, lname varchar(30) NOT NULL, job_id smallint NOT NULL DEFAULT 1 REFERENCES jobs(job_id), job_lvl tinyint DEFAULT 10, pub_id char(4) NOT NULL DEFAULT ('9952') REFERENCES publishers(pub_id), hire_date datetime NOT NULL DEFAULT (getdate()) ) /* ***************** publishers table *** */ 151 CREATE TABLE publishers ( pub_id char(4) NOT NULL CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED CHECK (pub_id IN ('1389', '0736', '0877','1622', '1756')OR pub_id LIKE '99[0-9][0-9]'), pub_name varchar(40) NULL, city varchar(20) NULL, state char(2) NULL, country varchar(30) NULL DEFAULT('USA') )

Xa bng. S dng lnh Drop Table. + Xa bng trong CSDL hin thi: Drop Table MyTable + Xa bng trong CSDL khc. DROP TABLE pubs.dbo.authors2 i tn bng. S dng th tc sp_rename + i tn bng: Sp_rename titltes, books Sa cu trc bng. S dng lnh Alter Table. + Thm mt ct vo bng.
CREATE TABLE doc_exa ( column_a INT) GO ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL

GO EXEC sp_help doc_exa GO DROP TABLE doc_exa GO

+ Xa mt ct khi bng.
CREATE TABLE doc_exb ( column_a INT, column_b VARCHAR(20) NULL) 152 GO ALTER TABLE doc_exb DROP COLUMN column_b GO EXEC sp_help doc_exb GO DROP TABLE doc_exb GO

To Index. S dng lnh Create Index. + To Index.


SET NOCOUNT OFF USE pubs IF EXISTS (SELECT name FROM sysindexes WHERE name = 'au_id_ind') DROP INDEX authors.au_id_ind GO USE pubs CREATE UNIQUE CLUSTERED INDEX au_id_ind ON authors (au_id) GO

Xem thng tin Index. S dng th tc sp_helpindex + Xem Index ca bng authors.
sp_helpindex authors

Xa Index. S dng lnh Drop Index. + Xa Index ca bng authors.


DROP INDEX authors.au_id_ind

To khung nhn. S dng lnh Create View. + To View.


USE pubs IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'titles_view')

153 DROP VIEW titles_view GO CREATE VIEW titles_view AS SELECT title, type, price, pubdate FROM titles GO

Xa khung nhn. S dng lnh Drop View. + Xa khung nhn.


USE pubs IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'titles_view') DROP VIEW titles_view GO

i tn khung nhn. S dng lnh th tc sp_rename. + i tn view.


sp_rename titles_view, view_titles

THAO TCVI D LIU(DATA MANIPULATION LANGUAGE -DML). Phn ny s xem xt cc cu lnh thao tc vi d liu nh Insert, Select,Delete. Lnh Insert - Chn d liu vo bng. S dng cu lnh Insert. + Chn d liu vo tt c cc ct, theo th t ca trong bng.
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'T1') DROP TABLE T1 GO CREATE TABLE T1 ( column_1 int, column_2 varchar(30)) INSERT T1 VALUES (1, 'Row #1') 154

+ Chn d liu vo cc ct khng theo th t.


IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'T1') DROP TABLE T1 GO

CREATE TABLE T1 ( column_1 int, column_2 varchar(30)) INSERT T1 (column_2, column_1) VALUES ('Row #1',1)

+ Chn d liu s gi tr t hn s ct.


IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'T1') DROP TABLE T1 GO CREATE TABLE T1 ( column_1 int identity, column_2 varchar(30) CONSTRAINT default_name DEFAULT ('column default'), column_3 int NULL, column_4 varchar(40) ) INSERT INTO T1 (column_4) VALUES ('Explicit value') INSERT INTO T1 (column_2,column_4) VALUES ('Explicit value', 'Explicit value') INSERT INTO T1 (column_2,column_3,column_4) VALUES ('Explicit value',-44,'Explicit value') SELECT * FROM T1

+ Chn d liu vi bng c ct d liu IDENTITY. V d sau s thc hin chn d liu vo bng c ct kiu IDENITY, ct c kiu IDENTITY s t ng gn gi tr khi h ng mi c to, nn ngi nhp s khng nhp v sa i. Tuy nhin v th s dng cu lnh SET IDENTITY_INSERT nhp gi tr.
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'T1') DROP TABLE T1 GO CREATE TABLE T1 ( column_1 int IDENTITY, column_2 varchar(30)) INSERT T1 VALUES ('Row #1') INSERT T1 (column_2) VALUES ('Row #2') SET IDENTITY_INSERT T1 ON INSERT INTO T1 (column_1,column_2) VALUES (-99,'Explicit identity value') SELECT * FROM T1

Lnh Insert - Chn d liu vo bng kt hp lnh SELECT. Cu lnh ny c thc hin gn tng t nh cu lnh chn d liu s dng t kha VALUES, nhng gi tr chn vo c truy vn t cu lnh SELECT.i

vi cc ct d liu c kiu Nchar, Nvarchar h tr Unicode th khi chn d liu trc tip phi gn thm tin t N, v d Lname=NJohn Smith. + Chn d liu c truy vn t cc ct trong lnh SELECT.
USE pubs INSERT INTO MyBooks SELECT * FROM titles WHERE type = 'mod_cook' + Chn d liu c truy vn t mt s ct. USE pubs INSERT INTO MyBooks SELECT title_id, title, type FROM titles WHERE type = 'mod_cook' Lnh Update Sad liu.

Lnh Update s dng sa d liu trong bng hoc View, xem xt cu php thng qua cc v d sau. + Sa d liu s dng lnh Updates dng mnh SET.
UPDATE Northwind.dbo.Products SET UnitPrice = UnitPrice * 1.1 WHERE CategoryID = 2

Hoc gn gi tr trc tip:


UPDATE authors SET authors.au_fname = 'Annie' WHERE au_fname = 'Anne'

Hoc gn gi tr NULL cho mt ct.


UPDATE publishers SET pub_name = NULL

+ Sa d liu s dng mnh Where xc nh hng c sa d liu.


UPDATE authors SET state = 'PC', city = 'Bay City' WHERE state = 'CA' AND city = 'Oakland'

+ Sa d liu s dng mnh From, s dng thng tin t mt bng khc.


UPDATE titles SET ytd_sales = t.ytd_sales + s.qty FROM titles t, sales s WHERE t.title_id = s.title_id AND s.ord_date = (SELECT MAX(sales.ord_date) FROM

sales)

Hoc v d gi tr xc nh l tng t bng khc.


UPDATE titles SET ytd_sales = (SELECT SUM(qty) 157 FROM sales WHERE sales.title_id = titles.title_ id AND sales.ord_date IN (SELECT MAX(ord_date) FROM sales)) FROM titles, sales

+ Sa d liu s dng mnh Top, xc nh s l ng hng u tin c sa d liu.


UPDATE authors SET state = 'ZZ' FROM (SELECT TOP 10 * FROM authors ORDER B Y au_lname) AS t1 WHERE authors.au_id = t1.au_id

Lnh WriteText Sa d liu Text, Image. Lnh WriteText c s dng cp nht ct c kiu Text hoc Image . D liu kiu Text v Image thng c kch thc ln, c th n Gyga byte, nn lm vic vi kiu d liu ny phi s dng con tr. s dng c lnh ny trc ht ngi qun tr (Administrator) phi t thuc tnh select into/ bulk copy l true, thc hin t nh sau:
USE master EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'TRUE'

Vi ct d liukiu Text, Image ta c th gn gi tr NULL hoc s dng cc lnh WriteText, UpdateText gn gi tr, khi s dng cc lnh tr n, hng d liu c ct cn chn tn ti (khng ng thi vi cu lnh Insert). Ri ng i vi ct d liu kiu Text bn c th s dng lnh thm d liu nh cc ct kiu chui khc nhng kch thc ca d liu ti a ch c 4096k t. + Thc hin chn on vn bn vo ct d liu kiu Text.
DECLARE @ptrval binary(16) SELECT @ptrval = TEXTPTR(pr_info) FROM pub_info pr, publishers p WHERE p.pub_id = pr.pub_id AND p.pub_name = 'New Moon Books' WRITETEXT pub_info.pr_info @ptrval 'New Moon Books (NMB) has just released another top ten publication.

With the latest publication this makes NMB the hottest new publisher of the year!' GO

Xem v d trn ta thy, chn d liu vo ct Text hoc Image ta phi s dng con tr kiu binary hoc varbinarry, con tr s c xc nh vo ct text, image v hng tng ng c trong bng d liu, sau s dng lnh WriteText gn gi tr. Trong thc t khi thc hin lnh n y ta thng thc hin thng qua th tc lu tr ca CSDL, gi tr c gn qua bin.Lnh WriteText thng c s dng khi ct d liu l NULL hoc ton b d liu c (khng chn thm). Lnh UpdateText Sad liu Text, Image. Lnh UpdateText c chc nng thc hin sa d liu kiu Text, Image, tuynhin UpdateText khc WriteTex, UpdateText c th sa., xad liu theo tng on hoc thm d liu vo phn d liu c ca ct d liu. + C php chung:
UPDATETEXT { table_name.dest_column_name dest_text_ptr } { NULL | insert_offset } { NULL | delete_length } [ WITH LOG ] [ inserted_data | { table_name.src_column_name src_text_ptr } ]

Trong : -Insert_offset: Xc nh v tr theo byte d liu s c t vo hoc bt u xa. -Delete_length: Xc nh di d liu c xa tnh t v tr insert_offset. Vic chn, xa, sa d liu c iu khin thng qua cc tham s insert_offset, delete_offset, v d mun sa d liu, u tin phi xc nh v tr bt u cn sa d liu (insert_offset) v di d liu cn sa, bt u t v tr cn xa d liu mi s c chn vo. + V d sa ni dung ct kiu Text.
USE pubs GO EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true' GO DECLARE @ptrval binary(16) SELECT @ptrval = TEXTPTR(pr_info) FROM pub_info pr, publishers p WHERE p.pub_id = pr.pub_id AND p.pub_name = 'New Moon Books' UPDATETEXT pub_info.pr_info @ptrval 88 1 'b' GO EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false' GO

Cursor -iu khin con tr. Cursor l kiu bin xc nh con tr cho mt tp d liu, l kt qu ca cu lnh Select. Cursor c kt hp cng lnh Fetch xc nh v tr h ng trong tp d liu.Cursor c 2 kiu Cursor thng thng v Scroll Cursor. Cc thao tc thc hin vi Cursor: + Declare: Khai bo. + Open: M con tr lm vic vi tp d liu. + Fetch: Dch chuyn v tr hng trong tp d liu. + Close: ng con tr. + DeAllocate: Gii phng con tr. + V d s dng Curcor, lit k danh sch cc hng ca bng Authors.
USE pubs GO DECLARE authors_cursor CURSOR FOR SELECT au_lname FROM authors WHERE au_lname LIKE "B%" ORDER BY au_lname OPEN authors_cursor --Perform the first fetch. FETCH NEXT FROM authors_cursor --Check @@FETCH_STATUS to see if there are any more rows to fetch. WHILE @@FETCH_STATUS = 0 BEGIN --This is executed as long as the previous fetch succeeds. FETCH NEXT FROM authors_cursor END CLOSE authors_cursor DEALLOCATE authors_cursor GO

+ V d s dng Cursor, gi tr ct c a vo bin.


USE pubs GO --Declare the variables to store the values returned by FETCH. DECLARE @au_lname varchar(40), @au_fname varchar(20) DECLARE authors_cursor CURSOR FOR SELECT au_lname, au_fname FROM authors WHERE au_lname LIKE "B%" ORDER BY au_lname, au_fname OPEN authors_cursor --Perform the first fetch and store the values in variables.

--Note: The variables are in the same order as the columns --in the SELECT statement. FETCH NEXT FROM authors_cursor INTO @au_lname, @au_fname --Check @@FETCH_STATUS to see if there are any more rows to fetch. 161 WHILE @@FETCH_STATUS = 0 BEGIN --Concatenate and display the current values in the variables. PRINT "Author: " + @au_fname + " " + @au_lname --This is executed as long as the previous fetch succeeds. FETCH NEXT FROM authors_cursor INTO @au_lname, @au_fname END CLOSE authors_cursor DEALLOCATE authors_cursor GO

+ V d s dng Scroll Cursor, con tr cho php s dng cc ph ng thc: LAST,


PRIOR,RELATIVE, ABSOLUTE. USE pubs GO --Execute the SELECT statement alone to show the --full result set that is used by the cursor. SELECT au_lname, au_fname FROM authors ORDER BY au_lname, au_fname --Declare the cursor. DECLARE authors_cursor SCROLL CURSOR FOR SELECT au_lname, au_fname FROM authors ORDER BY au_lname, au_fname OPEN authors_cursor --Fetch the last row in the cursor. FETCH LAST FROM authors_cursor --Fetch the row immediately prior to the current row in the cursor. FETCH PRIOR FROM authors_cursor --Fetch the second row in the cursor. FETCH ABSOLUTE 2 FROM authors_cursor --Fetch the row that is three rows after the current row. FETCH RELATIVE 3 FROM authors_cursor --Fetch the row that is two rows prior to the current row. FETCH RELATIVE -2 FROM authors_cursor CLOSE authors_cursor DEALLOCATE authors_cursor GO

Lnh Delete Xa d liu.

S dng lnh Delete xa d liu, kt hp c ng iu kin xa mt hay nhiu hng d liu trong bng. + Xa tt c cc hng ca bng.
USE pubs DELETE authors

+ Xa mt tp cc hng.
USE pubs DELETE FROM authors WHERE au_lname = 'McBadden'

+ Xa mt hng t v tr con tr.


USE pubs DELETE FROM authors WHERE CURRENT OF complex_join_cursor

Trong v d trn con tr c m c tn complex_join_curcor. + Xa cc hng da vo lnh truy vn khc hoc lin kt cc bng.
/* SQL-92-Standard subquery */ USE pubs DELETE FROM titleauthor WHERE title_id IN (SELECT title_id FROM titles WHERE title LIKE '%computers%') /* Transact-SQL extension */ USE pubs DELETE titleauthor FROM titleauthor INNER JOIN titles ON titleauthor.title_id = titles.title_id WHERE titles.title LIKE '%computers%' + Xa d liu s dng t kha Top. DELETE authors FROM (SELECT TOP 10 * FROM authors) AS t1 WHERE authors.au_id = t1.au_id

Lnh Truncate Table Xa d liu ton bng. Tng t nh cu lnh Delete, lnh Truncate Table s dng xa d liu to n bng, thao tc ny ging lnh Delete khi khng c iu kin Where nh ng lnh Truncate Table thc hin nhanh hn.
TRUNCATE TABLE authors

Lnh Go Nhm lnh. Lnh Go khng tham gia thao tc vi CSDL, lnh Go xc nh nhm cc lnh vi nhau, nhm lnh c xc nh t v tr u tin hoc t t lnh Go trc

n lnh Go tip theo. Khi gp lnh Go nhm lnh s cgi ngay n SQL Server thc hin.
USE pubs GO DECLARE @MyMsg VARCHAR(50) SELECT @MyMsg = 'Hello, World.' GO --@MyMsg is not valid after this GO ends the batch. --Yields an error because @MyMsg not declared in this batch. PRINT @MyMsg GO SELECT @@VERSION; --Yields an error: Must be EXEC sp_who if not first statement in --batch. sp_who GO

Select - Truy vn tt c cc ct t mt bng.Lnh Select c s dng truy vn d liu t mt hoc nhiu bng, t khung nhn, kt qu a li mt tp d liu gm cc hng, ct.
USE Northwind GO SELECT * FROM Shippers GO

Order by - Truy vn sp xp danh sch theo th t. ASC l sp xp tng, DESC l sp xp gim, khi xc nh sp xp tng bnc th khng cn t t kha ASC m h thng t xc nh l ASC.
USE Northwind GO SELECT * FROM Shippers ORDER BY CompanyNameDESC GO

Truy vn mt s ct, xc nh th t cc ct.


USE Northwind GO SELECT OrderID, ProductID, UnitPrice, Quantity, Discount FROM [Order Details] ORDER BY OrderID ASC GO

i tn cc ct khi truy vn.


USE Northwind GO SELECT OrderIDas [Order ID], ProductIDas [Product ID], UnitPriceas [Unit Price], Quantity, Discount FROM [Order Details] ORDER BY OrderID ASC GO

Lnh Case -Phn lp d liu. Case l cu lnh r nhnh, thng c s dng phn lp d liu trong cu

lnh Select. V d s dng lnh Case n gin:


USE pubs GO SELECT Category = CASE type WHEN 'popular_comp' THEN 'Popular Computing' WHEN 'mod_cook' THEN 'Modern Cooking' WHEN 'business' THEN 'Business' WHEN 'psychology' THEN 'Psychology' WHEN 'trad_cook' THEN 'Traditional Cooking' ELSE 'Not yet categorized' END, CAST(title AS varchar(25))AS 'Shortened Title', price AS Price FROM titles WHERE price IS NOT NULL ORDER BY type, price COMPUTE AVG(price) BY type GO V d s dng lnh Case tm kim: USE pubs GO SELECT 'Price Category' = CASE WHEN price IS NULL THEN 'Not yet priced' WHEN price < 10 THEN 'Very Reasonable Title' WHEN price >= 10 and price < 20 THEN 'Coffee Table Title' ELSE 'Expensive book!' END, CAST(title AS varchar(20)) AS 'Shortened Title' FROM titles ORDER BY price GO

t tn cho ct. S dng du phy xc nh tn ct, ti a l 30 k t.


SELECT sum= SUM(ytd_sales) FROM titles

Khi cn th hin du phy trn gi tr hoc tn ct ta cn s dng 2 du lin nhau. V d I dont understand. Chui k t trong kt qu truy vn. S dng du phy trong chui k t.
SELECT The publishers name is, publish er=pub_name FROM publishers

Cc gi tr tnh ton c. i cc kiu d liu tnh ton c s dng cc php ton +, -, *, /, %.


SELECT title_id, ytd_sales*2 FROM titles

Truy vn kiu d liu Text, Image. truy vn d liu Text, Image c th s dng 2 lnh Select hoc ReadText. Khi s dng lnh Select truy vn kiu d liu n y th ch truy vn c d liu c di xc nh trc bng cu lnh SET TEXTSIZE.

SET TEXTSIZE 25 SELECT pub_id, pr_info FROM pub_info

Ngm nh kch thc s dng cho truy vn l 4096 (4K). T kha Distinct Truy vn cc hng khc nhautheo ct. truy vn cc hng d liu khc nhautheo ct ta s dng t kha Distinct.
USE pubs SELECT DISTINCT au_id FROM titleauthor Xc nh bng trong mnh From. USE pubs SELECT p.pub_id, p.pub_name FROM publishers p

Mnh Where. Mnh Where xc nh iu kin cc h ng c truy vn, biu thc trong mnh Where xc nh theo biu thc logic. Cc php ton, cu lnh xc nh gm: -Cc php ton so snh: =, <>, <, >, !<, !>. -T kha xc nh phm vi: Between, Not Between. -Danh sch: In, Not In. -Theo mu inh dng: Like, Not Like. -Gi tr NULL: Is Null, Is Not Null. -Cc php ton logic: And, Or. + T kha Between:
SELECT UnitsInStock, ProductID, ProductName FROM Northwind.dbo.Products WHERE UnitsInStock BETWEEN 15 AND 25 ORDER BY UnitsInStock

+ T kha Not Between.


SELECT UnitsInStock, ProductID, ProductName FROM Northwind.dbo.Products WHERE UnitsInStock NOT BETWEEN 15 AND 25 ORDER BY UnitsInStock

+ T kha In, Not In.


USE pubs SELECT au_lname, state FROM authors WHERE state IN ('CA', 'IN', 'MD') USE pubs SELECT au_lname, au_fname FROM authors WHERE au_id IN (SELECT au_id FROM titleauthor WHERE royaltyper < 50) USE pubs SELECT au_lname, au_fname FROM authors WHERE au_id NOT IN (SELECT au_id FROM titleauthor WHERE royaltyper < 50)

+ T kha Like. T kha Like c s dng tng t nh php so snh, php Like c thc hin cho d liu kiu chui, php Like c xem l php so snhtheo nh dng ca chui, vic nh dng xc nh theo mt s t kha sau: % Xc nh bt k chui k t no hoc khng c k t no ti v tr. _ Mt k t bt k no . [] Mt k t no nm trong phm vi, v d [a-f]. [^] Xc nh mt k t khng thuc phm vi no , v d [^a-f]. V d s dng t kha Like vi %:
USE pubs GO SELECT phone FROM authors WHERE phone LIKE '415%' ORDER by au_lname GO V d t kha Not Like vi %: USE pubs GO SELECT phone FROM authors WHERE phone NOT LIKE '415%' ORDER BY au_lname GO

V d s dng t kha Like vi mnh Escape: Escape c s dng loi b mt k t hoc chui khi php so snh.
USE pubs GO IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'mytbl2') DROP TABLE mytbl2 GO USE pubs GO CREATE TABLE mytbl2 ( c1 sysname ) GO INSERT mytbl2 VALUES ('Discount is 10-15% off') INSERT mytbl2 VALUES ('Discount is .10-.15 off') GO SELECT c1 FROM mytbl2 WHERE c1 LIKE '%10-15!% off%' ESCAPE '!' GO

V d s dng t kha Like vi []:


USE pubs GO SELECT au_lname, au_fname, phone FROM authors

WHERE au_lname LIKE '[CK]ars[eo]n' ORDER BY au_lname ASC, au_fname ASC GO

+ Gi tr NULL. Gi tr NULL c nhp bng cch t ngm nh hoc gn theo cu lnh. tm gi tr NULL trong bng s dng t kha Is Null hoc Is Not Null.
SELECT title_id, type, advance FROM pubs.dbo.titles WHERE advance IS NULL

TO BNG BNG LNH SELECT INTO. Lnh Select Into truy vn d liu, d liu c a vo mt bng mi. Nu thuc tnh select into/bulkcopy c t c th to bng c nh, nu thuc tnh khng c t ta c th to bng tm thi.
SELECT Shippers.*, Link.Address, Link.City, Link.Region, Link.PostalCode INTO NewShippers FROM Shippers JOIN LinkServer.DB.dbo.Shippers AS Link ON (Shippers.ShipperID = Link.ShipperID)

LNH COMPUTE BY. Khi thc hin vi cc hm tnh ton SUM, AVG, MIN, MAX, COUNT thng c s dng vi cc mnh GROUP BY, COMPUTE BY (khng p dng cc hm tnh ton vi d liu kiu Text,Image). + S dng Group By: T kha Group By c s dng nhm theo ct, c th kt hp cc hm tnh ton.
USE Northwind SELECT OrdD.ProductID AS ProdID, SUM(OrdD.Quantity) AS AmountSold FROM [Order Details] AS OrdD JOIN Products as Prd ON OrdD.ProductID = Prd.ProductID AND Prd.CategoryID = 2 GROUP BY OrdD.ProductID

+ S dng mnh Compute: Tnh ton ton b gi tr.


USE pubs SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance)

+ S dng mnh Compute By: Tnh ton theo nhm (tng t Group By).
USE pubs SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance) BY type TON T UNION.

Ton t Union thc hin hp 2 tp vi nhau, php ton n y thc hin ch ly

i dinkhi c hai hng ca hai tp trng nhau. Gi s c 2 bng d liu nh sau: Table1 Table2 ColumnA ColumnB ColumnC ColumnD char(4) int char(4) int ------- --- ------- ---abc 1 ghi 3 def 2 jkl 4 ghi 3 mno 5 Thc hin ton t Union: SELECT * FROM Table1 UNION SELECT * FROM Table2 Kt qu thc hin: ColumnA ColumnB ------- --------abc 1 def 2 ghi 3 jkl 4 175 mno 5 Khi s dng t kha ALL ton b cc hng ca hai tp d liu s c hp li, khng loi b nhng hng trng nhau.
SELECT * FROM TableA UNION ALL ( SELECT * FROM TableB UNION SELECT * FROM TableC ) GO

S dng ton t Union vi Select Into:


USE Northwind IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME ='CustomerResults') DROP TABLE CustomerResults GO USE Northwind SELECT ContactName, CompanyName, City, Phone INTO CustomerResults FROM Customers WHERE Country IN ('USA', 'Canada') UNION SELECT ContactName, CompanyName, City, Phone FROM SouthAmericanCustomers ORDER BY CompanyName, ContactName ASC GO

TRUY VN D LIU T NHIU BNG. Truy vn d liu t nhiu bng c xc nh theo quan h gia cc ct ca cc bng vi nhau. C th truy vn thng qua iu kin li n kt trong mnh

Where hoc t kha Join. Theo iu kin lin kt. S dng iu kin lin kt theo ct gia cc bng, thng tin cn truy vn c t nhiu bng khc nhau, truy vn c cc thng tin nh trn phi xc nh iu kin lin kt gia cc bng. + Lin kt bng nhau.
SELECT P.ProductID, S.SupplierID, S.CompanyName FROM Suppliers AS S, Products AS P WHERE S.SupplierID = P.SupplierID AND P.UnitPrice > $10 AND S.CompanyName LIKE N'F%'

i vi cu lnh truy vn theo iu kin li n kt ni trn, cc hng cha gi tr Null ca ct tham gia li n kt s khng c lit k, cu lnh ny tng ng vi lnh Inner Join (s xem trong phn sau). + Lin kt khng bng nhau. Lin kt dng ny s dng cc php ton so snh >, >=, <, <=, <>, !>, !< USE pubs SELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.state FROM publishers p,authors a WHERE a.state > p.stateand p.pub_name = 'New Moon Books' ORDER BY au_lname ASC, au_fname ASC + T lin ktbng nhau. T lin kt trong mt bng, cu lnh dng n y thng c s dng trong vic xc nh nhng cp gi tr n o cc ct trong bng c quan h vi nhau theo lin kt.
USE pubs SELECT au1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname FROM authors au1,authors au2 WHEREau1.zip = au2.zipand au1.city = 'Oakland' ORDER BY au1.au_fname ASC, au1.au_lname ASC

+ T lin kt khng bng nhau.


USE pubs SELECT au1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname FROM authors au1,authors au2 WHEREau1.zip = au2.zip AND au1.city = 'Oakland' AND au1.state ='CA' AND au1.au_id < au2.au_id ORDER BY au1.au_lname ASC, au1.au_fname ASC

+ Truy vn d liu t nhiu hn 2 bng d liu. Truy vn dng ny thc hin iu kin lin kt theo tng cp cc bng vi nhau.

USE pubs SELECT a.au_lname, a.au_fname, t.title FROM authors a,titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id ANDt.type = 'trad_cook' ORDER BY t.title ASC

+ Lin kt ngoi tri. Nh nhng iu kin lin kt ni trn, nhng hng c ct l Null s khng c a ra tp kt qu, cu lnh lin kt ngoi s a ra nhng hng cha gi tr Null ni trn.Xc nh lin kt ngoi bng ton t *.
USE pubs SELECT a.au_fname, a.au_lname, p.pub_name 178 FROM authors a,publishers p WHEREa.city *= p.city ORDER BY p.pub_nameASC, a.au_lname ASC, a.au_fname ASC

TRUY VN TNG HP. Vic s dng cc hm tnh ton nh SUM, AVG, thng c thc hin theo cc mnh WHERE, GROUP BY, HAVING. Khi xc nh iu kin c s dng cc hm tnh ton th phi s dng mnh HAVING m khng c s dng trong mnh WHERE. Cc hm tnh ton c th tm tt nh sau: SUM([ALL | DISTINCT]) Tnh tng tt c hoc nhng hng khc nhau. AVG([ALL | DISTINCT]) Tnh trung bnh tt c hoc nhng hng khc nhau. COUNT([ALL | DISTINCT]) m s hng tt c hoc nhng hng khc nhau. COUNT(*) m cc hng c la chn. MAX() Tnh gi tr ln nht. MIN() Tnh gi tr nh nht. Cc hm SUM, AVG ch lm vic vi d liu dng s, cc hm SUM, AVG, COUNT, MAX, MIN b qua gi tr Null, hm COUNT(*) m c hng c gi tr Null. S dng hm tnh ton. + Tnh tng ton b.
USE pubs SELECT SUM(ytd_sales) FROM titles

+ Tnh tng, trung bnh c iu kin.


USE pubs SELECT AVG(advance), SUM(ytd_sales) FROM titles WHERE type = 'business'

Mnh Group By. Group by c thc hin nhm cc hng theo gi tr ct xc nh, cc hm tnh ton s c thc hin theo nhm ni trn.
USE Northwind SELECT OrdD.ProductID AS ProdID, SUM(OrdD.Quantity) AS AmountSold

FROM [Order Details] AS OrdD JOIN Products as Prd ON OrdD.ProductID = Prd.ProductID AND Prd.CategoryID = 2 GROUP BY OrdD.ProductID

Mnh Having. Having c s dng cng vi cc hm tnh ton xc nh iu kin lc cc hng, thng c kt hp cng mnh Group By thc hin cc h m tnh ton theo nhm. + Having vi hm SUM.
USE pubs SELECT pub_id, total = SUM(ytd_sales) FROM titles GROUP BY pub_id HAVING SUM(ytd_sales) > 40000

+ Having vi hm Count.
USE pubs SELECT pub_id, total = SUM(ytd_sales) FROM titles GROUP BY pub_id HAVING COUNT(*) > 5

+ Having vi mnh Where.


SELECT pub_id, SUM(advance) AS AmountAdvanced, AVG(price) AS AveragePrice FROM pubs.dbo.titles WHERE pub_id > '0800' AND price >= $5 GROUP BY pub_id HAVING SUM(advance) > $15000 AND AVG(price) < $20 ORDER BY pub_id DESC

+ Having thay cho mnh Where.


SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id GROUP BY titles.pub_id HAVING publishers.state = 'CA'

TRUY VN LNG NHAU. Phn ny s xem xt cc cu lnh truy vn lng nhau , trong cu lnh truy vn Select c cu lnh truy vn Select khc trong iu kin xc nh ca lnh Select ngoi. Thng thng cc cu lnh dng ny i cng cc t lha IN, NOT IN, EXITST, NOT EXIST, ANY, ALL. Truy vn lng nhau vi php bng.
USE pubs SELECT title, price FROM titles WHERE price = (SELECT price FROM titles WHERE title = 'Straight Talk About Computers')

u tin cu lnh s xc nh hng trong lnh Select trong, lnh truy vn n y phi a ra kt qu duy nht. Truy vn vi t kha IN. Kim tra nm trong tp cc gi tr truy vn c.

USE pubs SELECT distinct pub_name FROM publishers WHERE pub_id IN (SELECT pub_id FROM titles WHERE type = 'business')

Hng s nm trong khong:


USE pubs SELECT DISTINCT au_lname, au_fname FROM authors WHERE 100 IN (SELECT royaltyper FROM titleauthor WHERE titleauthor.au_id = authors.au_id)

Truy vn vi t kha Exist. Kim tra tn ti hng d liu truy vn c.


USE pubs SELECT DISTINCT pub_name FROM publishers WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business')

Truy vn vi hm All. Kim tra vi tt c cc hng.


USE pubs SELECT t1.type FROM titles t1 GROUP BY t1.type HAVING MAX(t1.advance) >= ALL (SELECT 2 * AVG(t2.advance) FROM titles t2 WHERE t1.type = t2.type)

Truy vn vi hm Any. Kim tra tha mn vi bt k hng no.


USE pubs SELECT title FROM titles WHERE advance > ANY (SELECT advance FROM publishers INNER JOIN titles ON titles.pub_id = publishers.pub_id AND pub_name = 'Algodata Infosystems')

Truy vn vi hm Some. Kim tra vi t nht mt hng.


USE pubs SELECT t1.type

FROM titles t1 GROUP BY t1.type HAVING MAX(t1.advance) >= SOME (SELECT 2 * AVG(t2.advance) FROM titles t2 WHERE t1.type = t2.type)

Nhiu lnh Select lng nhau. USE pubs SELECT au_lname, au_fname FROM authors WHERE au_id IN (SELECT au_id FROM titleauthor WHERE title_id IN (SELECT title_id FROM titles WHERE type = 'popular_comp')) UPDATE, DELETE, INSERT VI LNH TRUY VN LNG NHAU. Vic thc hin cc lnh thao tc vi d liu c th kt hp iu kin truy vn lng nhau xc nh phm vi d liu c thao tc. Kt hp vi lenh Select.
UPDATE titles SET price = price * 2 WHERE pub_id IN (SELECT pub_id FROM publishers WHERE pub_name = 'New Moon Books')

Kt hp vi lnh Join.
UPDATE titles SET price = price * 2 FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id AND pub_name = 'New Moon Books'

Xa d liu kt hp vi lnh Select.


DELETE sales WHERE title_id IN (SELECT title_id FROM titles WHERE type = 'business')

Xa d liu vi php Join.


DELETE sales FROM sales INNER JOIN titles ON sales.title_id = titles.title_id AND type = 'business'

LNH READTEXT C TEXT, IMAGE. Lnh ReadText c thc hin c d liu kiu Text, Image v chuyn vo mt bin.
USE pubs GO DECLARE @ptrval varbinary(16) SELECT @ptrval = TEXTPTR(pr_info) FROM pub_info pr INNER JOIN publishers p ON pr.pub_id = p.pub_id AND p.pub_name = 'New Moon Books' READTEXT pub_info.pr_info @ptrval 1 25 GO

You might also like