Chương 2 NGÔN NGỮ THAO TÁC DỮ LIỆU

Màu nền
Font chữ
Font size
Chiều cao dòng

Đ

i

v

i

đ

a

s

n

g

ư

i

s

d

ng,SQL

đ

ư

cx

e

mnhưlàc

ô

n

g

c

h

ữuhiệu

đ

ểt

h

c

h

iệncácyêu

c

ầutruyvấnvàthaotáctrêndữliệu.T

r

ongc

h

ươngn

à

y,ta

s

ẽbànl

u

n

đ

ếnnhómcáccâu

l

ệnhtrong

SQ

L

đượ

c

s

d

ngcho

m

c

đ

íchn

à

y.Nhómcáccâu

l

nh

nàyđư

c

g

ichunglàngônn

g

t

h

a

o

c

d

ữliệu(D

M

L

:DataMan

i

pulationL

a

ngu

a

ge) baog

m các câu lệnh sau:

    SELECT: Sử

d

ng

đ

ểtruy x

u

ất

d

ữ liệu từ

m

ô

t

h

oặc nhiều

b

ng.

    INSERT:

B

ổ sung

d

li

ệu.

    UPDATE:Cập

nh

ật

d

ữ liệu

    DELETE:Xoá

d

ữ liệu

Trong

s

ốcáccâulệnhnày,cót

h

iS

EL

E

C

Tlàcâu

l

n

htương

đố

ip

hứ

c

t

ạp vàđư

c

s

d

ngnhi

utrong

c

ơ

s

d

ữliệu.V

icâu

lệ

nhn

à

y,takhông

c

h

t

hự

chiện cácyêucầutruyxuất

d

ữliệu

đơ

n

t

hu

n

m

àcòn

c

ót

h

ểt

hự

c

h

i

nđư

ccácyêucầu t

h

ngkê

d

ữliệup

hứ

ctạp.C

ũ

ngchínhvìvậy,p

h

ần

đ

uc

ac

h

ươngnày

s

t

ậptrung tư

ơ

ng

đố

inhiều

đ

ếnc

â

ulệnhSELECT.Cáccâu

l

ệnh

I

N

SERT,U

P

D

A

TEvàDELETE

đ

ư

c b

à

n l

u

ận

đ

ến ở

c

u

i c

h

ươ

ng

2.1Truy xuất dữ l

i

ệu với câu lệnh SELECT

Câu

lệnh

SELECT

đ

ư

c

s

d

ng

đ

truy

xu

t

d

liệu

từ

các

dòng

các

c

t

củ

a

m

t hay nhiều

b

ảng, khung nhìn. Câu lệnh này có t

h

ể dùng

đ

ể t

h

c

h

iện

phép

c

h

n (t

c là

truy

xuất

m

t

tập

con

các

dòng

trong

m

t

hay

nh

i

ều

b

ảng),

phép

chi

ế

u

(tức

truy

xu

ất

m

t

tập

con

các

c

t

trong

m

t

hay

nhiều

b

ảng)

phép

n

i

(t

c

liên

k

ết

các dòng

trong

hai

hay

nh

i

ều

b

ng

đ

truy

x

u

ất

d

liệu).

N

goài

ra,

c

â

u

lệnh

n

à

y

còn

cung cấp k

h

n

ă

n

g

t

hự

c

hiện các thao tác truy v

n và t

h

ng kê

d

ữ liệu

p

h

c tạp khác.

Cúph

á

p chung

c

a câu

l

ệnhSELE

C

T códạng:

SELECT [ALL | DISTINCT][TOP n] danh_sach_chon

[INTO ten_bang_moi]

FROM danh_sach_bang/khung_nhin

[WHERE dieu_kien]

[HAVING dieu_kien]

[ORDER BY cot_sap_xep]

[COMPUTER danh_sach_ham_gop [BY danh_sach_cot]]

Điềuc

n

l

ư

đ

ut

i

ên

đố

i

v

icâu

l

ệnhnàylàcácthànhphầnt

r

ongc

â

ul

nh

SELECT

n

ếuđư

c

s

d

ngphảituântheo

đ

úng

t

hứ

t

n

h

ưtrong

c

úph

á

p.N

ế

ukhông, câu lệ

n

h

s

đ

ư

c xemlà không h

p lệ.

Câu

lệ

nh

S

E

LE

C

T

đư

c

s

d

n

g

đ

ểtác

đ

nglêncác

b

ảng

d

ữliệuvà

k

ếtq

u

ả c

acâulệ

n

hc

ũ

ngđượchiểnt

h

d

ư

i

d

ạng

b

ảng,t

clà

m

ttập

hợ

pcácdòngvàcác c

t (ng

o

ại trừ trườ

n

g

h

p

s

d

ngcâu

l

ệnh

S

E

LE

C

Tv

i

m

n

h

đ

C

OM

PU

TE).

2.1.1Mệ

n

h

đ

ềFROM

Mệnh

đ

FROM

trong

câu

lệ

nh

S

E

LE

C

T

đư

c

s

dung

n

h

ằm

c

h

đ

ịnh

các

b

ng và

khung

nh

ì

n

cầ

n

t

r

uy

x

u

ất

d

liệu.

S

a

u

F

R

OM

danh

sách

tên

c

a

c

bảng

và khung

nhìn

tham

gia

vào

truy

v

ấn,

tên

c

a

c

b

ảng

khung

nhìn

đ

ư

c

phân

cách

nh

a

u

b

i

d

u p

h

ẩy.

Tacó

t

hể

s

d

ngc

á

cbíd

a

nhchocácb

ngh

a

ykhungnh

ì

nt

r

ongcâu

l

nh SELE

C

T

.Bíd

a

nh

đư

cg

á

ntrong

m

ệnh

đ

ềFROMbằ

n

g

các

h

c

h

đ

nhbídanhng

a

y sau tên

b

ảng.

d

ụ2.3:

câu

l

ệnh s

a

u g

á

n bí danh làa

c

h

obảng khoa

SELECT * FROM khoa a

2.1.2Danhsáchc

h

ntrongcâulệnhSELECT

Danh

sách

c

h

n

t

r

ong

câu

l

ệnh

SELECT

đư

c

s

dụ

ng

đ

c

h

đ

ịnh

các

tr

ư

ng,

các

b

i

ểu

t

h

c

cần

h

iển

t

h

trong

các

c

t

c

a

k

ết

q

u

truy

v

n.

Các

trư

ng,

các

b

i

ểu

t

h

c

đ

ư

c

c

h

đ

nh

ng

a

y

sau

t

khoá

SELECT

phân

cách

nhau

b

i

d

ấu

p

h

y.

Sử

d

ng danh sách c

h

n trong câu

l

ệnh

SELECT

bao

g

m

c

t

rườ

n

g

h

p sau:

a.C

họ

n t

t cả các c

ttrong b

ảng

Khic

n

h

iểnt

h

ịtất

c

ảcáctrư

ngtrongcácbảng,

s

d

ngkýtự*trongdanh sáchc

họ

n

t

h

ayvìp

h

ải

l

iệtkêdanhsách

t

ấtcảcác

c

t.

Trongt

r

ườ

n

g

h

pnày,các

c

t

đ

ư

chi

n

t

h

ịtrong

k

ế

tq

u

ảtruy

v

ấn

s

ẽtuântheothứ

t

m

àchúng

đ

ãđư

c

t

ạorakhi

b

ảng đư

c

đ

ịnh ng

h

ĩa.

b.Tên c

t trong danhsáchch

n

Trongtr

ư

ờng

hợ

pcầnc

h

đ

nhcụt

h

ểcác

c

t cần

h

i

n

t

h

ịtrong

k

ết q

u

ả truy v

ấn,

tac

h

đ

ịnhdanhsáchcáctên

c

ttrongd

a

nhsáchc

họ

n.T

h

t

ực

acác

c

ttrongkết

qu

ảtruy

v

ấntuân theo t

h

ứ tự

c

a các trư

ng trong danh sách c

h

n

Lưu

ý:

N

ếu

truy

v

n

đư

c

t

h

c

hiện

trên

nh

iề

u

b

ảng/khung

nhìn

trong

các

b

ảng/khungnhìncócáct

r

ư

ngt

r

ùngtên

t

h

ìtên

c

an

h

ngtr

ư

ngnàyn

ế

ux

u

ấthiện trong d

a

nh sách ch

n p

h

ải

đ

ư

c v

i

ết

d

ư

i

d

ng:

tên_b

ng.tên_tr

ườ

ng

d

ụ2.6:

SELECTmalop, tenlop, lop.makhoa, tenkhoa

FROMlop, khoa

WHERElop.malop = khoa.makhoa

c.Thay

đổ

i tiêu đề các c

t

Trong

k

ếtq

u

ảtruy

v

n,tiêu

đ

c

acácc

t

m

ặc

đ

n

h

s

ẽlàtên

củ

acáct

r

ư

ng tư

ơ

ng

ngtrongb

ng.Tuynhi

ê

n

,

đ

ểcáctiêu

đ

ềtrởn

ê

nth

â

nth

iệ

n

h

ơ

n,tacót

h

đổ

i tên các tiêu

đ

ề c

a các c

t. Để

đ

ặt tiêu

đ

ềcho

m

t c

t nào

đ

ó, ta sử

d

ngcáchviết:

         tieu_de_cot = ten_truong

hoặc ten_truong AS tieu_de_cot

hoặc ten_truong  tieu_de_cot

d.

S

d

n

g

c

utrúc CASEtrong danhsáchch

n

Cấutrúc

C

A

S

Eđư

c

s

d

ngtrongdanhs

á

chch

nn

h

ằm

t

h

a

y

đổ

i

k

ếtq

u

c

a truyvấn t

u

th

u

cvàocáctrư

ng

h

p khác nhau. C

u trúc n

à

y có

c

ú pháp nhưsau:

CASEbi

u_th

c

WHENbi

u_th

c_ki

m_tra THEN k

ế

t_qu

[... ]

[ELSEk

ế

t_qu

_c

a_else]

END

ho

ặc:

CASE

WHEN

đ

i

u_ki

n

THEN k

ế

t_qu

[... ]

[ELSEk

ế

t_qu

_c

a_else] END

e.H

ng và biểu thức trong danh sách ch

n

Ngoàidanhsáchtrư

ng,trongd

a

nhsáchc

h

nc

acâu

l

ệnh

S

E

LECTcòncót

h

s

d

ngcácb

i

ểut

h

c.

M

i

m

t biểut

hứ

ctrongdanhsáchc

h

ntrở thành

m

tc

ttro

n

g

k

ết q

u

ả truy

v

n.

f.Lo

ibỏ cácdòng

d

ữ liệu trùng nhau trong

k

ết q

u

ảtruy v

n

Trong

k

ết q

u

ảc

a

tru

y

v

ấn

c

ó

t

h

ể x

u

ất hiện các dòng

d

ữliệutrùngnhau. Để

l

o

ại

b

bớ

t các dòng này, ta c

h

đ

ịnh thêm từ khóa DISTINCT ngay sau từ khoá

SE

LECT

g.Giới h

n

s

ố lượng dòng t

r

ong kết quả truy

v

n

Kếtq

u

ảc

atruyvấn

đ

ư

chiểnt

h

ịt

h

ư

ng

s

ẽlà

tấtcảcácdòng

d

ữliệutruyv

n

đ

