You are on page 1of 141

Chng 5

SQL

Ni dung chi tit


Gii thiu
nh ngha d liu
Truy vn d liu
Cp nht d liu
Khung nhn (view)
Ch mc (index)

C s d liu

Gii thiu
Ngn ng SQH
- Cch thc truy vn d liu
- Kh khn cho ngi s dng

SQL (Structured Query Language)


-

Ngn ng cp cao
Ngi s dng ch cn a ra ni dung cn truy vn
c pht trin bi IBM (1970s)
c gi l SEQUEL
c ANSI cng nhn v pht trin thnh chun

C s d liu

SQL-86
SQL-92
SQL-99
3

Gii thiu (tt)


SQL gm
-

nh ngha d liu (DDL)


Thao tc d liu (DML)
nh ngha khung nhn
Rng buc ton vn
Phn quyn v bo mt
iu khin giao tc

L thuyt : Chun SQL92


V d : SQL
Server

SQL s dng thut ng


- Bng ~ quan h
- Ct ~ thuc tnh
- Dng ~ b

C s d liu

Ni dung chi tit


Gii thiu
nh ngha d liu
- Kiu d liu
- Cc lnh nh ngha d liu

Truy vn d liu
Cp nht d liu
Khung nhn (view)
Ch mc (index)

C s d liu

nh ngha d liu
L ngn ng m t
-

Lc cho mi quan h
Min gi tr tng ng ca tng thuc tnh
Rng buc ton vn
Ch mc trn mi quan h

Gm
-

CREATE TABLE (to bng)


DROP TABLE (xa bng)
ALTER TABLE (sa bng)
CREATE DOMAIN (to min gi tr)
CREATE DATABASE

C s d liu

Kiu d liu
S (numeric)
-

INTEGER
SMALLINT
NUMERIC, NUMERIC(p), NUMERIC(p,s)
DECIMAL, DECIMAL(p), DECIMAL(p,s)
REAL
DOUBLE PRECISION
FLOAT, FLOAT(p)

C s d liu

Kiu d liu (tt)


Chui k t (character string)
- CHARACTER, CHARACTER(n)
- CHARACTER VARYING(x)

Chui bit (bit string)


- BIT, BIT(x)
- BIT VARYING(x)

Ngy gi (datetime)
- DATE gm ngy, thng v nm
- TIME gm gi, pht v giy
- TIMESTAMP gm ngy v gi
C s d liu

Lnh to bng
nh ngha mt bng
- Tn bng
- Cc thuc tnh

Tn thuc tnh
Kiu d liu
Cc RBTV trn thuc tnh

C php
CREATE TABLE <Tn_bng> (
<Tn_ct> <Kiu_d_liu> [<RBTV>],
<Tn_ct> <Kiu_d_liu> [<RBTV>],

[<RBTV>]
)

C s d liu

V d - To bng
CREATE TABLE KHACHHANG (
MAKH CHAR(4),
HOTEN VARCHAR(40),
DCHI VARCHAR(50),
SODT VARCHAR(20),
NGSINH SMALLDATETIME,
DOANHSO MONEY,
NGDK SMALLDATETIME
)

C s d liu

10

Lnh to bng (tt)


<RBTV>
-

NOT NULL
NULL
UNIQUE
DEFAULT
PRIMARY KEY
FOREIGN KEY / REFERENCES
CHECK

t tn cho RBTV
CONSTRAINT <Ten_RBTV> <RBTV>
C s d liu

11

V d - RBTV
CREATE TABLE KHACHHANG (
MAKH CHAR(4) PRIMARY KEY,
HOTEN VARCHAR(40) NOT NULL,
DCHI VARCHAR(50),
SODT VARCHAR(20) NOT NULL,
NGSINH SMALLDATETIME CHECK (NGSINH > 01-011900),
DOANHSO MONEY DEFAULT (10000),
NGDK SMALLDATETIME
)

C s d liu

12

V d - RBTV
CREATE TABLE NHANVIEN (
MANV CHAR(4) PRIMARY KEY,
HOTEN VARCHAR(40) NOT NULL,
SODT VARCHAR(20) UNIQUE,
NGVL SMALLDATETIME DEFAULT (GETDATE())
)
CREATE TABLE HOADON (
SOHD INT PRIMARY KEY,
NGHD SMALLDATETIME,
MAKH CHAR(4) REFERENCES
KHACHHANG(MAKH),
MANV CHAR(4) FOREIGN KEY (MANV)
REFERENCES NHANVIEN(MANV),
TRIGIA MONEY
)
C s d liu

13

V d - t tn cho RBTV
CREATE TABLE KHACHHANG (
MAKH CHAR(4) CONSTRAINT KH_MAKH_PK PRIMARY KEY,
HOTEN VARCHAR(40) CONSTRAINT KH_HOTEN_NN NOT NULL,
DCHI VARCHAR(50),
SODT VARCHAR(20) NOT NULL,
NGSINH SMALLDATETIME CONSTRAINT KH_NGSINH_CK
CHECK (NGSINH > 01-01-1900),
DOANHSO MONEY CONSTRAINT KH_DOANHSO_DF DEFAULT
(10000),
NGDK SMALLDATETIME
)

C s d liu

14

V d - t tn cho RBTV
CREATE TABLE CTHD (
SOHD INT,
MASP CHAR(4),
SL INT,
CONSTRAINT CTHD_SOHD_MASP_PK PRIMARY KEY (SOHD,
MASP),
CONSTRAINT CTHD_SOHD_FK FOREIGN KEY (SOHD)
REFERENCES HOADON(SOHD),
CONSTRAINT CTHD_MASP_FK FOREIGN KEY (MASP)
REFERENCES SANPHAM(MASP)
)

C s d liu

15

Lnh sa bng
c dng
- Thay i cu trc bng
- Thay i RBTV

Thm ct

Xa ct

M rng ct
C s d liu

ALTER TABLE <Tn_bng> ADD COLUMN


<Tn_ct> <Kiu_d_liu> [<RBTV>]

ALTER TABLE <Tn_bng> DROP COLUMN


<Tn_ct>
ALTER TABLE <Tn_bng> ALTER
COLUMN
<Tn_ct> <Kiu_d_liu_mi>
16

Lnh sa bng (tt)


Thm RBTV
ALTER TABLE <Tn_bng> ADD
CONSTRAINT <Ten_RBTV> <RBTV>,
CONSTRAINT <Ten_RBTV> <RBTV>,

Xa
RBTV
ALTER
TABLE <Tn_bng> DROP
<Tn_RBTV>

C s d liu

17

V d - Thay i cu trc bng


ALTER TABLE SANPHAM ADD
GHICHU VARCHAR(20)

ALTER TABLE SANPHAM DROP COLUMN GHICHU

