Professional Documents
Culture Documents
SQL
C s d liu
Gii thiu
Ngn ng SQH
- Cch thc truy vn d liu
- Kh khn cho ngi s dng
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
C s 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
-
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
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
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
Xa
RBTV
ALTER
TABLE <Tn_bng> DROP
<Tn_RBTV>
C s d liu
17
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
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
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
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>
- <iu kin>
C s d liu
Truy vn c bn (tt)
SQL v SQH
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
KH03
C s d liu
DOANHSO>1000000
08823451
NGSINH
DOANHSO
NGDK
(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
KH03
C s d liu
HOTEN
DOANHSO>1000000 YEAR(NGDK)=2006
(KHACHHANG))
28
MANV
NV04
NV05
TEN
Ngo Thanh Tuan
Nguyen Thi Truc Thanh
MANV,HOTEN,NGVL
(NHANVIEN)))
01/06/2006
C s d liu
29
NGVL >
C s d liu
MASP,TENSP+NUOCSX
(SANPHAM)))
30
MASP,GIA10%
C s d liu
GIA10%
110.000
60.500
60.500
MASP,GIA*1.1
(SANPHAM)))
31
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
C s d liu
TRUE
34
C s d liu
35
C s d liu
36
C s d liu
37
K t bt k
FROM KHACHHANG
WHERE DCHI LIKE Nguyen %
Chui bt k
C s d liu
38
C s d liu
39
Nguyen_
C s d liu
40
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
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
C s d liu
x = 3 cho ra kt qu l UNKNOWN
x = 3 l mt so snh khng hp l trong SQL
42
C s d liu
43
Mnh FROM
Khng s dng mnh
WHERE
C s d liu
SOHD
1
4
5
1
4
5
44
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>
C s d liu
50
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
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
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
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)
C s d liu
58
IN, NOT IN
ALL
ANY hoc SOME
- Kim tra s tn ti
C s d liu
EXISTS
NOT EXISTS
59
C s d liu
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
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
bi
RS
ai
73
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
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>
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
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
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
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
C s d liu
93
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
Cu trc CASE
C s d liu
95
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
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
C s d liu
100
V d 21 (tt)
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
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>
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
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
C s d liu
109
V d
INSERT INTO NHANVIEN(MANV, HOTEN, DTHOAI)
VALUES (NV01, Nguyen Nhu Nhut, 0927345678)
C s d liu
110
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
C s d liu
112
V d
CREATE TABLE THONGKE_NV (
HOTEN VARCHAR(40),
SL_HD INT,
TRIGIAHD_TC MONEY
)
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%
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
Khng cho xa
Xa lun nhng dng c gi tr ang tham chiu n
CASCADE
C s d liu
117
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
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>,
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
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
C s d liu
126
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
C s d liu
128
NV_2006
(NHANVIEN))
MANV (
C s d liu
MANV,HOTEN,NGVL
YEAR(NGVL)=2006
(NV_2006))
129
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
C s d liu
131
C s d liu
132
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
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
- Khi s dng ch mc
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
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
C s d liu
139
Bi tp v nh
Bi tp
-
C s d liu
140
C s d liu
141