Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 28

GII THIU

Ngn ng truy vn c cu trc (SQL) l mt ngn c s d liu


(CSDL) chun cng nghip c cng c qun tr d liu ca
Microsoft (Microsoft jet database engine) s dng. SQL c s
dng to nhng i tng truy vn (QueryDef objects), nh
l i s cho phng thc m tp hp bn ghi (OpenRecordset
method), v l thuc tnh ngun bn ghi (RecordSource
property) ca iu khin d liu (data control). N cng c th
c dng vi nhng phng thc thi hnh (Execute method)
trc tip to v thao tc ... (jet databases), v to ra cc
SQL PassThrough truy vn thao tc trn cc CSDL khch ch
t xa (remote client/server databases).

Chng ny s bn ti cu trc c bn ca SQL, v cch thc s


dng n cho vic to, bo tr v sa i CSDL. Chng ta cng
ni ti s xy dng v cng dng ca truy vn SQL to cc
i tng tp hp bn ghi (Recordset objects), v chn, sp
xp, lc v cp nht d liu trong nhng bng c s. Hn na,
chng ny s xem xt cch thc ti u ho truy vn SQL v
mt tc 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 l mt ngn ng lp trnh v CSDL c ngun gc lin quan


mt thit ti s pht minh ra m hnh CSDL quan h ca
E.F.Codd vo u nhng nm 70. Tin thn ca SQL l ngn
ng Sequel, v v l do ny SQL vn thng c pht m l
sequel hn l ess cue ell, mc du c hai cch pht m u
c chp nhn.

SQL ngy nay pht trin rng v tr thnh mt ngn ng chun


cho CSDL quan h, v c nh ngha bi chun ANSI. Hu
ht cc bn thi hnh ca SQL ch l s bin i nh t SQL
chun, bao gm c phin bn c Jet database engine h tr.
Nhng s khc nhau ny s c nhc ti cui chng, nhng
hu ht cc cu trc v cc chc nng ca ngn ng l nht
qun i vi cc nh pht trin cc h qun tr CSDL. Nu bn
s dng bt c bn thi hnh no ca SQL, bn s thy
khng kh khn my khi chuyn sang Microsoft Jet SQL.
SQL vs. Navigation

Nh cp trong phn u ti liu, Mircosoft Jet database


engine cung cp hai phng thc tch bit hon tt hu ht
cc tc v CSDL:

- Mt m hnh iu hng da trn c s dch chuyn qua li


gia cc bn ghi.
- Mt m hnh quan h da trn truy vn hi c cu trc (SQL).

M hnh iu hng bao gm nhng thuc tnh v phng thc


c m t trong To v sa i CSDL (Creating and
Modifying Databases) v Thao tc vi bn ghi v trng
(Working with Records and Fields). M hnh quan h c
ni bn ti trong chng ny.

Nhng lp trnh vin khng quen thuc vi nhng h qun tr


c s d liu hng file nh dBASE, Foxpro, v Paradox c th
cm thy d chu khi bt u vi cc phng thc iu hng
c tho lun trong chng trc. Tuy nhin, trong hu ht
cc trng hp nhng phng thc SQL vi vai tr tng ng
t ra hiu qu hn, v ni chung chng nn c dng cho
nhng ni tnh hiu qu c xem l quan trng hn c. Hn
na SQL c mt li im l mt giao tip mc chun cng
nghip v CSDL, th nn mt s hiu bit v cc lnh SQL cho
phep bn 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 lnh, cc mnh , cc ton t, v


cc hm tng hp (hm nhm - aggregate functions). Nhng
thnh phn ny c kt hp vo trong cc pht biu
(statements) dng to, cp nht, v thao tc trn CSDL.
Nhng mc sau s m t nhng thnh t mt cch ngn
gn, v phn cn li ca chng ny s a ra cho bn nhng
v d c th v cng dng ca chng.

Ch : Nhng mc sau s nhng lnh v t kho c dng


thng xuyn nht, nhng khng phi tt c. c mt tham
kho hon chnh v danh sch cc t kho SQL, hy tm kim
SQL trong Books Online.

1.Lnh SQL:

Ging nh m hnh iu hng ca DAO (Data Access Object),


SQL cung cp c hai phn, ngn ng nh ngha d liu (DDL -
Data Definition Language) v ngn ng thao tc d liu (DML -
Data Manipulation Language). Tuy c vi phn trng lp,
nhng nhng cu lnh DDL cho php bn to v nh ngha cc
CSDL, cc trng, cc ch mc mi, trong khi nhng cu lnh
DML bn xy dng cc truy vn, sp xp, lc, v trch d
liu t trong CSDL.

DDL

Cc cu lnh DDL trong SQL l biu thc c xy dng chung


quanh nhng mnh sau:

CREATE Dng to mi cc bng, cc trng v cc ch mc.


DROP Dng xo cc bng v ch mc khi CSDL.
ALTER Dng sa i cc bng bng cch thm trng, thay
i nh ngha ca cc trng.

DML

Cc cu lnh DML l cc biu thc c xy dng da trn cc


mnh sau:

SELECT Dng truy vn CSDL ly c nhng bn ghi tho


mn nhng tiu chun no .
INSERT Dng chn mt nhm d liu vo CSDL thng qua
mt thao tc.
UPDATE Dng thay i gi tr ca nhng trng, nhng bn
ghi c th.
DELETE Dng loi b nhng bn ghi ra khi CSDL.

2.Mnh SQL:

Mnh l nhng iu kin thay i c dng xc nh d


liu bn mun chn, mun thao tc. Bng sau lit k nhng
mnh bn c th dng.

FROM Lit k danh sch cc bng m ta cn ly cc bn ghi t


.
WHERE Xc nh cc iu kin m bn ghi c chn phi p
ng c.
GROUP BY Dng nhm cc bn ghi c chn thnh cc
nhm ring bit.
HAVING Dng a ra iu kin cho mi nhm.
ORDER BY Dng sp xp cc bn ghi c ch theo mt th
t no .

3.Nhng ton hng SQL:


C hai loi ton hng trong SQL: ton hng logic v ton hng
so snh.

Ton hng logic:


Ton hng logic c dng ni cc biu thc, thng l
trong phm vi ca mnh WHERE. V d nh:

SELECT * FROM MY_TABLE WHERE Condition1 AND Condition2;

Nhng ton t logic bao gm: AND, OR, NOT

Ton hng so snh:

Ton hng so snh c dng so snh tng i gi tr hai


biu thc xc nh nhng hot ng no s c thc hin.
V d:

SELECT * FROM Publishers WHERE PubID = 5;

Nhng ton t so snh bao gm:

< b hn
<= b hn hoc bng
> ln hn
>= ln hn hoc bng
= bng
<> khc

4.Hm tng hp

(aggregate functions)

Hm tng hp (hm nhm) c dng trong phm vi ca mnh


SELECT trn mt nhm bn ghi tr li mt gi tr. V d,
hm AVG c th tr li gi tr trung bnh ca tt c cc gi tr
trong mt trng c th. Bng sau lit k danh sch cc hm
tng hp.