ALTER TABLE SANPHAM ALTER COLUMN


GHICHU VARCHAR(50)

C s d liu

18

V d - Thay i RBTV
CREATE TABLE HOADON (
SOHD INT,
NGHD SMALLDATETIME,
MAKH CHAR(4),
MANV CHAR(4),
TRIGIA MONEY
)
ALTER TABLE HOADON ADD
CONSTRAINT HD_SOHD_PK PRIMARY KEY (SOHD),
CONSTRAINT HD_MAKH_FK FOREIGN KEY (MAKH)
REFERENCES KHACHHANG(MAKH),
CONSTRAINT HD_MANV_FK FOREIGN KEY (MANV)
REFERENCES NHANVIEN(MANV),
CONSTRAINT HD_NGHD_DF DEFAULT (GETDATE()) FOR (NGHD)
C s d liu

19

Lnh xa bng
c dng xa cu trc bng
- Tt c d liu ca bng cng b xa

C php
DROP TABLE
<Tn_bng>

V d
DROP TABLE
KHACHHANG
DROP TABLE HOADON
DROP TABLE SANPHAM

C s d liu

20

Lnh xa bng (tt)

GIAOVIEN
HOTE
N

HOCV
I

HOCHA
M

MAG
V

GIOITIN
H

TRGKHO
A

NGTLAP

NGSIN
H

NGV
L

HES
O

MUCLUON
G

KHOA
TENKHOA

C s d liu

MAKHOA

21

MAKHO
A

Lnh to min gi tr
To ra mt kiu d liu mi k tha nhng kiu d
liu c sn
C php
CREATE DOMAIN <Tn_kdl_mi> AS
<Kiu_d_liu>

V d
CREATE DOMAIN Kieu_Ten AS
VARCHAR(30)

C s d liu

22

Ni dung chi tit


Gii thiu
nh ngha d liu
Truy vn d liu
-

Truy vn c bn
Tp hp, so snh tp hp v truy vn lng
Hm kt hp v gom nhm
Mt s kiu truy vn khc

Cp nht d liu
Khung nhn (view)
Ch mc (index)

C s d liu

23

Truy vn d liu
L ngn ng rt trch d liu tha mt s iu kin
no
Da trn
Php ton
SQH

Mt s b
sung

- Cho php 1 bng c nhiu dng trng nhau


- Bng l bag quan h l set

C s d liu

24

Truy vn c bn
Gm 3 mnh
SELECT <danh sch cc
ct>
FROM <danh sch cc
bng>
WHERE <iu kin>

- <danh sch cc ct>

Tn cc ct cn c hin th trong kt qu truy vn

- <danh sch cc bng>

Tn cc bng lin quan n cu truy vn

- <iu kin>

C s d liu

Biu thc boolean xc nh dng no s c rt trch


Ni cc biu thc: AND, OR, v NOT
Php ton: , , , , , , LIKE v BETWEEN
25

Truy vn c bn (tt)
SQL v SQH

SELECT <danh sch cc


ct>

FROM <danh sch cc


bng>

WHERE <iu kin>


SELECT L

FROM
L ( RC (R))
WHERE C

C s d liu

26

V d
Ly tt c cc ct
ca quan h kt
qu

SELECT *
FROM KHACHHANG

WHERE DOANHSO>1000000

MAKH

HOTEN

DCHI

SODT

KH01

Nguyen Van A

731 Tran Hung Dao, Q5, TpHCM

KH03

Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM 0938776266

C s d liu

DOANHSO>1000000

08823451

NGSINH

DOANHSO

NGDK

22/10/1960 13,060,000 22/07/2006


12/6/1980

(KHACHHANG)
27

3,860,000 05/08/2006

Mnh SELECT
SELECT MAKH, HOTEN, DCHI
FROM KHACHHANG
WHERE DOANHSO>1000000 AND
YEAR(NGDK)=2006
MAKH

DCHI

KH01

Nguyen Van A

731 Tran Hung Dao, Q5, TpHCM

KH03

Tran Ngoc Linh

45 Nguyen Canh Chan, Q1, TpHCM

MAKH, HOTEN, DCHI

C s d liu

HOTEN

DOANHSO>1000000 YEAR(NGDK)=2006

(KHACHHANG))
28

Mnh SELECT (tt)


Tn b danh

SELECT MANV, HOTEN AS TEN, NGVL AS NGAY VAO LAM


FROM NHANVIEN
WHERE NGVL > 01/06/2006

MANV
NV04
NV05

TEN
Ngo Thanh Tuan
Nguyen Thi Truc Thanh

NGAY VAO LAM


24/6/2006
20/7/2006

MANV,TEN,NGAY VAO LAM(

MANV,HOTEN,NGVL

(NHANVIEN)))

01/06/2006
C s d liu

29

NGVL >

Mnh SELECT (tt)


M
rng

SELECT MASP, TENSP + + NUOCSX AS TEN SAN PHAM


FROM SANPHAM
WHERE GIA >= 55000
MASP
BB03
ST02
ST04

MASP,TEN SAN PHAM

C s d liu

TEN SAN PHAM


But bi Thai Lan
So tay loai 1 Viet Nam
So tay Thai Lan

MASP,TENSP+NUOCSX

GIA >= 55000

(SANPHAM)))

30

Mnh SELECT (tt)


M
rng

SELECT MASP, GIA*1.1 AS GIA10%


FROM GIA
WHERE GIA >= 55000
MASP
BB03
ST02
ST04

MASP,GIA10%

C s d liu

GIA10%
110.000
60.500
60.500

MASP,GIA*1.1

(SANPHAM)))

GIA >= 55000

31

Mnh SELECT (tt)


Loi b cc dng trng
nhau

SELECT DISTINCT
GIA
GIA
FROM SANPHAM
WHERE GIA > 50000

GIA
100000
55000
55000
53000
53000

C s d liu

- Tn chi ph
- Ngi dng mun
thy

32

V d
Cho bit MANV v HOTEN lp nhng ha n trn
3.500.000

NHANVIEN
MANV=MANV HOADON
KQ MANV, HOTEN (TRIGIA > 3500000(R1))
R1

SELECT
NHANVIEN.MANV, HOTEN
FROMNHANVIEN, HOADON
WHERE TRIGIA > 3500000AND NHANVIEN.MANV=HOADON.MA
NV

C s d liu

33

Mnh WHERE

SELECT NHANVIEN.MANV, HOTEN


FROM NHANVIEN, HOADON

Biu thc lun


l

WHERE TRIGIA > 3500000 AND


NHANVIEN.MANV=HOADON.MANV
TRUE

C s d liu

TRUE

34

Mnh WHERE (tt)


u tin

SELECT NHANVIEN.MANV, TENNV


