You are on page 1of 19

SQL- Nhng kin thc c bn

GII THIU
Ngn ng truy vn c cu trc (SQL) I mt ngn c s d Iiu (CSDL) chun cng
nghip duc cng c qun tr[ d Iiu ca Microsoft (Microsoft jet database engine) s
dng. SQL duc s dng d tao nhng di tung truy vn (QueryDef objects), nhu I di
s cho phung thc m tp hp bn ghi (OpenRecordset method), v I thuc tnh ngun
bn ghi (RecordSource property) ca diu khin d Iiu (data controI). N cng c th
duc dng vi nhng phung thc thi hnh (Execute method) d trc tip tao v thao tc
... (jet databases), v tao ra cc SQL PassThrough truy vn d thao tc trn cc CSDL
khch ch t xa (remote cIient/server databases).
Chung ny s bn ti cu trc c bn ca SQL, v cch thc s dng n cho vic tao,
bo tr v sa di CSDL. Chng ta cng ni ti s xy dng v cng dng ca truy vn
SQL d tao cc di tung tp hp bn ghi (Recordset objects), v d chn, sp xp, Ic v
cp nht d Iiu trong nhng bng c s. Hn na, chung ny s xem xt cch thc ti
uu ho truy vn SQL v mt tc d v hiu qu. Cui cng, chng ta bn ti s khc nhau
gia Microsoft Jet SQL v ANSI SQL mt cch c th
SQL L G ?
SQL I mt ngn ng Ip trnh v CSDL c ngun gc Iin quan mt thit ti s pht minh
ra m hnh CSDL quan h ca E.F.Codd vo du nhng nm 70. Tin thn ca SQL I ngn
ng SequeI, v v I do ny SQL vn thung duc pht m I "sequeI" hn I "ess cue
eII", mc du c hai cch pht m du duc chp nhn.
SQL ngy nay pht trin rng v tr thnh mt ngn ng chun cho CSDL quan h, v d
duc d[nh ngha bi chun ANSI. Hu ht cc bn thi hnh ca SQL chi I s bin di nh
t SQL chun, bao gm c phin bn duc Jet database engine h tr. Nhng s khc
nhau ny s duc nhc ti cui chung, nhung hu ht cc cu trc v cc chc nng
ca ngn ng I nht qun di vi cc nh pht trin cc h qun tr[ CSDL. Nu ban d s
dng bt c bn thi hnh no ca SQL, ban s thy khng kh khn my khi chuyn sang
Microsoft Jet SQL.
SQL vs. Navigation
Nhu d d cp trong phn du ti Iiu, Mircosoft Jet database engine cung cp hai
phung thc tch bit d hon tt hu ht cc tc v CSDL:
- Mt m hnh diu hung da trn c s d[ch chuyn qua Iai gia cc bn ghi.
- Mt m hnh quan h da trn truy vn hi c cu trc (SQL).
M hnh diu hung bao gm nhng thuc tnh v phung thc duc m t trong "Tao
v sa di CSDL" ("Creating and Modifying Databases") v "Thao tc vi bn ghi v
trung" ("Working with Records and FieIds"). M hnh quan h duc ni bn ti trong
chung ny.
Nhng Ip trnh vin khng quen thuc vi nhng h qun tr[ c s d Iiu hung fiIe
nhu dBASE, Foxpro, v Paradox c th cm thy d ch[u khi bt du vi cc phung thc
diu hung duc tho Iun trong chung truc. Tuy nhin, trong hu ht cc trung hp
nhng phung thc SQL vi vai tr tung dung t ra hiu qu hn, v ni chung chng
nn duc dng cho nhng ni tnh hiu qu duc xem I quan trng hn c. Hn na
SQL c mt Ii dim I mt giao tip mc chun cng nghip v CSDL, th nn mt s
hiu bit v cc Inh SQL cho phep ban truy cp v thao tc vi mt din rng cc sn
phm CSDL t cc nh pht trin khc nhau.
CC THNH PHN CA SQL
Ngn ng SQL bao gm cc Inh, cc mnh d, cc ton t, v cc hm tng hp (hm
nhm - aggregate functions). Nhng thnh phn ny duc kt hp vo trong cc pht
biu (statements) dng d tao, cp nht, v thao tc trn CSDL. Nhng mc sau s m t
nhng thnh t d mt cch ngn gn, v phn cn Iai ca chung ny s dua ra cho ban
nhng v d c th v cng dng ca chng.
Ch : Nhng mc sau s nhng Inh v t kho duc dng thung xuyn nht, nhung
khng phi tt c. c mt tham kho hon chinh v danh sch cc t kho SQL, hy
tm kim "SQL" trong Books OnIine.
1.Lnh SQL:
Ging nhu m hnh diu hung ca DAO (Data Access Object), SQL cung cp c hai
phn, ngn ng d[nh ngha d Iiu (DDL - Data Definition Language) v ngn ng thao tc
d Iiu (DML - Data ManipuIation Language). Tuy c vi phn trng Ip, nhung nhng cu
Inh DDL cho php ban tao v d[nh ngha cc CSDL, cc trung, cc chi mc mi, trong
khi nhng cu Inh DML d ban xy dng cc truy vn, sp xp, Ic, v trch d Iiu t
trong CSDL.
DDL
Cc cu Inh DDL trong SQL I biu thc duc xy dng chung quanh nhng mnh d
sau:
CREATE Dng d tao mi cc bng, cc trung v cc chi mc.
DROP Dng d xo cc bng v chi mc khi CSDL.
ALTER Dng d sa di cc bng bng cch thm trung, thay di d[nh ngha ca cc
trung.
DML
Cc cu Inh DML I cc biu thc duc xy dng da trn cc mnh d sau:
SELECT Dng d truy vn CSDL d Iy duc nhng bn ghi tho mn nhng tiu chun
no d.
INSERT Dng d chn mt nhm d Iiu vo CSDL thng qua mt thao tc.
UPDATE Dng d thay di gi tr[ ca nhng trung, nhng bn ghi c th.
DELETE Dng d Ioai b nhng bn ghi ra khi CSDL.
2.Mnh d SQL:
Mnh d I nhng diu kin thay di duc dng d xc d[nh d Iiu ban mun chn,
mun thao tc. Bng sau Iit k nhng mnh d ban c th dng.
FROM Lit k danh sch cc bng m ta cn Iy cc bn ghi t d.
WHERE Xc d[nh cc diu kin m bn ghi duc chn phi dp ng duc.
GROUP BY Dng d nhm cc bn ghi duc chn thnh cc nhm ring bit.
HAVING Dng d dua ra diu kin cho mi nhm.
ORDER BY Dng d sp xp cc bn ghi duc ch theo mt th t no d.
3.Nhng ton hang SQL:
C hai Ioai ton hang trong SQL: ton hang Iogic v ton hang so snh.
Ton hang Iogic:
Ton hang Iogic duc dng d ni cc biu thc, thung I trong pham vi ca mnh d
WHERE. V d nhu:
SELECT * FROM MYTABLE WHERE Condition1 AND Condition2
Nhng ton t Iogic bao gm: AND, OR, NOT
Ton hang so snh:
Ton hang so snh duc dng d so snh tung di gi tr[ hai biu thc d xc d[nh
nhng hoat dng no s duc thc hin. V d:
SELECT * FROM PubIishers WHERE PubID
Nhng ton t so snh bao gm:
b hn
b hn hoc bng
In hn
In hn hoc bng
bng
khc
.Hm tng hp
(aggregate functions)
Hm tng hp (hm nhm) duc dng trong pham vi ca mnh d SELECT trn mt nhm
bn ghi d tr Iai mt gi tr[. V d, hm AVG c th tr Iai gi tr[ trung bnh ca tt c cc
gi tr[ trong mt trung c th. Bng sau Iit k danh sch cc hm tng hp.
AVG Tr Iai gi tr[ trung bnh trong mt trung. COUNT Tr Iai s bn ghi duc chn.
SUM Hm tnh tng cc gi tr[ trong mt trung c th.
MAX Hm tr v gi tr[ cc dai ca trung d.
MIN Hm tr v gi tr[ cc tiu ca trung d
NHNG THAO TC DLL
DDL bao gm mt s Inh ban c th dng d tao bng v chi mc, v sa di cc bng
bng cch thm hoc Ioai b cc ct hoc chi mc. Nhng cu Inh d[nh ngha d Iiu c
th chi duc dng vi Jet database Chng khng duc h tr cho bt c CSDL d[nh
dang ngoi.
Ch : dng cu Inh DDL, hoc bt c truy vn no khng tr Iai tp bn ghi, hy
dng ngoc kp v s dng chng nhu I di s ca cc phung thc thi hnh ca CSDL
hay di tung truy vn (QueryDef object) nhu trong v d sau:
MyDB.Execute "CREATE TABLE EmpIoyees (First Name TEXT, Last Name TEXT)"
dng bt c mt cu Inh no tr Iai cc bn ghi (nhu SELECT), dng biu thc nhu I
di s ngun ca phung thc m tp bn ghi (OpenRecordset method), nhu trong v d
sau:
MyDB.OpenRecordset ("SELECT * FROM TitIes WHERE AuID ", dbOpenDynaset)
1.Tao mt bng:
tao mt bng trong CSDL, dng cu Inh CREATE TABLE. Mt cu Inh hon chinh
nhn cc di s I tn bng, tn cc trung, kiu d Iiu ca cc trung v d rng ca
cc trung.
V d sau tao mt bng c tn I "EmpIoyees", c hai trung kiu TEXT vi d rng I 2:
CREATE TABLE EmpIoyees (First Name TEXT(2), Last Name TEXT(2))
Thm v xo ct:
Ban c th thm, sa di hoc xo cc ct vi cu Inh ALTER TABLE. V d, cu Inh sau
thm mt trung kiu TEXT c d rng 2 v tn I "Notes" vo bng EmpIoyees:
ALTER TABLE EmpIoyees ADD COLUMN Notes TEXT(2)
Ioai b mt ct, dng t kho DROP. V d ny Ioai b ct c tn I "Notes" mi va
duc thm Ic ny:
ALTER TABLE EmpIoyees DROP COLUMN Notes
sa di mt trung, truc tin ban phi xo n, v sau d I thm trung mi vi tn
nhu c. V d sau tng d rng ca trung "Notes":
ALTER TABLE EmpIoyees DROP COLUMN Notes
ALTER TABLE EmpIoyees ADD COLUMN Notes TEXT(30)
Ch : Dng ALTER TABLE, ban chi c th thm hoc xo mt trung tai mi thi dim.
2.Tao v xo chi mc:
C ba cch khc nhau d tao chi mc:
- Lc bt du tao bng vi cu Inh CREATE TABLE
- Vi cu Inh CREATE INDEX.
- Vi cu Inh ALTER TABLE
Mc du c ba cch ny du cho kt qu tung t, nhung vn c nhng khc dim khc
nhau. Nu ban mun thm mt kho ngoai (foreign key) v p buc ton vn tham chiu
(enfore referentiaI integrity), ban phi dng mt mnh d rng buc (CONSTRAINT cIause)
trong cc cu Inh CREATE TABLE hoc ALTER TABLE.
i khi ngui ta mun tao mt bng ban du khng c chi mc, v tip d I thit k cc
tham s chi mc sau khi dng mu bng. Vi tnh hung ny, ban nn dng CREATE
TABLE d tao mu bng khng c chi mc, v sau d thm cc chi mc vi cu Inh
CREATE INDEX hoc ALTER TABLE.
Tao mt chi mc vi cu Inh CREATE TABLE.
hi ban tao mt bng, ban c th tao mt chi mc cho tng ct ring r, hoc hai hoc
nhiu hn cc ct, dng mnh d SQL CONSTRAINT (t kho CONSTRAINT bt du d[nh
ngha mt chi s). V d sau dy minh hoa cch tao ra mt bng vi ba trung c chi mc:
CREATE TABLE EmpIoyees (First Name TEXT(2), Last Name TEXT(2), Date of Birth
DATETIME, CONSTRAINT EmpIoyeesIndex UNIQUE (First Name, Last Name, Date of
Birth))
dnh chi mc vi mt ct, ban dt mnh d CONSTRAINT vo mt trong nhng m t
ct. V d, d dnh chi mc trung "Date of Birth", ban dng cu Inh CREATE TABLE sau
dy:
CREATE TABLE EmpIoyees (First Name TEXT(2), Last Name TEXT(2), Date of Birth
DATETIME CONSTRAINT EmpIoyeesIndex PRIMARY)
S khc nhau gia dnh chi mc cho nhiu trung v cho mt trung I: cho mt trung
dn, t kho CONSTRAINT bt du d[nh ngha chi mc khng b[ tch bit vi trung cui
cng bi du phy m di st ngay sau kiu d Iiu ca trung duc dnh chi mc d.
Tao chi mc vi cu Inh CREATE INDEX.
Ban cng c th dng mnh d CREATE INDEX d thm mt chi mc. V d sau dy dua ra
cng mt kt qu vi v d truc, ngoai tr vic dng CREATE TABLE thay th cho ALTER
TABLE.
CREATE UNIQUE INDEX MyIndex ON EmpIoyees (Date of Birth)
Trong mnh d tu chn WITH, ban c th p buc d Iiu vi rng buc PRIMARY, c
ngha dy I trung chi mc chnh DISALLOW NUL, ngha I trung ny khng b[ b
trng IGNORE NULL, c ngha bn ghi d s khng duc dnh chi mc nu trung d d
trng.
V d sau thm mnh d WITH vo v d truc, d cho khng bn ghi no c th duc
thm vo bng m ct s bo him x hi b[ b trng:
CREATE UNIQUE INDEX MyIndex ON EmpIoyees (SSN) WITH DISALLOW NULL
Ch : hng dng t kho PRIMARY khi ban tao ra mt chi mc mi trong bng m bng
d d tn tai kho chnh (Primary key) Nu ban vi pham diu ny th h thng s bo Ii.
Ban dang dng CREATE INDEX d tao mt dc t chi mc trn mt bng m chua tn tai
chi mc no. tao mt chi mc nhu th ban khng cn s cho php hoc truy cp ti
mt my ch xa, v CSDL xa khng nhn bit duc hay khng h nh hung bi chi
mc d. Ban dng cng mt c php cho bng kt ni v bng gc. iu ny dc hu
dng khi tao mt chi mc trn mt bng thung I chi dc (read onIy) bi v n thiu mt
chi mc.
Tao mt chi mc vi cu Inh ALTER TABLE
Ban cng c th thm mt chi mc cho mt bng d tn tai bng cch dng cu Inh
ALTER TABLE, dng c php ADD CONSTRAINT. V d sau thm mt chi mc cho trung
"SSN":
ALTER TABLE EmpIoyees ADD CONSTRAINT MyIndex PRIMARY (SSN)
Ban cng c th thm chi mc cho nhiu trung v mt bng bng cch dng cu Inh
ALTER TABLE ging nhu sau:
ALTER TABLE EmpIoyees ADD CONSTRAINT NameIndex UNIQUE (Last Name, First
Name, SSN)
Mnh d CONSTRAINT v ton vn tham chiu (ReferentiaI Integrity).
Mt rng buc I mt chi mc. Ban dng mnh d CONSTRAINT d tao hoc xo cc chi
mc vi cc cu Inh CREATE TABLE v ALTER TABLE, nhu d chi ra phn truc.
Mnh d CONSTRAINT cng cho php ban d[nh ngha kho chnh v kho ngoai, d[nh
ngha cc quan h v p buc ton vn tham chiu.
bit thm thng tin v quan h v ton vn tham chiu, hy xem cun "Tao v sa di
CSDL" ("Creating and Modifying Databases").
C hai Ioai mnh d CONSTRAINT: Mt d tao chi mc cho tng trung dn v mt d tao
chi mc cho nhiu hn mt trung.
C php ca chi mc trn mt trung I:
CONSTRAINT name PRIMARY EY UNIQUE REFERENCES foreigntabIe (foreginfieId1,
foreignfieId2)
C php cho chi mc trn nhiu trung I:
CONSTRAINT name PRIMARY EY (primary1,primary2,...) UNIQUE
(unique1,unique2,...) FOREIGN EY (ref1,ref2,...) REFERENCES foreigntabIe
(foreignfieId1,foreignfieId2,...)
Sau dy I cc di s p dng cho hai Ioai trn:
name : Tn ca chi mc duc tao.
primary1, primary2 : Tn ca trung hay cc trung duc chi d[nh Im kho chnh.
unique1, unique2 : Tn ca trung hay cc trung duc chi d[nh Im kho khng Ip.
ref1, ref2 : Tn ca trung hoc cc trung kho ngoi tham chiu ti mt trung, mt s
trung bng khc.
foreigntabIe Tn ca bng ngoi cha mt hoc mt s trung duc xc d[nh bi
foreignfieId.
foreignfieId1, foreignfieId2: Tn ca trung hoc mt s trung trong bng ngoi duc
xc d[nh bi ref1, ref2.
Dng CONSTRAINT, ban c th gn cho mt trung nhu mt trong nhng Ioai chi mc
sau:
- UNIQUE Chi d[nh trung mt trung c gi tr[ khng Ip. iu ny c ngha I hai bn
ghi bt k trong bng khng c cng gi tr[ trong trung ny. Ban c th rng buc bt k
trung no hoc mt danh sch cc trung I duy duy nht (unique). Nu nhiu trung
duc chi d[nh I khng Ip, b gi tr[ kt hp ca cc trung d phi I duy nht, du I
hai hoc mt s bn ghi c cng gi tr[ trong mt trung ca nhm cc trung d.
- PRIMARY EY Chi d[nh mt hoc mt tp cc trung trong bng tao thnh kho chnh.
Tt c gi tr[ trong kho chnh phi duy nht, v c mt kho chnh duy nht cho mt
bng. Nu ban thit Ip mt kho chnh cho mt bng d tn tai kho chnh th h thng s
bo Ii.
- FOREIGN EY Xc d[nh mt trung nhu mt kho ngoi. Nu kho chnh ca bng
ngoi c nhiu hn mt trung, ban phi dng mt d[nh ngha cho chi mc nhiu trung,
Iit k tt c cc trung tham chiu, tn ca cc bng, tn ca bng ngoi, v tn ca cc
trung duc tham chiu trong bng ngoi theo cng mt th t nhu d Iit k danh sch
cc trung tham chiu. Nu trung duc tham chiu I kho chnh ca bng ngoi, ban
khng cn chi d[nh trung duc tham chiu m Jet engine d ngm d[nh kho chnh ca
bng ngoi I trung duc tham chiu.
V d, d thm mt chi mc cho bng TitIes trong CSDL BibIio.mdb, ban c th dng cu
Inh sau dy:
ALTER TABLE TitIes ADD CONSTRAINT MyIndex FOREIGN EY (PubID) REFERENCES
PubIishers (PubID)
Nh rng, bng cch dng t kho FOREIGN EY, Chng ta dang thit Ip mt quan h
gia trung PubID ca bng TitIes (kho ngoi) v trung PubID trong bng PubIishers
(kho chnh). Mi quan h ny s duc rng buc bi Jet engine, nhu th ban dang dng
phung thc CreateReIation duc m t trong Tao v sa di CSDL
PHN NGN NG THAO TC TRN D LIU - DML
Phn ngn ng thao tc trn d Iiu (DML - Data ManipuIation Languague) duc dng d
Iy cc bn ghi trong cc bng, cp nht, thm, xo cc bn ghi ca cc bng. C mt s
cu Inh h tr cc tc v ny, nhung phn In I c cu trc ca cu Inh SELECT.
Truy vn chn:
S dng cu Inh SELECT d Iy cc bn ghi t CSDL nhu mt tp hp cc bn ghi, Iuu
tr chng trong mt di tung tp bn ghi mi (Recordset object). ng dng ca ban c
th thao tc trn tp bn ghi ny nhu hin th[, thm, thay di v xo nu cn thit. ng
dng ca ban cng c th hin th[, sinh cc bo co t d Iiu d.
SELECT thung I t du tin trong mt cu Inh SQL. Hu ht cc cu Inh hoc I
SELECT hoc I SELECT...INTO. Ban c th dng mt cu Inh SELECT trong SQL I
thuc tnh ca di tung truy vn (QueryDef object), I thuc tnh RecordSource ca mt
diu khin d Iiu (data controI), hoc mt di s cho phung thc OpenRecordset. cu
Inh SELECT khng thay di d Iiu trong CSDL chng chi Iy d Iiu ra t CSDL.
Dang tng qut ca cu Inh SELECT I:
SELECT fieIdIist
FROM tabIenames IN databasename
WHETE searchconditions
GROUP BY fieIdIist
HAVING group criteria
ORDER BY fieIdIist
WITH OWNERACCESS OPTION
Mi phn trong cu Inh dai din cho mt mnh d duc bn dn cc phn sau:
Truy vn dn gin:
Dang dn gin nht ca cu Inh SELECT I:
SELECT * FROM tabIename
V d, truy vn chn sau tr Iai tt c cc ct ca tt c cc bn ghi trong bng EmpIoyees:
SELECT * FROM EmpIoyees
Du sao cho bit rng tt c cc trung ca bng duc chn. Ban cng c th chi d[nh
mt s trung nht d[nh. hi hin th[, d Iiu trong mi ct s hin theo th t nhu chng
d duc Iit k, v vy ban c th thay di Iai th t cho d dc:
SELECT First Name, Last Name FROM EmpIoyees
Chi d[nh ngun d Iiu duc chn:
Mt cu Inh SELECT Iun c mnh d FROM, cho bit danh sch cc bng ta cn Iy cc
bn ghi t d.
Nu mt trung tn tai trong nhiu bng trong mnh d FROM, dt truc chng tn
trung v du chm. Trong v d sau, trung Department c trong c hai bng EmpIoyees
v Supervisors. Cu Inh chi chn trung Department ca bng EmpIoyees v SupvName
t bng Supervisors:
SELECT EmpIoyees. Department, SupvName FROM EmpIoyees, Supervisors WHERE
EmpIoyees.Department Supervisors.Department
hi mnh d FROM Iit k nhiu hn mt bng, th t ca chng khng quan trng.
Xc d[nh mt bng t mt CSDL bn ngoi.
i khi, ban cn thit tham chiu ti mt bng ca mt CSDL bn ngoi m cng c qun
tr[ CSDL (Microsoft Jet database engine) c th kt ni ti, nhu CSDL dBASE, Paradox
hoc mt Jet database bn ngoi. Ban c th Im diu ny bng mnh d tu chn IN.
Mnh d IN thung xut hin sau tn bng trong mnh d FROM, nhung cng c th
duc dng trong SELECT INTO hoc INSERT INTO, khi dch I mt CSDL ngoi.
Ch : Ban chi c th IN d kt ni mt CSDL ngoi tai mt thi dim.
Trong mt s trung hp, di s dung dn d cp ti c thu mc cha CSDL. V d, khi
Im vic vi dBASE, Foxpro, hoc Paradox, tham s dung dn chi ra cc thu mc cha
cc fiIe c dui .DBF hoc .DB. Tn bng duc bt ngun t dch hoc biu thc bng.
xc d[nh khng phi I mt Jet database, thm du chm phy v sau tn, v dng Iai
bng du trch dn hoc du ngoc kp. V d:
dBASE IV
Ban cng c th dng t kho DATABASE d chi d[nh CSDL ngoi. V d, c hai dng sau
chi ra cng mt bng
SELECT * FROM TabIe IN "" dBASE IV DATABASEC:DBASEDATASALES
SELECT * FROM TabIe IN "C:DBASEDATASALES" "dBASE IV"
Ch : nng hiu qu v d s dng, thung ngui ta dng bng kt ni thay cho
mnh d IN.
bit thm thng tin v bng kt ni, xem cun "Working with Records and FieIds" v
cun "Accessing ExternaI Data".
Bit danh ca ct.
hi di tung Recordset duc tao ra t cu Inh SELECT, tn ct ca bng tr thnh tn
trung ca di tung Recordset. Nu ban mun tn khc di, dng mnh d AS. V d sau
dng "DOB" I bit danh ca trung Date of Birth trong bng EmpIoyees: SELECT Date
of Birth AS DOB FROM EmpIoyees
Bt c khi no ban dng truy vn tr Iai tn trung nhp nhng hoc trng tn trung,
ban phi dng mnh d AS d cung cp tn khc nhau cho cc trung. V d sau dng b
danh "Head Count" d gn kt qu dm trong tp bn ghi:
SELECT COUNT(EmpIoyeeID) AS Head Count FROM EmpIoyees
S dng bin VisuaI Basic trong cu Inh SQL
Trong mt chung trnh VisuaI Basic, ban c th tao mt cu Inh SELECT trong ng
dng ca ban bng cch ghp cc bin cc b vo trong mt cu Inh khi cn d chn,
sp xp, Ic d Iiu duc yu cu bi ng dng ca ban. V d ban c mt diu khin
TextBox (TitIeWanted) cha tn ca mt tiu d v ban mun Iy tt c cc sch trong
bng TitIes c nhan d nhu nhan d trong hp TextBox, ban c th tao mt cu Inh SQL
bao gm c gi tr[ hin thi ca hp TextBox. Nhung nh rng SQL dng TitIeWanted
trong mt du trch dn ():
Set Rst Db.OpenRecordset("SELECT * FROM TitIes " "WHERE TitIe "
TitIeWanted.Text "")
1.Lc v sp xp kt qu ca truy vn:
SQL cung cp mt s t kha xc nhn v mnh d tu chn gip ban thun tin hn
trong vic han ch v sp xp kt qu. Phn sau s tho Iun v s tin dng ny.
Chi dn DISTINCT
b qua cc bn ghi trng nhau, dng t kho DISTINCT. Nu duc dng, gi tr[ trong
trung hay mt nhm cc trung duc chn trong cu Inh SELECT s I duy nht. V
d, C mt vi nhn vin Iit k trong bng EmpIoyees c cng h. Nu hai bn ghi c
cng ni dung trung "Last Name" I Smith th cu Inh sau s tr Iai mt bn ghi c ni
dung I Smith:
SELECT DISTINCT Last Name FROM EmpIoyees
Nu b t kho DISTINCT th truy vn s tr Iai nhiu hn mt gi tr[ Smith.
t qu tp hp bn ghi ca truy vn dng DISTINCT khng cho php cp nht v khng
phn nh duc nhng thay di sau d ca ngui dng khc.
Chi dn TOP
tr Iai mt s bn ghi nht d[nh du hoc cui ca pham vi cc bn ghi. Dng chi
dn TOP. Gi s ban mun Iy tn ca 2 sinh vin du ca Ip tt nghip nm 1:
SELECT TOP 2 First Name, Last Name FROM Students WHERE Graduation Year
1 ORDER BY Grade Point Average DESC
Nu ban khng dng mnh d ORDER BY, truy vn s tr Iai 2 bn ghi tu trong bng
Students tho mn diu kin trong mnh d WHERE.
Bt c khi no ban dng truy vn tr Iai tn trung nhp nhng hoc trng tn trung,
ban phi dng mnh d AS d cung cp tn khc nhau cho cc trung. V d sau dng b
danh "Head Count" d gn kt qu dm trong tp bn ghi:
SELECT COUNT(EmpIoyeeID) AS Head Count FROM EmpIoyees
S dng bin VisuaI Basic trong cu Inh SQL
Trong mt chung trnh VisuaI Basic, ban c th tao mt cu Inh SELECT trong ng
dng ca ban bng cch ghp cc bin cc b vo trong mt cu Inh khi cn d chn,
sp xp, Ic d Iiu duc yu cu bi ng dng ca ban. V d ban c mt diu khin
TextBox (TitIeWanted) cha tn ca mt tiu d v ban mun Iy tt c cc sch trong
bng TitIes c nhan d nhu nhan d trong hp TextBox, ban c th tao mt cu Inh SQL
bao gm c gi tr[ hin thi ca hp TextBox. Nhung nh rng SQL dng TitIeWanted
trong mt du trch dn ():
Set Rst Db.OpenRecordset("SELECT * FROM TitIes " "WHERE TitIe "
TitIeWanted.Text "")
1.Lc v sp xp kt qu ca truy vn:
SQL cung cp mt s t kha xc nhn v mnh d tu chn gip ban thun tin hn
trong vic han ch v sp xp kt qu. Phn sau s tho Iun v s tin dng ny.
Chi dn DISTINCT
b qua cc bn ghi trng nhau, dng t kho DISTINCT. Nu duc dng, gi tr[ trong
trung hay mt nhm cc trung duc chn trong cu Inh SELECT s I duy nht. V
d, C mt vi nhn vin Iit k trong bng EmpIoyees c cng h. Nu hai bn ghi c
cng ni dung trung "Last Name" I Smith th cu Inh sau s tr Iai mt bn ghi c ni
dung I Smith:
SELECT DISTINCT Last Name FROM EmpIoyees
Nu b t kho DISTINCT th truy vn s tr Iai nhiu hn mt gi tr[ Smith.
t qu tp hp bn ghi ca truy vn dng DISTINCT khng cho php cp nht v khng
phn nh duc nhng thay di sau d ca ngui dng khc.
Chi dn TOP
tr Iai mt s bn ghi nht d[nh du hoc cui ca pham vi cc bn ghi. Dng chi
dn TOP. Gi s ban mun Iy tn ca 2 sinh vin du ca Ip tt nghip nm 1:
SELECT TOP 2 First Name, Last Name FROM Students WHERE Graduation Year
1 ORDER BY Grade Point Average DESC
Nu ban khng dng mnh d ORDER BY, truy vn s tr Iai 2 bn ghi tu trong bng
Students tho mn diu kin trong mnh d WHERE.
Chi dn TOP khng chn Ia gia nhng bn ghi bng nhau. Trong v d, nu bn ghi th
2 v th 2 c cng hang th truy vn s tr Iai 2 bn ghi.
Ban cng c th dng t kho PERCENT d tr Iai mt s phn trm bn ghi du hay
cui tu thuc vo mnh d ORDER BY. Gi s rng thay v 2 sinh vin, ban mun 10
phn trm sinh vin ca Ip.
SELECT TOP 10 PERCENT First Name, Last Name FROM Students WHERE
Graduation Year 1 ORDER BY Grade Point Average DESC
Mnh d WHERE
Mnh d WHERE xc d[nh nhng bn ghi t cc bng duc Iit k trong mnh d FROM
Microsoft Jet Database engine chn cc bn ghi tho mn diu kin Iit k trong mnh d
WHERE. Nu ban khng c mnh d WHERE, truy vn s tr Iai tt c cc dng t cc
bng duc chn. Nu ban chi ra hn mt bng trong truy vn v khng c mnh d
WHERE hoc mnh d kt ni JOIN, truy vn ca ban s tr Iai kt qu tch d cc ca cc
bng.
Ch : Mc d mnh d WHERE c th dm nhn tc v kt ni cc bng, nhung ban phi
dng mt mnh d JOIN d thc hin cc thao tc kt ni nhiu bng vi nhau nu ban
mun kt qu ca truy vn c th cp nht duc.
Mnh d WHERE tung t nhu HAVING. WHERE xc d[nh nhng bn ghi duc chn. Mt
cch tung t, mt khi cc bn ghi d duc nhm bi GROUP BY, HAVING s quyt d[nh
nhng bn ghi no duc hin th[.
Dng mnh d WHERE d Ioai b cc bn ghi ban khng mun nhm bi GROUP BY.
Mt mnh d WHERE c th c ti 0 biu thc duc kt ni bi cc ton t Iogic nhu
AND, OR.
hi ban dng mt trung tn c cha du cch hoc du cu, ban phi b tn trung d
trong du ngoc vung ():
SELECT Product ID, Units In Stock FROM Products WHERE Units In Stock
Reorder LeveI
hi ban xc d[nh di s diu kin, ngy phi d[nh dang theo dang ca M, ngay c khi ban
khng dng phin bn Jet database ca M. V d, May 10, 1, duc vit I 10// theo
kiu Anh v /10/ theo kiu M. chc chn, cn dt ngy ca ban vo trong cp du
thng (), nhu v d sau dy:
tm cc bn ghi c ngy May 10, 1 trong mt CSDL Anh, ban phi dng cu Inh sau
dy:
SELECT * FROM Orders WHERE Shipped Date /10/
Ban c th dng hm DateVaIue, n nhn bit duc mi d[nh dang duc thit Ip bi
Microsoft Windows. V d, m sau cho chun ngy M:
SELECT * FROM Orders WHERE Shipped Date DateVaIue(/10/)
M sau dng cho Anh:
SELECT * FROM Orders WHERE Shipped Date DateVaIue(10//)
Mnh d GROUP BY:
GROUP BY I mnh d tu chn cho php kt hp cc bn ghi theo mt gi tr[ ging ht
nhau ca mt trung trung xc d[nh vo trong mt bn ghi duy nht. Gi tr[ tng hp
duc tao ra cho mi bn ghi nu trong cu Inh SQL c cha hm tng hp (aggregate
function), nhu hm Sum, Count.v.v.
Cc bn ghi c gi tr[ rng trung nhm vn duc nhm. Tuy nhin, n khng duc
tng hp nu trung tng hp I rng.
Dng mnh d WHERE d Ioai b cc bn ghi ban khng mun nhm, v dng mnh d
HAVING d Ic cc bn ghi sau khi chng d duc nhm.
Tr khi d Iiu I kiu k c (Memo) hoc trung t dng (Automation), mt trung trong
danh sch nhm sau mnh d GROUP BY c th tham chiu ti bt k trung no duc
Iit k trong mnh d FROM, thm ch nu trung d khng c trong mnh d SELECT.
Jet database engine khng th nhm trn cc trung Memo hoc Automation.
Tt c cc trung duc Iit k sau SELECT phi hoc bao gm trong danh sch trung
nhm hoc mt hm nhm (aggregate function).
Mnh d HAVING
Xc d[nh nhng bn ghi duc nhm no duc hin th[ trong mnh d SELECT vi mt
mnh d GROUP BY. Mt khi mnh d GROUP BY kt hp cc bn ghi, HAVING hin th[
bt c bn ghi no duc nhm tho mn diu kin trong mnh d HAVING.
HAVING tung t WHERE, n quyt d[nh nhng bn ghi no duc chn. Mt khi cc bn
ghi duc nhm bi GROUP BY, HAVING xc d[nh bn ghi no duc hin th[.
HAVING I mt mnh d tu chn. Mt mnh d HAVING c th c ti 0 biu thc duc
kt hp cc ton t Iogic nhu AND v OR.
Mnh d ORDER BY
Mnh d ORDER BY xc d[nh th t sp xp ca cc bn ghi trong truy vn. Trong mnh
d ORDER BY, ban xc d[nh mt trung hay cc trung duc dng Im kho sp xp, v
sau d xc d[nh cc bn ghi xut hin theo th t d In tng dn hay gim dn. V d sau
tr Iai tt c cc bn ghi trong bng EmpIoyees duc Iit k h theo th t ABC :
SELECT * FROM EmpIoyees ORDER BY Last Name ASC
Trong v d ny, ASC I tu chn - th t sp xp mc d[nh I tng dn. Tuy nhin, ban c
th thm t kho ASC v cui mi trung ban mun sp theo th t tng dn.
sp theo th t gim dn, thm t kho DESC vo cui cc trung ban mun sp theo
th t gim dn.
Ban cng c th dng cng c th dng s th t ca trung duc chn trong mnh d
SELECT d chi ra trung Im kho sp xp:
SELECT First Name, Last Name FROM EmpIoyees ORDER BY 2 ASC
Ban cng c th sp xp theo nhiu trung. Cc bn ghi truc ht duc sp theo trung
du tin trong danh sch cc trung sp xp. Cc bn ghi c cng gi tr[ trn trung d
Iai tip tc duc sp xp trn trung tip theo trong danh sch v qu trnh Iai c th Ip
Iai nu tn tai mt s bn ghi c cng gi tr[ tai trung va ri.
V d sau chn trung Iung v sp xp gim dn, tt c cc nhn vin cng Iung s
duc sp h tng dn theo th t ABC.
SELECT Last Name, SaIary FROM EmpIoyees ORDER BY SaIary DESC, Last Name
ORDER BY thung I thnh phn cui cng trong cu Inh SQL. N I mnh d tu chn
(tr khi ban dng chi dn TOP hoc TOP n PERCENT trong mnh d SELECT).
Mnh d WITH OWNERACCESS
Trong mi trung da ngui dng vi nhm Im vic c chia quyn, dng WITH
OWNERACCESS cui mi truy vn d trao cho ngui dng, ngui thi hnh truy vn cho
php xem d Iiu trong truy vn du rng ngui d mt khc b[ han ch xem cc bng c
bn ca CSDL.
V d sau cho php ngui dng tr Iai thng tin v Iung, thm ch nu ngui dng khng
duc php xem bng kt ton, I kt qu ca mt truy vn do mt ngui khc c d
quyn thi hnh.
SELECT Last Name, First Name, SaIary FROM EmpIoyees ORDER BY Last Name
WITH OWNERACCESS OPTION
Nu mt ngui dng mt khc b[ ngn khng duc tao hoc thm vo mt bng, ban c
th dng WITH OWNERACCESS OPTION d cho php ngui dng thi hnh mt cu Inh
tao hoc ni bng.
Tu chn ny yu cu ban truy cp vo fiIe h thng System.mda duc kt hp vi CSDL.
N thc s hu dng chi trong mi trung da ngui dng c chia quyn.
2.Dng mt truy vn tao bng.
Mt s bin di trong cu Inh SELECT cho php ban tao ra mt bng mi, thay th cho
mt di tung Recordset. Im diu ny, ban thm mnh d INTO. V d sau tao ra mt
bng mi New EmpIoyees bi truy vn bng EmpIoyees:
SELECT * INTO New EmpIoyees FROM EmpIoyees
Ban c th dng truy vn tao bng d Iy cc bn ghi, tao mt bng d phng, hoc Im
mt bn sao d dua sang mt CSDL khc hoc dng Im c s cho cc bo co hin th[
d Iiu trong mi d[nh k. V d, ban c th tao ra bn bo co bn hang tng thng bng
cch thi hnh truy vn tao bng ny mi thng.
Ban c th mun xc d[nh mt kho chnh cho bng mi tao. hi ban tao bng d, cc
trung trong bng mi s tha k kiu d Iiu va kch thuc ca mi trung trong bng
c s, nhung cc dc tnh khc ca cc trung hoc bng khng duc chuyn sang.
3 Dng truy vn xo.
Tao mt truy vn xo d Ioai b cc bn ghi t mt hoc cc bng duc Iit trong mnh
d FROM tho mn diu kin trong mnh d WHERE, nhu c php dui dy:
DELETE tabIe * FROM tabIeexpression WHERE criteria
DELETE dc bit hu dng khi ban mun xo mt Ic nhiu bn ghi.
Trong mt cu Inh xo trn nhiu bng, ban phi bao gm di tabIe. Nu ban xc d[nh
xo bn ghi trn nhiu bng, khng c bng no cha kho chnh ca mt quan h 1 - n.
Nu mun xo ton b bn ghi trong mt bn, Dng truy vn xo chnh bng d cn
nhanh hn I dng truy vn xo. Ban c th dng mt phung thc thi hnh vi mt cu
Inh DROP TABLE d xo bng d ra khi CSDL. Tt nhin nu ban xo bng th mt Iun
c cu trc. Nguc Iai, khi dng truy vn xo th chi phn d Iiu b[ xo Cu trc bng v
cc thuc tnh ca cc trung vn cn nguyn vn.
Ban c th dng DELETE d xo bn ghi trong mt bng hoc bng Iin kt bn n ca mt
quan h 1 - n. Thao tc xo theo tng trong truy vn chi xo bng bn n ca quan h . V
d, trong quan h gia bng Customers v bng Orders, bng Orders I pha n, nn thao
tc xo chi nh hung dn bng Orders.
Mt truy vn xo xo ton b bn ghi, khng xo chn Ic theo cc trung. Nu ban mun
xo d Iiu trong mt trung c th no d, dng truy vn cp nht (UPDATE) d thit Ip
d Iiu trung d I rng (NULL).
Mt khi ban d Ioai b cc bn ghi bng cch dng truy vn xo, ban khng th khi phc
Iai thao tc ca mnh. Nu ban mun bit nhng bn ghi d duc xo, truc ht, kim tra
kt qu ca truy vn chn c cng diu kin (vi truy vn xo) v sau d tin hnh truy
vn xo.
Bt c Ic no ban cng nn sao Iuu d Iiu phng khi ban xo nhm cc bn ghi.
.Dng truy vn b sung.
Ban c th dng mnh d INSERT INTO d thm cc bn ghi vo bng hay tao mt truy
vn b sung.
Ban c th dng nhng c php sau dy d thc hin truy vn b sung nhiu bn ghi:
INSERT INTO target IN externaIdatabase SELECT source.fieId1, fieId2, ... FROM
tabIeexpression
Nguc Iai, dng c php sau d thc hin truy vn b sung mt bn ghi:
INSERT INTO target (fieId1, fieId2,...) VALUES (vaIue1, vaIue2, ...)
Ban c th dng mnh d INSERT INTO d thm mt bn ghi dn vo mt bng dng c
php truy vn b sung bn ghi dn. Trong trung hp ny, Cu Inh phi xc d[nh tn v
gi tr[ cho mi trung ca bn ghi. Ban phi xc d[nh cc trung ca bn ghi m d Iiu
se duc gn vo cng nhu gi tr[ ca trung d. hi ban khng chi r danh sch trung,
gi tr[ mc d[nh hoc NULL s din vo cc trung vng mt. Cc bn ghi duc thm vo
cui bng.
Ban cng c th dng INSERT INTO d ni mt tp hp cc bn ghi t mt bng khc
hoc mt truy vn dng mnh d SELECT ... FROM duc chi ra c php trn. Trong
trung hp ny, mnh d SELECT chi r trung ni thm vo bng dch.
Bng ngun hoc bng dch c th I mt bng hay mt truy vn. Nu mt truy vn duc
xc d[nh, Microsoft Jet database engine ni mt tp hp bn ghi vo mt hoc nhiu bng
duc chi ra trong truy vn.
INSERT INTO I mt tu chn, nhung khi c mt n, phi dng truc SELECT.
Nu bng dch cha kho chnh, phi chc chn rng ban b sung nhng bn ghi vi ni
dung kho I duy nht, v trung d khng duc d trng.
Nu ban b sung cc bn ghi vo mt bng vi trung Couter, Ioai b trung d ra khi
danh sch nu ban mun Microsoft Jet dnh s Iai cc bn ghi. Thm trung Counter vo
truy vn nu ban mun gi Iai gi tr[ ban du. Nu c gi tr[ trng, tt nhin I Jet
database s khng b sung bn ghi d.
Dng mnh d IN d ni cc bn ghi vo mt bng ca mt CSDL khc.
tao mt bng mi, dng mnh d SELECT ... INTO thay th d tao mt truy vn tao
bng.
tm ra cc bn ghi s duc b sung, truc khi thi hnh truy vn b sung, hy xem qua
kt qu ca truy vn chn vi cng biu thc diu kin.
Mt truy vn b sung khng nh hung ti cc bng hoc truy vn ngun.
.Truy vn cp nht:
Truy vn UPDATE thay di gi tr[ trong cc trung duc tho mn cc diu kin cp nht.
UPDATE tabIe SET newvaIue WHERE criteria
UPDATE dc bit hu dng khi ban mun thay di ni dung nhiu bn ghi hoc khi cc
bn ghi ban mun thay di nm trn nhiu bng. Thng thung ban dng truy vn ny vi
mt phung thc thi hnh.
Ban c th thay di mt vi trung cng Ic. V d sau tng Order Amount In 10 v gi
tr[ Freight In 3:
UPDATE Orders SET Order Amount Order Amount * 1.1, Freight Freight * 1.03
WHERE Ship Country U
UPDATE khng tao ra tp kt qu. Nu ban mun xem nhng bn ghi no duc cp nht,
truc tin xem kt qu ca truy vn chn (dng cng biu thc diu kin) v sau d thi
hnh truy vn cp nht.
Truy vn Crosstab:
Truy vn Crosstab cho php ban chn cc gi tr[ t cc trung hay cc biu thc nhu I
cc tiu d ct, v th, ban c th xem d Iiu mt cch c dng hn vi mt cu Inh
SELECT bnh thung. Ban dng mnh d TRANSFORM d tao cc truy vn Crosstab.
TRANSFORM aggfunction seIectstatement PIVOT pivotfieId IN (vaIue1,vaIue2,...)
Mnh d TRANSFORM dng nhng tham s sau: aggfunction Mt hm tng hp trn d
Iiu duc chn.
seIectstatement : Mt cu Inh SELECT
pivofieId : Trung hoc biu thc ban mun dng d tao tiu d ct trong kt qu ca truy
vn.
vaIue1, vaIue2: Cc gi tr[ c d[nh duc dng d tao tiu d ct.
hi ban tng hp d Iiu vi cng c I truy vn Crosstab, ban chn cc gi tr[ cc
trung hay biu thc c th nhu I cc tiu d v th ban c th xem d Iiu trong mt
danh c dng hn.
TRANSFORM dng truc mnh d SELECT xc d[nh cc tiu d dng v dng truc mt
mnh d GROUP BY xc d[nh cc dng c th duc nhm. Tt nhin, ban c th tu chn
cc mnh d khc, nhu WHERE, nhng mnh d xc d[nh thm cc tiu chun chn hay
sp xp.
Cc gi tr[ tr Iai trong pivotfieId duc dng nhu I tiu d ct trong tp kt qu ca truy
vn. V d, vic xoay doanh s bn hng trong mt thng trong mt truy vn Crosstab s
tao ra 12 ct. Ban c th han ch pivotfieId d tao cc tiu d ct t cc ga tr[ c d[nh (gi
tr[ 1, gi tr[ 2) duc Iit k trong mnh d tu chn IN.
V d sau tao ra mt truy vn Crosstab trnh by kt qu bn hng theo thng trong mt
nm ca mt ngui no d. Cc thng duc tr Iai I cc ct t tri sang phi, v tn sn
phm duc Iit k t trn xung dui nhu cc hng.
PARAMETERS SaIes for which year ? LONG TRANSFORM Sum(Order
DetaiIs.QuanIity * (Order DetaiIs.Unit Price -(Order DetaiIs.Discount / 100) * Order
DetaiIs.Unit Price)) AS SaIes SELECT Product Name FROM Orders INNER JOIN
(Products INNER JOIN Order DetaiIs ON Products.Product ID Order DetaiIs.
Product ID) ON Orders.Order ID Order DetaiIs.Order ID WHERE DatePart
("yyyy", Order Date) SaIes for which year ? GROUP BY Product Name ORDER BY
Product Name PIVOT DatePart("m", Order Date)
t ni:
Mt trong nhng dc tnh hu ch nht ca CSDL quan h I kh nng ni hai hay nhiu
bng vi nhau d tao nn mt bng mi (hay mt Recordset) cha dng thng tin t cc
bng c.
Cc bng duc ni theo cc mi quan h gia chng, thng thung nht I gia kho
chnh ca mt bng v kho ngoi tung ng ca bng kia. Tu thuc vo cch thc ni
cc bng vi nhau m ban c th tao ra cc Ioai Iin kt sau:
INNER JOIN Cc bn ghi ca c hai bng duc cha trong Iin kt chi khi mt trung c
th trong bng khp vi mt trung c th trong bng th hai.
LEFT OUTER JOIN Tt c cc bn ghi t bng mt duc cha trong Iin kt, cng vi cc
bn ghi trong bng hai m d cc trung c th khp vi cc trung tung ng trong
bng mt.
RIGHT OUTER JOIN Tt c cc bn ghi t bng th hai duc dua vo Iin kt cng vi
cc bn ghi t bng mt m c cc trung khp vi cc trung trong bng hai.
Inner joins:
tao ra mt truy vn chi cha cc bn ghi c d Iiu trong trung Iin kt ging nhau,
hy dng php Iin kt INNER JOIN.
INNER JOIN kt hp cc bn ghi ca hai bng khi c cc gi tr[ khp nhau trong trung
Iin kt. Dng c php sau:
FROM tabIe1 INNER JOIN tabIe2 ON tabIe1.fieId tabIe2.fieId2
Ban c th dng INNER JOIN trong bt c mnh d FROM no. N tao ra mt Iin kt
tung dung (Equi-joins) , nhu mt Iin kt INNER JOIN. Equi-joins I mt dang kt ni
ph bin. Chng kt hp cc bn ghi t hai bng khi c d Iiu trong hai trung kt ni
khp nhau.
Ban c th dng INNER JOIN vi cc bng Department v EmpIoyees d chn tt c cc
nhn vin trong mi phng. Nguc Iai, d chn tt c cc phng (thm ch nu mt s
phng khng c nhn vin no), ban c th dng LEFT JOIN hoc RIGHT JOIN.
Ban c th Iin kt bt c hai trung kiu s no, thm ch nu chng khc kiu. V d
ban c th kt ni mt trung s, vi thuc tnh kch thuc duc thit Ip I s nguyn,
v mt trung Couter. V d sau cho chng ta bit kt ni hai bng Categories v
Products trn trung CategoryID nhu th no:
SELECT Category Name, Product Name FROM Categories INNER JOIN Products ON
Categories.Category ID Products.Category ID
V d sau tao ra hai Iin kt tung dung (equi-joins): mt gia hai bng Order DetaiIs v
Orders v mt gia hai bng Orders v EmpIoyees. iu ny I cn thit bi bng
EmpIoyees khng cha thng tin v bn hng, v Order DetaiIs khng cha thng tin v
nhn vin. Truy vn dua ra mt danh sch cc nhn vin v tng s v hng h bn duc:
Dim MyQRY AS QueryDef MyQRY.SQL "SELECT DISTINCTROW Sum(Unit Price.
Quantity) AS SaIes, First Name " " Last Name AS Name FROM EmpIoyees
INNER JOIN (Order INNER JOIN Order DetaiIs ON Order.Order ID Order DetaiIs.
Order ID) ON EmpIoyees.EmpIoyee ID Orders.EmpIoyee ID GROUP BY First
Name " " Last Name"
Cu Inh ny phi duc s dng nhu I thuc tnh ca di tung QueryDef hoc I tham
s ca phung thc OpenRecordset.
V d trn dng chi dn DISTINCTROW d Ioai b d Iiu trn c s cc bn ghi hon ton
trng nhau. V d, ban c th tao mt truy vn Iin kt cc bng Customers vi bng
Orders vi trung Iin kt I trung Customer ID. Bng Customers khng cha cc bn
ghi c cng ni dung trung Customer ID, nhung trong bng Orders th c bi mt khch
hng c th c nhiu hp dng dt mua hng. Cu Inh SQL sau chi ra cch ban dng chi
dn DISTINCTROW d dua ra mt danh sch cc cng ty c t nht mt hp dng dt mua
hng nhung khng c th v cc hp dng d.
SELECT DISTINCTROW Company Name FROM Customers INNER JOIN Order ON
Customers.Customer ID Orders.Customer ID ORDER BY Company Name
Nu ban b st chi dn DISTINCTROW th kt qu s tr Iai cc tn cng ty trng nhau v
c nhiu bn hp dng dt mua hng.
DISTINCTROW chi c hiu qu khi ban chn cc trung t mt s bng duc Iin kt
trong truy vn. DISTINCTROW duc b qua khi ban chn t mt bng.
Lin kt tri, phi (LEFT JOIN RIGHT JOIN - Lin kt ngoi):
Lin kt ngoi (OUTER JOIN) ni cc bn ghi ca bng ngun khi chng duc dng trong
bt k mnh d FROM no vi c php sau:
FROM tabIe1 LEFT RIGHT JOIN tabIe2 ON tabIe1.fieId1 tabIe2.fieId2
Dng LEFT JOIN d tao mt Iin kt ngoi bn tri. Lin kt ngoi bn tri gm tt c cc
bn ghi t bng th nht (bng bn tri), tc I bao gm c cc bn ghi khng khp ni
dung trung Iin kt vi bt c bn ghi no ca bng th hai (bng bn phi).
Dng RIGHT JOIN d tao Iin kt ngoi bn phi. Lin kt ngoi bn phi bao gm tt c
cc bn ghi c trong bng th hai (bng bn phi), tc I bao gm c cc bn ghi khng
khp ni dung trung Iin kt vi bt c bn ghi no ca bng cn Iai (bng bn tri).
V d, ban c th dng LEFT JOIN cho bng Departments (tri) v bng EmpIoyees (phi)
d Iy ra tt c cc phng ban, trong d c c cc phng khng c nhn vin no. Iy
tt c cc nhn vin, bao gm c nhng nhn vin khng thuc phng ban no, hy dng
RIGHT JOIN.
V d sau c thy cch thc d ban c th Iin kt bng Categories v bng Products d
trn trung Category ID. Truy vn s dua ra danh sch tt c tn cc hang mc, trong d
c nhung hang mc khng c sn phm no.
SELECT Category Name, Product Name FROM Categories LEFT JOIN Products ON
Categories.Category ID Products.Category ID
Trong v d trn dy, Category ID I mt trung Iin kt, nhung khng c mt trong kt
qu ca truy vn v n khng duc chn trong mnh d SELECT.
Lin kt Ing nhau (Nested joins):
Ban c th Ing cc chi dn JOIN nhu c php sau dy:
SELECT fieIds FROM tabIe1 INNER JOIN (tabIe2 INNER JOIN (tabIe3 INNER JOIN (
tabIex INNER JOIN ... ) ON tabIe3.fieId3 tabIex.fieIdx) ON tabIe2.fieId2
tabIe3.fieId3) ON tabIe1.fieId1 tabIe2.fieId2
Truy vn hp (Union Queries): Ban c th dng cc thao tc ni d tao cc truy vn hp,
kt hp kt qu ca hai hay nhiu bng hoc truy vn dc Ip. query1 UNION ALL query2
UNION ALL queryn ...
query dai din cho biu thc xc d[nh trung cha d Iiu kiu s m ban mun tnh
trung bnh hoc mt biu thc thc hin mt php tnh c dng d Iiu trong trung d.
Ton hang trong biu thc c th tn ca cc trung, c th I mt hng, mt hm (c th
I c sn ca h thng hoc do ngui dng d[nh ngha nhung khng duc I hm tng
hp(aggregate functions)).
Ban c th kt hp kt qu ca mt truy vn v mt cu Inh SQL trong mt php hp
UNION dn. V d sau kt hp kt qu ca mt truy vn c tn gi New Accounts v mt
cu Inh SELECT: TABLE New Accounts UNION ALL SELECT * FROM Customers
WHERE Order Amount 1000
Mc d[nh, khng c hai bn ghi no trng nhau trong kt qu ca mt truy vn hp tuy
nhin, ban c th bao gm c chi dn ALL d kt qu c c cc bn ghi trng nhau. N
cng Im cho truy vn thi hnh nhanh hn.
Tt c cc truy vn trong phep hp UNION yu cu c cng s trung, tuy nhin cc
trung khng cn thit phi c cng kch thuc hoc kiu d Iiu.
Ban c th dng mnh d GROUP BY v/hoc HAVING trong mi truy vn tham gia php
hp d nhm d Iiu. Ban c th dng mt mnh d ORDER BY cui truy vn cui cng
d kt qu tr v duc sp theo mt th t xc d[nh.
7.Ti uu truy vn:
Ti uu CSDL I mt ch d In v bao hm nhiu vn d. Nhiu yu t, bao gm c cu
hnh phn cng v phn mm, ci dt Windows, b dm, khng Iin quan dn cc truy
vn, nhung chng nh hung dn hiu qu ca CSDL.
Mt yu t quan trng khc I dng cc bng gn vi CSDL hn I kt ni trc tip vi
CSDL t xa. Vn d ny duc bn k trong cun "Accessing ExternaI Data".
Phn ny s trnh by ngn gn mt s cch ti uu Iin quan dc bit ti s xy dng cc
truy vn, v tn dng kh nng ti uu Jet database d xy dng cc truy vn.
Mt s chin Iuc ti uu thung dng:
- Han ch dng cc trung sp xp, dc bit I cc trung khng duc tao chi mc.
- m bo cc bng kt ni t cc ngun khc nhau du duc tao chi mc hoc I duc
Iin kt trn cc kho chnh.
- Nu d Iiu khng thay di thung xuyn, dng cc truy vn tao bng t truy vn
Dynasets ca ban. Dng cc bng d Im c s cho cc form, cc bo co hn I dng
cc truy vn.
- Nu ban dang tao mt truy vn Crosstab, hy dng tiu d ct c d[nh bt c khi no c
th.
- Dng BETWEEN...AND, IN v cc du "" trn cc ct duc dnh chi mc.
- hi tao mt truy vn, khng nn thm cc trung khng cn thit.
Ti uu cc truy vn vi cng ngh Rushmore:
Rushmore I mt cng ngh truy cp d Iiu duc dng trong Jet database engine cho
php mt tp hp cc bn ghi duc truy cp mt cch ht sc hiu qu. Vi Rushmore,
khi ban dng mt kiu biu thc nht d[nh trong diu kin truy vn, truy vn ca ban s
thi hnh nhanh hn rt nhiu.
Biu thc ti uu dang dn gin:
Jet database engine c th ti uu ho cc biu thc dn gin trong mnh d WHERE
trong cu Inh SELECT. Dang biu thc dn gin c th thnh Ip nn ton b hoc mt
phn phn ca biu thc.
Mt biu thc dn gin c th ti uu ho c mt trong nhng dang sau:
indexedfieId comparisonoperator expression - or -expression comparisonoperator
indexedfieId Trong dang biu thc dn gin nht c th ti uu:
- indexedfieId phi I mt trung m trn d c tao Ip chi mc.
- comparisonoperator phi I mt trong nhng kiu sau dy: , , , , , , BETWEEN,
LIE, hoc IN.
- expression I mt biu thc hp I bt k, bao gm cc hng, cc hm, cc trung t
cc bng.
Ch : kt qu I tt nht, gi tr[ so snh trong biu thc dng LIE phi bt du bng
mt k t ch khng duc I k t dai din (*, ?). Ban c th ti uu LIE "m*" ch khng
th ti uu LIE "*m*".
Biu thc c th ti uu dang phc hp.
Microsoft Jet dng Rushmore d ti uu ho cc biu thc phc hp duc kt hp t cc
biu thc (c th ti uu) dn gin vi cc ton t AND hoc OR. Mt biu thc nhu th
nm trong cc dang sau:
- simpIeexpression AND simpIeexpression
- simpIeexpression OR simpIeexpression
Ghi nh nhng diu sau dy khi dng biu thc ti uu ho Rushmore:
- Hm COUNT(*) duc ti uu mc cao cho cc truy vn dng Rushmore.
- Nu chi mc I gim dn v ton t so snh khc du bng, truy vn khng th ti uu
duc.
- Rushmore s Im vic vi Microsoft Access tabIes, cng nhu vi Microsoft FoxPro

You might also like