ư

c.T

r

ongt

ng

h

pc

n

h

ạnc

h

ế

s

l

ượngcácdòngxuấthiệntrongkếtq

u

truy

v

ấn, ta c

h

đ

ịnh thêm

m

n

h

đ

ềTOP ng

a

y trư

c danh sách c

h

n

c

a câu

l

ệnh SELECT.

d

ụ2.12:

Câu

lệ

nh

d

ư

i

đ

â

y

h

iểnt

h

h

t

ênvàngàysinh

c

a5sinhviên

đ

ầutiên trong d

a

nh sách

SELECTTOP 5 hodem,ten,ngaysinh

FROMsinhvien

Ngoài

cách

c

h

đ

ịnh

c

s

lượng

dòng

cần

h

iển

t

h

t

r

ong

kết

q

u

truy

v

n,

ta

có t

h

c

h

đ

nh

s

l

ư

ng

các

dòng

c

ần

h

iển

th

theo

tỷ

lệ

ph

n

trăm

b

ằng

cách

s

d

ng thêm từ khoá

P

E

R

C

ENT n

h

ư ở

v

í

d

d

ư

i

đ

ây.

Vídụ 2.13:

Câu

l

ệnh

d

ư

i

đ

â

y

h

i

nt

h

h

ọtênvàngàysinh

c

a10%

s

ốlượngsinhvi

ê

n

h

iện có trong bảng S

I

NHVIEN

SELECTTOP 10 PERCENT hodem,ten,ngaysinh

FROMsinhvien

2.1.3C

h

địn

h

đ

iềukiệntruy

vấ

n

d

ữl

i

ệu

Mệnh

đ

ềW

H

E

R

Et

r

ongc

â

u

l

ệnhSELECT

đ

ư

c

s

d

ngnhằm

x

ác

đ

n

h

các

đ

iều

k

iện

đ

i

v

iviệctruyxuất

d

ữliệu.S

a

u

m

n

h

đ

ềW

H

E

R

Elà

m

tbiểu

t

hứ

c

l

ogic vàc

h

nh

ữngdòngdữliệun

à

oth

o

n

đ

iều

k

i

n

đ

ư

cc

h

đ

nh

m

iđư

chiển

t

h

ị trong kết q

u

ảtruy

v

ấn.

Vídụ2.14:

Câu

l

ệnh

d

ư

i

đ

âyh

i

ểnt

h

ịd

a

nhsáchcác

m

ôn

h

ccó

s

đ

ơn

v

họ

ctrình l

n

n 3

SELECT* FROM  monhoc

WHEREsodvht>3

Trong

m

n

h

đ

ề WHERE t

h

ường

sử

d

ng:

    Các toán tử

k

ết

h

p

đ

i

u

k

iện (AND, OR)

    Các toán tửso sánh

    Kiểm

tr

a

giớ

i

h

ạn

c

a

d

ữ liệu(BETWEEN/ NOTBETWEEN)

    Danh sách

    Kiểm tra

k

h

uôn

d

n

g

d

ữ liệu.

•   

Các giá trị

N

U

LL

a.Các toán tử so sánh

Toántử

ýng

h

ĩa

=

Bằng

>

L

n

h

ơ

n

<

N

h

h

ơ

n

>=

L

n

h

ơ

nh

o

ặc

b

ng

<=

N

h

h

ơ

nh

o

ặc

b

ằng

<>

Khác

!>

Không

lớ

n

h

ơ

n

!<

Khôngn

h

h

ơ

n

d

ụ2.15:

Câu lệnh:

SELECTmasv,hodem,ten,ngaysinh

FROMsinhvien

WHERE(ten='Anh')

AND(YEAR(GETDATE())-YEAR(ngaysinh)<=20)

chobiết

m

ã,

h

ọtênvàngàysinh

c

acác

s

inhviêncótênlàAnh

v

à

c

ó

tu

in

h

h

ơ

n

ho

ặc

b

ằng20

b.Kiểm tra g

i

ới

h

ncủa dữ liệu

Để

k

iểm

tr

a

x

em

g

t

rị

d

ữliệu

n

ằmtrong(ngoài)

m

tkh

o

ảngnào

đ

ó,ta

s

d

ng toán tử BETWEEN (NOT BETWEEN) như sau:

c

h sử dụng

Ýn

gh

ĩ

a

giá_trị BET

W

EEN a AND b

a≤ giá_trị ≤ b

giá_trị NOT BETWEEN a AND b

(giá_t

r

ị < a) AND

(

g

iá_trị>b)

d

ụ2.16:

Câulệnh

d

ư

i

đ

âychob

i

ết

h

t

ênvàt

u

ic

acácsinhviêncótênlàBình

vàcó tu

i

n

ằmtrong kho

ng từ 20

đ

ế

n 22

SELECThodem,ten,year(getdate())-year(ngaysinh) AS tuoi

FROM

sinhvien

WHERE

ten='Bình' AND

YEAR(GETDATE())-YEAR(ngaysinh)BETWEEN 20 AND 22

c.Danh sách (IN và NOT IN)

T

ừkhoá

I

Nđư

c

s

d

ngkhitacầnc

h

đ

n

h

đ

iều

k

iệntìmk

i

ếm

d

ữliệuchocâu lệnhSELECTlà

m

tdanhsáchcácgiátrị.Sau

I

N

(

h

o

ặcNOTIN)cót

h

ểlà

m

tdanh sách các giá trị h

o

ặc là

m

t câu l

nhSELE

C

T khác.

Vídụ2.17:

Để

b

iếtdanhsáchcácmôn

h

ccósố

đ

ơn

v

h

ctrìnhlà2,4h

o

ặc5,thay vì sử

d

ngcâu

l

nh

SELECT* FROM monhoc

WHEREsodvht=2 OR sodvht=4 OR sodvht=5

tacó t

h

s

d

ng câu lệ

nh

SELECT* FROM monhoc

WHEREsodvht IN (2,4,5)

d.Toán tửLIKE và

c

á

c

k

ý tự

đ

i diện

T

ừk

ho

áLIKE(NOT

L

IK

E

)

s

d

ngtrongcâulệnhSELECTnhằm

m

ôtả khuôndạngc

a

d

ữliệucầntìmk

i

ế

m

.Chúngt

h

ường

đ

ư

c

k

ết

h

p

v

icácký

t

đ

ại

d

iện sau

đ

ây:

Kýtự

đ

i diện

ý

n

g

h

ĩ

a

%

Ch

u

i ký

t

b

ất

k

gồ

m không h

o

ặc nhiều ký tự

_

Kýtự

đ

ơ

n

b

ất

k

[]

t

đ

ơn

b

ất

k

ỳtrongg

i

i

h

n

đ

ư

cc

h

đ

nh

(

v

ídụ

[a-f])hay

m

t tập (ví

d

ụ [abcdef])

[^]

Kýtự

đ

ơ

n

b

ất

k

ỳkhông

n

ằmtronggi

i

h

n

đ

ư

cc

h

đ