FROM NHANVIEN, HOADON
WHERE (GIA>3500000 OR GIA<1000000)
AND NHANVIEN.MANV=HOADON.MANV

C s d liu

35

Mnh WHERE (tt)


BETWEEN

SELECT MASP, TENSP


FROM SANPHAM
WHERE GIA>20000 AND GIA<30000

SELECT MASP, TENSP


FROM SANPHAM
WHERE GIA BETWEEN 20000 AND 30000

C s d liu

36

Mnh WHERE (tt)


NOT BETWEEN

SELECT MASP, TENSP


FROM SANPHAM
WHERE GIA NOT BETWEEN 20000 AND 30000

C s d liu

37

Mnh WHERE (tt)


LIKE

SELECT MAKH, HOTEN


FROM KHACHHANG
WHERE DCHI LIKE Nguyen _ _ _ _

SELECT MAKH, HOTEN

K t bt k

FROM KHACHHANG
WHERE DCHI LIKE Nguyen %

Chui bt k
C s d liu

38

Mnh WHERE (tt)


NOT LIKE

SELECT MASP, TENSP


FROM SANPHAM
WHERE DVT LIKE CAY

SELECT MASP, TENSP


FROM SANPHAM
WHERE DVT NOT LIKE CAY

C s d liu

39

Mnh WHERE (tt)


ESCAPE

SELECT MAKH, HOTEN


FROM KHACHHANG
WHERE DCHI LIKE % Nguyens_% ESCAPE
s

Nguyen_

C s d liu

40

Mnh WHERE (tt)


Ngy gi

SELECT MANV, TENNV


FROM NHANVIEN
WHERE NGVL BETWEEN 2006-12-08 AND 2014-07-19

2006-12-08

YYYY-MM-DD

17:30:00

12/08/2006

MM/DD/YYYY

05:30 PM

HH:MI:SS

December 8, 2006
2006-12-08 17:30:00
C s d liu

41

Mnh WHERE (tt)


NULL

- S dng trong trng hp

Khng bit (value unknown)


Khng th p dng (value inapplicable)
Khng tn ti (value withheld)

- Nhng biu thc tnh ton c lin quan n gi tr NULL


s cho ra kt qu l NULL

x c gi tr l NULL
x + 3 cho ra kt qu l NULL
x + 3 l mt biu thc khng hp l trong SQL

- Nhng biu thc so snh c lin quan n gi tr NULL


s cho ra kt qu l UNKNOWN

C s d liu

x = 3 cho ra kt qu l UNKNOWN
x = 3 l mt so snh khng hp l trong SQL
42

Mnh WHERE (tt)


NULL

SELECT MANV, HOTEN


FROM NHANVIEN
WHERE SODT IS NULL

SELECT MANV, HOTEN


FROM NHANVIEN
WHERE SODT IS NOT NULL

C s d liu

43

Mnh FROM
Khng s dng mnh
WHERE

SELECT MANV, SOHD


FROM NHANVIEN, HOADON
WHERE TRUE
MANV
3334455
55
3334455
55
3334455
55
9879879
87
9879879
87
9879879
87

C s d liu

SOHD
1
4
5
1
4
5

44

Mnh FROM (tt)


Tn b
danh

SELECT SOHD, HOTEN


FROM HOADON
HOADON,AS
NHANVIEN
HD, NHANVIEN AS NV
WHERE HD.MANV=NV.MANV
MANV=MANV

SELECT NV.MANV,
MANV, HOTEN,
HOTEN,
SOHD
SOHD
FROM NHANVIEN,
NHANVIEN NV,
HOADON
HOADON HD
WHERE NV.MANV=HD.MANV
MANV=MANV

C s d liu

45

V d 1
Vi nhng chi tit ha n mua trn 50 sn phm,
cho bit s ha n, tr gi ha n, m nhn vin
lp ha n, h tn cng vi ngy sinh v a ch
ca ngi y

C s d liu

46

V d 2
Tm ha n ca khch hng Nguyen Van A do
nhn vin c m s NV03 lp v mua hn 3 loi
sn phm khc nhau.

C s d liu

47

V d 3
In ra tr gi ca tng ha n v h tn ngi lp
ha n .

C s d liu

48

V d 4
Tm tt c cc ha n ca khch hng Nguyen
Van A

C s d liu

49

Mnh ORDER BY
Dng hin th kt qu cu truy vn theo mt th
t no
C php
SELECT <danh sch cc ct>
FROM <danh sch cc bng>
WHERE <iu kin>
ORDER BY <danh sch cc
ct>

- ASC: tng (mc nh)


- DESC: gim

C s d liu

50

Mnh ORDER BY (tt)


V d
SELECT NGDK, DOANHSO
FROM KHACHHANG
ORDER BY NGDK DESC,
DOANHSO
NGDK
11/07/201
2
11/07/201
2
23/12/201
3
23/12/201
3
10/09/201
4
10/09/201
4
10/09/201
4

C s d liu

DOANHS
O
1.000.00
0
3.350.00
0
2.490.00
0
3.210.00
0
100.00
0
2.040.00
0
5.300.00
0

51

Ni dung chi tit


Gii thiu
nh ngha d liu
Truy vn d liu
-

Truy vn c bn
Tp hp, so snh tp hp v truy vn lng
Hm kt hp v gom nhm
Mt s dng truy vn khc

Cp nht d liu
Khung nhn (view)
Ch mc (index)

C s d liu

52

Php ton tp hp trong SQL


SQL c ci t cc php ton
- Hi (UNION)
- Giao (INTERSECT)
- Tr (EXCEPT)

Kt qu tr v l tp hp
- Loi b cc b trng nhau
- gi li cc b trng nhau

C s d liu

UNION ALL
INTERSECT ALL
EXCEPT ALL

53

Php ton tp hp trong SQL (tt)


C php

SELECT <ds ct> FROM <ds bng> WHERE <iu


kin>
UNION [ALL]
SELECT <ds ct> FROM <ds bng> WHERE <iu
kin>
SELECT <ds ct> FROM <ds bng> WHERE <iu
kin>
INTERSECT [ALL]
SELECT <ds ct> FROM <ds bng> WHERE <iu
kin>
SELECT <ds ct> FROM <ds bng> WHERE <iu
kin>
EXCEPT [ALL]
SELECT <ds ct> FROM <ds bng> WHERE <iu
kin>

C s d liu

54

V d 5
Cho bit cc s ha n c
- Nhn vin lp ha n c h l Nguyen hoc,
- Khch hng mua hng c h l Nguyen
SELECT SOHD
FROM HOADON HD, NHANVIEN NV
WHERE HD.MANV=NV.MANV AND HOTEN LIKE
Nguyen %
UNION
SELECT SOHD
FROM HOADON HD, KHACHHANG KH
WHERE HD.MAKH=KH.MAKH AND HOTEN LIKE
Nguyen %
C s d liu

