Tải bản đầy đủ (.pdf) (10 trang)

Tài liệu Tổng quan Cơ sở dữ liệu- P3 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (87.02 KB, 10 trang )

Ngän ngỉỵ SQL

Chỉång 3:
CẠC NGÄN NGỈỴ THAO TẠC DỈỴ LIÃÛU


3.1 Ngän ngỉỵ truy váún dỉỵ liãûu SQL
Trong mủc ny trçnh by ngän ngỉỵ dỉỵ liãûu (Structered Query Language), SQL l ngän
ngỉỵ con dỉỵ liãûu âỉc xạc nháûn l ráút mảnh , phäø dủng v lải dãù sỉí dủng . SQL l ngän ngỉỵ
phi th tủc, chøn mỉûc v âiãøn hçnh. Do váûy hiãûn nay ráút nhiãưu sn pháøm pháưn mãưm âãưu
âỉåüc ci âàût SQL nhỉ : Oracle, DB2,
Trong pháưn ny s trçnh by cạc kh nàng ca ngän ngỉỵ SQL. Phẹp toạn cå bn
trong SQL l phẹp ạnh xả âỉåüc miãu t bàòng khäúi lãûnh SELECT - FROM - WHERE. Cạc
mãûnh âãư ca ngän ngỉỵ SQL s âỉåüc trçnh by chi tiãút bàòng vê dủ.
Cạc thût ngỉỵ trong Cå Såí Dỉỵ Liãûu quan hãû nhỉ quan hãû , thüc tênh , bäü, âỉåüc
thay thãú bàòng cạc thût ngỉỵ nhỉ : Bng( Table), cäüt(colum), bn ghi(Record) hồûc
hng(Row) trong SQL.
Chụng ta s xem cạc chỉïc nàng cå bn ca mäüt hãû qun trë Cå Såí Dỉỵ Liãûu nhỉ
cung cáúp ngän ngỉỵ âënh nghéa dỉỵ liãûu (DDM), Ngän ngỉỵ thao tạc dỉỵ liãûu(DML) , tçm kiãúm
v bo vãû dỉỵ liãûu âỉåüc thãø hiãûn trong ngän ngỉỵ SQL nhỉ thãú no.
1. Âënh nghéa dỉỵ liãûu
Trong SQL cho phẹp ngỉåìi sỉí dủng tảo cạc dỉỵ liãûu nhỉ Bng(table), Khung nhçn(View),
v cạc táûp chè säú(Index)
* Lãûnh tảo bng
Cụ phạp: CREAT TABLE Ten_Bang(Atr1 Type [NOT NULL], Atr2 Type [NOT
NULL], )
Trong âọ Ten_Bang: tãn ca table tảo ra; tãn bng l xáu k tỉû báút k khäng cọ k hiãûu
träúng v khäng trng våïi tỉì khọa
Atr1, Atr2 : Tãn cạc thüc tênh (Cạc cäüt ca bng)
Type: Kiãøu dỉỵ liãûu cho thüc tênh. Mäüt säú loải dỉỵ liãûu thỉåìng dng nhỉ:
integer


: säú ngun tỉì -2 174 483 648 âãún 2 174 483 648
Smallinteger
: säú ngun tỉì - 32 768 âãún 32 767
decimal
(n,p) säú tháûp phán våïi âäü di täúi âa n kãø c p chỉỵ säú tháûp phán ( khäng tênh dáúu
cháúm tháûp phán). Tỉì khọa number trong SQL âỉc dng trong dảng dỉỵ liãûu ny.
float
: säú dáúu pháøy âäüng
char(n)
: xáu k tỉû cọ âäü di cäú âënh n, n≤ 255
varchar(n)
xáu k tỉû cọ âäü di biãún âäøi, âäü di xáu cọ thãø tỉì 0 âãún n v âỉåüc xạc âënh tải
thåìi âiãøm âỉa dỉỵ liãûu vo lỉu trỉỵ
date
: dỉỵ liãûu dảng ngy thạng
chè thë NOT NULL âãø bạo ràòng giạ trë ca thüc tênh âọ khäng âỉåüc thiãúu trong cạc bäü
ca quan hãû
Ngän ngỉỵ SQL