ịnh ( ví dụ[^a-f] hay

m

t tập (ví

d

ụ [^abcdef]).

e.Giá t

r

ị NULL

Dữliệutrong

m

tc

tchoph

é

p

N

ULL

s

n

h

ậngiátrịNULLtrongcáctrư

ờn

g

h

p sau:

               •

    Nếukhôngcódữliệu

đ

ư

cn

h

pcho

c

tvàkhôngcó

m

ặc

đ

ịnhcho

c

th

a

y

k

iểu

d

ữ liệu trên

c

t

đ

ó.

    N

g

ư

i

s

d

ng tr

c tiếp

đ

ư

a giá trị NULL vào cho

c

t

đ

ó.

    M

tc

tcók

i

ểu

d

ữli

ulàk

i

ểu

s

s

ẽc

hứ

agiát

r

ịNULL

n

ếugiátrị

đ

ư

cc

h

đ

ịnh g

â

y tràn

s

.

Trong

m

ệnh

đ

ềWHERE,

đ

k

i

mtragiát

r

ịc

a

m

tc

tcógiátrịN

U

LLh

a

ykhông,ta

s

d

ng cách viết:

WHERE  tên_c

IS NULL

ho

ặc:  

WHEREtên_c

t

IS NOT NULL

2.1.4

T

omớib

ng

d

ữl

i

ệu

t

k

ết

qu

củ

acâulệnhSELECT

Câul

nhSELECT...INTOcótác

d

ngt

o

m

t

b

ng

m

icócấutrúcvà

d

l

iệu

đ

ư

cxác

đ

ịnhtừ

k

ếtq

u

ảc

atruy

v

n

.B

ng

m

iđư

ctạora

s

c

ó

s

ốc

t

b

ng

s

ốc

t

đ

ư

c c

h

đ

nh t

r

ong d

a

nh sách

c

h

n và số dòng

s

ẽ là

s

ố dòng

k

ết q

u

ảc

atruyvấn

Vídụ2

.

19:

Câu

l

ệnh

d

ư

i

đ

â

ytruyv

n

d

ữliệutừ

b

ngS

I

NHV

I

ENvàtạo

m

t

b

ảng

T

U

OI

S

V bao

g

m

c

t

ng HODEM,T

E

N

v

à

T

U

OI

SELECThodem,ten,YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi

INTOtuoisv

FROMsinhvien

Lưuý:

N

ế

utrongdanhsáchc

họ

ncócácb

i

ểut

h

cthìn

h

n

g

b

iểut

hứ

cnàyp

h

ảiđư

c

đ

ặt tiêu

đ

ề.

2.1.5S

p

x

ếp

k

ết

qu

ảtruyv

n

Mặc

đ

ịnh,cácdòng

d

ữliệutrongkếtq

u

c

acâutruyvấn

t

u

â

n

t

h

e

o

t

hứtực

a chúngtrongbảng

d

l

iệuh

o

ặcđư

c

s

ắp

x

ế

p

t

h

e

o

c

h

m

c(

n

ếut

r

ênb

ngcóc

h

m

c). Trongtrườ

n

g

h

p

mu

n

d

ữliệu

đ

ư

c

s

ắp

x

ếptheo

c

h

i

ềută

n

g

ho

cgiảmc

agiátrịc

a

m

t

h

o

ặc

nhi

u

trường,

ta

s

d

ng

thêm

m

n

h

đ

ORDER

BY

trong

câu

l

ệnh SE

L

E

C

T

;Sau

ORD

E

RBYlàda

n

hsáchcácc

tcần

s

ắp

x

ếp(t

i

đ

alà16c

t)

.Dữliệu

đ

ư

c

s

ắp

x

ếpcóthểtheochiều

t

ăng(

A

SC)h

o

ặcgiảm

(DE

S

C)

,mặc

đ

ịnh

l

à

s

ắp

x

ếp theo chi

u tăng.

Ví dụ2.20:

Câu

l

ệnh

d

ư

i

đ

â

y

h

i

ểnt

h

ịd

a

nhsáchcác

m

ôn

h

cvà

s

ắp

x

ếp

t

h

eo

c

h

i

ều

g

iảm

d

ần c

a

s

đ

ơn

v

họ

c trình

SELECT* FROM monhoc

ORDERBY sodvht DESC

Nếusau

O

R

D

E

RBYcónh

i

ều

c

tthìviệc

s

ắp

x

ế

p

d

ữl

i

ệu

s

đ

ư

c

ư

utiêntheot

h

ứtự

từ trái qua p

h

ải.

Th

a

yvìchỉ

đ

ịnhtênc

tsauORDERBY,

t

acóthể

c

h

đ

ịnh

s

t

h

t

c

a

c

t cấn

đ

ư

c

s

ắp

x

ế

p. C

â

u lệ

n

hở ví

d

ụ trên có t

h

ể đư

c vi

ế

t lại n

h

ư sau:

SELECThodem,ten,gioitinh,

YEAR(GETDATE())-YEAR(ngaysinh)AS tuoi

FROM ten='Binh'

ORDER BY 3,4

2.1.6Phép

h

ợp

Ph

é

p

hợ

pđư

c

s

d

ngtrongt

r

ư

ng

h

pta

c

ần

g

p

k

ế

tq

u

c

ahaihaynh

iề

u truyv

n

th

ành

m

tt

p

k

ếtq

u

ảduyn

h

ất.SQLcung

c

ấpto

á

n

t

ửUNION

đ

ểt

h

chiện

ph

é

p

h

p.Cúph

á

pnhư sau

Câu_l

nh_1

UNION[ALL] Câu_l

nh_2

[UNION

[ALL]

Câu_

lệnh_3]

... [UNION [ALL] câu_lệnh_n]

[ORDER BY cột_sắp_xếp]

[COMPUTE  danh_sách_hàm_g

p

[BY danh_sách_c

t

]]

Trong

đ

ó

Câu_lệnh_1

d

ạng

SELECT  danh_sách_c

t

[INTOtên_b

ng_m

i

]

[FROM danh_sách_bảng | khung_nhìn]

[WHERE điều_kiện]

[GROUP BY danh_sách_cột]

[HAVING điều_kiện]

C

â

u

_

lệnh_i

(i = 2,..,n) có

d

ng

SELECT danh_sach_cot

[FROM danh_sach_bang | khung_nhin]

[WHERE dieu_kien]

[GROUP BY danh_sach_cot]

[HAVING dieu_kien]

Mặc

đ

nh,

n

ếu

trong

các

truy

v

n

t

h

ành

p

h

ần

c

a

p

h

é

p

h

p

x

u

ất

hiện

nh

ng

dòng

d

li

u

g

i

ng

nhau

thì

trong

kết

q

u

truy

v

ấn

c

h

g

iữ

lại

m

t

dòng.

N

ếu

m

uố

n

g

i

ữ lại các dòng này, ta p

h

ải

s

d

ng

t

h

êm

từ khoá ALL trong truy v

n thành ph

n.

Khisử

d

ng toán

t

ử UNION

đ

ể t

h

c hiện

ph

é

p

h

p, ta cần chú ý cácnguyên

t

ắc sau:

    Danh sách c

t trong các truy v

n thành ph

n

ph

ải có cùng số l

ư

ng.

    Cácc

t

t

ươngứngtrongtấtcả

cb

ng,h

o

ặctập

c

o

n

b

ất

k

ỳcác

c

t

đ

ư

c

s

d

ngtrongbản th

â

n

m

itruyvấnthànhphần

ph

ải cùng kiểu

d

ữ liệ

u.

    Cácc

tt

ư

ơ

n

gứngtrong

b

n

t

h

ân

t

ngtruyv

nthànhph

nc

a

m

tcâu

l

nh

UNIONp

h

ảix

u

ấthiệntheothứtự

n

h

ưnhau.Nguyênn

h

ânlàdophép

h

p

s

o sánh các

cộ

tt

ừn

g

c

t

m

t theo thứ tự đư

c

c

ho t

r

ong

m

itruyvấ

n.

    Khicáckiểu

d

ữliệukhácnhauđư

c

k

ết

hợ

p

vớ

inh

a

utrongcâu

l

nh

UNI

O

N, chúng

s

đ

ư

ợc chu

y

ển sang k

i

ểu

d

l

iệu cao h

ơ

n (

n

ế

u có

t

h

ể đư

c).

    Tiêu

đ

ềc

ttrongkếtq

u

ảc

aphép

h

p

s

ẽlàtiêu

đ

c

t

đ

ư

c

c

h

đ

ịnht

r

ong truyvấn

đ

ầu tiên.

    Truy

v

n

t

h

ànhph

n

đ

ầutiêncót

h

ểcóINTO

đ

ểtạo

m

i

m

t

b

n

gtừ

k

ết

qu

c

achínhphép

h

p.

    Mệnh

đ

ềORD

E

RBY

v

àCOMPUTE

d

ùng

đ

s

ắp

x

ếp

k

ếtq

u

ảtruy

v

ấnh

o

ặc tínhtoáncácgiát

r

th

ngkêchỉ

đượ

c

s

d

ngởc

u

icâu

l

ệnhUNION. Chúngkhông

đ

ư

c

s

d

ng ở trong

b

ất

k

ỳtruy

v

n th

à

n

h ph

n n

à

o.

    Mệnh

đ

ềGROUPBY

v

àHAVINGc

h

ỉcóthể

đượ

c

s

d

ngtrong

b

ảnthân t

ngtruy

v

ấnth

à

nhp

h

ần.Chúngkhôngđượcph

é

psử

d

ng

đ

c

đ

nglên

k

ết q

u

c

h

ung

c

a phép

h

p.

    P

h

é

p

t

o

á

n UNI

O

N

c

ó

t

hể

đ

ư

c

s

d

ng b

ê

n trong câu

l

nh

I

N

S

E

R

T

.

    Ph

é

p to

á

n UNI

O

N không

đ

ư

c

s

d

ng trong câu

l

ệnhC

R

E

A

TEVIEW.

2.1.7Phép

nố

i

Khicần

th

chiện

mộ

tyêu

c

ầut

r

uy

v

ấn

d

ữliệutừhaihaynh

i

ều

b

ng,tap

h

ải

s

d

ng

đ

ế

nphép

n

i.

M

tcâulệ

n

h

nố

i

k

ết

hợ

pcácdòngdữli

utrongcác

bả

ngkhác

nh

a

u lại theo

m

t h

o

ặc nhi

u

đ

iều

k

iện

n

à

o

đ

ó và hiển t

h

ịchúng trong kết q

u

ảtruy

v

ấn.

Giả

s

ửtacần

b

iếtmã

l

pvàtên

l

p

c

acácl

pth

u

cKhoaCôngng

h

Th

ôngtin

,ta

ph

ải làm n

h

ư sau:

    C

họ

nradòngtrongb

ngKHOAcótênkhoalàKhoaCôngng

h

ệThôngtin, từ

đ

ó xác

đ

n

h

đ

ư

c mã khoa (

M

AKHOA)là DHT02.

N

h

ư

v

ậy,

đ

ểt

hự

chiện

đượ

cy

ê

ucầutruyv

n

d

ữliệutrên,taphảit

hự

chiệnphép

n

i

g

i

ahai

b

ngKHOAvàLOP

vớ

i

đ

iều

k

iện

nố

ilàMAKHOAc

aKHOA

b

ằng

v

i MAKHOAc

a LOP. Câu lệnh sẽ

đ

ư

c viết n

h

ư sau:

SELECTmalop,tenlop

FROMkhoa,lop

WHEREkhoa.makhoa = lop.makhoa AND

tenkhoa='KhoaCông ng

h

Thông tin'

2. Sử dụng phép nối

Ph

é

p

n

ilàcơ

s

đ

thự

chi

ncácyêu

c

ầutruyv

n

d

ữliệuliênquan

đ

ến

nh

i

u

b

ảng.

M

tcâulệnh

n

it

h

chiệnlấycácdòngdữliệutrongcácb

ngthamgiatr

u

y

v

ấn,sosánhgiátrịc

acácdòngnàytrên

m

th

o

ặcnhiềuc

tđượcc

h

đ

ịnhtrong

đ

i

u

k

iện

n

ivàkết

h

pcácdòngth

o

n

đ

iềukiệnthànhn

h

ữngdòngtrongkếtq

u

ảtruy

v

ấn.

Đểt

hự

chiện đư

c

m

t

ph

é

p

n

i, cần p

h

ải

c

đ

ịnh đư

cn

h

n

g

y

ếutố sau:

    N

h

ng c

t nào cần

h

i

n t

h

ịtrongkết q

u

ả truy

v

n

    N

h

ng

b

ảng n

à

o có thamgia vào truy vấn.

    Điều

k

i

n

đ

ể t

hự

c hiện

ph

é

p

n

i g

i

a các

b

ảng dữ liệu là gì

Trongcác

y

ếutố

k

trê

n

,

v

i

ệcxác

đ

n

h

chín

h

c

đ

i

u

k

iện

đ

t

hự

c

h

iệnphép

nố

igi

a

cbảng

đ

óngvaitròquant

r

ngn

h

ất.Trong

đ

a

s

ốcáctrư

ng

h

p,

đ

i

ều

k

iện c

aphépn

iđư

cxác

đ

ịnhn

h

ờvào

m

iquan

h

g

i

acác

b

n

g

c

ầnp

h

ảitruyx

u

ất

d

ữ liệu.Thôngt

h

ường,

đ

ólà

đ

iều

k

iện

b

n

g

nh

a

u

g

i

akhoáchínhvàkhoángoài

c

ahai

b

ảngcó

m

iquan

h

vớ

inh

a

u.N

h

ư

v

y,

đ

ểcót

h

đ

ưara

m

tcâulệnh

n

it

hự

chiện chínhxácyêu

c

ầutruyv

n

d

ữliệu

đ

òi

h

ip

h

ảihi

uđư

c

m

iquan

h

ệc

ũ

ngn

h

ưý ng

h

ĩa c

a chúng g

i

a các

b

n

g

d

l

iệu.

Danhsá

c

h c

h

ntrongphép

nố

i

M

tcâul

n

h

n

ic

ũ

ngđư

c

b

ắt

đ

ầu

vớ

itừkhóa

S

ELE

C

T

.Cácc

tđư

c

c

h

đ

ịnhtênsau

t

ừkhoáSELECTlàcácc

tđượchiển

t

h

ịtrongkếtq

u

ảtruyv

n.

Việc

s

d

ng tên các

c

t trong danh sách c

h

n có

t

h

ể là:

    Tên

c

a

m

t

s

ốc

tnào

đ

ótrongcácbảngcóthamgiavàotruyv

n.Nếut

ê

n c

t trong các bảng trùng tên nhau thì tên

c

t p

h

ải

đ

ư

c v

i

ết

d

ư

i

d

ng

tên_b

ng.tên_c

t

    Dấusao(*)đư

c

s

d

ngtrongdanhsáchc

h

nkhi

c

ần

h

iển

t

h

ịtấtcảcác c

t c

a các bảng thamgia truy

v

ấn.

    Trongtrườ

n

g

h

pcần

h

iểnt

h

ịtấtcảcácc

t

củ

a

m

t

b

ảngn

à

o

đ

ó,ta

s

d

ng cách v

i

ết:

tên_b

ng.*

Mệnhđề FROM trong phép

n

i

Sau

m

ệnh

đ

ềFROMc

acâu

lệ

nh

n

ilàdanhsáchtêncác

bả

ng(haykhung nh

ì

n)thamgiavàot

r

uy

v

n.N

ế

uta

s

d

n

g

d

ấu*trongdanhsáchch

nthìt

h

ứtực

a cácbảngl

i

ệtkêsauFROM

s

ẽảnh

h

ưở

n

g

đ

ế

nt

h

ứtựcác

c

t

đượ

c hiểnt

h

ị trong

k

ết q

u

ả truyvấn.

Mệnhđề WH

E

RE

t

ro

n

g

p

hép n

i

Khihaih

a

ynhiều

b

n

g

đ

ư

c

n

i

vớ

inh

a

u,taphảic

h

đ

n

h

đ

iều

k

iện

đ

ểt

h

c

h

iện

phép

n

ingaysau

m

ệnh

đ

ềW

H

E

R

E.Điều

k

iện

n

iđư

cbiểu

d

iễn

d

ư

i

d

ng

b

iểu t

h

c logic so sánh giá t

r

d

l

iệu

g

i

a các c

t c

a các bảng th

a

mgia truy

v

ấn.

Cáctoán tửso sánh d

ư

i

đ

ây

đ

ư

ợc

s

d

n

g

đ

ể xác

đ

ịnh

đ

iều

k

i

n

n

i

Phéptoán    Ý ngh

ĩ

a

=                  Bằng

>                 

L

n

h

ơ

n

>=               

L

n

h

ơ

nh

o

ặc

b

ng

<                  N

h

h

ơ

n

<=                N

h

h

ơ

nh

o

ặc

b

ằng

<>                Khác

!>                 K

n

g l

n

h

ơ

n

!<                 Khôngn

h

h

ơ

n

d

2.24

:

Câu

lệ

n

h

d

ư

i

đ

â

y

h

i

ểnt

h

ịdanhsáchcácsinhviênv

icácthôngtin:mã sinh vi

ê

n

,

h

ọ và tên,

m

ã l

p, tên

l

p và tên khoa

SELECTmasv,hodem,ten,sinhvien.malop,tenlop,tenkhoa

FROMsinhvien,lop,khoa

WHEREsinhvien.malop = lop.malop AND

lop.makhoa=khoa.makhoa

Trongcâulệnhtrên,cácbảng

t

h

amgiav

à

otruyv

nbao

g

mSINHV

I

EN,LOPvà

KHOA.Đ

i

ều

k

iện

đ

ể t

hự

chiện phép

n

i gi

a

c

b

ảng bao

g

m

h

ai

đ

iều

k

i

n:

sinhvien.malop= lop.malop

và                

lop.malop= khoa.malop

Điều

k

iện

nố

i

gi

a

cbảngtrongc

â

u

l

ệnhtrênlà

đ

iều

k

i

n

b

ngg

i

akhoángoàivà khoáchínhc

acácb

ngcó

m

iqu

a

n

h

vớ

inhau.

H

a

ynóicáchkhác,

đ

iều

k

iệnc

a

ph

é

p

n

i đư

c xác

đ

ịnh d

a v

à

o

m

i qu

a

n

h

ệ gi

a các

b

ảngtrong

c

ơ

s

d

ữ li

u.

2.1

.

7.2 Cácl

oạ

iphép

n

i

Ph

é

p n

i

b

ng và phép

n

i tự nhiên

M

tphép

n

i

b

n

g(equi-join)là

m

tph

é

p

n

itrong

đ

ógiátrịc

acácc

t

đư

ợc

s

d

ng

đ

nố

iđư

csosánhv

inh

a

u

d

atrêntiêuch

u

ẩn

b

ằngvàtấtcảcác

cộ

ttrong các

b

ảng

th

amgia

nố

i

đ

ều

đ

ư

c

đ

ư

a ra trong

k

ết q

u

ả.

d

ụ2.25:

Câu lệnh dư

i

đ

â

y

th

ực hiện phép n

i

b

ng gi

a hai

b

ảng LOP và KHOA

SELECT*

FROMlop,khoa

WHERElop.makhoa=khoa.makhoa

Trong

k

ếtq

u

c

acâu

l

ệnhtrên,

cộ

t

m

a

k

h

o

a(

m

ãkho

a

)xuấthiệnhailầnt

r

ongkếtq

u

ph

é

p

n

i(c

t

ma

k

h

o

ac

a

b

ảng

k

h

o

avàc

tma

k

h

oac

a

b

n

g

l

op

)vàn

h

ư

v

ylàkhông cầnth

i

ế

t

.

T

a

c

ó

t

h

ểl

o

i

b

bớ

t

đ

in

h

ữngc

t

t

rùngt

ê

ntrongkết

q

u

ảtruyv

n

b

ngcách c

h

đ

ịnh d

a

nh sách

c

t cần

đ

ư

chiển t

h

ị trong d

a

nh sách ch

n c

a câu

l

ệnh.

M

tdạng

đ

ặcbiệtc

aph

é

p

nố

i

b

ằng

đ

ư

c

s

d

ngnhiềulàphép

n

itựnhiên (natural-join).T

r

ongphép

n

itựnhi

ê

n

,

đ

i

ukiện

n

igi

ahai

b

ảngchínhlà

đ

iều

k

i

n

b

ằngg

i

akhoángoàivàkhoá

c

h

ính

c

ahaibảng;

V

àtrongd

a

nhsách

c

h

nc

acâu lệnh c

h

g

iữ lại

m

t

cộ

t trong hai

c

t thamgia vào

đ

iều

k

iện c

aphépn

i

d

ụ2

.

26:

Đểt

h

chiệnph

é

p

n

itựnhiên,

c

âu

l

ệnhtrongvídụ2

.

25đư

cv

i

ếtlạin

h

ư

sau

SELECTmalop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai

FROMlop,khoa

WHERElop.makhoa=khoa.makhoa

ho

ặcviết

d

ư

i

d

ngn

g

ắn

g

n

h

ơ

n:

SELECTlop.*,tenkhoa,dienthoai

FROMlop,khoa

WHERElop.makhoa=khoa.makhoa

Ph

é

p n

i

v

ới các điều

k

iện bổ sung

Trongcáccâulệ

n

h

nố

i,ngoài

đ

i

u

k

iệnc

aph

é

p

n

iđư

cc

h

đ

ịnhtrong

m

nh

đ

ềWHEREcòncót

h

ểc

h

đ

ịnhcác

đ

iều

k

i

ệntìmk

i

ếm

d

ữliệukhác

(

đ

iềukiệnc

h

n).

Thông

t

h

ư

ng,các

đ

iều

k

iện

n

à

yđư

c

k

ết

h

p

vớ

i

đ

iều

k

iện

nố

ithôngquatoán

t

ử AND.

Vídụ2.27:

Câu

l

n

h

d

ư

i

đ

âyh

i

ểnt

h

h

ọtênvàng

à

ysinh

c

acácsinhviên khoa công nghệ thông tin

SELECThodem,ten,ngaysinh

FROMsinhvien,lop,khoa

WHEREtenkhoa='Khoa Công ng

h

Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa

Ph

é

p

 nối và các bí danh

Phép 

tự

n

i

phép

n

i

m

à

trong

đ

ó

đ

iều

k

i

n

n

i

đ

ư

c

c

h

đ

ịnh

liên

qu

a

n

đ

ế

n các

c

t

c

a

cùng

m

t

b

ảng.

Trong

trường

h

p

này,

s

s

xu

ất

hiện

tên

c

a

cùng

m

t

b

ảng nhiều

lần trong

m

n

h

đ

F

R

OM và do

đ

ó các b

ng cần p

h

ải

đ

ư

c

đ

ặt bí

danh.

d

ụ2.28:

Để

b

iếtđư

c

h

ọtênvàng

à

ysinh

c

acácsinhviêncócùngngàysinhv

i sinhviênT

rầ

n

T

h

Kim

Anh,taphải

t

h

ựchiện

ph

é

ptự

n

ingaytrênchínhbả

ng

sinhvie

n

.Trongcâu

l

n

h

n

i,

b

ngsinhvi

e

n

x

u

ấthiệntrong

m

n

h

đ

FRO

M

vớ

ibí danhlà a

b

.Bả

n

gsinhvien

v

i bídanhlà a

s

d

ng

đ

ểch

nrasinhviêncó

h

ọtênlà T

rầ

n

T

h

ịKimA

n

h

b

ảngsinhvien

v

ibídanhlàb

s

d

ng

đ

ểx

á

c

đ

ịnhcácsinhvi

ê

n trùng ngày sinh

v

i sinh viênT

rầ

n T

h

ịKimAn

h

.Câulệnh đư

cviết n

h

ư sau:

SELECTb.hodem,b.ten,b.ngaysinh

FROMsinhvien a, sinhvien b

WHEREa.hodem='Tr

n Th

Kim' AND a.ten='Anh' AND

a.ngaysinh=b.ngaysinhAND a.masv<>b.masv

Ph

é

p n

ikhôngdựa trên tiêu chu

n

b

ng

Trongphép

n

inày,

đ

iều

k

i

n

đ

ểt

hự

ch

i

ệnphép

nố

igi

acácbảng

d

ữliệu khôngp

h

ảilà

đ

iều

k

i

ệnsosànhbằngg

i

a

cc

t.L

o

ạiphépn

inàytrongt

h

ctế t

h

ường ít đư

c

s

dụ

ng.

Ph

é

p n

i ngoài (outer-join)

Trongcácphép

n

i

đ

ã

đ

ềcậpởtrên,c

h

n

h

ngdòng

cógiátrịtrongcác

c

t

đ

ư

cc

h

đ

n

h

t

ho

n

đ

iều

k

iện

k

ết

nố

i

mớ

i

đượ

chi

nt

h

ịtrong

k

ếtq

u

ảtruyvấn,và

đ

ư

c

g

ilàphép

n

itrong(

i

nnerjoin)Theo

m

tnghĩanào

đ

ó,n

h

n

g

ph

é

p

n

in

à

y l

o

ại

b

ỏthôngtinc

h

a trongnhữngdòngkhôngth

o

n

đ

iều

k

iện

nố

i.

Tuynhiên,

đ

ôi khita

c

ũ

ngcần

g

iữl

in

h

ữngthôngt

i

nnàybằngcáchchophépnhữngdòngkhông th

o

n

đ

iều

k

i

n

n

icó

m

ặttrongkếtq

u

ảc

aph

é

p

nố

i.Để

m

đ

iềunày,tacót

h

s

d

ng phép

n

i ngoài.

S

Q

L cung

c

ấp các loại ph

é

p

n

i ngoài sau

đ

ây:

    Ph

é

p

n

ingoàitrái

(

k

ý

h

i

u:*

=

):Ph

é

pn

inàyhi

n

t

h

ịtrong

k

ế

tq

u

ảtruy

v

ấntấtcảcácdòng

d

ữliệu

c

a

b

ng

n

ằmbêntráitrong

đ

iều

k

iện

n

i

ch

o

n

h

ững dòng n

à

y không thoả

n điều

k

i

n c

aphép

n

i

    Ph

é

p

n

ingoàiph

i

(kýh

i

u

:

=

*

):P

h

ép

n

inàyh

i

ển

t

h

ịtrongkết

qu

ảtruy

v

ấntấtcảcácdòng

d

ữliệuc

a

b

ảng

n

ằmbênp

h

ảitrong

đ

i

u

k

i

ện

nố

icho dùn

h

ữngdòngnàykhôngth

o

đ

i

ều

k

iện

c

a

ph

é

p

n

i.

2.1

.

7.4Sử d

ngphép

nố

itrongSQL2

p

h

ầntr

ư

c

đ

ã

đ

ềcập

đ

ếnp

h

ư

ơ

ngpháp

s

d

ngphép

n

itrongvàph

é

p

n

i ngoàitrongtruyv

nS

Q

L.

Nh

ư

đ

ãtrìnhbày,

đ

i

u

k

iệnc

aphép

n

itrongcâu

l

ệnh

đ

ư

cc

h

đ

nhtrong

m

ệnh

đ

ềWHEREthôngquacácb

i

ểut

h

c

s

osánhg

i

a

cbảng thamgia truy

v

ấn.

Ch

u

ẩn

SQ

L

2

(

S

Q

L

-9

2

)

đ

ư

ara

m

tcáchkhác

đ

b

iểudiễnchophép

n

i,trong cáchb

iể

u

d

iễnn

à

y,

đ

iều

k

iệnc

aphép

n

ốikhôngđư

c

c

h

đ

ịnhtrong

m

n

h

đề

W

H

E

R

E

m

à

đượ

c

c

h

đ

ịnhngaytrong

m

n

h

đ

ềFROMc

acâu

l

ệnh.Cá

c

h

s

dụng

ph

é

p

nố

inàychoph

é

ptab

i

ểu

d

i

ễnphép

nố

ic

ũ

ngnhư

đ

iều

k

iện

n

iđư

c

r

õràng,

đặ

c

b

iệt là trong trường

h

p phép

n

i

đ

ư

c t

hự

chiện trên babảng trở lên.

Ph

é

p n

i tro

n

g

Điều

k

iện

đ

ểt

hự

chi

nph

é

p

nố

itrong

đ

ư

cc

h

đ

nht

r

ong

m

n

h

đ

ềFROMth

e

o cúphápn

h

ư sau:

tên_b

ng_1 [INNER] JOIN tên_b

ng_2 ON

đ

i

u_ki

n_n

i

d

ụ2

.

31:

Để

h

iển

t

h

h

ọtênvàngàysinhc

acácsinhviên

l

pTinK2

4

,thayvì

s

d

ng câu lệnh:

SELECThodem,ten,ngaysinh

FROMsinhvien,lop

WHEREtenlop='Tin K24' AND sinhvien.malop =lop.malop

tacó t

h

s

d

ng câu lện như sau:

SELECT ho, tendem, ngaysinh

FROM sinhvien, lop

WHERE TENLOP>='Tin K24'

Ph

é

p n

i ngoài

SQL2cung cấp các phép

n

i ngo

à

i sau

đ

ây:

    Ph

é

p n

i ngoài trái (LEFT OUTER JOIN)

    Ph

é

p n

i ngoài p

h

ải (RIGHT OUTER JOIN)

    Ph

é

p n

i ngoài

đ

y

đ

ủ(FULL OUTER JOIN)

C

ũ

ngt

ư

ơ

ngtự

nh

ưphép

n

itrong,

đ

i

u

k

iệnc

a

p

h

é

p

nố

i

ngoà

ic

ũ

ngđư

c

c

h

đ

nh

ng

a

y trong

m

n

h

đ

ề FROMt

h

eocúpháp:

tên_b

ng_1 LEFT|RIGHT|FULL [OUTER]JOIN tên_

b

ng_2

ON

đ

i

u_ki

n_n

i

Nếu phép

n

i

ngoài

trái

(

t

ư

ơ

ng

ng p

h

ải) h

i

ển

t

h

ị t

r

ong kết q

u

ả truy vấn

cả nh

ng dòng

d

liệu

không

t

h

oả

đ

iều

k

iện

n

i

c

a

b

ảng

bên

trái

(

t

ư

ơn

g

ng

ph

i)

trong

phép

n

i

thì

ph

é

p

n

i

ngoài

đ

y

đ

h

iển

t

h

t

rong

kết

q

u

truy

v

ấn

cả

n

h

ững

dòng

d

liệu

không th

o

đ

i

u

k

i

ện

n

i c

a

cả hai

b

ảng tham

gia vào phép

nố

i.

Thực hiệnphépn

i trên nh

i

ều

b

ng

M

t

đ

ặc

đ

iểm

nổ

i

b

ậtc

aS

Q

L2 

làchophépb

i

ểu

d

iễn

ph

é

p

n

trênnhi

u

b

ảng

d

ữliệu

m

tcáchrõràng.Thứtựt

hự

chiện

ph

é

p

nố

igi

acácbả

n

g

đ

ư

cxác

đ

nh

theo ng

h

ĩa

k

ết q

u

c

a

ph

é

p

n

i nàyđư

c

s

d

ngtrong

m

t ph

é

p

n

i khác.

Vídụ2

.

34:

Câu

l

ệnh

d

ư

i

đ

â

y

h

iểnt

h

h

ọtênvàng

à

ysinh

c

acácsinhviênth

u

c

KhoaCông ng

h

ệ Thông tin

SELECThodem,ten,ngaysinh

FROM(sinhvien INNER JOIN lop

ONsinhvien.malop=lop.malop) INNER JOIN khoa ON lop.makhoa=khoa.makhoa

WHEREtenkhoa=N'Khoa công ng

h

thông tin'

Trongcâulệnhtrên,t

h

ứtựt

h

chiệnphépn

ig

i

acácbả

n

g

đ

ư

ợcc

h

đ

ịnhrõràng:

ph

é

p

n

ig

i

ahai

b

ảngsinhvienlop

đ

ư

ợct

hự

chiệntrư

cvàkếtq

u

ảc

aph

é

p

n

i này

l

ại tiếp t

c

đ

ư

c

n

i

vớ

i

b

n

gkho

a

.

2.1.8T

hố

ng

k

ê

d

ữ l

i

ệu

v

ớiGROUPBY

Ngoàikhả

n

ă

n

g

t

hự

c

h

iệncácyêu

c

ầu

tru

y

v

n

d

ữliệuthôngt

h

ường(ch

iế

u,

c

h

n,

n

i,…)n

h

ư

đ

ã

đ

ềcập

n

h

ưởcácp

h

ầntrư

c,câu

l

ệnh

SE

LECT

c

ònchoph

é

p t

hự

chiệncácthaotáctruyvấnvàtính

t

o

ánth

ngkêtrên

d

ữliệu

n

:

c

hob

iế

tt

ng

s

ố tiết

dạ

y c

am

i giáo viên,

đ

iểm trung bình các môn

h

c c

am

i sinh viê

n

,…

Mệnh

đ

GROU

P

B

Ysử

d

ngtrongcâu

l

ệnh

SE

LE

C

Tn

h

ằmphânhoạ

c

h

các

dòng

d

ữli

utrongb

ngthànhcácnhómdữ

l

iệu,vàtrên

m

inhómdữliệut

h

chi

n tính toán các giá t

r

ị t

hố

ngkên

h

ư

t

ính t

ng,tính giá trịtrungbình,...

Cáchàmg

pđư

c

s

d

ng

đ

ểt

í

nhgiátrịt

h

ngkêchotoànbảngh

o

ặctrên

m

i nhómdữl

i

ệu.Chúngcót

h

đ

ư

c

s

d

ngn

h

ưlàcác

cộ

ttrongd

a

nhsáchc

h

n

c

acâu lệnh

SE

LECThoặcx

u

ấthiệntrong

m

ệnh

đ

ềHAV

I

NG,nh

ư

ngkhông

đ

ư

cphépxu

t

h

iện trong

m

n

h

đ

W

H

ERE

S

Q

L cung

c

ấp các hàm

gộ

p

d

ư

i

đ

ây:

Hàm

g

p

Chức

n

ă

ng

SUM(

[

A

L

L | D

I

S

T

IN

C

T

]

b

iể

u_

t

h

ức)

Tínht

ng

c

ác giá trị.

AVG([ALL| DISTINCT]

b

iể

u_

t

h

ức)

Tínhtrung bình

c

a các giá t

r

COUNT([ALL|DISTINCT]

b

iể

u_

t

h

ức)

Đếm

s

ố các giá trị trong biểu

t

hứ

c.

COUNT(*)

Đếm

s

ố các dòng đư

c

c

h

n.

MAX

(

b

iểu_t

h

ức)

Tínhgiá trị l

n n

h

ất

MIN

(

b

i

u_t

h

ức)

Tínhgiá trị nhỏ n

h

ất

Trong

đ

ó:

    Hàm SUMvà AVGchỉ làm v

i

ệc

v

i các b

i

ểu t

hứ

c

s

.

    HàmSUM,AVG,COUNT,MINvàMAX

b

ỏquacácgiátrịNULLkhitính toán.

    HàmCO

U

NT

(

*) không

b

ỏ qua các giá trị

N

ULL.

Mặc

đ

ịnh,cáchàm

g

pt

h

chiệntínhtoánt

h

ngkêtrêntoàn

b

d

ữliệ

u

.

T

r

ong

trư

ng

h

pcầnl

o

ại

b

b

tcácgiát

r

ịtrùngnh

a

u(chỉ

g

iữlại

m

tgiátrị),tachỉ

đ

ịnh thêm từ khoá DI

S

T

I

N

CTở tr

ư

cbiểu t

h

c là

đố

i

s

c

a hàm. 

T

h

ng kê trên toàn bộ dữ liệu

Khicầntínhtoángiát

r

ịt

hố

ngkêtrêntoàn

b

d

ữliệu,ta

s

dụ

ngcáchàm

gộ

p trongdanhsáchc

họ

nc

acâu

lệ

nh

SE

LE

C

T

.Trongt

r

ường

hợ

pnày,t

r

ongdanhsách c

h

n không

đ

ư

c

s

dụ

n

g

b

ất

k

m

t tên

c

t hay b

i

ểu t

h

c nào ngoài các hàm

g

p.

Vídụ2.35:

Đểt

h

ngkêtrungb

ì

nh

đ

iểml

n1c

atấtcảcácmôn

họ

c,ta

s

d

ngcâu lệnh như sau:

SELECTAVG(diemlan1) FROM diemthi

còncâulệnh

d

ư

i

đ

â

y

c

h

o

b

iếtt

u

il

n

nh

t

,

t

u

i

nh

n

h

ấtvà

đ

t

u

itrungbình

c

atất cả các sinh viên sinh tại H

u

ế:

SELECTMAX(YEAR(GETDATE())-YEAR(ngaysinh)), MIN(YEAR(GETDATE())-YEAR(ngaysinh)), AVG(YEAR(GETDATE())-YEAR(ngaysinh))

FROMsinhvien

WHEREnoisinh=’Hu

ế

T

h

n

g

k

êdữ liệu trên các nhóm

Trongtrườ

n

g

h

pcầnt

hự

chiệntínhto

á

ncácgiát

r

ịt

hố

ngkêtrêncácnhóm

d

ữ liệu,ta

s

d

ng

m

n

h

đ

ềGROUPBY

đ

ểphânh

o

ạch

d

ữli

uv

à

otrongcácnhó

m

.Các hàm

g

pđư

c

s

dụ

ng

s

ẽt

hự

ch

i

ệnthaotáctínhtoántrên

m

inhómvàchobiếtgiát

r

ị t

h

ng kê theo các nhóm dữ liệu.

còncâu l

nh:

SELECTsinhvien.masv,hodem,ten, sum(diemlan1*sodvht)/sum(sodvht)

FROMsinhvien,diemthi,monhoc

WHEREsinhvien.masv=diemthi.masv AND

diemthi.mamonhoc=monhoc.mamonhoc

GROUPBY sinhvien.masv,hodem,ten

chob

i

ếttrungbình

đ

iểm thi lần 1 các  môn h

c c

a các sinh viên

Lưuý:

Trongtrường

h

pd

a

nhsách

c

h

n

c

acâulệnhSELECTcócả

c

m

g

pvà

n

h

n

g

b

iểut

hứ

ckhôngp

h

ải

l

à

m

gộ

p

t

h

ì

n

h

n

g

b

i

ut

h

cn

à

yphảicó

mặ

t

đ

ầy

đủ

trong

m

ệnh

đ

ềGROUPBY,

n

ếu không c

â

u

l

n

h

s

ẽkhông

h

p lệ.

d

ụ2.37:

i

đ

ây là

m

t câu lệnh sai

SELECTlop.malop,tenlop,COUNT(masv) FROM lop,sinhvien

WHERElop.malop=sinhvien.malop

GROUPBY lop.malop

d

o

t

h

iếu tr

ư

ng TENLOP sau

m

n

h

đ

ề GROUP BY.

Chỉ định

đ

iều kiện đ

i

v

ớihàm

g

p

Mệnh

đ

ềHAVING

đư

c

s

d

ngnhằm

c

h

đ

ịnh

đ

iềukiện

đố

i

v

icácgiát

r

ị t

h

ngkêđư

c

s

ảnsinh

t

ừcáchàm

gộ

pt

ư

ơngtự

nh

ưcácht

hứ

c

m

n

h

đ

ềW

H

E

R

Eth

i

ết lậpcác

đ

iều

k

iện

c

hocâu

l

ệnh

S

E

LE

C

T

.

M

n

h

đ

ềHAVING

t

h

ư

ờngkhông

t

h

c

s

ựcó ng

h

ĩa

n

ế

u

n

h

ưkhông

s

d

ng

k

ế

t

hợ

p

vớ

i

m

n

h

đ

ềGROUPBY.

Mộ

t

đ

iểmkhácbiệt

g

i

aHAV

I

NGvà

W

HERElàtrong

đ

i

ukiệnc

a

W

HEREkhông

đ

ư

ccócáchàm

g

p trong khi HAVING lại cho phép sử

d

ng các hàm

g

p trong

đ

iều

k

iện c

a

m

ình.

Vídụ

2.38

:

Để

b

iếttrungb

ì

nh

đ

i

ểmthilần1c

acácsinhviêncó

đ

iểmtrungbình

l

n

h

ơ

n h

o

ặc

b

ằng 5, ta sử

d

ng câu lệ

n

h

n

h

ư sau:

SELECTsinhvien.masv,hodem,ten, SUM(diemlan1*sodvht)/sum(sodvht)

FROMsinhvien,diemthi,monhoc

WHEREsinhvien.masv=diemthi.masv AND

diemthi.mamonhoc=monhoc.mamonhoc

GROUPBY sinhvien.masv,hodem,ten

HAVINGsum(diemlan1*sodvht)/sum(sodvht)>=5

2.1.9T

hố

ng

k

ê

d

ữ l

i

ệu

v

ớiCOMPUTE

Khith

chiệnthaotácth

ngkê

vớ

iGROUPBY,

k

ếtq

u

ảt

hố

ngkê(

đ

ư

c

s

ản sinhb

i

m

g

p)x

u

thiện

d

ư

i

m

tc

ttrong

k

ếtq

u

ảtruyvấn.Thôngqua

d

ạngt

r

uy

v

ấnnày,tab

i

ết

đ

ư

cgiát

r

ịt

hố

ngkêtrên

m

inhóm

d

ữl

i

ệun

h

ư

ngkhôngb

i

ếtđư

cchi tiết

d

ữ liệu trên

m

i nhóm

n

h

ư

n

g

c

t

h

m

ikhoabao

g

m

n

h

n

g

l

pnàothìchúngtakhôngt

h

b

iếtđư

ctrong

k

ết q

u

ả truy

v

n trên.

Mệnh

đ

COMPU

TE

sử

dụ

ng

k

ế

t

h

p

vớ

i

c

m

g

p

(dòng)

ORDER

BY trong

câu

l

ệnh

SE

LECT

ng

cho

chúng

t

a

các

kết

qu

t

h

ng

(c

a

hàm

g

p)

trên các

nhóm

d

liệu.

Đi

m

khác

biệt

g

i

a

COMPU

TE

v

à

G

R

OUP

BY

k

ết

q

u

t

h

ng

xu

ất

hi

n

d

ư

i

d

n

g

m

t

dòng

trong

kết

q

u

truy

v

n

còn

cho

chúng

ta

c

chi

tiết

v

d

liệu

t

r

ong

m

i

nhóm.

Như

v

ậy,

câu

l

ệnh

SELECT

vớ

i

COMPUTE

cho

chúng

ta

c

ả chi tiết

d

ữ liệu và giá trị t

hố

ng

trên

m

i nhó

m

.

Mệnh

đ

C

OM

PU

TE …BY

c

ó cúphápn

h

ưsau:

COMPUTEhàm_g

p(tên_c

t)[,…, hàm_g

p(tên_c

t)]BY danh_sách_c

t

Trong

đ

ó:

    Các hàm

gộ

p

c

ó t

h

s

d

ngbao

g

m SUM,AVG, M

I

N, MAX và COUNT.

    danh_

s

ách_

c

t

: là danh sách c

t

s

d

ng

đ

ể ph

â

n nhómdữ liệu

d

ụ2.40:

Câu

lệ

nh

d

ư

i

đ

â

y

c

h

o

b

iếtdanhsáchcácl

p

c

a

m

ikhoavàt

ng

s

cácl

p c

a

m

i khoa:

SELECTkhoa.makhoa,tenkhoa,malop,tenlop FROM khoa,lop

WHEREkhoa.makhoa=lop.makhoa

ORDERBY khoa.makhoa

COMPUTECOUNT(malop) BY khoa.makhoa

Khisử

d

ng

m

n

h

đ

ề COMPUTE ... BY cần tuân theo các qui

t

ắc

d

ư

i

đ

ây:

     

T

ừ khóa D

I

ST

I

N

C

Tkhông cho phép

s

d

ng v

i các hàm

gộ

pdòng

      HàmCO

U

NT

(

*) không

đ

ư

c

s

d

ngtrongCOMPUTE.

      SauCO

MP

UTEcóthể

s

d

ngnhiềuhàm

g

p,khi

đ

ócáchàmphảiph

â

n cáchnhaub

i

d

u p

h

y.

      Cácc

t

s

d

ngtrongcáchàmg

p

xu

ấthi

ntrong

m

n

h

đ

ềCOMPUTE

ph

ải có

m

ặt trong d

a

nh sách ch

n.

      Khôngsử

d

ngSELECTI

N

TOtrong

m

tcâu

l

ệnhSELECTcó

s

d

ng

CO

M

PUTE.

      Nếu

s

dụ

n

g

m

ệnh

đ

ềCOMPUTE...BYthì

ngphải

s

d

ng

m

n

h

đề

ORDER BY. Các c

tliệt kê trong C

O

M

PU

TE …

B

Y p

h

ải g

i

ng

h

ệt hay là

m

ttậpcon

c

an

h

ữnggìđư

c

l

iệtkêsau

O

R

DER

B

Y.

C

h

úngphảicó cùngthứ

t

ựtừtráiquaphải,

b

ắt

đ

ầu

vớ

i

c

ù

ng

m

tbi

ut

h

cvàkhôngbỏ qua

b

ất

k

m

t biểu t

h

c nào.

C

h

n

g

h

ạn

n

ếu

m

ệnh

đ

ềORDERBYcó

d

ạng:

ORDERBY a, b, c

Thì

m

n

h

đ

ềCO

MP

UTEBY

v

ihàm

g

pFtrên

c

tXtheom

ttrongcác cách

d

ư

i

đ

ây là

h

p lệ:

COMPUTEF(X) BY a, b, c COMPUTE F(X) BY a, b COMPUTE F(X) BY a

Vàcác cách

s

dụ

n

g

d

ư

i

đ

ây là sai:

COMPUTEF(X) BY b, c COMPUTE F(X) BY a, c COMPUTE F(X) BY c

P

h

ải

s

d

ng

m

ttênc

th

o

ặc

m

tbiểu

t

h

ứctrong

mệ

nh

đ

ORD

E

R

BY

,

v

i

c

s

ắp

x

ếpkhông

đ

ư

c t

hự

chiện

d

a trên tiêu

đ

ề c

t.

Trongtrườ

n

g

h

p

s

d

ngCOMPUTEmàkhôngcóBYthìcót

h

ể không

c

ần

s

d

ng ORD

E

RBY,k

h

i

đ

ó

ph

ạmvitính toán

củ

a hàm

g

p là trên toàn

b

d

ữ liệu.

d

ụ2.41:

Câu lệnh dư

i

đ

â

y

h

iể

n t

h

ị danh

s

ách các

l

p và t

ng sốl

p

h

i

n có:

SELECTmalop,tenlop,hedaotao

FROMlop

ORDERBY makhoa

COMPUTECOUNT(malop)

d

ụ2.42:

Câu lệnh:

SELECTkhoa.makhoa,tenkhoa,malop,tenlop FROM khoa,lop

WHEREkhoa.makhoa=lop.makhoa

ORDERBY khoa.makhoa

COMPUTECOUNT(malop) BY khoa.makhoa

COMPUTECOUNT(malop)

Chob

i

ếtdanhsáchcác

l

p

c

a

m

ikhoa,t

ng

s

ốl

ptheo

m

ikhoavà

tổ

ng

s

l

p

h

iện có

2.1.10Truy

vấ

ncon(Subqu

e

ry)

Truy

v

nconlà

m

tcâulệnh

SE

LECT

đ

ư

ợcl

ngv

à

obêntrong

m

tcâu

l

nh

SELECT,INSERT,UPDATE,D

E

LE

T

E

h

oặcbêntrong

m

ttruyvấnconkhác.L

o

ại

truyvấn

n

à

yđư

c

s

d

ng

đ

b

iểudiễn cho nhữngtruy

v

ấntrong

đ

ó

đ

iều

k

i

n

t

r

u

y

v

ấn

d

ữ liệu cần

ph

ải

s

d

ng

đ

ế

n

k

ết q

u

ả c

a

m

ttruyvấnkhác.

C

ú

ph

á

p c

a truy v

n con như sau:

(SELECT[ALL | DISTINCT] danh_sách_c

h

n

FROM  danh_sách_b

ng [WHERE    

đ

i

u_ki

n] [GROUP BY      danh_sách_c

t][HAVING

đ

i

u_ki

n])

Khi

sử

d

ng truy

v

n con

c

ần

l

ư

u ý

m

t

s

ố quy tắc sau:

    M

ttruy

v

ấnconph

i

đ

ư

cviếttrong

c

ặp

d

ấungoặc.Tronghầu

h

ếtcác trư

ng

h

p,

m

ttruyvấn

c

o

n

th

ườngp

h

ảicó

k

ếtq

u

ảlà

m

tc

t(t

clàc

h

ỉ códuyn

h

ất

m

t c

ttrong danh sách c

h

n).

    Mệnh

đ

ềCOMPUTEvàORDERBYkhông

đượ

cphép

s

dụ

ngtrongtruy

v

ấn

c

on.

    Cáctên

c

t

xu

ấthi

ntrongtruy

v

ấnconcó

t

hểlàcác

cộ

tc

acácbảngtrong truyvấnngoài.

    M

t

truy

v

ấn

c

o

n

th

ườ

n

g

đư

c

s

d

ng

làm

đ

iều

k

iện

trong

m

n

h

đề

W

H

E

R

E hoặc HAV

I

NG c

a

mộ

t truy v

n khác.

    Nếutruy

v

ấncontrả

v

đ

úng

m

t

g

t

rị,nócóthể

s

d

ngnhưlà

m

tthành

ph

nb

ê

ntrong

m

tb

i

ểut

hứ

c(c

h

n

g

h

nx

u

ấthiệntrong

m

tphépsosá

n

h

b

ằng)

Phépso sánh

đ

i

v

ới

v

ới

k

ết quả truy

vấ

ncon

Kếtq

u

ảc

atruyvấncon

c

óthể

đ

ư

c

s

d

n

g

đ

t

hự

chiệnph

é

p

s

osánh

s

h

c

vớ

i

m

t

b

i

ut

h

c

c

atruyv

ncha.Trongt

r

ường

h

pnày,truy

v

n

c

o

nđư

c

s

d

ng

d

ư

i

d

ng:

WHEREbi

u_th

c phép_toán_s

_h

c[ANY|ALL] (truy_v

n_con)

Trong

đ

óphéptoán

s

họ

c

c

ó

t

h

s

d

ngbao

g

m:=,<>,>,<,>=,<=;Vàtruyv

n conphải có kết q

u

b

a

o

g

m

đ

úng

m

t c

t.

Nếutruy

v

ấncont

r

v

ềnhiều

h

ơ

n

m

tgiátrị,việc

s

dụ

ngph

é

psosánhnhư trên

s

ẽkhôngh

plệ.Trongtrườ

n

g

h

pnày,sauph

é

ptoánsos

á

nhphải

s

d

ngthêm lư

ng

t

A

LLh

o

ặcANY.L

ư

n

gtừ

A

L

L

đư

c

s

dụ

ngkhi

cầ

nso

s

ánhgiátrịc

abiểu t

hứ

c

v

itấtcảcácgiátrịtrả

v

ềtrongkếtq

u

ảc

atruy

v

ấncon;n

g

ư

clai,phépsosánh

vớ

il

ư

ng

t

ừANY

c

ókếtquả

đ

úngkhic

h

ỉcần

m

tgiátrị

b

ất

k

ỳnào

đ

ótrongkếtq

u

ả c

atruyv

n con thoả

n

đ

iều

k

i

ện.

d

ụ2.44:

Câulệnh

d

ư

i

đ

âychob

i

ết

h

ọtên

c

a

nh

ngs

i

nhv

i

ênl

pTinK25

sinh

trư

c tất cảcác sinh viên c

a l

pToán K25

SELECThodem,ten

FROMsinhvien JOIN lop ON sinhvien.malop=lop.malop

WHEREtenlop='Tin K25' AND

ngaysinh<ALL(SELECTngaysinh

FROMsinhvien JOIN lop

ONsinhvien.malop=lop.malop

WHERElop.tenlop='Toán K25'

Và câu lệnh:

SELECThodem,ten

FROMsinhvien JOIN lop on sinhvien.malop=lop.malop

WHEREtenlop='Tin K25' AND

year(ngaysinh)=ANY(SELECT year(ngaysinh) FROM sinhvien JOIN lop

ONsinhvien.malop=lop.malop

WHERElop.tenlop='Toán K25')

chob

i

ết

h

ọtên

c

an

h

ngsinhviên

l

pTinK25

n

ă

msinhtrùng

v

i

n

ămsinh

c

a

b

ất

k

m

t sinh vi

ê

n nào

đ

ó c

a

l

p

To

á

n

K

25

.

Sử d

ngtruy

v

n con

v

ới toán

t

ử IN

Khic

nt

h

chi

nphépk

i

ểmtragiátrịc

a

m

tbiểu

t

hứ

ccóxu

thiện(không

xu

ất hi

n) trong

t

ập các giá trị c

a truy v

n con hay không, ta có t

h

s

d

ng

t

o

án tử IN (NOT IN) như sau:

WHEREbi

u_th

c [NOT] IN (truy_v

n_con)

Vídụ

2.45

:

Để

h

iểnt

h

h

ọtên

c

an

h

ữngs

i

nhviênl

pTin

K

25

c

ó

n

ăm

si

n

h

b

ằng

vớ

i

n

ămsinh

c

a

m

tsinhviênn

à

o

đ

óc

al

pTo

á

n

K

25,thayvì

s

d

ngcâu

l

n

h

n

h

ưở ví dụ trên, ta có t

h

s

d

ng câu

l

ệnhn

h

ư sau:

SELECThodem,ten

FROMsinhvien JOIN lop on sinhvien.malop=lop.malop

WHEREtenlop='Tin K25' AND

year(ngaysinh)IN(SELECTyear(ngaysinh) FROM sinhvien JOIN lop

ONsinhvien.malop=lop.malop

WHERElop.tenlop='Toán K25')

Sử d

ụn

g lượng từEXISTS

v

ớitruy

v

n con

L

ư

ng từEXISTS

đ

ư

ợc

s

d

n

g

k

ết

hợ

p

vớ

i

t

ruy

v

ấn

c

o

n

d

ư

i

d

ng:

WHERE[NOT] EXISTS (truy_

v

n_con)

đ

k

iểm

tr

a

x

em

m

ttruy

v

n

c

o

ncótrả

v

ềdòng

k

ếtq

u

ản

à

ohaykhông.

ng

t

ừ EX

I

STS(

t

ươngứngN

O

TEX

I

S

TS)trả

v

ềgiátrịT

r

ue(

t

ươngứngFalse)

n

ế

u

k

ếtq

u

ả c

atruyv

nconcóítnhất

m

tdòng(tươ

n

g

ngkhôngcódòngnào).Điềukhácb

i

ệt c

aviệc

s

d

ngEXISTSv

ihaicách

đ

ãnêuởtrênlàtrongd

a

nhsáchch

nc

atruy

v

ấn

c

on

c

ó t

h

ể có nhiều

h

ơ

nhai c

t.

Vídụ2.46:

Câu

l

ệnh

d

ư

i

đ

â

ychob

i

ết

h

ọtên

c

an

h

ữngsinhviênh

iệ

nc

h

ưacó

đ

iểm thi c

a

b

ất

k

m

t môn

h

c n

à

o

SELECThodem,ten

FROMsinhvien

WHERENOT EXISTS(SELECT masv FROM diemthi

WHEREdiemthi.masv=sinhvien.masv)

Sử d

ngtruy

v

n con

v

ới mệnh đề HAVING

M

ttruy

v

ấncon

c

ó

t

hể

đ

ư

c

s

d

ngt

r

ong

m

ệnh

đ

ềHAVINGc

a

m

ttruy

v

ấnkhác.Trongt

r

ường

h

ơ

p

này

,

k

ếtq

u

c

atruy

v

ấnconđư

c

s

dụ

n

g

đ

ểtạonên

đ

iều

k

i

n

đ

i

vớ

i

c

m

gộ

p.

Vídụ

2.47

:

Câu

l

n

h

d

ư

i

đ

ây

c

hob

i

ết

m

ã,tênvàtrungb

ì

nh

đ

iểmlần1c

acácmôn

họ

c

c

ó trung b

ì

nh

lớ

n

h

ơ

ntrung bình

đ

iểmlần 1 c

a tất cả các môn

h

c

SELECTdiemthi.mamonhoc,tenmonhoc,AVG(diemlan1) FROM diemthi,monhoc

WHEREdiemthi.mamonhoc=monhoc.mamonhoc GROUP BY diemthi.mamonhoc,tenmonhoc HAVING AVG(diemlan1)>

(SELECTAVG(diemlan1) FROM diemthi)

 2

.2Bổ sung,

c

ập

n

hật và xoá dữ l

i

ệu

Cáccâul

nhthaotác

d

ữliệutrongSQLkhôngn

h

ữngc

h

s

d

ng

đ

ểtruy

v

ấn

d

ữliệu

m

àcòn

đ

ểthay

đ

ivàcậpn

h

ật

d

l

iệutrong

c

ơ

s

d

ữliệu.So

v

ớicâulệnh SELECT,việc

s

dụ

ngcáccâu

lệ

nh

đ

b

s

u

ng

,cậpn

h

ậthayxoádữliệu

đ

ơngiản

h

ơ

n

nh

i

u. T

r

ong p

h

ần

c

ò

n lại c

a c

h

ư

ơ

ng n

à

y sẽ

đ

ề cập

đ

ế

n 3 câu

l

ệnh:

   

L

ệnh INSERT

L

ệnh UPDATE

   

L

ệnh DELETE

2.2.1

B

ổsung

d

ữl

i

ệu

Dữliệutrongcácb

ngđư

ct

h

h

iện

d

ư

i

d

ạngcácdòng

(

bảnghi).Để

b

sung

thêmcácdòng

d

li

uvào

m

t

b

ảng,ta

s

dụ

ngcâulệnhINSERT.H

u

h

ếtcác

h

qu

ntrị

CSD

Ld

a

trênSQLcung

c

ấpcáccách

d

ưới

đ

ây

đ

ểt

h

chi

nthaotác

b

ổ sung dữ liệu cho b

ng:

    Bổ

s

u

n

gtừngdòng

d

ữliệu

vớ

i

m

icâu

l

ệnhINSERT.Đâylàcác

s

dụ

ng t

h

ường

g

p n

h

ất trong giao tác SQL.

    Bổ

s

u

n

g

n

h

iềudòng

d

ữliệu

b

ngcáchtruyx

u

ất

d

ữli

utừcác

b

n

g

d

ữliệu khác.

Bổ sung t

ngdòng

d

ữ liệu

v

ới lệnh INSERT

Để

b

ổsung

m

tdòng

d

ữliệu

m

i vàobảng,tasử

d

ngcâulệnh

I

N

SERTv

i

ph

á

p như sau:

INSERT  INTO tên_b

ng

[(danh_sách_c

t

)] VALUES(danh_sách_tr

)

TrongcâulệnhI

N

SERT,d

a

nhsách

c

tngaysautên

b

ảngkhôngcầnth

i

ết

ph

ảic

h

đ

ịnh

n

ế

ug

i

átrịcáct

r

ườ

n

g

c

a

b

ảnghi

m

i

đượ

cc

h

đ

n

h

đ

ầy

đ

ủtrongd

a

nhsáchtr

. Trongtr

ư

ờng

hợ

pnày,thứtựcácgiátrịtrongdanhsáchtrị

ph

ải

b

ằng

v

i

s

ốlư

n

g

các

trư

ng

c

a

b

ngcần

b

ổsung

d

ữliệuc

ũ

ngn

h

ư

p

h

ảituântheo

đ

úng

t

hứtực

acác trư

ngnhưkhi

b

ảng đư

c

đ

nhnghĩa.

d

ụ2.48:

Câu lệnh dư

i

đ

â

y

b

ổ sungthêmm

t dòng

d

ữ liệu

v

à

o

b

ảng KHOA

INSERTINTO khoa

VALUES(‘DHT10’,’KhoaL

u

t’,’054821135’)

Trongtrườ

n

g

h

pc

h

nh

pgiá

t

rịcho

m

t

s

ốc

ttrongb

ng,taphảic

h

đ

nh danhsáchcácc

t

cần

n

h

ập

d

ữl

i

ệung

a

ys

a

utênbảng.Khi

đ

ó,

c

ácc

tkhôngđư

c

nh

p

d

ữli

u

s

n

h

ậngiátrị

m

ặc

đ

n

h

(

n

ếucó)h

o

ặcn

h

ậngiátrịNULL(

n

ế

uc

t

cho

ph

é

p

c

h

ấpn

h

ngiátrịNULL).

N

ếu

m

t

c

tkhôngcógiátrị

m

ặc

đ

ịnhvàkhôngc

h

p

nh

n giá trị N

U

LL

m

à không

đ

uợ

c

nh

p

d

ữ liệu, câu

l

ệnh sẽ

b

ị l

i.

d

2

.

4

9

:

Câu

l

ệnh dư

i

đ

â

y

b

ổ sungm

t

b

ản ghi

m

i cho bảng SINHV

I

EN

INSERTINTO sinhvien(masv,hodem,ten,gioitinh,malop) VALUES(‘0241020008’,‘Nguy

n Công’,’Chính’,1,’C24102’)

câulệnh trên còn có t

h

đượ

cviết n

h

ư sau:

INSERTINTO sinhvien VALUES(‘0241020008’,‘Nguy

n Công’,’Chính’,

NULL,1,NULL,’C24102’)

Bổ sungnh

i

ều

d

ò

n

g

d

ữ liệu từ b

ản

g

kh

á

c

M

tcách

s

dụ

ngkh

á

cc

acâu

l

n

h

I

N

S

E

R

Tđư

c

s

d

ng

đ

b

ổsungnh

iề

u dòng

d

ữliệu

v

à

o

m

t

b

ảng,cácdòng

d

ữliệunàyđư

c

l

ấytừ

m

t

b

ảngkhácthôngqua câulệnhSELECT.Ởcáchnày,cácgiátrị

d

ữliệuđư

c

b

ổsungv

à

obảngkhôngđư

c c

h

đ

ịnht

ư

ng

m

inh

m

àthayvào

đ

ólà

m

tcâu

l

ệnh

S

E

LE

C

Ttruyvấn

d

ữliệutừ

b

ảng khác.

Cúph

á

p câu lệnh

I

N

S

E

R

T có

d

ạngn

h

ư sau:

INSERT  INTO tên_b

ng

[(danh_sách_c

t

)]câu_l

nh_SELECT

d

ụ2.50:

Giả

s

ửtacó

b

ảngLUUSINHVIENbao

g

m

c

t

r

ư

ngHODEM,TEN, NGAYSINH.Câulệnh

d

ư

i

đ

ây

b

ổsungv

à

obảngL

U

USI

NH

VIEN

cácdòngdữliệu có đư

c từ câutruy

v

n

S

E

LE

C

T

:

INSERTINTO luusinhvien SELECT        hodem,ten,ngaysinh FROM sinhvien

WHEREnoisinh like ‘%H

u

ế

%’

Khi

b

ổ sung

d

ữ liệu theo cách n

à

y

c

ần l

ư

u ý

m

t

s

đ

iểm

sa

u

:

    Kết q

u

c

a câu lệnhSELE

C

T p

h

ải có số

c

t

b

n

g   v

i

s

c

t

đ

ư

cc

h

đ

ịnh trong b

n

g

đ

íchvàphải tư

ơ

ng thích về

k

iểu

d

ữ liệu.

    Trong câu lệnhSELECT

đ

ư

c

s

d

ng

m

ệnh

đ

ề  COMPUTE ... BY

2.2.2

C

p

nhậ

tdữl

i

ệu

CâulệnhUPDATEtro

n

gSQL

đư

c

s

d

n

g

đ

ểcập

nh

ật

d

ữl

i

ệutrongcácbảng. Câu

l

ệnh này có cú pháp n

h

ư sau:

UPDATEtên_b

ng

SET  tên_c

t= bi

u_th

c

[,..., tên_c

t_k= bi

u_th

c_k] [FROM danh_sách_b

ng]

[WHERE

đ

i

u_ki

n]

SauUPDATElàt

ê

n

c

a

b

ngcầncậpn

h

ật

d

ữliệu.

M

tcâulệnhUPDATEcót

h

ểc

p

nh

ật

d

ữliệuchonh

iề

uc

t

b

ằngcáchchỉ

đ

ịnhcácdanhsáchtên

c

tvàbiểut

hứ

ctư

ơ

ng

ngsautừkhoá

S

E

T.

M

ệnh

đ

ềW

H

ERE

t

rong

c

â

u

l

n

h

UPDA

TE

t

hườngđư

c

s

d

ng

đ

ểc

h

đ

ịnhcácdòng

d

ữliệuc

h

utác

đ

ng

c

acâulệnh(nếukhông

c

hỉ

đ

ịnh,

ph

ạm vi tác

đ

ng c

a câu

l

n

h

đ

ư

c hiểulà toàn

b

ộ cácdòngtrong

b

ảng)

Vídụ2.51:

Câu

l

ệnh

d

ư

i

đ

â

ycậpn

h

ậtlại

s

đ

ơ

n

v

h

ctrình

c

acácmônh

ccó

s

đ

ơ

n

v

họ

ctrìnhn

h

h

ơ

n2

UPDATEmonhoc

SETsodvht = 3

WHEREsodvht = 2

Sử d

ụn

g

c

u trúc CASE trong câu lệnhUPDATE

Cấut

r

úc

C

A

S

E

c

ót

h

đ

ư

c

s

d

ngtrongb

i

ểut

h

ckhicầnp

h

ải

đư

a

r

a

các

qu

y

ết

đ

nhkhácnh

a

u

v

ề giá trị c

a biểu

t

h

ức

Điều kiện c

p n

h

t

d

ữ liệu liên quanđếnnhiều

bảng

Mệnh

đ

F

ROMtr

on

gcâulệnhUPDATE

đ

ư

c

s

d

ngkhi

c

ầnc

h

đ

n

h

c

ác

đ

iều

k

i

nliênquan

đ

ếncácbảngkhácv

i

b

n

gcầnc

p

nh

ật

d

ữliệu.Trongtr

u

n

g

h

p này, trong

m

n

h

đ

W

H

ER

E

t

h

ư

n

g

c

ó

đ

i

u

k

iện

n

i g

i

a các

b

ảng.

Câu

l

ệnhUPDATEvớitruy

v

n con

T

ư

ơ

ngtự

n

h

ưtrongcâu

l

ệnh

S

ELE

C

T

,truyvấnconcóthể

đ

ư

c

s

d

ngtrong

m

n

h

đ

W

H

ER

E

c

acâu

l

n

hUPDATE

n

hằm

c

h

đ

ịnh

đ

i

u

k

iện

đố

i

v

icácdòng

d

ữ liệu cần cập n

h

ật

d

ữ liệu.

d

ụ2.54:

Câu lệnh ởtrên có t

h

đ

ư

c viết n

h

ư sau:

UPDATEnhatkybanhang

SET  thanhtien = soluong*gia

FROMmathang

WHEREmathang.mahang =(SELECT mathang.mahang

FROMmathang

WHEREmathang.mahang=nhatkybanhang.mahang)

2.2.3Xoádữl

i

ệu

Đểxoá

d

ữliệutrong

m

t

b

ảng,

t

a

s

dụ

ngcâu

l

ệnh

DE

LETE.Cúph

á

p

c

acâu lệ

n

h

n

à

y

n

h

ư sau:

DELETEFROM tên_b

ng [FROM danh_sách_b

ng] [WHERE

đ

i

u_ki

n]

Trongcâulệnhnày,tên

c

a

b

n

gcầnxoádữliệu

đượ

cc

h

đ

ịnhsauDELETEFROM. Mệnh

đ

ềW

H

E

R

Et

r

ongc

â

u

l

ệnh

đ

ư

c

s

d

ng

đ

ểc

h

đ

ịnh

đ

iềukiện

đ

i

v

icácdòng

d

ữliệuc

nxoá.

N

ếucâu

l

ệnhDELETEkhôngcó

m

n

h

đ

WH

E

R

Ethì

to

àn

b

ộcác dòng dữ liệu trong bảng

đ

u

b

ịxoá.

d

ụ2.55:

Câu lệnh dư

i

đ

ây xoá k

h

i

b

ng SINHVIEN n

h

ững sinh viên sinh tại H

u

ế

DELETEFROM sinhvien

WHEREnoisinh LIKE ‘%H

u

ế

%’

Xoádữ liệu khi điều kiện liên quanđếnnh

i

ều

b

ng

Nếu

đ

iều

k

iệntrongcâu

l

ệnh

DE

LETEliênqu

a

n

đ

ến

cbảngkhôngp

h

ảilà

b

ảngcầnxóa

d

ữliệu,taphải

s

d

ngthêm

m

n

h

đ

F

ROMvàsau

đ

ólàd

a

nhsáchtên các

b

ảng

đ

ó.Trongtrường

h

pnày,trongmệ

n

h

đ

ềW

H

E

R

Eta

c

hỉ

đ

ịnhthêm

đ

iều

k

iện

nố

igi

a các

b

ảng

d

ụ2.56:

Câu

lệ

nh

d

ư

i

đ

âyxoárakh

i

b

ảngSINHVIEN

n

h

ữngsinhvi

ê

n

lớ

pTin

K24

DELETEFROM sinhvien

FROMlop

WHERElop.malop=sinhvien.malop AND tenlop='Tin K24'

Sử d

ngtruy

v

n controng

c

â

u

l

ệnh DELETE

M

tcâu

l

ệnhSELECTcóthể

đư

cl

ngv

à

otrong

m

ệnh

đ

WH

E

R

Etrongcâu lệnh

DE

LETE

đ

m

đ

iều

k

i

n cho c

â

u

l

ệnh tư

ơ

ng tự

n

h

ư câu l

nh UP

DA

TE.

Vídụ2

.

57:

Câu

l

n

h

d

ư

i

đ

âyxoák

h

i

b

n

g

L

O

P

n

h

ngl

pkhôngcósinhviênn

à

o

họ

c

DELETEFROM lop

WHEREmalop NOT IN (SELECT DISTINCT malop

FROMsinhvien)

Xoátoàn

b

ộ dữ liệu tro

n

g

b

ng

Câu

l

ệnhDELETEkhôngchỉ

đ

nh

đ

iều

k

i

n

đố

i

vớ

icácdòng

d

ữliệucầnxoá trong

m

ệnh

đ

ềW

H

E

R

E

s

ẽxoátoàn

b

d

ữliệutrongb

ng.Th

a

yvì

s

d

n

g

c

âulệ

nh

DELETEtrongt

ng

h

pnày,tacóthể

s

d

ngcâulệnhTR

U

N

C

ATE

c

ócúph

á

p

n

h

ư sau:

TRUNCATETABLE tên_b

ng

d

ụ2.58:

Câu lệnh sau xoá toàn

b

d

ữ liệu trong b

n

gdiemthi:

DELETEFROM diemthi

cótác

d

ng tư

ơ

ng tự

v

i câu

l

ệnh

TRUNCATETABLE diemthi

Bạn đang đọc truyện trên: Truyen2U.Pro