55

V d 6
Tm ha n c ngy ha n bng vi ngy vo
lm ca nhn vin lp n
SELECT MANV, NGHD FROM HOADON
INTERSECT
SELECT MANV, NGVL FROM NHANVIEN

SELECT HD.*
FROM HODON HD, NHANVIEN NV
WHERE HD.MANV = NV.MANV AND NGHD =
NGVL

C s d liu

56

V d 7
Tm nhng nhn vin khng lp ha n no
SELECT MANV FROM NHANVIEN
EXCEPT
SELECT MANV FROM HOADON

C s d liu

57

Truy vn lng
SELECT NV.MANV, HOTEN
FROM NHANVIEN NV, HOADON HD
WHERE HOTEN LIKE Nguyen % AND NV.MANV =
HD.MANV

Cu truy vn
cha (Outer
query)

SELECT <danh sch cc ct>


FROM <danh sch cc bng>
WHERE <so snh tp hp> (
SELECT <danh sch cc ct>
Cu truy vn
con
(Subquery)

FROM <danh sch cc bng>


WHERE <iu kin>)

C s d liu

58

Truy vn lng (tt)


Cc cu lnh SELECT c th lng nhau nhiu mc
Cc cu truy vn con trong cng mt mnh
WHERE c kt hp bng php ni logic
Cu truy vn con thng tr v mt tp cc gi tr
Mnh WHERE ca cu truy vn cha
- <biu thc> <so snh tp hp> <truy vn con>
- So snh tp hp thng i cng vi mt s ton t

IN, NOT IN
ALL
ANY hoc SOME

- Kim tra s tn ti

C s d liu

EXISTS
NOT EXISTS
59

Truy vn lng (tt)


C 2 loi truy vn lng
- Lng phn cp

Mnh WHERE ca truy vn con khng tham chiu n


thuc tnh ca cc quan h trong mnh FROM truy vn
cha
Khi thc hin, cu truy vn con s c thc hin trc

- Lng tng quan

C s d liu

Mnh WHERE ca truy vn con tham chiu t nht mt


thuc tnh ca cc quan h trong mnh FROM truy vn
cha
Khi thc hin, cu truy vn con s c thc hin nhiu ln,
mi ln tng ng vi mt b ca truy vn cha

60

V d - Lng phn cp
SELECT MANV, HOTEN
FROM NHANVIEN NV, HOADON HD
WHERE MAKH=KH01 AND
HD.MANV=NV.MANV
SELECT MANV, HOTEN
FROM NHANVIEN
WHERE MANV
( IN(NV01, NV02,
NV03)
SELECT MANV
FROM HOADON
WHERE MAKH=KH01 )

C s d liu

61

V d 5
SELECT DISTINCT SOHD
SELECT
SOHD
FROM HOADON
FROM
WHERENHANVIEN
MANV IN (NV, HOADON HD
WHERE SELECT
NV.MANV=HD.MANV
AND
MANV
NV.HOTEN=Nguyen%
FROM NHANVIEN
UNION
WHERE HOTEN=Nguyen% )
SELECT SOHD
OR MAKH IN (
FROM KHACHHANG KH, HOADON HD
SELECT MAKH
WHERE KH.MAKH=HD.MAKH AND
FROM KHACHHANG
KH.HOTEN=Nguyen%
WHERE HOTEN=Nguyen% )

C s d liu

62

V d 7
Tm nhng nhn vin khng lp ha n no
SELECT *
FROM NHANVIEN
WHERE MANV NOT IN (
SELECT MANV
FROM HOADON)

SELECT *
FROM NHANVIEN
WHERE MANV <> ALL (
SELECT MANV
FROM HOADON)
C s d liu

63

V d 8
Tm nhng ha n c tr gi ln hn tr gi ca t
nht mt ha n do nhn vin c m NV01 lp
SELECT *
FROM HOADON
WHERE TRIGIA > ANY (
SELECT TRIGIA
FROM HOADON
WHERE MANV=NV01)
SELECT HD1.*
FROM HOADON HD1, HOADON HD2
WHERE HD1.TRIGIA > HD2.TRIGIA AND
HD2.MANV=NV01
C s d liu

64

V d 9
Tm nhng ha n c tr gi ln hn tr gi ca tt
c ha n do nhn vin c m NV01 lp
SELECT *
FROM HOADON
WHERE TRIGIA > ALL (
SELECT TRIGIA
FROM HOADON
WHERE MANV=NV01)

C s d liu

65

V d 10
Tm nhng sn phm c trong ti thiu mt ha n

SELECT *
FROM SANPHAM
WHERE MASP IN (SELECT MASP FROM CTHD)

C s d liu

66

V d - Lng tng quan


SELECT NV.MANV, HOTEN
FROM NHANVIEN NV, HOADON HD
WHERE MAKH=KH01 AND
HD.MANV=NV.MANV

SELECT MANV, HOTEN


FROM NHANVIEN NV
WHERE EXISTS (
SELECT *
FROM HOADON HD
WHERE MAKH=KH01 AND HD.MANV=NV.MANV)

C s d liu

67

V d 6
Tm ha n ca khch hng c ngy ng k trng
vi ngy ha n v doanh s khch hng bng vi
tr gi ha n
SELECT *
FROM HOADON HD
WHERE EXISTS (
SELECT *
FROM KHACHHANG KH
WHERE KH.MAKH=HD.MAKH
AND KH.NGDK=HD.NGHD
AND KH.DOANHSO=HD.TRIGIA)

C s d liu

68

V d 7
Tm nhng nhn vin khng lp ha n no
SELECT *
FROM NHANVIEN NV
WHERE NOT EXISTS (
SELECT *
FROM HOADON HD
WHERE HD.MANV=NV.MANV)

C s d liu

69

V d 8
Tm nhng ha n c tr gi ln hn tr gi ca t
nht mt ha n do NV01 lp
SELECT *
FROM HOADON HD1
WHERE EXISTS (
SELECT *
FROM HOADON HD2
WHERE MANV=NV01
AND HD1.TRIGIA>HD2.TRIGIA)

C s d liu

70

V d 10
Tm nhng ha n mua ti thiu mt sn phm do
Viet Nam sn xut
SELECT *
FROM HOADON HD
WHERE EXISTS (
SELECT *
FROM CTHD CT
WHERE HD.SOHD=CT.SOHD
AND EXISTS (
SELECT *
FROM SANPHAM SP
WHERE CT.MASP=SP.MASP AND NUOCSX=Viet Nam))
C s d liu

71