Vê Dủ:

Tảo Cå Såí Dỉỵ Liãûu gäưm 3 bng S(nh cung cáúp SUPPLIERS), P ( Sn pháøm PRODUCTS)
v bng SP (Cung cáúp) nhỉ sau:
- Tảo bng S:
CREATE TABLE S
( S# INTEGER NOT NULL,SNAME VARCHAR(8) NOT NULL,AGES INTEGER NOT
NULL, CITY VARCHAR(30) NOT NULL)
Chụ : NULL l giạ trë ngáưm âënh
- Tảo bng P:(Bng sn pháøm)
CREATE TABLE P

(P# INTEGER NOT NULL, PNAME VARCHAR(10) NOT NULL, WEIGHT INTEGER
NOT NULL, COLOR VARCHAR(10) NOT NULL, CITY VARCHAR(30) NOTNULL)
- Tảo bng SP:
CREATE TABLE SP
(S# INTEGER NOT NULL, P# INTEGER NOT NULL, QTY INTEGER,SDATE DATE
NOT NULL, PRICE DECIMAL(8,2)).
Vo dỉỵ liãûu :

Cọ ba cạch âãø vo dỉỵ liãûu cho bng nhỉ sau
INSERT INTO S(S#,SNAME,AGES,CITY)
VALUE(1,’Thanh Huong’, 30,’ TP Ho Chi Minh’)
Nãúu vë trê ca cạc cäüt trong bng cäú âënh, ta cọ thãø viãút
INSERT INTO S
VALUE(1,’Thanh Huong’, 30,’ TP Ho Chi Minh’)
Ngỉåìi vo dỉỵ liãûu cọ thãø qn vë trê cạc cäüt, khi âọ ta cọ thãø biãøu diãùn nhỉ sau:
INSERT INTO S(S#,AGES,CITY, SNAME)
VALUE(1, 30, ’ TP Ho Chi Minh’, ’Thanh Huong’)
2. Tçm Kiãúm dỉỵ liãûu Trong SQL
Âáy l chỉïc nàng cå bn nháút ca SQL, cho phẹp ngỉåìi sỉí dủng tçm kiãúm cạc thäng tin
trãn Cå Såí Dỉỵ Liãûu våïi Cáu lãûnh SELECT FROM WHERE
Cụ phạp:
SELECT [*| DISTINCT] Danh sạch cạc cäüt âỉa ra
FROM Tãn_Bng/Tãn_View
[WHERE biãøu thỉïc âiãưu kiãûn]
[GROUP BY Danh sạch cạc cäüt]
[HAVING biãøu thỉïc âiãưu kiãûn]
[ORDER BY Tãn_cäüt [ASC/DESC]
Gii thêch cạc tham säú bàòng cạc vê dủ
Ngän ngỉỵ SQL


2.1 Tçm kiãúm theo cáu hi âån gin
Tçm kiãúm khäng âiãưu kiãûn:
i. Cho biãút danh sạch cạc nh cung cáúp:
SELECT *
FROM S
Dáúu ‘*’ cọ nghéa l chn ton bäü cạc cäüt trong bng.
Âãø bng kãút qu sau khi thỉûc hiãûn mäüt mãûnh âãư SQL âụng l mäüt quan hãû (Cọ nghéa l
khäng cọ cạc bäü trng nhau) thç phi cọ tỉì khọa DISTINCT.
SELECT DISTINCT PNAME
FROM SP
Tçm kiãúm våïi âiãưu kiãûn âån gin
Tçm m säú ca nhỉỵng nh cung cáúp â cung cáúp màût hng P2
SELECT S#
FROM SP
WHERE P#=’P2’
Tçm kiãúm cọ xỉí l xáu k tỉû
Xỉí l xáu k tỉû gáưn âụng cn gi l phẹp tênh “thäng minh” trong trỉåìng håüp ngỉåìi sỉí
dủng khäng nhåï r tãn ngỉåìi hồûc âëa danh vê dủ l Hoa hay Hoan khi âọ ta cọ thãø viãút
SELECT *
FROM S
WHERE SNAME LIKE ‘HOA%”
Trong SQL sỉí dủng k hiãûu ‘%’ l thay thãú cho mäüt xáu con báút k, dáúu phán cạch ‘_’ âãø
thay thãú cho mäüt k tỉû.
A%B : Xáu k tỉû bàõt âáưu bàòng chỉỵ A v kãút thục bàòng chỉỵ B
%A Xáu k tỉû báút k kãút thục bàòng chỉỵ A
A_B : Xáu bao gäưm 3 k tỉû , k tỉû thỉï 2 l báút k
A_ : Xáu cọ hai k tỉû, k tỉû âáưu l A
Xỉí l ngy thạng
Tçm nhỉỵng màût hng bạn trỉåïc ngy 94-04-24 10 ngy
SELECT P#

FROM SP
WHERE ‘94-04-24’ - SDATE =10
Tçm kiãúm sỉí dủng IN v BETWEEN
Tçm nhỉỵng màût hng â cung cáúp cọ giạ tỉì 1000 âãún 2000
SELECT P#
FROM SP
WHERE PRICE BETWEEN 1000 AND 2000
Tçm m säú nhỉỵng nh cung cáúp â cung cáúp êt nháút mäüt trong cạc màût hng P1,P2,P3
Ngọn ngổợ SQL

SELECT S#
FROM SP
WHERE P# IN (P1,P2,P3)

CAẽC HAèM THặ VIN
Cuợng giọỳng nhổ caùc ngọn ngổợ Cồ Sồớ Dổợ Lióỷu khaùc, Trong SQL coù caùc haỡm mỏựu gọửm
COUNT, MAX, MIN, SUM, AVG. Rióng haỡm COUNT khi coù õọỳi sọỳ laỡ * coù nghộa laỡ
õóỳm sọỳ baớng ghi thoớa maợn yóu cỏửu tỗm kióỳm maỡ khọng quan tỏm õóỳn bỏỳt kyỡ cọỹt naỡo.
Vờ du
Cho bióỳt sọỳ lỏửn mỷt haỡng P2 õaợ õổồỹc cung cỏỳp
SELECT COUNT(*)
FROM SP
WHERE P#=P2
Tỗm hióỷu sọỳ mỷt haỡng P1 baùn mọỹt lỏửn nhióửu nhỏỳt vaỡ mọỹt lỏửn ờt nhỏỳt cuớa haợng S1
SELECT MAX(QTY) - MIN(QTY)
FROM SP
WHERE S#=S1 AND P#=P1
Tỗm kióỳm nhồỡ móỷnh õóử GROUPE BY
Tỗm maợ sọỳ nhổợng mỷt haỡng maỡ mọựi nhaỡ cung cỏỳp õaợ cung cỏỳp cho khaùch haỡng.
SELECT S#,P#

FROM SP
GROUPE BY S#
trong móỷnh õóử naỡy baớng dổợ lióỷu SP õổồỹc lỏỳy ra, sau õoù phỏn thaỡnh nhoùm theo maợ sọỳ cuớa
ngổồỡi cung cỏỳp (S#). Coù nghộa laỡ caùc bọỹ coù cuỡng giaù trở S# seợ õổồỹc xóỳp lión tióỳp nhau, hóỳt
nhoùm naỡy õóỳn nhoùm khaùc.
Tỗm kióỳm nhồỡ móỷnh õóử HAVING
Móỷnh õóử HAVING thổồỡng õổồỹc sổớ duỷng cuỡng móỷnh õóử GROUP BY. Sau HAVING la bióứu
thổùc õióửu kióỷn. Bióứu thổùc õióửu kióỷn naỡy khọng taùc õọỹng vaỡo toaỡn baớng õổồỹc chố ra ồớ móỷnh
õóử FROM maỡ chố taùc õọỹnỏửnnnn lổồỹt õóỳn tổỡng nhoùm caùc baớn ghi õaợ chố ra taỷi móỷnh õóử
GOUP BY.
Vờ duỷ: Tỗm maợ sọỳ nhổợng nhaỡ cung cỏỳp õaợ cung cỏỳp ờt nhỏỳt hồn hai mỷt haỡng
SELECT S#
FROM SP
GROUP BY S#
HAVING CUONT (DISTINCT P#)>2
Tỗm kióỳm coù sừp xóỳp
Tỗm tón caùc mỷt haỡng maỡu õoớ vaỡ sừp xóỳp theo thổù tổỷ cuớa maợ sọỳ mỷt haỡng
SELECT PNAME,P#
Ngän ngỉỵ SQL

FROM P
WHERE COLOUR = ‘RED’
ORDER BY P# ASC
Mãûnh âãư ORDER BY cho phẹp ta sàõp xãúp cạc cäüt theo thỉï tỉû tàng dáưn (ASC) hồûc gim
dáưn (DESC), ngáưm âënh l ASC
Mãûnh âãư ORDER BY cọ thãø sàõp xãúp theo nhiãưu cäüt. Nãúu nọ âỉïng sau mãûnh âãư GROUP
BY thç miãưn tạc âäüng l tỉìng nhọm ca cäüt âỉåüc chè ra trong mãûnh âãư GROUP BY. Nãúu
cäüt sàõp xãúp cọ màût åí mãûnh âãư SELECT thç trong mãûnh âãư ORDER BY cọ thãø chè cáưn chè
ra säú thỉï tỉû ca cäüt âọ trong danh sạch tham chiãúu l â.



trong vê dủ trãn ta cọ thãø viãút
SELECT PNAME,P#
FROM P
WHERE COLOUR = ‘RED’
ORDER BY 2 ASC

Tçm kiãúm våïi cáu hi phỉïc tảp
Trong pháưn ny s trçnh by viãûc tçm kiãúm dỉỵ liãûu trãn nhiãưu bng thäng qua phẹp kãút näúi
hồûc viãûc sỉí dủng cạc ạnh xả läưng.
Kh nàng kãút näúi dỉỵ liãûu
Trong phẹp kãút näúi, cạc cäüt tham gia kãút näúi phi cọ miãưn trë l so sạnh âỉåüc våïi nhau. Tãn
cäüt ca cạc bng khạc nhau cọ thãø viãút tỉåìng minh qua tãn bng.
Vê Dủ:
Våïi mäùi màût hng âỉåüc cung cáúp , hy cho biãút m säú ca màût hng v âëa chè ca hng
â cung cáúp màût hng âọ.
SELECT DISTINCT P#, CITY
FROM SP, S
WHERE SP.S# =S.S#
nh xả läưng
Ta cọ thãø sỉí dủng nhỉỵng mãûnh âãư SELECT läưng nhau
Vê dủ:
Tçm tãn nhỉỵng hng â cung cáúp màût hng P2
SELECT SNAME
FROM S
WHERE S# IN( SELECT S#
FROM SP
WHERE P#=’P2’)
Ngän ngỉỵ SQL



Phẹp läưng nhau cọ thãø läưng nhiãưu mỉïc hồûc sỉí dủng sỉû dáùn tr giỉỵa cạc khäúi mäùi khi
hỉåïng tåïi mäüt bng khạc nhau
Vê dủ: Tçm tãn cạc hng khäng cung ỉïng màût hng P1
SELECT SNAME
FROM S
WHERE ‘P1’ NOT IN
SELECT P#
FROM SP
WHERE S#= S.S#
Trong SQL cn cho phẹp tçm kiãúm trãn nhiãưu bng nhåì mãûnh â EXISTS (täưn tải)
Vê dủ:


Tçm kiãúm nhỉỵng nh cung cáúp â cung cáúp êt nháút mäüt màût hng no âọ
SELECT *
FROM S
WHERE EXISTS
(SELECT *
FROM SP
WHERE SP.S#=S.S#)
Hồûc cọ thãø biãøu diãùn bàòng cạch khạc
SELECT *
FROM S
WHERE 0<
(SELECT COUNT(*)
FROM SP
WHERE SP.S#=S.S#)
Tçm kiãúm cọ sỉí dủng lỉåüng tỉì ANY v ALL
Tçm tãn nhỉỵng màût hng cọ m säú màût hng l màût hng no âọ m hng S1 â cung cáúp

SELECT PNAME
FROM P
WHERE P#= ANY
SELECT P#
FROM SP
WHERE S#=’S1’
Tçm tãn nhỉỵng nh cung cáúp cung cáúp êt nháút mäüt màût hng mu â
SELECT SNAME
Ngän ngỉỵ SQL

FROM S
WHERE S#= ANY
SELECT S#
FROM SP,S,P
WHERE S.S#=SP.S# AND P.P#=SP.P# AND COLOUR=’RED’
Tçm m säú nhỉỵng nh cung cáúp säú lỉåüng mäyt láưn mäüt màût hng no âọ låïn hån hồûc bàòng
säú lỉåüng mäùi láưn cung ỉïng ca hng
SELECT S#
FROM SP
WHERE QTY >= ALL
SELECT QTY
FROM SP
Mãûnh âãư trãn hon ton tỉång âỉång våïi
SELECT S#
FROM SP
WHERE QTY = (SELECT MAX( QTY)
FROM SP)
Tçm nhỉỵng hng chỉa hoảt âäüng
SELECT *
FROM S

WHERE NOT EXISTS
SELECT *
FROM SP
WHERE SP.S# = S.S#
Chụ mãûnh âãư NOT EXISTS cọ giạ trë âụng (True) nãúu kãút qu ca cáu hi sau nọ l mäüt
táûp räùng.

Tçm kiãúm cọ chỉïa phẹp tênh táûp håüp
Tçm m säú nhỉỵng hng hiãûn thåìi chỉa cung cáúp mäüt màût hng no c
SELECT S#
FROM S
MINUS
SELECT S#
FROM SP
Tçm tãn cạc hng cung cáúp, cung cáúp táút c cạc màût hng
SELECT SNAME
FROM S
WHERE ( SELECT P#
Ngọn ngổợ SQL

FRPM SP
WHERE S#=S.S#) = (SELECT P#
FRPM P)

3. Caùc lóỷnh cỏỷp nhỏỷt dổợ lióỷu
Thóm mọỹt bọỹ vaỡo trong quan hóỷ
Cuù phaùp: INSERT INTO Tón_Baớng(Danh saùch tón cọỹt)
VALUES(Danh saùch caùc trở)
[cỏu hoới con]
Vờ duỷ: coù thóứ bọứ sung mọỹt tỏỷp caùc baớn ghi laỡ kóỳt quaớ xổớ lyù cuớa mọỹt cỏu hoới naỡo õoù, chún

haỷn:
Giaớ sổớ ta coù baớng W coù cuỡng lổồỹc õọử nhổ baớng P. khi õoù móỷnh õóử sau õỏy seợ bọứ sung vaỡo
baớng P tỏỳt caớ nổợng bọỹ tổỡ baớng W nhổợng mỷt haỡng coù mỏửu õoớ

INSERT INTO P
SELECT *
FROM W
WHERE COLOUR =RED


+ Xoùa caùc bọỹ
Cuù phaùp DELETE FROM tón_baớng
[WHERE btõk]
Vờ duỷ:
Loaỷi boớ haợng S1 ra khoới baớng S
DELETE
FROM S
WHERE S#=S1
Loỹai boớ caùcmỷt haỡng õổồỹc cung cỏỳp sau ngaỡy 20 -5- 1994
DELETE
FROM SP
WHERE SDATE >1994-5-20
Loaỷi boớ caùc haợng chổa cung cỏỳp mỷt haỡng naỡo
DELETE
FROM S
WHERE S# NOT IN (SELECT S# FROM SP)

+ Sổớa õọứi dổợ lióỷu
Ngän ngỉỵ SQL


Cụ phạp: UPDATE [Tãn_bng]
SET [Tãn_cäüt=Biãøu thỉïc, ]
[FROM Tãn_Bng]
[WHERE btâk]
Vê dủ:
Âäøi mu cạc màût hng P2 thnh mu vng
UPDATE P
SET COLOUR =’ YELLOW’
WHERE P#= ‘ P2’
+ Thãm mäüt cäüt vo bng
Cụ phạp: ALTER TABLE Tãn_Bng
[ADD/MODIFY][(Tãn_cäüt Kiãøu dỉỵ liãûu ]
ADD: Thãm cäüt måïi vo
MODIFY : Sỉía cäüt d cọ trong quan hãû
Vê dủ: thãm cäüt DONGIA ( âån giạ) cho bng SP våïi kiãøu dỉỵ liãûu dảng säú tháûp phán
ALTER TABLE SP ADD DONGIA DECIMAL(8.2)
+ Xọa bng:
cụ phạp: DROP TABLE Tãn_bng
Xọa VIEW
Cụ phạp DROP VIEW Tãn_view
Tảo tãûp chè säú
Trong SQL khäng cọ cå chãú tỉû âäüng tảo tãûp chè säú cho cạc cäüt ca bng. Viãûc tảo tãûp chè
säú do ngỉåìi dng thủc hiãûn.
Cụ phạp nhỉ sau: CREATE [UNIQUE] INDEX tãn_tãûp_chè_säú ON tãn_bng (tãn_cäüt
[ASC|DESC])
Hy b chè säú thç sỉí dủng mãûnh âãư
DROP INDEX tãn_tãûp_chè_säú
Vê dủ:tảo tãûp chè säú 13 theo cäüt City tàng dáưn ca bng S
CREATE INDEX 13 ON S(CITY ASC)
Trong SQL cọ thãø täø chỉïc âa chè säú, tỉïc l täø chỉïc mäüt tãûp chè säú cho nhiãưu cäüt, mäùi cäüt

cọ thãø cọ chiãưu tàng gim khạc nhau, thỉï tỉû âỉåüc tênh tỉì trại qua phi
Vê dủ tảo tãûp chè säú 14 cho bng SP theo cäüt S# tàng dáưn v theo cäüt P# gim dáưn
CREATE INDEX 14 ON SP(S# ASC, P# DESC)

4. Cạc mãûnh âãư an ton dỉỵ liãûu
Âáy l úu täú khäng thãø thiãúu âỉåüc âäúi våïi mäüt hãû qun trë Cå Såí Dỉỵ Liãûu âãø bo vãû dỉỵ
liãûu v ngàn chàûn nhỉỵng ngỉåìi khäng âỉåüc phẹp truy cáûp. Cạc quưn truy cáûp vo Cå Såí
Ngän ngỉỵ SQL

Dỉỵ Liãûu gäưm: Read(âc), Write(ghi), Insert(bäø sung), Update(Sỉía
âäøi),Select(chn),Delete(xọa)Run(chảy).
Viãûc phán phạt quưn truy cáûp vo Cå Såí Dỉỵ Liãûu do ngỉåìi qun trë Cå Såí Dỉỵ Liãûu do
ngỉåìi qun trë Cå Såí Dỉỵ Liãûu (database administrator -DBA) thỉûc hiãûn båíi lãûnh sau:
Giạn quưn truy cáûp cho ngỉåìi sỉí dủng: Lãûnh GRANT
cụ phạp: GRANT Quưn truy cáûp ON Tãn_bng/view TO Tãn_User [ with GRANT
option]
Tỉì khọa
with GRANT option
âãø cho ngỉåìi âỉåüc cáúp quưn cọ thãø tiãúp tủc trao quưn cho
ngỉåìi khạc. Nãúu tãn_User l
Public
hồûc
Word
thç cọ nghéa l cho mi ngỉåìi sỉí dủng.
Vê dủ: trao quưn sỉí dủng bng S cho cä Häưng
GRANT READ ON S TO HONG
with GRANT option
Lãûnh ny cä Häưng cọ thãø trao quưn âc bng S cho ngỉåìi dng khạc
Hy b quưn truy cáûp:
REVOKE Tãn_quưn ON tãn_bng FROM Tãn_User

vê dủ:Rụt lải quưn âc bng S ca User Häưng
REVOKE READ ON S FROM HONG



×