AVG Tr li gi tr trung bnh trong mt trng. COUNT Tr li


s bn ghi c chn.
SUM Hm tnh tng cc gi tr trong mt trng c th.
MAX Hm tr v gi tr cc i ca trng .
MIN Hm tr v gi tr cc tiu ca trng
NHNG THAO TC DLL
DDL bao gm mt s lnh bn c th dng to bng v ch mc, v
sa i cc bng bng cch thm hoc loi b cc ct hoc ch mc.
Nhng cu lnh nh ngha d liu c th ch c dng vi Jet
database; Chng khng c h tr cho bt c CSDL nh dng ngoi.

Ch : dng cu lnh DDL, hoc bt c truy vn no khng tr li


tp bn ghi, hy ng ngoc kp v s dng chng nh l i s ca
cc phng thc thi hnh ca CSDL hay i tng truy vn (QueryDef
object) nh trong v d sau:

MyDB.Execute CREATE TABLE Employees ([First Name] TEXT, [Last_


Name] TEXT);

dng bt c mt cu lnh no tr li cc bn ghi (nh SELECT),


dng biu thc nh l i s ngun ca phng thc m tp bn ghi
(OpenRecordset method), nh trong v d sau:

MyDB.OpenRecordset (SELECT * FROM Titles WHERE Au_ID = 5, _


dbOpenDynaset);

1.To mt bng:

to mt bng trong CSDL, dng cu lnh CREATE TABLE. Mt cu


lnh hon chnh nhn cc i s l tn bng, tn cc trng, kiu d
liu ca cc trng v rng ca cc trng.

V d sau to mt bng c tn l Employees, c hai trng kiu TEXT


vi rng l 25:

CREATE TABLE Employees ([First Name] TEXT(25), [Last Name]


TEXT(25));

Thm v xo ct:

Bn c th thm, sa i hoc xo cc ct vi cu lnh ALTER TABLE.


V d, cu lnh sau thm mt trng kiu TEXT c rng 25 v tn
l Notes vo bng Employees:

ALTER TABLE Employees ADD COLUMN Notes TEXT(25);

loi b mt ct, dng t kho DROP. V d ny loi b ct c tn l


Notes mi va c thm lc ny:

ALTER TABLE Employees DROP COLUMN Notes;


sa i mt trng, trc tin bn phi xo n, v sau l thm
trng mi vi tn nh c. V d sau tng rng ca trng Notes:

ALTER TABLE Employees DROP COLUMN Notes;


ALTER TABLE Employees ADD COLUMN Notes TEXT(30);
Ch : Dng ALTER TABLE, bn ch c th thm hoc xo mt trng
ti mi thi im.

2.To v xo ch mc:

C ba cch khc nhau to ch mc:

- Lc bt u to bng vi cu lnh CREATE TABLE


- Vi cu lnh CREATE INDEX.
- Vi cu lnh ALTER TABLE

Mc du c ba cch ny u cho kt qu tng t, nhng vn c


nhng khc im khc nhau. Nu bn mun thm mt kho ngoi
(foreign key) v p buc ton vn tham chiu (enfore referential
integrity), bn phi dng mt mnh rng buc (CONSTRAINT
clause) trong cc cu lnh CREATE TABLE hoc ALTER TABLE.

i khi ngi ta mun to mt bng ban u khng c ch mc,


v tip l thit k cc tham s ch mc sau khi dng mu
bng. Vi tnh hung ny, bn nn dng CREATE TABLE to
mu bng khng c ch mc, v sau thm cc ch mc vi
cu lnh CREATE INDEX hoc ALTER TABLE.
To mt ch mc vi cu lnh CREATE TABLE.

Khi bn to mt bng, bn c th to mt ch mc cho tng ct


ring r, hoc hai hoc nhiu hn cc ct, dng mnh SQL
CONSTRAINT (t kho CONSTRAINT bt u nh ngha mt ch
s). V d sau y minh ho cch to ra mt bng vi ba trng
c ch mc:

CREATE TABLE Employees ([First Name] TEXT(25), [Last Name]


TEXT(25), _ [Date of Birth] DATETIME, CONSTRAINT
EmployeesIndex UNIQUE _ ([First Name], [Last Name], [Date of
Birth]));

nh ch mc vi mt ct, bn t mnh CONSTRAINT


vo mt trong nhng m t ct. V d, nh ch mc trng
Date of Birth, bn dng cu lnh CREATE TABLE sau y:

CREATE TABLE Employees ([First Name] TEXT(25), [Last Name]


TEXT(25), _ [Date of Birth] DATETIME CONSTRAINT
EmployeesIndex PRIMARY);

S khc nhau gia nh ch mc cho nhiu trng v cho mt


trng l: cho mt trng n, t kho CONSTRAINT bt u
nh ngha ch mc khng b tch bit vi trng cui cng bi
du phy m i st ngay sau kiu d liu ca trng c nh
ch mc .
To ch mc vi cu lnh CREATE INDEX.

Bn cng c th dng mnh CREATE INDEX thm mt ch


mc. V d sau y a ra cng mt kt qu vi v d trc,
ngoi tr vic dng CREATE TABLE thay th cho ALTER TABLE.

CREATE UNIQUE INDEX MyIndex ON Employees ([Date of


Birth]);

Trong mnh tu chn WITH, bn c th p buc d liu vi


rng buc PRIMARY, c ngha y l trng ch mc chnh;
DISALLOW NUL, ngha l trng ny khng b b trng; IGNORE
NULL, c ngha bn ghi s khng c nh ch mc nu
trng trng.

V d sau thm mnh WITH vo v d trc, cho khng


bn ghi no c th c thm vo bng m ct s bo him x
hi b b trng:

CREATE UNIQUE INDEX MyIndex ON Employees (SSN) _ WITH


DISALLOW NULL;

Ch : Khng dng t kho PRIMARY khi bn to ra mt ch


mc mi trong bng m bng tn ti kho chnh (Primary
key); Nu bn vi phm iu ny th h thng s bo li.

Bn ang dng CREATE INDEX to mt c t ch mc trn


mt bng m cha tn ti ch mc no. to mt ch mc nh
th; bn khng cn s cho php hoc truy cp ti mt my ch
xa, v CSDL xa khng nhn bit c hay khng h nh
hng bi ch mc . Bn dng cng mt c php cho bng
kt ni v bng gc. iu ny c hu dng khi to mt ch
mc trn mt bng thng l ch c (read only) bi v n thiu
mt ch mc.
To mt ch mc vi cu lnh ALTER TABLE
Bn cng c th thm mt ch mc cho mt bng tn ti
bng cch dng cu lnh ALTER TABLE, dng c php ADD
CONSTRAINT. V d sau thm mt ch mc cho trng SSN:

ALTER TABLE Employees ADD CONSTRAINT MyIndex _ PRIMARY


(SSN);

Bn cng c th thm ch mc cho nhiu trng v mt bng


bng cch dng cu lnh ALTER TABLE ging nh sau:

ALTER TABLE Employees ADD CONSTRAINT NameIndex _