Nhn xt IN v EXISTS
IN
- <tn ct> IN <cu truy vn con>
- Thuc tnh mnh SELECT ca truy vn con phi c
cng kiu d liu vi thuc tnh mnh WHERE ca
truy vn cha

EXISTS
- Khng cn c thuc tnh, hng s hay biu thc no
khc ng trc
- Khng nht thit lit k tn thuc tnh mnh
SELECT ca truy vn con
- Nhng cu truy vn c = ANY hay IN u c th chuyn
thnh cu truy vn c EXISTS
C s d liu

72

Php chia trong SQL


R

bi

RS

ai

RS l tp cc gi tr ai trong R sao cho khng c


gi tr bi no trong S lm cho b (ai, bi) khng tn ti
trong R
C s d liu

73

Php chia trong SQL (tt)


S dng NOT EXISTS biu din
SELECT R1.A, R1.B, R1.C
FROM R R1
WHERE NOT EXISTS (
SELECT *
FROM S
WHERE NOT EXISTS (
SELECT *
FROM R R2
WHERE R2.D=S.D AND R2.E=S.E
AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C ))

C s d liu

74

V d 11
Tm tr gi ha n mua tt c cc sn phm
- Tm tr gi cc ha n m khng c sn phm no l
khng mua
- Tp b chia: CTHD(MASP, SOHD)
- Tp chia: SANPHAM(MASP)
- Tp kt qu: KQ(SOHD)
- Kt KQ vi HOADON ly ra TRIGIA

C s d liu

75

V d 11 (tt)
SELECT HD.TRIGIA
FROM HOADON HD
WHERE NOT EXISTS (
SELECT *
FROM SANPHAM SP
WHERE NOT EXISTS (
SELECT *
FROM CTHD CT
WHERE CTHD.MASP=SP.MASP
AND CTHD.SOHD=HD.SOHD))

C s d liu

76

Ni dung chi tit


Gii thiu
nh ngha d liu
Truy vn d liu
-

Truy vn c bn
Tp hp, so snh tp hp v truy vn lng
Hm kt hp v gom nhm
Mt s dng truy vn khc

Cp nht d liu
Khung nhn (view)
Ch mc (index)

C s d liu

77

Hm kt hp
COUNT
- COUNT(*) m s dng
- COUNT(<tn thuc tnh>) m s gi tr khc NULL ca
thuc tnh
- COUNT(DISTINCT <tn thuc tnh>) m s gi tr khc
nhau v khc NULL ca thuc tnh

MIN
MAX
SUM
AVG
Cc hm kt hp c t mnh SELECT
C s d liu

78

V d 12
Tm tng tr gi, tr gi cao nht, tr gi thp nht v
tr gi trung bnh ca cc ha n
SELECT SUM(TRIGIA), MAX(TRIGIA), MIN(TRIGIA),
AVG(TRIGIA)
FROM HOADON

C s d liu

79

V d 13
Cho bit s lng ha n ca nhn vin Nguyen
Van B
SELECT COUNT(*) AS SL_HD
FROM HOADON HD, NHANVIEN NV
WHERE HD.MANV=NV.MANV
AND HOTEN=Nguyen Van B

C s d liu

80

V d 14
Cho bit s lng sn phm ca tng nc.
NUOCSX

SL_SP

Singapore

Viet Nam

Trung Quoc

MASP

C s d liu

TENSP

DVT

NUOCSX

GIA

BC01

But chi

cay

Singapore

3,000

BC02

But chi

cay

Singapore

5,000

BC03

But chi

cay

Viet Nam

3,500

BC04

But chi

hop

Viet Nam

30,000

BB01

But bi

cay

Viet Nam

5,000

BB02

But bi

cay

Trung Quoc

7,000

81

Gom nhm
C php
SELECT <danh sch cc ct>
FROM <danh sch cc bng>
WHERE <iu kin>
GROUP BY <danh sch cc ct gom
nhm>

Sau khi gom nhm


- Mi nhm cc b s c cng gi tr ti cc thuc tnh
gom nhm

C s d liu

82

V d 14
Cho bit s lng ha n lp ca tng nhn
vin
SELECT MANV, COUNT(*) AS SL_HD
FROM HOADON
GROUP BY MANV

SELECT HOTEN, COUNT(*) AS SL_HD


FROM HOADON HD, NHANVIEN NV
WHERE HD.MANV=NV.MANV
GROUP BY HOTEN

C s d liu

83

V d 15
Vi mi nhn vin cho bit m s, h tn, s lng
ha n v tng tr gi ha n m h lp
MANV

SOHD

TRIGIA

SELECT
COUNT(*)
AS SL_HD,
1004
NV01MANV,
180,000
SUM(TRIGIA)
AS TONG_TG
1010
NV01
5,200,000
FROM
HOADON
1002
NV02

840,000

1005
NV02BY MANV
GROUP

3,800,000

1014

3,150,000

NV02

1006 HOTEN,
NV03HD.MANV,
2,430,000
SELECT
COUNT(*) AS SL_HD,
1009
NV04SUM(TRIGIA)
AS200,000
TONG_TG
1020HD, NHANVIEN
NV04
70,000 NV
FROM
HOADON
NV05

1021

230,000

NV05

1003

1,050,000

NV06

1031

420,000

NV06

1011

150,000

WHERE HD.MANV=NV.MANV

GROUP BY HD.MANV, HOTEN

C s d liu

84

V d 16
Cho bit nhng nhn vin lp t 2 ha n tr ln

C s d liu

MANV

SOHD

NV01

1004

180,000

NV01

1010

5,200,000

NV02

1002

840,000

NV02

1005

3,800,000

NV02

1014

3,150,000

NV03

1006

2,430,000

NV04

1009

200,000

NV04

1020

70,000

NV05

1021

230,000

NV05

1003

1,050,000

NV06

1031

420,000

NV06

1011

150,000

TRIGIA

b loi ra

85

iu kin trn nhm


C php
SELECT <danh sch cc ct>
FROM <danh sch cc bng>
WHERE <iu kin>
GROUP BY <danh sch cc ct gom
nhm>
HAVING <iu kin trn nhm>

C s d liu

86

V d 16
Cho bit nhng nhn vin lp t 2 ha n tr ln

SELECT MANV
FROM HOADON
GROUP BY MANV
HAVING COUNT(*) >= 2

C s d liu

87

V d 17
Cho bit nhng nhn vin (HOTEN) c tr gi ha
n lp trung bnh ln ln 1.000.000
SELECT MANV, AVG(TRIGIA) AS
TRIGIA_TB
FROM HOADON
GROUP BY MANV
HAVING AVG(TRIGIA) > 1000000
SELECT HOTEN, AVG(TRIGIA) AS TRIGIA_TB
FROM HOADON HD, NHANVIEN NV
WHERE HD.MANV=NV.MANV
GROUP BY HOTEN
HAVING AVG(TRIGIA) > 1000000
C s d liu

88

Nhn xt
Mnh GROUP BY
- Cc thuc tnh trong mnh SELECT (tr nhng thuc
tnh trong cc hm kt hp) phi xut hin trong mnh
GROUP BY

Mnh HAVING
- S dng cc hm kt hp trong mnh SELECT
kim tra mt s iu kin no
- Ch kim tra iu kin trn nhm, khng l iu kin lc
trn tng b
- Sau khi gom nhm iu kin trn nhm mi c thc
hin

C s d liu

89

Nhn xt (tt)
Th t thc hin cu truy vn c mnh GROUP
BY v HAVING
- (1) Chn ra nhng dng tha iu kin trong mnh
WHERE
- (2) Nhng dng ny s c gom thnh nhiu nhm
tng ng vi mnh GROUP BY
- (3) p dng cc hm kt hp cho mi nhm
- (4) B qua nhng nhm khng tha iu kin trong
mnh HAVING
- (5) Rt trch cc gi tr ca cc ct v hm kt hp trong
mnh SELECT

C s d liu

90

V d 18
Tm nhng nhn vin c tr gi ha n lp trung
bnh cao nht
SELECT MANV, AVG(TRIGIA) AS
TRIGIA_TB
FROM HOADON
GROUP BY MANV
HAVING AVG(TRIGIA)
MAX(AVG(TRIGIA))
>= ALL (
SELECT AVG(TRIGIA)
FROM HOADON
GROUP BY MANV)

C s d liu

91

V d 19
Tm 3 ha n c tr gi cao nht
SELECT SOHD
FROM HOADON HD1
WHERE 2 >= (
SELECT COUNT(*)
FROM HOADON HD2
WHERE HD2.TRIGIA>HD1.TRIGIA )

C s d liu

92

V d 12
Tm tn nhn vin lp tt c cc ha n

SELECT NV.MANV, HOTEN


FROM NHANVIEN NV, HOADON HD
WHERE NV.MANV=HD.MANV
GROUP BY NV.MANV, HOTEN
HAVING COUNT(*) = (
SELECT COUNT(*)
FROM HOADON )

C s d liu

93

Ni dung chi tit


Gii thiu
nh ngha d liu
Truy vn d liu
-

Truy vn c bn
Tp hp, so snh tp hp v truy vn lng
Hm kt hp v gom nhm
Mt s dng truy vn khc

Cp nht d liu
Khung nhn (view)
Ch mc (index)

C s d liu

94

Mt s dng truy vn khc


Truy vn con mnh FROM
iu kin kt mnh FROM
- Php kt t nhin
- Php kt ngoI

Cu trc CASE

C s d liu

95

Truy vn con mnh FROM


Kt qu tr v ca mt cu truy vn ph l mt bng
- Bng trung gian trong qu trnh truy vn
- Khng c lu tr tht s

C php
SELECT <danh sch cc ct>
FROM R1, R2, (<truy vn con>) AS
tn_bng
WHERE <iu kin>

C s d liu

96

V d 18
Cho bit nhng khch hng (HOTEN) c tr gi
trung bnh ca cc ha n ln hn 500.000
SELECT MAKH, AVG(TRIGIA) AS
TRIGIA_TB
SELECT HOTEN, TEMP.TRIGIA_TB
FROM HOADON
FROM KHACHHANG KH, (SELECT MAKH, AVG(TRIGIA) AS
GROUP BY MAKH
TRIGIA_TB
HAVING AVG(TRIGIA)
> 500000
FROM HOADON
GROUP
BY MAKH
SELECT MAKH,
HOTEN,
AVG(TRIGIA) AS
TRIGIA_TBHAVING AVG(TRIGIA)> 500000 ) AS TEMP
FROM
HOADON HD, KHACHHANG KH
WHERE
KH.MAKH=TEMP.MAKH
WHERE HD.MAKH=KH.MAKH
GROUP BY MAKH, HOTEN
HAVING AVG(TRIGIA) > 500000
C s d liu

97

iu kin kt mnh FROM


Kt bng
SELECT <danh sch cc ct>
FROM R1 [INNER] JOIN R2 ON <biu
thc>
WHERE <iu kin>

Kt ngoi
SELECT <danh sch cc ct>
FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON <biu
thc>
WHERE <iu kin>

C s d liu

98

V d 20
Tm m v tn cc nhn vin lp ha n cho
khch hng KH01
SELECT MANV, HOTEN
FROM NHANVIEN NV, HOADON HD
WHERE MAKH=KH01 AND
NV.MANV=HD.MANV
SELECT MANV, HOTEN
FROM NHANVIEN NV INNER JOIN HOADON HD ON
NV.MANV=HD.MANV
WHERE MAKH=KH01

C s d liu

99

V d 21
Cho bit s ha n v h tn khch hng nu c
SOHD

HOTEN

1020

Le Ha Vinh

1021

Ha Duy Lap

1022

Null

1023

Null

SELECT SOHD, HOTEN


FROM HOADON HD, KHACHHANG KH
WHERE HD.MAKH=KH.MAKH

C s d liu

100

V d 21 (tt)

M rng d liu cho


bng HOADON

SOHD

HOTEN

1020

Le Ha Vinh

1021

Ha Duy Lap

1022

Null

1023

Null

KHACHHAN
HOADON
join
join KHACHHAN
HOADO
G
G
N
MAKH=MAKH
MAKH=MAKH
SELECT SOHD, HOTEN
HOADON HD LEFT
JOIN KHACHHANG
FROM KHACHHANG
KH RIGHT
JOIN HOADONKH
HDON
ON
HD.MAKH=KH.MAKH
KH.MAKH=HD.MAKH
C s d liu

101

V d 22
Tm s ha n v tn cc khch hng m nhn
vin lp ha n nu c

HOADON join
NHANVIEN

join

KHACHHANG

MAKH=MAKH

SELECT HD.SOHD, KH.HOTEN


FROM (HOADON HD JOIN NHANVIEN NV ON
HD.MANV=NV.MANV) RIGHT JOIN KHACHHANG KH ON
HD.MAKH=KH.MAKH

C s d liu

102

Cu trc CASE
Cho php kim tra iu kin v xut thng tin theo
tng trng hp
C php
CASE <tn ct>
WHEN <gi tr> THEN <biu thc>
WHEN <gi tr> THEN <biu thc>

[ELSE <biu thc>]


END

C s d liu

103

V d 23
Cho bit m v tn ca sn phm c gi ln hn
50.000 nu nc sn xut l Viet Nam v ln hn
200.000 nu nc sn xut l Singapore
SELECT MASP, TENSP
FROM SANPHAM
WHERE GIA >= ( CASE NUOCSX
WHEN Viet Nam' THEN 50000
WHEN Singapore' THEN 200000
END )