UNIQUE ([Last Name], [First Name], SSN);

Mnh CONSTRAINT v ton vn tham chiu (Referential


Integrity).

Mt rng buc l mt ch mc. Bn dng mnh CONSTRAINT


to hoc xo cc ch mc vi cc cu lnh CREATE TABLE v
ALTER TABLE, nh ch ra phn trc.

Mnh CONSTRAINT cng cho php bn nh ngha kho


chnh v kho ngoi, 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 To v sa i CSDL (Creating and Modifying
Databases).

C hai loi mnh CONSTRAINT: Mt to ch mc cho tng


trng n v mt to ch mc cho nhiu hn mt trng.

C php ca ch mc trn mt trng l:

CONSTRAINT name {PRIMARY KEY | UNIQUE | REFERENCES


foreigntable [(foreginfield1, foreignfield2)]}

C php cho ch mc trn nhiu trng l:

CONSTRAINT name {PRIMARY KEY (primary1[,primary2[,...]]) |


UNIQUE (unique1[,unique2[,...]]) | FOREIGN KEY
(ref1[,ref2[,...]]) REFERENCES foreigntable
[(foreignfield1[,foreignfield2[,...]])};
Sau y l cc i s p dng cho hai loi trn:

name : Tn ca ch mc c to.
primary1, primary2 : Tn ca trng hay cc trng c ch
nh lm kho chnh.
unique1, unique2 : Tn ca trng hay cc trng c ch nh
lm kho khng lp.
ref1, ref2 : Tn ca trng hoc cc trng kho ngoi tham
chiu ti mt trng, mt s trng bng khc.
foreigntable Tn ca bng ngoi cha mt hoc mt s trng
c xc nh bi foreignfield.
foreignfield1, foreignfield2: Tn ca trng hoc mt s trng
trong bng ngoi c xc nh bi ref1, ref2.

Dng CONSTRAINT, bn c th gn cho mt trng nh mt


trong nhng loi ch mc sau:

- UNIQUE Ch nh trng mt trng c gi tr khng lp.


iu ny c ngha l hai bn ghi bt k trong bng khng c
cng gi tr trong trng ny. Bn c th rng buc bt k
trng no hoc mt danh sch cc trng l duy duy nht
(unique). Nu nhiu trng c ch nh l khng lp, b gi
tr kt hp ca cc trng phi l duy nht, du l hai hoc
mt s bn ghi c cng gi tr trong mt trng ca nhm cc
trng .

- PRIMARY KEY Ch nh mt hoc mt tp cc trng trong


bng to thnh kho chnh. Tt c gi tr trong kho chnh phi
duy nht, v c mt kho chnh duy nht cho mt bng. Nu
bn thit lp mt kho chnh cho mt bng tn ti kho
chnh th h thng s bo li.

- FOREIGN KEY Xc nh mt trng nh mt kho ngoi. Nu


kho chnh ca bng ngoi c nhiu hn mt trng, bn phi
dng mt nh ngha cho ch mc nhiu trng, lit k tt c
cc trng tham chiu, tn ca cc bng, tn ca bng ngoi,
v tn ca cc trng c tham chiu trong bng ngoi theo
cng mt th t nh lit k danh sch cc trng tham
chiu. Nu trng c tham chiu l kho chnh ca bng
ngoi, bn khng cn ch nh trng c tham chiu m Jet
engine ngm nh kho chnh ca bng ngoi l trng c
tham chiu.

V d, thm mt ch mc cho bng Titles trong CSDL


Biblio.mdb, bn c th dng cu lnh sau y:
ALTER TABLE Titles ADD CONSTRAINT MyIndex _ FOREIGN KEY
(PubID) REFERENCES Publishers (PubID);

Nh rng, bng cch dng t kho FOREIGN KEY, Chng ta


ang thit lp mt quan h gia trng PubID ca bng Titles
(kho ngoi) v trng PubID trong bng Publishers (kho
chnh). Mi quan h ny s c rng buc bi Jet engine, nh
th bn ang dng phng thc CreateRelation c m t
trong "To v sa i CSDL"
PHN NGN NG THAO TC TRN D LIU - DML

Phn ngn ng thao tc trn d liu (DML - Data Manipulation


Languague) c dng ly cc bn ghi trong cc bng, cp
nht, thm, xo cc bn ghi ca cc bng. C mt s cu lnh
h tr cc tc v ny, nhng phn ln l c cu trc ca cu
lnh SELECT.

Truy vn chn:

S dng cu lnh SELECT ly cc bn ghi t CSDL nh mt


tp hp cc bn ghi, lu tr chng trong mt i tng tp bn
ghi mi (Recordset object). ng dng ca bn c th thao tc
trn tp bn ghi ny nh hin th, thm, thay i v xo nu
cn thit. ng dng ca bn cng c th hin th, sinh cc bo
co t d liu .

SELECT thng l t u tin trong mt cu lnh SQL. Hu ht


cc cu lnh hoc l SELECT hoc l SELECT...INTO. Bn c th
dng mt cu lnh SELECT trong SQL l thuc tnh ca i
tng truy vn (QueryDef object), l thuc tnh RecordSource
ca mt iu khin d liu (data control), hoc mt i s cho
phng thc OpenRecordset. cu lnh SELECT khng thay i
d liu trong CSDL; chng ch ly d liu ra t CSDL.

Dng tng qut ca cu lnh SELECT l:

SELECT fieldlist
FROM tablenames IN databasename
WHETE searchconditions
GROUP BY fieldlist
HAVING group criteria
ORDER BY fieldlist
WITH OWNERACCESS OPTION
Mi phn trong cu lnh i din cho mt mnh c bn
n cc phn sau:

Truy vn n gin:
Dng n gin nht ca cu lnh SELECT l:
SELECT * FROM tablename;

V d, truy vn chn sau tr li tt c cc ct ca tt c cc bn


ghi trong bng Employees:
SELECT * FROM Employees;

Du sao cho bit rng tt c cc trng ca bng c chn.


Bn cng c th ch nh mt s trng nht nh. Khi hin th,
d liu trong mi ct s hin theo th t nh chng c
lit k, v vy bn c th thay i li th t cho d c:

SELECT [First Name], [Last Name] FROM Employees;

Ch nh ngun d liu c chn:

Mt cu lnh SELECT lun c mnh FROM, cho bit danh


sch cc bng ta cn ly cc bn ghi t .

Nu mt trng tn ti trong nhiu bng trong mnh FROM,


t trc chng tn trng v du chm. Trong v d sau,
trng Department c trong c hai bng Employees v
Supervisors. Cu lnh ch chn trng Department ca bng
Employees v SupvName t bng Supervisors:

SELECT Employees. Department, SupvName _ FROM


Employees, Supervisors _ WHERE Employees.Department =
Supervisors.Department;

Khi mnh FROM lit k nhiu hn mt bng, th t ca


chng khng quan trng.

Xc nh mt bng t mt CSDL bn ngoi.


i khi, bn 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, nh CSDL dBASE, Paradox hoc mt
Jet database bn ngoi. Bn c th lm iu ny bng mnh
tu chn IN. Mnh IN thng xut hin sau tn bng trong
mnh FROM, nhng cng c th c dng trong SELECT
INTO hoc INSERT INTO, khi ch l mt CSDL ngoi.

Ch : Bn ch c th IN kt ni mt CSDL ngoi ti mt thi


im.

Trong mt s trng hp, i s ng dn cp ti c th


mc cha CSDL. V d, khi lm vic vi dBASE, Foxpro, hoc
Paradox, tham s ng dn ch ra cc th mc cha cc file c
ui .DBF hoc .DB. Tn bng c bt ngun t ch hoc biu
thc bng.

xc nh khng phi l mt Jet database, thm du chm


phy v sau tn, v ng li bng du trch n hoc du
ngoc kp. V d:

dBASE IV;

Bn cng c th dng t kho DATABASE ch nh CSDL


ngoi. V d, c hai dng sau ch ra cng mt bng;

SELECT * FROM Table IN [dBASE IV; _


DATABASE=C:\DBASE\DATA\SALES;];

SELECT * FROM Table IN C:\DBASE\DATA\SALES _ dBASE IV;

Ch : nng hiu qu v d s dng, thng ngi ta dng


bng kt ni thay cho mnh IN.

bit thm thng tin v bng kt ni, xem cun Working


with Records and Fields v cun Accessing External Data.

Bit danh ca ct.

Khi i tng Recordset c to ra t cu lnh SELECT, tn


ct ca bng tr thnh tn trng ca i tng Recordset.
Nu bn mun tn khc i, dng mnh AS. V d sau dng
DOB l bit danh ca trng [Date of Birth] trong bng
Employees: SELECT [Date of Birth] AS DOB FROM Employees;

Bt c khi no bn dng truy vn tr li tn trng nhp nhng


hoc trng tn trng, bn phi dng mnh AS cung cp
tn khc nhau cho cc trng. V d sau dng b danh Head
Count gn kt qu m trong tp bn ghi:

SELECT COUNT(EmployeeID) AS [Head Count] FROM


Employees;

S dng bin Visual Basic trong cu lnh SQL


Trong mt chng trnh Visual Basic, bn c th to mt cu
lnh SELECT trong ng dng ca bn bng cch ghp cc bin
cc b vo trong mt cu lnh khi cn chn, sp xp, lc d
liu c yu cu bi ng dng ca bn. V d bn c mt iu
khin TextBox (TitleWanted) cha tn ca mt tiu v bn
mun ly tt c cc sch trong bng Titles c nhan nh
nhan trong hp TextBox, bn c th to mt cu lnh SQL
bao gm c gi tr hin thi ca hp TextBox. Nhng nh rng
SQL ng TitleWanted trong mt du trch n ():

Set Rst = Db.OpenRecordset(SELECT * FROM Titles _ &


WHERE Title = & TitleWanted.Text & )

1.Lc v sp xp kt qu ca truy vn:


SQL cung cp mt s t kha xc nhn v mnh tu chn
gip bn thun tin hn trong vic hn ch v sp xp kt qu.
Phn sau s tho lun v s tin dng ny.

Ch dn DISTINCT

b qua cc bn ghi trng nhau, dng t kho DISTINCT. Nu


c dng, gi tr trong trng hay mt nhm cc trng c
chn trong cu lnh SELECT s l duy nht. V d, C mt vi
nhn vin lit k trong bng Employees c cng h. Nu hai
bn ghi c cng ni dung trng Last Name l Smith th cu
lnh sau s tr li mt bn ghi c ni dung l Smith:

SELECT DISTINCT [Last Name] FROM Employees;

Nu b t kho DISTINCT th truy vn s tr li nhiu hn mt


gi tr Smith.

Kt qu tp hp bn ghi ca truy vn dng DISTINCT khng cho


php cp nht v khng phn nh c nhng thay i sau
ca ngi dng khc.

Ch dn TOP

tr li mt s bn ghi nht nh u hoc cui ca phm


vi cc bn ghi. Dng ch dn TOP. Gi s bn mun ly tn ca
25 sinh vin u ca lp tt nghip nm 1994:

SELECT TOP 25 [First Name], [Last Name] FROM Students _


WHERE [Graduation Year] = 1994 _ ORDER BY [Grade Point
Average] DESC;
Nu bn khng dng mnh ORDER BY, truy vn s tr li 25
bn ghi tu trong bng Students tho mn iu kin trong
mnh WHERE.

Bt c khi no bn dng truy vn tr li tn trng nhp nhng


hoc trng tn trng, bn phi dng mnh AS cung cp
tn khc nhau cho cc trng. V d sau dng b danh Head
Count gn kt qu m trong tp bn ghi:

SELECT COUNT(EmployeeID) AS [Head Count] FROM


Employees;

S dng bin Visual Basic trong cu lnh SQL

Trong mt chng trnh Visual Basic, bn c th to mt cu


lnh SELECT trong ng dng ca bn bng cch ghp cc bin
cc b vo trong mt cu lnh khi cn chn, sp xp, lc d
liu c yu cu bi ng dng ca bn. V d bn c mt iu
khin TextBox (TitleWanted) cha tn ca mt tiu v bn
mun ly tt c cc sch trong bng Titles c nhan nh
nhan trong hp TextBox, bn c th to mt cu lnh SQL
bao gm c gi tr hin thi ca hp TextBox. Nhng nh rng
SQL ng TitleWanted trong mt du trch n ():

Set Rst = Db.OpenRecordset(SELECT * FROM Titles _ &


WHERE Title = & TitleWanted.Text & )

1.Lc v sp xp kt qu ca truy vn:


SQL cung cp mt s t kha xc nhn v mnh tu chn
gip bn thun tin hn trong vic hn ch v sp xp kt qu.
Phn sau s tho lun v s tin dng ny.

Ch dn DISTINCT

b qua cc bn ghi trng nhau, dng t kho DISTINCT. Nu


c dng, gi tr trong trng hay mt nhm cc trng c
chn trong cu lnh SELECT s l duy nht. V d, C mt vi
nhn vin lit k trong bng Employees c cng h. Nu hai
bn ghi c cng ni dung trng Last Name l Smith th cu
lnh sau s tr li mt bn ghi c ni dung l Smith:

SELECT DISTINCT [Last Name] FROM Employees;

Nu b t kho DISTINCT th truy vn s tr li nhiu hn mt


gi tr Smith.
Kt qu tp hp bn ghi ca truy vn dng DISTINCT khng cho
php cp nht v khng phn nh c nhng thay i sau
ca ngi dng khc.

Ch dn TOP

tr li mt s bn ghi nht nh u hoc cui ca phm


vi cc bn ghi. Dng ch dn TOP. Gi s bn mun ly tn ca
25 sinh vin u ca lp tt nghip nm 1994:

SELECT TOP 25 [First Name], [Last Name] FROM Students _


WHERE [Graduation Year] = 1994 _ ORDER BY [Grade Point
Average] DESC;

Nu bn khng dng mnh ORDER BY, truy vn s tr li 25


bn ghi tu trong bng Students tho mn iu kin trong
mnh WHERE.

Ch dn TOP khng chn la gia nhng bn ghi bng nhau.


Trong v d, nu bn ghi th 25 v th 26 c cng hng th truy
vn s tr li 26 bn ghi.

Bn cng c th dng t kho PERCENT tr li mt s phn


trm bn ghi u hay cui tu thuc vo mnh ORDER BY.
Gi s rng thay v 25 sinh vin, bn mun 10 phn trm sinh
vin ca lp.

SELECT TOP 10 PERCENT [First Name], [Last Name] _ FROM


Students _ WHERE [Graduation Year] = 1994 _ ORDER BY
[Grade Point Average] DESC;

Mnh WHERE

Mnh WHERE xc nh nhng bn ghi t cc bng c lit


k trong mnh FROM

Microsoft Jet Database engine chn cc bn ghi tho mn iu


kin lit k trong mnh WHERE. Nu bn khng c mnh
WHERE, truy vn s tr li tt c cc dng t cc bng c
chn. Nu bn ch ra hn mt bng trong truy vn v khng c
mnh WHERE hoc mnh kt ni JOIN, truy vn ca bn
s tr li kt qu tch cc ca cc bng.

Ch : Mc d mnh WHERE c th m nhn tc v kt ni


cc bng, nhng bn phi dng mt mnh JOIN thc hin
cc thao tc kt ni nhiu bng vi nhau nu bn mun kt qu
ca truy vn c th cp nht c.

Mnh WHERE tng t nh HAVING. WHERE xc nh nhng


bn ghi c chn. Mt cch tng t, mt khi cc bn ghi
c nhm bi GROUP BY, HAVING s quyt nh nhng bn ghi
no c hin th.

Dng mnh WHERE loi b cc bn ghi bn khng mun


nhm bi GROUP BY.

Mt mnh WHERE c th c ti 40 biu thc c kt ni bi


cc ton t logic nh AND, OR.

Khi bn dng mt trng tn c cha du cch hoc du cu,


bn phi b tn trng trong du ngoc vung ([]):

SELECT [Product ID], [Units In Stock] _ FROM Products _ WHERE


[Units In Stock] <= [Reorder Level];

Khi bn xc nh i s iu kin, ngy phi nh dng theo


dng ca M, ngay c khi bn khng dng phin bn Jet
database ca M. V d, May 10, 1994, c vit l 10/5/94
theo kiu Anh v 5/10/94 theo kiu M. chc chn, cn t
ngy ca bn vo trong cp du thng (#), nh v d sau y:

tm cc bn ghi c ngy May 10, 1994 trong mt CSDL Anh,


bn phi dng cu lnh sau y:

SELECT * FROM Orders _ WHERE [Shipped Date] = #5/10/94#;

Bn c th dng hm DateValue, n nhn bit c mi nh


dng c thit lp bi Microsoft Windows. V d, m sau cho
chun ngy M:

SELECT * FROM Orders _ WHERE [Shipped Date] =


DateValue(5/10/94);
M sau dng cho Anh:
SELECT * FROM Orders _ WHERE [Shipped Date] =
DateValue(10/5/94);
Mnh GROUP BY:
GROUP BY l mnh tu chn cho php kt hp cc bn ghi
theo mt gi tr ging ht nhau ca mt trng trng xc
nh vo trong mt bn ghi duy nht. Gi tr tng hp c to
ra cho mi bn ghi nu trong cu lnh SQL c cha hm tng
hp (aggregate function), nh hm Sum, Count.v.v.
Cc bn ghi c gi tr rng trng nhm vn c nhm. Tuy
nhin, n khng c tng hp nu trng tng hp l rng.

Dng mnh WHERE loi b cc bn ghi bn khng mun


nhm, v dng mnh HAVING lc cc bn ghi sau khi
chng c nhm.

Tr khi d liu l kiu k c (Memo) hoc trng t ng


(Automation), mt trng trong danh sch nhm sau mnh
GROUP BY c th tham chiu ti bt k trng no c lit k
trong mnh FROM, thm ch nu trng khng c trong
mnh SELECT. Jet database engine khng th nhm trn cc
trng Memo hoc Automation.

Tt c cc trng c lit k sau SELECT phi hoc bao gm


trong danh sch trng nhm hoc ; mt hm nhm
(aggregate function).

Mnh HAVING

Xc nh nhng bn ghi c nhm no c hin th trong


mnh SELECT vi mt mnh GROUP BY. Mt khi mnh
GROUP BY kt hp cc bn ghi, HAVING hin th bt c bn ghi
no c nhm tho mn iu kin trong mnh HAVING.

HAVING tng t WHERE, n quyt nh nhng bn ghi no


c chn. Mt khi cc bn ghi c nhm bi GROUP BY,
HAVING xc nh bn ghi no c hin th.

HAVING l mt mnh tu chn. Mt mnh HAVING c th


c ti 40 biu thc c kt hp cc ton t logic nh AND v
OR.

Mnh ORDER BY

Mnh ORDER BY xc nh th t sp xp ca cc bn ghi


trong truy vn. Trong mnh ORDER BY, bn xc nh mt
trng hay cc trng c dng lm kho sp xp, v sau
xc nh cc bn ghi xut hin theo th t ln tng dn hay
gim dn. V d sau tr li tt c cc bn ghi trong bng
Employees c lit k h theo th t ABC :

SELECT * FROM Employees ORDER BY [Last Name] ASC;

Trong v d ny, ASC l tu chn - th t sp xp mc nh l


tng dn. Tuy nhin, bn c th thm t kho ASC v cui mi
trng bn mun sp theo th t tng dn.

sp theo th t gim dn, thm t kho DESC vo cui cc


trng bn mun sp theo th t gim dn.

Bn cng c th dng cng c th dng s th t ca trng


c chn trong mnh SELECT ch ra trng lm kho
sp xp:

SELECT [First Name], [Last Name] FROM Employees ORDER BY


2 ASC;

Bn cng c th sp xp theo nhiu trng. Cc bn ghi trc


ht c sp theo trng u tin trong danh sch cc trng
sp xp. Cc bn ghi c cng gi tr trn trng li tip tc
c sp xp trn trng tip theo trong danh sch v qu
trnh li c th lp li nu tn ti mt s bn ghi c cng gi tr
ti trng va ri.

V d sau chn trng lng v sp xp gim dn, tt c cc


nhn vin cng lng s c sp h tng dn theo th t ABC.

SELECT [Last Name], Salary FROM Employees _ ORDER BY


Salary DESC, [Last Name];

ORDER BY thng l thnh phn cui cng trong cu lnh SQL.


N l mnh tu chn (tr khi bn dng ch dn TOP hoc
TOP n PERCENT trong mnh SELECT).

Mnh WITH OWNERACCESS

Trong mi trng a ngi dng vi nhm lm vic c chia


quyn, dng WITH OWNERACCESS cui mi truy vn trao
cho ngi dng, ngi thi hnh truy vn cho php xem d liu
trong truy vn du rng ngi mt khc b hn ch xem cc
bng c bn ca CSDL.

V d sau cho php ngi dng tr li thng tin v lng, thm


ch nu ngi dng khng c php xem bng kt ton, l kt
qu ca mt truy vn do mt ngi khc c quyn thi hnh.

SELECT [Last Name], [First Name], Salary FROM Employees _


ORDER BY [Last Name] _ WITH OWNERACCESS OPTION;

Nu mt ngi dng mt khc b ngn khng c to hoc


thm vo mt bng, bn c th dng WITH OWNERACCESS
OPTION cho php ngi dng thi hnh mt cu lnh to
hoc ni bng.

Tu chn ny yu cu bn truy cp vo file h thng


System.mda c kt hp vi CSDL. N thc s hu dng ch
trong mi trng a ngi dng c chia quyn.

2.Dng mt truy vn to bng.

Mt s bin i trong cu lnh SELECT cho php bn to ra mt


bng mi, thay th cho mt i tng Recordset. lm iu
ny, bn thm mnh INTO. V d sau to ra mt bng mi
New Employees bi truy vn bng Employees:

SELECT * INTO [New Employees] FROM Employees;

Bn c th dng truy vn to bng ly cc bn ghi, to mt


bng d phng, hoc lm mt bn sao a sang mt CSDL
khc hoc dng lm c s cho cc bo co hin th d liu
trong mi nh k. V d, bn c th to ra bn bo co bn
hang tng thng bng cch thi hnh truy vn to bng ny mi
thng.

Bn c th mun xc nh mt kho chnh cho bng mi to.


Khi bn to bng , cc trng trong bng mi s tha k
kiu d liu va kch thc ca mi trng trong bng c s,
nhng cc c tnh khc ca cc trng hoc bng khng c
chuyn sang.

3 Dng truy vn xo.

To mt truy vn xo loi b cc bn ghi t mt hoc cc


bng c lit trong mnh FROM tho mn iu kin trong
mnh WHERE, nh c php di y:

DELETE [table *] FROM tableexpression WHERE criteria

DELETE c bit hu dng khi bn mun xo mt lc nhiu bn


ghi.

Trong mt cu lnh xo trn nhiu bng, bn phi bao gm i


table. Nu bn xc 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 cn nhanh hn l dng truy vn xo. Bn c
th dng mt phng thc thi hnh vi mt cu lnh DROP
TABLE xo bng ra khi CSDL. Tt nhin nu bn xo
bng th mt lun c cu trc. Ngc li, khi dng truy vn xo
th ch phn d liu b xo; Cu trc bng v cc thuc tnh ca
cc trng vn cn nguyn vn.

Bn c th dng DELETE xo bn ghi trong mt bng hoc


bng lin kt bn n ca mt quan h 1 - n. Thao tc xo theo
tng trong truy vn ch xo bng bn n ca quan h . V d,
trong quan h gia bng Customers v bng Orders, bng
Orders l pha n, nn thao tc xo ch nh hng n bng
Orders.

Mt truy vn xo xo ton b bn ghi, khng xo chn lc theo


cc trng. Nu bn mun xo d liu trong mt trng c th
no , dng truy vn cp nht (UPDATE) thit lp d liu
trng l rng (NULL).

Mt khi bn loi b cc bn ghi bng cch dng truy vn


xo, bn khng th khi phc li thao tc ca mnh. Nu bn
mun bit nhng bn ghi c xo, trc ht, kim tra kt
qu ca truy vn chn c cng iu kin (vi truy vn xo) v
sau tin hnh truy vn xo.

Bt c lc no bn cng nn sao lu d liu phng khi bn xo


nhm cc bn ghi.

4.Dng truy vn b sung.

Bn c th dng mnh INSERT INTO thm cc bn ghi


vo bng hay to mt truy vn b sung.

Bn c th dng nhng c php sau y thc hin truy vn


b sung nhiu bn ghi:

INSERT INTO target [IN externaldatabase] SELECT


[source.]field1[, field2[, ...] FROM tableexpression

Ngc li, dng c php sau thc hin truy vn b sung mt


bn ghi:

INSERT INTO target [(field1[, field2[,...]])] VALUES (value1[,


value2[, ...])

Bn c th dng mnh INSERT INTO thm mt bn ghi


n vo mt bng dng c php truy vn b sung bn ghi n.
Trong trng hp ny, Cu lnh phi xc nh tn v gi tr cho
mi trng ca bn ghi. Bn phi xc nh cc trng ca bn
ghi m d liu se c gn vo cng nh gi tr ca trng .
Khi bn khng ch r danh sch trng, gi tr mc nh hoc
NULL s in vo cc trng vng mt. Cc bn ghi c thm
vo cui bng.

Bn cng c th dng INSERT INTO ni mt tp hp cc bn


ghi t mt bng khc hoc mt truy vn dng mnh
SELECT ... FROM c ch ra c php trn. Trong trng hp
ny, mnh SELECT ch r trng ni thm vo bng ch.

Bng ngun hoc bng ch c th l mt bng hay mt truy


vn. Nu mt truy vn c xc nh, Microsoft Jet database
engine ni mt tp hp bn ghi vo mt hoc nhiu bng c
ch ra trong truy vn.

INSERT INTO l mt tu chn, nhng khi c mt n, phi ng


trc SELECT.

Nu bng ch cha kho chnh, phi chc chn rng bn b


sung nhng bn ghi vi ni dung kho l duy nht, v trng
khng c trng.

Nu bn b sung cc bn ghi vo mt bng vi trng Couter,


loi b trng ra khi danh sch nu bn mun Microsoft Jet
nh s li cc bn ghi. Thm trng Counter vo truy vn nu
bn mun gi li gi tr ban u. Nu c gi tr trng, tt nhin
l Jet database s khng b sung bn ghi .

Dng mnh IN ni cc bn ghi vo mt bng ca mt


CSDL khc.

to mt bng mi, dng mnh SELECT ... INTO thay th


to mt truy vn to bng.

tm ra cc bn ghi s c b sung, trc khi thi hnh truy


vn b sung, hy xem qua kt qu ca truy vn chn vi cng
biu thc iu kin.

Mt truy vn b sung khng nh hng ti cc bng hoc truy


vn ngun.

5.Truy vn cp nht:

Truy vn UPDATE thay i gi tr trong cc trng c tho


mn cc iu kin cp nht.

UPDATE table SET newvalue WHERE criteria;

UPDATE c bit hu dng khi bn mun thay i ni dung


nhiu bn ghi hoc khi cc bn ghi bn mun thay i nm trn
nhiu bng. Thng thng bn dng truy vn ny vi mt
phng thc thi hnh.

Bn c th thay i mt vi trng cng lc. V d sau tng


Order Amount ln 10% v gi tr Freight ln 3%:

UPDATE Orders _ SET [Order Amount] = [Order Amount] * 1.1, _


Freight = Freight * 1.03 _ WHERE [Ship Country] = UK;

UPDATE khng to ra tp kt qu. Nu bn mun xem nhng


bn ghi no c cp nht, trc tin xem kt qu ca truy vn
chn (dng cng biu thc iu kin) v sau thi hnh truy
vn cp nht.
Truy vn Crosstab:
Truy vn Crosstab cho php bn chn cc gi tr t cc trng
hay cc biu thc nh l cc tiu ct, v th, bn c th xem
d liu mt cch c ng hn vi mt cu lnh SELECT bnh
thng. Bn dng mnh TRANSFORM to cc truy vn
Crosstab.

TRANSFORM aggfunction selectstatement PIVOT pivotfield [IN


(value1[,value2[,...]])]

Mnh TRANSFORM dng nhng tham s sau: aggfunction


Mt hm tng hp trn d liu c chn.

selectstatement : Mt cu lnh SELECT


pivofield : Trng hoc biu thc bn mun dng to tiu
ct trong kt qu ca truy vn.
value1, value2: Cc gi tr c nh c dng to tiu
ct.
Khi bn tng hp d liu vi cng c l truy vn Crosstab, bn
chn cc gi tr cc trng hay biu thc c th nh l cc tiu
v th bn c th xem d liu trong mt dnh c ng hn.

TRANSFORM ng trc mnh SELECT xc nh cc tiu


dng v ng trc mt mnh GROUP BY xc nh cc dng
c th c nhm. Tt nhin, bn c th tu chn cc mnh
khc, nh WHERE, nhng mnh xc nh thm cc tiu
chun chn hay sp xp.
Cc gi tr tr li trong pivotfield c dng nh l tiu 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 to ra 12
ct. Bn c th hn ch pivotfield to cc tiu ct t cc
ga tr c nh (gi tr 1, gi tr 2) c lit k trong mnh
tu chn IN.

V d sau to ra mt truy vn Crosstab trnh by kt qu bn


hng theo thng trong mt nm ca mt ngi no . Cc
thng c tr li l cc ct t tri sang phi, v tn sn phm
c lit k t trn xung di nh cc hng.

PARAMETERS [ Sales for which year ? ] LONG; TRANSFORM _


Sum([Order Details].Quanlity * ([Order Details].[Unit Price] _ -
([Order Details].Discount / 100) * [Order Details].[Unit Price]))
AS Sales _ SELECT [Product Name] FROM Orders INNER _ JOIN
(Products INNER JOIN [Order Details] ON Products.[Product ID]
= _ [Order Details].[Product ID]) ON Orders.[Order ID] = _
[Order Details].[Order ID] WHERE DatePart _ (yyyy, [Order
Date]) = [ Sales for which year ? ] _ GROUP BY [Product Name]
ORDER BY [Product Name] _ PIVOT DatePart(m, [Order
Date]);

Kt ni:

Mt trong nhng c tnh hu ch nht ca CSDL quan h l


kh nng ni hai hay nhiu bng vi nhau to nn mt bng
mi (hay mt Recordset) cha ng thng tin t cc bng c.

Cc bng c ni theo cc mi quan h gia chng, thng


thng nht l gia kho chnh ca mt bng v kho ngoi
tng ng ca bng kia. Tu thuc vo cch thc ni cc bng
vi nhau m bn c th to ra cc loi lin kt sau:

INNER JOIN Cc bn ghi ca c hai bng c cha trong lin


kt ch khi mt trng c th trong bng khp vi mt trng
c th trong bng th hai.

LEFT OUTER JOIN Tt c cc bn ghi t bng mt c cha


trong lin kt, cng vi cc bn ghi trong bng hai m cc
trng c th khp vi cc trng tng ng trong bng mt.

RIGHT OUTER JOIN Tt c cc bn ghi t bng th hai c a


vo lin kt cng vi cc bn ghi t bng mt m c cc trng
khp vi cc trng trong bng hai.
Inner joins:

to ra mt truy vn ch cha cc bn ghi c d liu trong


trng lin kt ging nhau, hy dng php lin kt INNER JOIN.

INNER JOIN kt hp cc bn ghi ca hai bng khi c cc gi tr


khp nhau trong trng lin kt. Dng c php sau:

FROM table1 INNER JOIN table2 ON table1.field = table2.field2

Bn c th dng INNER JOIN trong bt c mnh FROM no.


N to ra mt lin kt tng ng (Equi-joins) , nh mt lin
kt INNER JOIN. Equi-joins l mt dng kt ni ph bin. Chng
kt hp cc bn ghi t hai bng khi c d liu trong hai trng
kt ni khp nhau.

Bn c th dng INNER JOIN vi cc bng Department v


Employees chn tt c cc nhn vin trong mi phng.
Ngc li, chn tt c cc phng (thm ch nu mt s
phng khng c nhn vin no), bn c th dng LEFT JOIN
hoc RIGHT JOIN.

Bn c th lin kt bt c hai trng kiu s no, thm ch nu


chng khc kiu. V d bn c th kt ni mt trng s, vi
thuc tnh kch thc c thit lp l s nguyn, v mt
trng Couter. V d sau cho chng ta bit kt ni hai bng
Categories v Products trn trng CategoryID nh th no:

SELECT [Category Name], [Product Name] _ FROM Categories


INNER JOIN Products _ ON Categories.[Category ID] = Products.
[Category ID];

V d sau to ra hai lin kt tng ng (equi-joins): mt gia


hai bng Order Details v Orders v mt gia hai bng Orders
v Employees. iu ny l cn thit bi bng Employees khng
cha thng tin v bn hng, v Order Details khng cha thng
tin v nhn vin. Truy vn a ra mt danh sch cc nhn vin
v tng s v hng h bn c:

Dim MyQRY AS QueryDef MyQRY.SQL = SELECT DISTINCTROW


Sum([Unit Price].[Quantity]) _ AS [Sales], [First Name] & &
_ [Last Name] AS Name FROM Employees _ INNER JOIN (Order
INNER JOIN [Order Details] _ ON Order.[Order ID] = [Order
Details].[Order ID]) _ ON Employees.[Employee ID] = Orders.
[Employee ID] _ GROUP BY [First Name] & & [Last Name];
Cu lnh ny phi c s dng nh l thuc tnh ca i
tng QueryDef hoc l tham s ca phng thc
OpenRecordset.

V d trn dng ch dn DISTINCTROW loi b d liu trn c


s cc bn ghi hon ton trng nhau. V d, bn c th to mt
truy vn lin kt cc bng Customers vi bng Orders vi
trng lin kt l trng Customer ID. Bng Customers khng
cha cc bn ghi c cng ni dung trng Customer ID, nhng
trong bng Orders th c bi mt khch hng c th c nhiu
hp ng t mua hng. Cu lnh SQL sau ch ra cch bn
dng ch dn DISTINCTROW a ra mt danh sch cc cng
ty c t nht mt hp ng t mua hng nhng khng c th
v cc hp ng .

SELECT DISTINCTROW [Company Name] _ FROM Customers


INNER JOIN Order _ ON Customers.[Customer ID = Orders.
[Customer ID] _ ORDER BY [Company Name];

Nu bn b st ch dn DISTINCTROW th kt qu s tr li cc
tn cng ty trng nhau v c nhiu bn hp ng t mua
hng.

DISTINCTROW ch c hiu qu khi bn chn cc trng t mt


s bng c lin kt trong truy vn. DISTINCTROW c b
qua khi bn 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 c dng trong bt k mnh FROM no vi c
php sau:

FROM table1 [ LEFT | RIGHT ] JOIN table2 ON table1.field1 =


table2.field2

Dng LEFT JOIN to mt lin kt ngoi bn tri. Lin kt


ngoi bn tri gm tt c cc bn ghi t bng th nht (bng
bn tri), tc l bao gm c cc bn ghi khng khp ni dung
trng lin kt vi bt c bn ghi no ca bng th hai (bng
bn phi).

Dng RIGHT JOIN to lin 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 l bao gm c cc bn ghi khng khp ni
dung trng lin kt vi bt c bn ghi no ca bng cn li
(bng bn tri).

V d, bn c th dng LEFT JOIN cho bng Departments (tri)


v bng Employees (phi) ly ra tt c cc phng ban, trong
c c cc phng khng c nhn vin no. ly 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 bn c th lin kt bng


Categories v bng Products d trn trng Category ID. Truy
vn s a ra danh sch tt c tn cc hng mc, trong c
nhng hng 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 y, Category ID l mt trng lin kt, nhng


khng c mt trong kt qu ca truy vn v n khng c
chn trong mnh SELECT.

Lin kt lng nhau (Nested joins):

Bn c th lng cc ch dn JOIN nh c php sau y:

SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN


[(]table3 _ [INNER JOIN [(] tablex [INNER JOIN ... )] _ ON
table3.field3 = tablex.fieldx)] _ ON table2.field2 =
table3.field3) _ ON table1.field1 = table2.field2;

Truy vn hp (Union Queries): Bn c th dng cc thao tc ni


to cc truy vn hp, kt hp kt qu ca hai hay nhiu
bng hoc truy vn c lp. query1 UNION [ALL] query2
[UNION [ALL] queryn [...]]

query i din cho biu thc xc nh trng cha d liu kiu


s m bn mun tnh trung bnh hoc mt biu thc thc hin
mt php tnh c dng d liu trong trng . Ton hng
trong biu thc c th tn ca cc trng, c th l mt hng,
mt hm (c th l c sn ca h thng hoc do ngi dng
nh ngha nhng khng c l hm tng hp(aggregate
functions)).

Bn c th kt hp kt qu ca mt truy vn v mt cu lnh
SQL trong mt php hp UNION n. V d sau kt hp kt qu
ca mt truy vn c tn gi New Accounts v mt cu lnh
SELECT: TABLE [New Accounts] UNION ALL _ SELECT * FROM
Customers WHERE [Order Amount] > 1000;

Mc nh, khng c hai bn ghi no trng nhau trong kt qu


ca mt truy vn hp; tuy nhin, bn c th bao gm c ch
dn ALL kt qu c c cc bn ghi trng nhau. N cng lm
cho truy vn thi hnh nhanh hn.

Tt c cc truy vn trong phep hp UNION yu cu c cng s


trng, tuy nhin cc trng khng cn thit phi c cng kch
thc hoc kiu d liu.

Bn c th dng mnh GROUP BY v/hoc HAVING trong mi


truy vn tham gia php hp nhm d liu. Bn c th dng
mt mnh ORDER BY cui truy vn cui cng kt qu
tr v c sp theo mt th t xc nh.

7.Ti u truy vn:


Ti u CSDL l mt ch ln v bao hm nhiu vn . Nhiu
yu t, bao gm c cu hnh phn cng v phn mm, ci t
Windows, b m, khng lin quan n cc truy vn, nhng
chng nh hng n hiu qu ca CSDL.
Mt yu t quan trng khc l dng cc bng gn vi CSDL hn
l kt ni trc tip vi CSDL t xa. Vn ny c bn k
trong cun Accessing External Data.
Phn ny s trnh by ngn gn mt s cch ti u lin quan
c bit ti s xy dng cc truy vn, v tn dng kh nng ti
u Jet database xy dng cc truy vn.
Mt s chin lc ti u thng dng:

- Hn ch dng cc trng sp xp, c bit l cc trng


khng c to ch mc.
- m bo cc bng kt ni t cc ngun khc nhau u c
to ch mc hoc l c lin kt trn cc kho chnh.
- Nu d liu khng thay i thng xuyn, dng cc truy vn
to bng t truy vn Dynasets ca bn. Dng cc bng lm
c s cho cc form, cc bo co hn l dng cc truy vn.
- Nu bn ang to mt truy vn Crosstab, hy dng tiu
ct c nh bt c khi no c th.
- Dng BETWEEN...AND, IN v cc du = trn cc ct c
nh ch mc.
- Khi to mt truy vn, khng nn thm cc trng khng cn
thit.

Ti u cc truy vn vi cng ngh Rushmore:


Rushmore l mt cng ngh truy cp d liu c dng trong
Jet database engine cho php mt tp hp cc bn ghi c
truy cp mt cch ht sc hiu qu. Vi Rushmore, khi bn
dng mt kiu biu thc nht nh trong iu kin truy vn,
truy vn ca bn s thi hnh nhanh hn rt nhiu.
Biu thc ti u dng n gin:

Jet database engine c th ti u ho cc biu thc n gin


trong mnh WHERE trong cu lnh SELECT. Dng biu thc
n gin c th thnh lp nn ton b hoc mt phn phn ca
biu thc.
Mt biu thc n gin c th ti u ho c mt trong nhng
dng sau:

indexedfield comparisonoperator expression - or -expression


comparisonoperator indexedfield Trong dng biu thc n
gin nht c th ti u:

- indexedfield phi l mt trng m trn c to lp ch


mc.
- comparisonoperator phi l mt trong nhng kiu sau y: <,
>, =, >=, <=, <>, BETWEEN, LIKE, hoc IN.
- expression l mt biu thc hp l bt k, bao gm cc hng,
cc hm, cc trng t cc bng.

Ch : kt qu l tt nht, gi tr so snh trong biu thc


dng LIKE phi bt u bng mt k t ch khng c l k t
i din (*, ?). Bn c th ti u LIKE m* ch khng th ti
u LIKE *m*.

Biu thc c th ti u dng phc hp.


Microsoft Jet dng Rushmore ti u ho cc biu thc phc
hp c kt hp t cc biu thc (c th ti u) n gin vi
cc ton t AND hoc OR. Mt biu thc nh th nm trong cc
dng sau:

- simpleexpression AND simpleexpression


- simpleexpression OR simpleexpression
Ghi nh nhng iu sau y khi dng biu thc ti u ho
Rushmore:
- Hm COUNT(*) c ti u mc cao cho cc truy vn dng
Rushmore.
- Nu ch mc l gim dn v ton t so snh khc du bng,
truy vn khng th ti u c.
- Rushmore s lm vic vi Microsoft Access tables, cng nh
vi Microsoft FoxPro

You might also like