C s d liu

104

V d 24
Cho bit m v gi sn phm sau khi tng vi t l
5% nu sn xut ti Viet Nam v 10% nu sn xut
ti Singapore
SELECT MASP,
(CASE NUOCSX
WHEN Viet Nam THEN GIA*1.05
WHEN Singapore THEN GIA*1.1
END ) AS GIASAUKHITANG
FROM SANPHAM

C s d liu

105

Kt lun
SELECT <danh sch cc ct>
FROM <danh sch cc bng>
[WHERE <iu kin>]
[GROUP BY <cc thuc tnh gom
nhm>]
[HAVING <iu kin trn nhm>]
[ORDER BY <cc thuc tnh sp th
t>]

C s d liu

106

Ni dung chi tit


Gii thiu
nh ngha d liu
Truy vn d liu
Cp nht d liu
- Thm (insert)
- Xa (delete)
- Sa (update)

Khung nhn (view)


Ch mc (index)

C s d liu

107

Lnh INSERT
Dng thm 1 hay nhiu dng vo bng
thm d liu
- Tn quan h
- Danh sch cc thuc tnh cn thm d liu
- Danh sch cc gi tr tng ng

C s d liu

108

Lnh INSERT (tt)


C php (thm 1 dng)
INSERT INTO <tn bng>(<danh sch cc thuc
tnh>)
VALUES (<danh sch cc gi tr>)

C s d liu

109

V d
INSERT INTO NHANVIEN(MANV, HOTEN, DTHOAI)
VALUES (NV01, Nguyen Nhu Nhut, 0927345678)

INSERT INTO NHANVIEN(MANV, HOTEN, DTHOAI, NGVL)


VALUES (NV01, Nguyen Nhu Nhut, 0927345678, NULL)

INSERT INTO NHANVIEN


VALUES (NV01, Nguyen Nhu Nhut, 0927345678, 2006-0413)

C s d liu

110

Lnh INSERT (tt)


Nhn xt
- Th t cc gi tr phi trng vi th t cc ct
- C th thm gi tr NULL nhng thuc tnh khng l
kha chnh v NOT NULL
- Cu lnh INSERT s gp li nu vi phm RBTV

C s d liu

Kha chnh
Tham chiu
NOT NULL - cc thuc tnh c rng buc NOT NULL bt buc
phi c gi tr

111

Lnh INSERT (tt)


C php (thm nhiu dng)
INSERT INTO <tn bng>(<danh sch cc thuc
tnh>)
<cu truy vn con>

C s d liu

112

V d
CREATE TABLE THONGKE_NV (
HOTEN VARCHAR(40),
SL_HD INT,
TRIGIAHD_TC MONEY
)

INSERT INTO THONGKE_NV(HOTEN, SL_HD,


TRIGIAHD_TC)
SELECT HOTEN, COUNT(SOHD), SUM(TRIGIA)
FROM HOADON HD, NHANVIEN NV
WHERE HD.MANV=NV.MANV
GROUP BY HOTEN
C s d liu

113

Lnh DELETE
Dng xa cc dng ca bng
C php
DELETE FROM <tn
bng>
[WHERE <iu kin>]

C s d liu

114

V d
DELETE FROM NHANVIEN
WHERE HOTEN LIKE Tran%

DELETE FROM NHANVIEN


WHERE MANV=NV04

DELETE FROM NHANVIEN

C s d liu

115

V d 25
Xa i nhng nhn vin khng lp ha n
DELETE FROM NHANVIEN
WHERE MANV NOT IN (
SELECT MANV
FROM HOADON )

C s d liu

116

Lnh DELETE (tt)


Nhn xt
- S lng s dng b xa ph thuc vo iu kin
mnh WHERE
- Nu khng ch nh iu kin mnh WHERE, tt c
cc dng trong bng s b xa
- Lnh DELETE c th gy ra vi phm RB tham chiu

Khng cho xa
Xa lun nhng dng c gi tr ang tham chiu n
CASCADE

C s d liu

t NULL cho nhng gi tr tham chiu

117

Lnh DELETE (tt)


SOHD
1001
1002
1003
1004
1005
1006

NGHD
23/07/2006
12/08/2006
23/08/2006
01/09/2006
20/10/2006
16/10/2006
SOHD
1001
1001
1002
1002
1003
1004
1005
1006

C s d liu

MAKH
KH01
KH01
KH02
KH02
KH01
KH01
MASP
TV02
ST08
BC04
BB01
BB03
TV01
TV05
TV07

MANV
NV01
NV02
NV01
NV01
NV02
NV03

TRIGIA
320,000
840,000
100,000
180,000
3,800,000
2,430,000

SL
10
10
20
20
10
20
50
20
118

Lnh DELETE (tt)


MANV
NV01
NV02
NV03
NV04
NV05

C s d liu

HOTEN
Nguyen Nhu Nhut
Le Thi Phi Yen
Nguyen Van B
Ngo Thanh Tuan
Nguyen Thi Truc Thanh

DTHOAI
0927345678
0987567390
0997047382
0913758498
0918590387

NGVL
13/4/2006
21/4/2006
27/4/2006
24/6/2006
20/7/2006

SOHD
1001

NGHD
23/07/2006

MAKH MANV
KH01 NV01

TRIGIA
320,000

1002

12/08/2006

KH01

NV02

840,000

1006

16/10/2006

KH01

NULL
NV03

2,430,000

1007

28/10/2006

KH03

NULL
NV03

510,000

1008

28/10/2006

KH01

440,000

1009

28/10/2006

KH03

NULL
NV03
NV04

1020

14/01/2007

KH09

NV04

70,000

200,000

119

Lnh UPDATE
Dng thay i gi tr ca thuc tnh cho cc dng
ca bng
C php
UPDATE <tn bng>
SET <tn thuc tnh>=<gi tr
mi>,
<tn thuc tnh>=<gi tr
mi>,

[WHERE <iu kin>]

C s d liu

120

V d

UPDATE NHANVIEN
SET NGVL=08/12/2014
WHERE MANV=NV05

UPDATE SANPHAM
SET GIA=GIA*1.05

C s d liu

121

V d 26
Vi sn phm c m s ST10, hy thay i nc
sn xut thnh Viet Nam v gi bn l 15.000

UPDATE SANPHAM
SET NUOCSX=Viet Nam, GIA=15000
WHERE MASP=ST10

C s d liu

122

Lnh UPDATE
Nhn xt
- Nhng dng tha iu kin ti mnh WHERE s
c cp nht gi tr mi
- Nu khng ch nh iu kin mnh WHERE, tt c
cc dng trong bng s b cp nht
- Lnh UPDATE c th gy ra vi phm RB tham chiu

Khng cho sa
Sa lun nhng dng c gi tr ang tham chiu n
CASCADE

C s d liu

123

Ni dung chi tit


Gii thiu
nh ngha d liu
Truy vn d liu
Cp nht d liu
Khung nhn
- nh ngha
- Truy vn
- Cp nht

Ch mc

C s d liu

124

Khung nhn
Bng l mt quan h c t chc lu tr vt l
trong CSDL
Khung nhn cng l mt quan h
-

Khng c lu tr vt l (bng o)
Khng cha d liu
c nh ngha t nhng bng khc
C th truy vn hay cp nht thng qua khung nhn

C s d liu

125

Khung nhn (tt)


Ti sao phi s dng khung nhn?
-

Che du tnh phc tp ca d liu


n gin ha cc cu truy vn
Hin th d liu di dng tin dng nht
An ton d liu

C s d liu

126

nh ngha khung nhn


C php
CREATE VIEW <tn khung nhn>
AS
<cu truy vn>
DROP VIEW <tn khung nhn>

Bng o ny c
- Danh sch thuc tnh trng vi cc thuc tnh trong
mnh SELECT
- S dng ph thuc vo iu kin mnh WHERE
- D liu c ly t cc bng mnh FROM
C s d liu

127

V d
CREATE VIEW NV_2006 AS
SELECT MANV, HOTEN, NGVL
FROM NHANVIEN
WHERE YEAR(NGVL)=2006

CREATE VIEW TONGTG_SLHD_NV AS


SELECT NV.MANV, HOTEN, COUNT(*) AS SLHD,
SUM(TRIGIA) AS TONGTG
FROM NHANVIEN NV, HOADON HD
WHERE NV.MANV=HD.MANV
GROUP BY NV.MANV, HOTEN

C s d liu

128

Truy vn trn khung nhn


Tuy khng cha d liu nhng c th thc hin cc
cu truy vn trn khung nhn
SELECT MANV
FROM NV_2006
WHERE HOTEN = Nguyen Nhu
Nhut

NV_2006
(NHANVIEN))
MANV (

C s d liu

MANV,HOTEN,NGVL

YEAR(NGVL)=2006

HOTEN=Nguyen Nhu Nhut

(NV_2006))

129

Truy vn trn khung nhn (tt)


C th vit cu truy vn d liu t khung nhn v
bng
SELECT HOTEN, SOHD, NGHD
FROM NV_2006 NV, HOADON
HD
WHERE NV.MANV=HD.MANV

NV_2006

MANV,HOTEN

TMP NV_2006
HOADON

(NHANVIEN))

NV_2006.MANV=HOADON.MANV

HOTEN,SOHD,NGHD

C s d liu

YEAR(NGVL)=2006

(TMP)
130

Cp nht trn khung nhn


C th dng cc cu lnh INSERT, DELETE v
UPDATE cho cc khung nhn n gin
- Khung nhn c xy dng trn 1 bng v c kha
chnh ca bng

Khng th cp nht d liu nu


-

Khung nhn c dng t kha DISTINCT


Khung nhn c s dng cc hm kt hp
Khung nhn c mnh SELECT m rng
Khung nhn c xy dng t bng c RB trn ct
Khung nhn c xy dng t nhiu bng

C s d liu

131

Cp nht trn khung nhn (tt)


Sa li h tn nhn vin m NV03 vo lm nm
2006 l Phan Nhat Anh
UPDATE NV_2006
SET HOTEN=Phan Nhat Anh
WHERE MANV= NV03

C s d liu

132

Ni dung chi tit


Gii thiu
nh ngha d liu
Truy vn d liu
Cp nht d liu
Khung nhn (view)
Ch mc (index)

C s d liu

133

Ch mc
Ch mc trn thuc tnh A l mt cu trc d liu lm
cho vic tm kim mu tin c cha A hiu qu hn
SELECT *
FROM SANPHAM
WHERE GIA>50000 AND
DVT=Cay

Bng SANPHAM c 10.000 b


C 200 sn phm c gi ln hn
50.000

C s d liu

c 10.000
b
c 200 b

c 70 b

134

Ch mc (tt)
C php
CREATE INDEX <tn ch mc> ON <tn bng>(<tn
ct>)
DROP INDEX <tn ch mc>

V d
CREATE INDEX GIA_IND ON SANPHAM(GIA)
CREATE INDEX GIA_DVT_IND ON SANPHAM(GIA, DVT)

C s d liu

135

Ch mc (tt)
Nhn xt
- Tm kim nhanh trong trng hp so snh vi hng s
v php kt
- Lm chm i cc thao tc thm, xa v sa
- Tn chi ph

Lu tr ch mc
Truy xut a nhiu

Chn la ci t ch mc hp l???

C s d liu

136

V d
Xt quan h
- CTHD(SOHD, MASP, SL)

Gi s
- CTHD c lu tr trong 10 block

Chi ph c ton b d liu ca CTHD l 10

- Trung bnh mt ha n c 3 sn phm v mt sn


phm nm trong trong 3 chi tit ha n.

D liu c tri u trong 10 block


Chi ph tm mt sn phm hay mt ha n l 3

- Khi s dng ch mc

Chi ph c hay cp nht ch mc

- Thao tc thm cn 2 ln truy xut a


C s d liu

137

V d (tt)
Gi s c 3 thao tc c thc hin thng xuyn
- Q1
SELECT MASP, SL
FROM CTHD
WHERE SOHD=1011

- Q2

SELECT SOHD
FROM CTHD
WHERE MASP=BB01 AND SL=20

- Q3
C s d liu

INSERT INTO CTHD


VALUES ( 1024, TV03, 32)
138

V d (tt)
Bng so snh chi ph
Khng c
ch mc

Ch mc
trn SOHD

Q1

10

10

Ch mc
trn c 2
thuc tnh
4

Q2

10

10

Q3

2 + 8p1 +
8p2

4 + 6p2

4 + 6p1

6 - 2p1 2p2

Thao
tc

Ch ph
TB

Ch mc
trn MASP

Khong thi gian thc hin Q1 l p1


Khong thi gian thc hin Q2 l p2
Khong thi gian thc hin Q3 l 1 - p1 p2

C s d liu

139

Bi tp v nh
Bi tp
-

6.1.1 n 6.1.4 / 252 - 253


6.2.1 n 6.2.3 / 262 - 263
6.3.1 n 6.3.3 / 274 - 275
6.3.7 n 6.3.10 / 275 - 276
6.4.1, 6.4.2, 6.4.6, 6.4.7 / 284 - 285
6.5.1, 6.5.2 / 290 - 291
6.7.1 n 6.7.6 / 311 -312

C s d liu

140

C s d liu

141

You might also like