Object privileges Các quy n này du c gán cho ngu i dùng trên các d i tu ng CSDL sau: Table: select, insert, update, delete, alter, debug, flashback, on commit refresh, query rewrite, re
Trang 1KHOA CÔNG NGH THÔNG TIN & TRUY N THÔNG
Trang 2Sau khi h c xong môn này, sinh viên có th :
K t n i v i CSDL trên server, t o/xóa/thay d i table, t o ch m c, thêm/xóa/thay d i d li u trong
m t table
S d ng thành th o câu l nh SELECT d tr l i câu h i truy v n
S d ng ngôn ng PL/SQL d t o các Stored Procedures / Functions
Thi t l p ràng bu c toàn v n và s d ng Trigger trong Oracle
Qu n lí danh m c h th ng (system catalog) hay meta data
ki n th c tiên quy t và phuong pháp h c t p
Ph n 2 gi i thi u các nét co b n v h qu n tr Oracle Trong dó, gi i thi u so lu c v ph n m m SQL Developer du c s d ng d so n th o và th c thi câu truy v n d li u Ngoài ra, trong ph n này, giáo trình cung trình bày m t cách chi ti t các thao tác c n thi t d có th th c hành
Ph n 3 g m 12 bài th c hành c th M i bài s có b c c g m 4 ph n nhu sau:
1 M c tiêu: nêu rõ m c tiêu rèn luy n c a bài
2 Lý thuy t: cung c p ng n g n ki n th c và các câu l nh c n dùng trong bài
3 Bài t p có hu ng d n
4 Bài t p t làm
III KI N TH C TIÊN QUY T
Nhu m t môn b t bu c, môn h c này du c dua vào gi ng d y cho sinh viên chuyên ngành Công Ngh Thông Tin v i yêu c u sinh viên dã h c xong môn H Co S D Li u (CT106)
IV PHUONG PHÁP H C T P
V i m c tiêu nâng cao kh nang t h c t p và t nghiên c u c a sinh viên, ngu i so n dã c g ng
l ng ghép vào n i dung các ví d minh h a don gi n, c th ; d ng th i b trí b c c v i mong mu n
t o s d hi u cho sinh viên và ngu i d c
Ð h c t t môn h c này, tru c h t sinh viên c n ph i:
T nghiên c u tài li u hu ng d n, d c bi t là ph n 1 và ph n 2
Tru c m i bu i th c hành, sinh viên c n dành kho ng 30 phút d xem l i ph n lý thuy t c a câu l nh s th c hành (ph n 1 và 2 c a m i bài + tài li u tham kh o n u c n thi t)
Trang 3
Khoa CNTT & TT - ÐHCT
Trong m i bu i th c hành, sinh viên th c hi n các yêu c u theo hu ng d n trong bài Sinh viên
c n ph i t suy nghi tìm ra dáp án cho các câu h i bài t p tru c khi tham kh o dáp án c a giáo viên cung c p
M i bu i sinh viên c n ph i hoàn t t ít nh t là ph n bài t p có hu ng d n Còn ph n bài t p t làm sinh viên ph i t hoàn t t tru c khi ti n hành bài th c hành ti p theo
Trang 4Các h qu n tr co s d li u (CSDL) d u dùng c b nh máy tính và các thi t b luu tr nhu c ng
d ho t d ng Các c ng cung c p kh nang luu tr lâu dài và m t không gian r ng l n d ch a hàng tri u m u tin có th lên d n hàng gigabyte Tuy nhiên, truy c p d li u t c ng ch m hon nhi u so
v i truy c p t b nh Vì th các h co s d li u d u s d ng b nh vào vi c n p tru c d li u
nh m tang t c d truy v n
Trong Oracle, m t co s d li u (database) là m t t p h p các t p tin h th ng luu tr d li u do ngu i dùng ho c chuong trình dua vào và thông tin v c u trúc c a co s d li u (metadata) Ð có th truy
v n và c p nh t CSDL, Oracle ph i kh i d ng m t s ti n trình n n và c p phát m t vài vùng nh s
d ng trong su t quá trình thao tác trên CSDL
Khi m t CSDL du c kh i d ng (start), m t SGA (System Global Area) du c c p phát SGA là m t vùng b nh dùng d luu tr d li u và các thông tin di u khi n c a m t th hi n (instance), ngu i dùng khi k t n i d n server du c chia s các d li u có trong SGA Ngoài ra, Oracle cung c p phát các vùng d m b nh d ch a d ng d li u và thông tin di u khi n c a các ti n trình máy ch (server process), PGA du c dùng x lý các câu l nh truy v n SQL, qu n lý truy nh p và các thông tin v phiên làm vi c (session) Ð ng th i, các ti n trình n n c a Oracle cung du c kích ho t Các ti n trình này có nhi m v qu n lý c u trúc b nh , d ng b hóa d li u vào ra c ng và các nhi m v b o trì
t ng quát khác (ghi nh t ký, ph c h i…) S k t h p gi a SGA, PGA và các ti n trình n n du c g i là
th hi n CSDL (Database Instance ho c Oracle Instance)
Nhìn chung, m i th hi n có m t t p h p các ti n trình duy trì và thúc ép m i quan h gi a c u trúc
v t lý c a CSDL và c u trúc b nh S lu ng các ti n trình ph thu c vào c u hình c a m i th hi n CSDL Trong m t server, nhi u CSDL có th t n t i song song Vì v y, d không b l n l n gi a các CSDL khác nhau, m i th hi n CSDL du c nh n d ng b ng m t SID riêng bi t (System Identifier)
M t CSDL có th du c m (open hay mount) b i nhi u hon m t th hi n, nhung m t th hi n ch có
Trang 5Ð tham kh o các b ng và khung nhìn c a t di n d li u, s d ng câu l nh:
select * from DICT[IONARY]
3 Schema và Schema Object
Schema là m t t p h p các d i tu ng CSDL (database object ho c schema object) thu c v m t ngu i dùng M i ngu i dùng trong 1 CSDL s h u duy nh t m t schema có tên trùng v i tên ngu i dùng, ngu c l i m i schema ch tuong ng v i m t ngu i dùng mà thôi Schema Object là c u trúc lu n lý liên quan tr c ti p d n d li u c a CSDL, bao g m các c u trúc nhu b ng (table), khung nhìn (view), các th t c tr s n (stored procedure)…
II C U TRÚC CO S D LI U TRONG ORACLE
T p h p các extent du c c p phát d luu tr các c u trúc d li u nh t d nh và các extent này
du c luu tr trong cùng m t tablespace Ví d , d li u c a m t b ng du c luu trong m t table segment, các ch m c du c luu trong các index segment… Khi các extent c p phát cho segment d y d li u, Oracle s c p phát thêm extent cho segment dó Vì các extent du c c p phát khi c n thi t nên các extent trong cùng m t segment có th không liên t c trong b nh Oracle cung c p m t lo i segment d c bi t du c g i là rollback segment Segment này không
ch a các d i tu ng CSDL, mà ch a “hình nh tru c” (before image) c a d li u du c thay
d i trong khi m t giao tác chua hoàn thành Các thay d i trên d li u có th du c cu n l i
b ng cách s d ng segment này
c Tablespace
Tuong duong m t phân vùng lu n lý c a co s d li u T t c các d i tu ng c a co s d li u
d u du c luu tr trong các tablespace M t co s d li u có ít nh t m t tablespace mang tên SYSTEM ch a t di n d li u (data dictionary) Các tablespace khác du c t o ra nh m ph c
v cho các ng d ng và các tác v khác nhau
Gi a schema và tablespace không có m i liên quan v i nhau Các d i tu ng trong 1 schema
có th t n t i trong các tablespace khác nhau Ngu c l i, Các tablespace có th luu tr các d i
tu ng trong các schema khác nhau
d Database
M t CSDL g m m t ho c nhi u vùng nh c g i là tablespace dùng d luu tr d li u
Trang 6Ðon v luu tr nh nh t du c dùng trong co s d li u, du c xác d nh b i m t s byte nh t
d nh trong vùng nh v t lý c a co s d li u Ð l n c a data block du c xác d nh khi co s
d li u du c t o ra
Hình 2 M i quan h gi a Data block, extent và segment
b Datafile
V m t lu n lý, Oracle luu tr d li u trong các tablespace V m t v t lý, các d li u này
du c luu tr trong các datafiles (có ph n m r ng là dbf) tuong ng v i tablespace B n ch t
c a m t co s d li u là m t t p h p các datafiles du c luu tr trên các thi t b khác nhau nhu dia t , dia quang h c…
Hình 3 M i tuong quan gi a datafiles và tablespace
Ngoài các datafiles c a co s d li u, còn t n t i 3 lo i t p tin khác k t h p v i m t th hi n
co s d li u (database instance):
Redo-log file (*.rdo ho c *.log): m i th hi n co s d li u duy trì m t t p h p các
t p tin d ng này d ghi l i toàn b các giao tác (transaction) Khi CSDL b l i, các t p tin nh t ký du c dùng d ph c h i l i d li u
Control file (*.ctl): m i th hi n co s d li u có ít nh t 1 t p tin d ng này Nó r t c n thi t cho ho t d ng bình thu ng c a CSDL Các t p tin này du c c p nh t thu ng
Trang 8Oracle d nh nghia 3 lo i không gian d li u khác nhau:
Không gian d li u c d nh (permanent tablespace) ch a các d i tu ng CSDL t n t i lâu dài (persistent schema objects), các d i tu ng này du c luu trong datafile
Undo tablespace là m t ki u không gian d li u c d nh du c dùng d qu n lý vi c hoàn tác
d li u (undo data) n u co s d li u du c d t du i ch d qu n lý hoàn tác t d ng (automatic undo management) Oracle khuy n cáo s d ng undo tablespace thay vì s d ng rollback segment cho vi c hoàn tác d li u
Không gian d li u t m th i (temporary tablespace) ch a các d i tu ng CSDL trong m t phiên làm vi c Tablespace d ng này du c dùng d qu n lý vùng nh cho các thao tác s p
x p (sort operations) trên CSDL Ví d , n u ta k t n i hai b ng d li u r t l n, Oracle không
th th c hi n thao tác s p x p trong b nh , m t vùng nh s du c c p phát trong temporary tablespace d th c hi n thao tác này Các l nh SQL c n cung c p vùng nh th c hi n thao tác s p x p g m: CREATE INDEX, ANALYZE, Select DISTINCT, ORDER BY, GROUP
BY, UNION, INTERSECT, MINUS,…
Trong bài gi ng này, chúng ta ch quan tâm d n permanent tablespace
2 B ng d li u
B ng d li u du c d nh danh duy nh t b i tên và bao g m nhi u hàng luu tr d li u, m i hàng
du c g i là 1 tuple hay 1 record M t b ng d li u có th có nhi u c t M i c t du c d nh nghia
b i 1 tên và 1 ki u d li u, mô t thu c tính c a 1 b (tuple) M t b ng d li u có th có t i da
254 c t có ki u d li u gi ng nhau ho c khác nhau
IV CÁC KI U D LI U TRONG ORACLE:
number(p,s) Ki u s th p phân (10-84 10127) 1894.1204
Integer Ki u s nguyên, t ng ng v i Number(38) 1, 20
Float Ki u s th c, t ng ng v i Number 101.5E5 0.5E-2
Date Ngày tháng (1/1/-4712 31/12/9999) '10-FEB-04' '10/02/04'
Trang 9a System privileges
Có 140 quy n h th ng trong phiên b n Oracle 9.0.1, ta có th tham kh o các quy n này qua
câu l nh SQL:
SELECT name FROM system_privilege_map ;
Tuy nhiên, các quy n h th ng quan tr ng nh t là:
Create session: không có quy n này, ngu i dùng s không truy c p du c CSDL và s
nh n du c l i ORA01-045
Create table Create view Create procedure Sysdba: 5 tác v trong Oracle yêu c u ngu i dùng ph i có quy n này
Kh i d ng CSDL
T t (shutdown) CSDL Luu d phòng CSDL
Ph c h i CSDL
T o CSDL
Ð tham kh o ngu i dùng có quy n sysdba hay sysoper, th c thi câu l nh:
SELECT * FROM v$pwfile_users
b Object privileges
Các quy n này du c gán cho ngu i dùng trên các d i tu ng CSDL sau:
Table: select, insert, update, delete, alter, debug, flashback, on commit refresh, query rewrite, references, all
View: select, insert, update, delete, under, references, flashback, debug
Sequence: alter, select
Package, procedure, function: execute, debug
Materialized view: delete, flashback, insert, select, update
Directory: read, write
Trang 10
Khoa CNTT & TT - ÐHCT
a Roles du c d nh nghia tru c (predefined roles)
Các role này du c d nh nghia s n khi m t CSDL du c t o m i, các role co b n bao g m:
Connect du c gán các quy n: create session, alter session, create synonym, create view, create database link, create table, create cluster và create sequence
Resource g m các quy n c a connect và các quy n: create table , create cluster, create sequence, create trigger create procedure, create type, create indextype và create operator
Dba du c gán t t c các quy n du c d nh nghia c a Oracle
Ð tham kh o quy n c a các role, ta dùng l nh:
SELECT * FROM DBA_SYS_PRIVS WHERE grantee='<grantee_name>'
b Roles do ngu i dùng d nh nghia (user roles)
Ta có th t d nh nghia m t role cho m t nhóm ngu i dùng CSDL v i các yêu c u quy n chung ph bi n c a nhóm
VI NG I DÙNG
Ngu i dùng co s d li u tuong ng v i m t truy c p (login) du c gán m t s quy n nh t d nh Các thông tin v ngu i dùng du c luu trong t di n d li u và ngu i dùng du c c p phát m t vùng b nh (tuong ng v i m t schema) luu tr các d i tu ng CSDL
Các bu c t o ngu i dùng trong 1 CSDL Oracle:
T o các tablespace c n thi t dành cho ngu i dùng (n u c n thi t)
T o ngu i dùng
Gán các quy n cho ngu i dùng
VII IMPORT VÀ EXPORT
1 Gi i thi u
Ch c nang export cho phép xu t n i dung lu n lý c a m t CSDL vào m t t p tin nh phân d nh nghia
b i Oracle du c g i là t p tin dump Ch c nang import s dùng t p tin này d t o l i các d i tu ng CSDL T p tin dump m t CSDL có th du c dùng d t o l i d li u trên cùng m t CSDL ho c trên
m t CSDL khác, ngay c khi các CSDL này du c cài d t du i nh ng c u hình ph n c ng và ph n
m m khác nhau Ví d , t p tin dump c a m t CSDL trên h di u hành Windows có th dùng d t o l i các d i tu ng CSDL trên h di u hành Linux
Trong Windows, d th c hi n 2 ch c nang này ta dùng 2 l nh h th ng exp và imp (th c thi trong windows command console)
2 Các phuong th c c a ch c nang import và export
a C p d CSDL
Ðây là phuong th c ph c t p nh t V i ch c nang export, t t c các d i tu ng c a CSDL
du c xu t ra t p tin dump tr các d i tu ng c a m t s ngu i dùng nhu: SYS, ORDSYS, CTXSYS, MDSYS, và ORDPLUGINS Ð ng th i, t p tin dump bao g m các thông tin liên quan d n c u trúc c a CSDL nhu d nh nghia các tablespace và các segments rollback… V i
ch c nang import, t t c các d i tu ng s du c t o l i trong CSDL dích Tham s FULL cho phép xác d nh phuong th c này trong các ch c nang import và export
Chú ý : trong tru ng h p import c CSDL, c n ph i t o l i t t c ngu i dùng và các quy n tuong ng trong CSDL ngu n
Trang 11
Khoa CNTT & TT - ÐHCT
b C p d ngu i dùng
T t c các d i tu ng c a ngu i dùng bao g m các b ng d li u, th t c, trigger… d u du c
xu t ra t p tin dump Trong ch c nang export, tham s OWNER cho phép ch d nh các d i
tu ng c a ngu i dùng c n xu t V i ch c nang import, tham s FROMUSER ch d nh t o l i các d i tu ng c a ngu i dùng nào trong t p tin dump và tham s TOUSER ch d nh ngu i
Hành d ng Quy n ho c vai trò c n thi t
Export schema c a ngu i dùng khác SYSDBA, EXP_FULL_DATABASE và DBA Export toàn b CSDL ho c tablespace EXP_FULL_DATABASE
li u gi a ng d ng khách và máy ch Nó có nhi m v thi t l p, qu n lý k t n i m ng và trao d i các thông di p (messages) gi a trình khách và máy ch
Phiên k t n i m ng du c thi t l p thông qua listener module, m t ti n trình d c l p c a máy ch CSDL Listener nh n các yêu c u k t n i c a trình khách và qu n lý vi c d n du ng d n máy ch M i khi trình khách yêu c u k t n i, listener nh n yêu c u này N u thông tin cung c p b i trình khách tuong ng v i các thông tin c a listener, trình khách du c phép truy c p d n máy ch
Ð yêu c u thi t l p k t n i, ngu i dùng ph i g i di tên tài kho n và m t kh u cùng v i m t d nh danh
(identifier) c a d ch v c n k t n i Ð nh danh này du c g i là d nh danh k t n i cho phép xác d nh:
D ch v c n k t n i
Ðu ng d n m ng d n d ch v này
Ð nh danh k t n i có th du c bi u th b ng nhi u cách Cách th c du c áp d ng r ng rãi nh t là tên
d ch v m ng (net service name) tuong ng v i m t mô t k t n i (connect descriptor) Mô t này
Trang 12
Khoa CNTT & TT - ÐHCT
ch a d ng các thông tin v d ch v c n k tn i và du ng d n m ng D ch v du c xác d nh b i tên c a
d ch v (tên c a CSDL) Ðu ng d n m ng cung c p các thông tin v d a ch m ng, c ng ho t d ng và
giao th c m ng s d ng c a Listener
Khi yêu c u k t n i, client g i phuong th c Service Naming d thi t l p liên l c v i Listener du c ch
d nh trong mô t k t n i Listener ch p nh n k t n i v i client thông qua m t giao th c m ng Nó so
sánh các thông tin do client cung c p v i các thông tin tuong ng du c cung c p b i d ch v CSDL,
n u các thông tin này kh p nhau, k t n i s du c phép thi t l p gi a client và database server
Hình 6 Ki n trúc Client-Server trong m ng Oracle
Phuong th c giao ti p m ng (netword protocol) thu ng du c s d ng trong m ng Oracle là TCP/IP,
có c ng m c d nh 1521 Ngoài ra, d i v i l p trình viên và qu n tr viên, ng d ng phía trình khách (application client) là ng d ng c a nhà phát tri n th ba (third party), cung c p m t giao di n tuong tác thân thi n v i h qu n tr Oracle Hi n nay, các ng d ng này du c phát tri n r t nhi u trên th
gi i nhu Maestro, SQL Navigator, Oracle SQL developer…
Trang 13Làm quen v i Oracle (k t n i v i server, t o/xóa/thay d i/khôi ph c database, t o/xóa/thay d i table,
t o ch m c, thêm/xóa/thay d i d li u trong m t table )
II LÝ THUY T
Các câu l nh SQL s d ng trong bài này
1 Cú pháp câu l nh t o b ng d li u
CREATE [GLOBAL TEMPORARY] TABLE [<tên schema>.]<tên table>
( <tên c t> <ki u c t> [DEFAULT <bi u th c m c d nh>] [Các ràng bu c trên c t]
[,<tên c t> <ki u c t> [, ]]
[, Các ràng bu c trên b ng] ) ;Các ràng bu c (RB) trên c t có th bao g m m t ho c nhi u lo i sau:
[CONSTRAINT <tên RB>] {UNIQUE|PRIMARY KEY}
[CONSTRAINT <tên RB>] CHECK(<di u ki n ki m tra>) [CONSTRAINT <tên RB>] [NOT] NULL
[CONSTRAINT <tên RB>] REFERENCES <tên b ng> [(<DS tên c t khóa chính>)] [ON DELETE {CASCADE|SET NULL}]
Các ràng bu c trên b ng có th bao g m m t ho c nhi u lo i sau:
CONSTRAINT <tên RB> {UNIQUE|PRIMARY KEY}(<tên c t> [,<tên c t> ]) CONSTRAINT <tên RB> CHECK(<di u ki n ki m tra>)
CONSTRAINT <tên RB> FOREIGN KEY (<DS c t>) REFERENCES <tên table> [(<DS c t khóa chính>)]
[ON DELETE {CASCADE|SET NULL}]
DCHI NVARCHAR2(30), DTHOAI VARCHAR(10) ) ;
Trang 14
Khoa CNTT & TT - ÐHCT
CREATE TABLE NHANVIEN(
MANV VARCHAR(10) PRIMARY KEY, TENNV NVARCHAR2(30),
NGAYSINH DATE, DCHI NVARCHAR2(30), MACH INTEGER CONSTRAINT NV_FK REFERENCES CUAHANG(MACH) ) ;
2 Cú pháp câu l nh s a i b ng d li u
ALTER TABLE <tên b ng>
< nh ngh a thay i> [,< nh ngh a thay i>] ;
nh ngh a thay i:
ADD [COLUMN] (<tên c t> <ki u c t>[, ])
| ADD [CONSTRAINT [<tên RB>]]
PRIMARY KEY (<tên c t>[, ])
| ADD [CONSTRAINT [<tên RB>]]
FOREIGN KEY (<tên c t>, ) REFERENCES <tên table> [(<DS c t khóa chính>)]
| ALTER [COLUMN] <tên c t> {SET DEFAULT <bi u th c> | DROP DEFAULT}
| DROP [COLUMN] <tên c t>
| DROP PRIMARY KEY
| DROP FOREIGN KEY <tên RB>
| RENAME TO <tên b ng>
Ví d : Xóa ràng bu c khóa ngo i c a b ng NHANVIEN
ALTER TABLE NHANVIEN DROP CONSTRAINT NV_FK ;
T o l i ràng bu c khóa ngo i c a b ng NHANVIEN
ALTER TABLE NHANVIEN ADD CONSTRAINT NV_FK FOREIGN KEY (MACH) REFERENCES CUAHANG(MACH) ;
3 Cú pháp xóa b ng d li u
DROP TABLE tbl_name [, tbl_name] [CASCADE CONSTRAINTS]
CASCADE CONSTRAINTS: xóa các ràng bu c toàn v n liên quan n các khóa chính trong
b ng N u b qua t khóa này và trong b ng có t n t i các ràng bu c toàn v n liên quan ncác b ng khác, Oracle báo l i và không th c thi câu l nh này
Ví d :
DROP TABLE NHANVIEN CASCADE CONSTRAINTS ;
4 Cú pháp l nh chèn record vào b ng
INSERT INTO <table> [(<column i, , column j>)]
VALUES (<value i, , value j>) ;
Trang 15UPDATE <table> SET
<column i> = <expression i>, , <column j> = <expression j>
[WHERE <condition>];
Ví d :
UPDATE CUAHANG SET TENCH='CUA HANG CUA TOI' WHERE MACH=1;
6 Cú pháp l nh xóa record trong b ng
DELETE FROM <table> [WHERE <condition>];
File Tên t p tin DUMP expdat.dmp X X
Fromuser Tên ngu i dùng du c Export X
Tablespace Imp/Exp các d i tu ng du c luu tr
Chú ý: userid=username/password@net_service_name
Trang 16
Khoa CNTT & TT - ÐHCT
Ví d : dùng username u1010666 v i password p1010666, net service name ServerTHOracle
Export toàn b CSDL (full=y) không có d li u(rows=n)
C:\> exp userid=u1010666/p1010666@ServerTHOracle file=c:\backup\export_full.dump log=c:\control\export_full.log full=y rows=n
Export toàn b schema c a ngu i dùng SCOTT
C:\> exp userid= u1010666/p1010666@ServerTHOracle file=c:\backup\export_full.dump log=c:\control\export_full.log owner=scott
Export b ng ACCOUNT trong schema SCOTT
C:\> exp userid= u1010666/p1010666@ServerTHOracle file=c:\backup\export_full.dump log=c:\control\export_full.log tables=scott.account
Import t t c schema
C:\> imp userid= u1010666/p1010666@ServerTHOracle file=c:\backup\export_full.dump log=c:\control\export_full.log
Import các d i tu ng c a SCOTT vào schema TEST
C:\> imp userid= u1010666/p1010666@ServerTHOracle =c:\backup\export_full.dump log=c:\control\export_full.log fromuser=scott touser=test
Import b ng ACCOUNT c a SCOTT vào schema TEST
C:\> imp userid= u1010666/p1010666@ServerTHOracle file=c:\backup\export_full.dump log=c:\control\export_full.log fromuser=scott touser=test tables=scott.account
III BÀI T P CÓ H NG D N
Yêu c u:thi t l p k t n i CSDL qua Oracle Net Manager và Oracle SQL Developer 1.5
Oracle Net Manager v i m t giao di n thân thi n ngu i dùng là m t công c du c thi t k cho vi c
c u hình và qu n lý môi tru ng m ng c a Oracle d dàng hon
Thi t l p net service name
M chuong trình Oracle Net Manager (Start Programs Oracle Configuration and Migration Tools Net Manager)
Vào m c Local Service naming
Hình 7 Oracle Net Manager
Ch n m c Service Naming, kích chu t vào d u pane bên trái d t o m t net service name v i các thông s th c hi n k t n i v i server CSDL
Trang 17
Khoa CNTT & TT - ÐHCT
Hình 8 Ð t Net Service Name
Ð t Net Service Name là ServerTHOracle (sinh viên có th d t tên tùy ý) Ch n Next
Hình 9 Ch n giao th c m ng du c s d ng
Ch n Protocol TCP/IP Ch n Next
Hình 10 Các thi t l p c a giao th c
Trong bu c này, thi t l p các thông s nhu sau
Host Name: tên server ho c d a ch IP trong m ng, thi t l p 172.16.1.66
Port Number: c ng 1521 m c d nh
Ch n Next
Hình 11 Thi t l p tên service
Service Name: chính là tên CSDL c n truy c p d n (Global Database Name)
172.16.1.66
Trang 18Hình 14 Xác l p du ng d n d n t p tin java.exe Click vào OK, giao di n SQL Developer hi n ra nhu sau:
Hình 15 Giao di n SQL Developer
Trang 19Trong cách k t n i này, các tham s du c thi t l p nhu sau:
Connection name: tên c a k t n i (d t tùy ý)
Username, password: c a ngu i dùng dang nh p
Connection type: basic
Hostname: d a ch IP c a database server
Port m c d nh 1521 SID: tên CSDL c n dang nh p
Các tham s c a k t n i này có th du c luu l i d dùng sau này b ng cách click vào nút Save Ð dang nh p, click vào nút Connect
Chú ý:username và password c a sinh viên du c d nh s n nhu sau
Username = u + MSSV
Password = p + MSSV
Ví d : sinh viên có mã s 1010666 có username u1010666 và password là p1010666
Cách 2:k t n i thông qua Oracle Net
Hình 17 K t n i thông qua Oracle Net
Trong cách k t n i này, các tham s du c thi t l p tuong t cách 1, ch khác 2 tham s :
Trang 20
Khoa CNTT & TT - ÐHCT
Connection type: TNS
Network Alias: ch n net service name dã t o bu c d u tiên
Khi dang nh p thành công, h p tho i m i xu t hi n d thay d i password
Hình 18 Xác l p l i password Xác l p l i password Ch n OK, dang nh p thành công, c a s chính c a SQL Navigator xu t hi n
Hình 19 C a s chính c a SQL Developer
Giao di n du c chia thành 2 ph n:
Ph n bên trái: hi n th các schema objects c a ngu i dùng dang k t n i
Ph n bên ph i: c a s so n th o, th c thi và hi n th k t qu c a các câu l nh SQL, PL/SQL Ngoài ra, Oracle SQL Developer còn h tr m t s ch c nang khác nhu: giao di n d h a thao tác trên các schema objects, tr giúp v ngôn ng SQL và PL/SQL trong module Snippets, qu n lý các l nh SQL dã th c thi v i module SQL History, biên d ch và g r i PL/SQL… Và còn nhi u tính nang khác, sinh viên t tìm hi u trong quá trình th c hành
Trang 21Tham kh o l nh CREATE TABLE t o các b ng theo mô hình MLD sau:
PHONG(MA_PHONG, TEN_PHONG, TRUONG_PHONG )
M i phòng có m t mã duy nh t, m t tên phòng, tru ng phòng là mã nhân viên c a tru ng phòng
NHANVIEN(MA_NV, HTEN_NV, PHAI, CVIEC, LUONG, PHU_CAP, MA_PHONG)
Nhân viên có m t mã duy nh t, m t h tên, phái, công vi c, luong, ph c p và thu c m t phòng nào dó
TÐO_NN(MA_NV, NGOAINGU, BANG_CAP)
M t nhân viên có th bi t nhi u ngo i ng , m i ngo i ng có th có các b ng c p khác nhau
Th c hi n Insert, Update, Delete m t vài tr ng d li u vào các b ng v a t o
2 Yêu c u 2:
Th nghi m import và export
Bu c 1: M command console (Start Run, gõ vào cmd) Tham kh o các tham s c a l nhimp và exp, th c hi n ch c nang import các schema csdl1, csdl2, csdl3, csdl4, csdl5, csdl6, hr
và scott d ph c v cho các bài ti p theo (các t p tin dump do giáo viên cung c p)
Bu c 2:Th c hi n ch c nang export schema, b ng d li u…
Bu c 3: ng v i m i phuong th c export Bu c 2, th c hi n ch c nang import
Trang 22Luy n t p kh nang nh n bi t s thông thuong trong m t co s d li u, t dó k t n i d li u d truy
xu t thông tin c n thi t
II LÝ THUY T
Câu l nh SQL s d ng trong bài này:
SELECT <DS tên c t>
FROM <Tên b ng> [<bí danh>] [, <Tên b ng> [<bí danh>] [, ] ]
[ WHERE <DS các ÐK AND ho c OR v i nhau> ];
T o m t d nh danh(tên g i t t) tham chi u d n m t d i tu ng c a m t schema:
CREATE SYNONYM <tên d nh danh> FOR <tên schema>.<tên object>
III CÁC L I THU NG G P TRONG SQL:
1 Tên c t không tìm th y trong b ng
Thông báo l i:ORA-00904: <tên d nh danh>: invalid identifier
Hu ng gi i quy t:xem l i tên c t (tên thu c tính/tên tru ng) trong câu l nh dã dúng chua
2 Tên b ng không tìm th y
Thông báo l i:ORA-00942: table or view d not exist
Hu ng gi i quy t:xem l i tên b ng d li u trong câu l nh dã dúng chua
3 L i cú pháp
Thông báo l i:ORA-00900: invalid SQL statement
Hu ng gi i quy t: xem l i cú pháp trong câu l nh dã dúng chua, có th sai t khóa (gõ sai các t SELECT, FROM, WHERE, ) ho c thi u d u ngo c c a hàm hay câu select con
4 Tên c t có m t nhi u b ng
Thông báo l i:ORA-00918: column ambiguously defined
Hu ng gi i quy t: xét xem các c t trong m nh d SELECT có t n t i trong nhi u b ng hay không
N u có, tên b ng ho c bí danh c a b ng c n du c tham chi u ph i d t tru c tên c t dó theo cú pháp
<tên b ng ho c bí danh>.<tên c t>
5 Phép so sánh không tuong thích ki u
Thông báo l i:ORA-01722: invalid number
Hu ng gi i quy t:ki m tra l i các phép so sánh trong m nh d WHERE, xem xét các d li u tham gia vào các phép so sánh này có cùng ki u hay chua
Chú ý:trong Oracle, m i l i thông báo t h th ng d u tuong ng v i m t mã (ora code) có d ng
<prefix>-<s th p phân>, <prefix> có th mang các giá tr ORA, PLS, PROC… Ý nghia và cách gi i
quy t các l i này du c mô t chi ti t trên website http://www.ora-code.com
Trang 23
B ng 1 KTRUCSU(HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KTS)
M i ki n trúc su có m t h tên, m t nam sinh, phai, noi t t nghi p, d a ch liên l c Gi s không có hai ki n trúc su trùng tên
B ng 2 CHUTHAU(TEN_THAU, TEL, DCHI_THAU)
M i ch th u xây d ng công trình d u có m t tên th u, m t s di n tho i và m t d a ch Gi s không
có hai ch th u trùng tên
B ng 3 CHUNHAN(TEN_CHU, DCHI_CHU)
M i ch nhân c a m t công trình d u có m t tên ch nhân và m t d a ch Gi s không có hai ch nhân trùng tên
B ng 4 CONGNHAN(HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON)
M i công nhân tham gia xây d ng các công trình d u có m t h tên, m t nam sinh, m t nam vào ngh , và m t chuyên môn nào dó Gi s không có hai công nhân trùng h tên
B ng 5 CGTRINH(STT_CTR, TEN_CTR, DIACHI_CTR, TINH_THANH, KINH_PHI,
TEN_CHU, TEN_THAU, NGAY_BD)
M i công trình có m t s th t , m t tên công trình, m t d a ch , thu c v m t t nh thành nào dó, du c xây d ng v i m t kinh phí (don v tính là tri u d ng), thu c v s h u c a m t ch nhân, do m t ch
th u xây d ng, và du c kh i công xây t m t ngày nào dó
B ng 6 THAMGIA(HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY)
M t công nhân có th tham gia xây d ng nhi u công trình, và m t công trình cung có nhi u công nhân tham gia Khi m t công nhân tham gia vào m t công trình nào dó s du c ghi nh n l i ngày b t d u tham gia và s ngày tham gia
B ng 7 THIETKE(HOTEN_KTS, STT_CTR, THU_LAO)
M t ki n trúc su có th thi t k nhi u công trình, m i công trình cung có th do nhi u ki n trúc su cùng thi t k Khi m t ki n trúc su thi t k m t công trình s có m t thù lao tuong ng
2 Yêu c u 1: Tìm s thông thuong gi a các b ng trong CSDL:
CONGNHAN(HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON) THAMGIA(HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY) KTRUCSU(HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KTS) THIETKE(HOTEN_KTS, STT_CTR, THU_LAO)
CGTRINH(STT_CTR, TEN_CTR, DIACHI_CTR, TINH_THANH, KINH_PHI, TEN_CHU,
TEN_THAU, NGAY_BD)
CHUTHAU(TEN_THAU, TEL, DCHI_THAU)
CHUNHAN(TEN_CHU, DCHI_CHU)
Trang 24
Khoa CNTT & TT - ÐHCT
3 Yêu c u 2: Ð t synonym cho các b ng này t schema CSDL1 Sau dó m các b ng d
li u d xem ki u d li u c a t ng tru ng và quan sát d li u c a t ng b ng
4 Yêu c u 3: Hãy vi t câu l nh SQL d tr l i các câu h i sau:
a Hãy cho bi t tên và d a ch các công trình do ch th u Công ty xây d ng s 6 thi công
Phân tích câu h i:
Yêu c u cho bi t: TEN_CTR, DCHI_CTR l y t b ng: CGTRINH
Ði u ki n: TEN_THAU = 'Cty xd so 6' Trong CSDL, tên th u có m t c hai b ng CGTRINH và CHUTHAU, nên ta ch c n d t ÐK trên b ng CGTRINH dã ch n bu c trên Luu ý: Sinh viên c n ph i m b ng CGTRINH d xem d li u th c t c a b ng; nhu trong tru ng
h p này tên th u Công Ty xây d ng s 6 du c luu tr thành chu i 'cty xd so 6'
Câu truy v n:
Select TEN_CTR, DiaCHI_CTR
From CGTRINH
Where TEN_THAU = 'cty xd so 6';
b Tìm tên và d a ch liên l c c a các ch th u thi công công trình C n Tho do ki n trúc su Lê Kim Dung thi t k
Phân tích câu h i:
Yêu c u cho bi t: TEN_THAU, DCHI_THAU L y t b ng: CHUTHAU
Ði u ki n: TINH_THANH = 'Can tho' Ð t ÐK trên b ng: CGTRINH
Và HOTEN_KTS = 'Le Kim Dung' Trong CSDL, h tên KTS có m t c hai b ng KTRUCSU vàTHIETKE, nhung ta ph i ch n b ng THIETKE, vì b ng này m i cho bi t KTS nào thi t k công trình nào, vì v y ta d t ÐK trên b ng: THIETKE
Nhu v y, ta s truy xu t 3 b ng: CHUTHAU, CGTRINH, THIETKE Ta th y các b ng này d u liên thông v i nhau, nghia là chúng có c t chung, có th n i k t t nhiên du c
Luu ý: Khi câu truy v n truy xu t thông tin t nhi u b ng thì nh ph i:
- Mô t d y d các di u ki n k t n i các b ng
- Các c t chung ph i d t tên b ng (ho c bí danh n u b ng dã có bí danh) phía tru c tên c t, phân cách b ng d u ch m - Khi d t bí danh cho b ng không có t khóa AS
Câu truy v n:
Select distinct a.TEN_THAU, DCHI_THAU
From CHUTHAU a, CGTRINH b, THIETKE c
Where a.TEN_THAU = b.TEN_THAU
And b.STT_CTR = c.STT_CTR
c Hãy cho bi t noi t t nghi p c a các ki n trúc su dã thi t k công trình Khách S n
Qu c T C n Tho
Phân tích câu h i:
Yêu c u cho bi t: NOI_TN L y t b ng: KTRUCSU
Ði u ki n: TEN_CTR = 'KS Quoc Te' Ð t ÐK trên b ng: CGTRINH
Trang 25b ng này không cho bi t KTS nào dã thi t k công trình Khách s n qu c t V y, ta ph i thêm vào
b ng THIETKE trong truy v n
Câu truy v n:
Select NOI_TN
From KTRUCSU a, CGTRINH b, THIETKE c
Where a.HOTEN_KTS = c.HOTEN_KTS And b.STT_CTR = c.STT_CTR
And TEN_CTR = 'khach san quoc te'
d Cho bi t h tên, nam sinh, nam vào ngh c a các công nhân có chuyên môn hàn
ho c di n dã tham gia các công trình mà ch th u Lê Van Son dã trúng th u
Phân tích câu h i:
Yêu c u cho bi t: HOTEN_CN, NAMS_CN, NAM_VAO_N L y t b ng: CONGNHAN
Ði u ki n: CH_MON = 'Han' Ð t ÐK trên b ng: CONGNHAN
Ho c CH_MON = 'Dien'
Và TEN_THAU = 'Le Van Son' Ð t ÐK trên b ng: CGTRINH Nhu v y, ta s truy xu t 2 b ng: CONGNHAN và CGTRINH Tuong t nhu câu c, hai b ng này không cho bi t công nhân nào dã tham gia công trình nào V y, ta ph i thêm vào b ng THAMGIA trong truy v n
Luu ý: Trong danh sách các di u ki n v a có AND v a có OR, ta ph i dùng d u ngo c d ch rõ
th t ki m tra di u ki n
Câu truy v n:
Select HOTEN_CN, NAMS_CN, NAM_VAO_N
From CONGNHAN a, CGTRINH b, THAMGIA c
Where a.HOTEN_CN = c.HOTEN_CN And b.STT_CTR = c.STT_CTR
And ( CH_MON = 'Han' or CH_MON = 'Dien' )
e Nh ng công nhân nào dã b t d u tham gia công trình Khách s n Qu c T C n Tho trong giai do n t ngày 15/12/94 d n ngày 31/12/94, s ngày tuong ng là bao nhiêu
Phân tích câu h i:
Yêu c u cho bi t: HOTEN_CN, NGAY_TGIA, SO_NGAY Ta l y t b ng: THAMGIA (Ta không c n l y t b ng CONGNHAN vì không c n các thông tin khác c a công nhân)
Ði u ki n: NGAY_TGIA thu c '12/15/94' -> '12/31/94' Ð t ÐK trên THAMGIA
TEN_CTR = 'KS Quoc Te' Ð t ÐK trên b ng: CGTRINH
Và TINH_THANH ='Can Tho' Nhu v y, ta s truy xu t 2 b ng: THAMGIA và CGTRINH
Trang 26Select HOTEN_CN, NGAY_TGIA, SO_NGAY
From CGTRINH b, THAMGIA c
Where b.STT_CTR = c.STT_CTR
And NGAY_TGIA between '15-Dec-1994' And '31-Dec-1994'
f Cho bi t tên và d a ch c a công trình mà công nhân Nguy n Hông Vân dang tham gia vào ngày 18/12/94
Phân tích câu h i:
Yêu c u cho bi t: TEN_CTR, DCHI_CTR Ta l y t b ng: CGTRINH
Ði u ki n: Ðang tham gia vào ngày 18/12/94 có nghia là: ngày 18/12/94 ph i n m trong kho ng t ngày b t d u và ngày k t thúc tham gia (ngày k t thúc t c là ngày b t d u tham gia + s ngày tham gia)
NGAY_TGIA <= '12/18/94' NGAY_TGIA + SO_NGAY >= '12/18/94' Ð t ÐK trên THAMGIA HOTEN_CN = 'Nguyen Hong Van'
Câu truy v n:
Select TEN_CTR, DIACHI_CTR
From CGTRINH b, THAMGIA c
Where b.STT_CTR = c.STT_CTR
And NGAY_TGIA <= '18-Dec-1994'
And NGAY_TGIA + SO_NGAY >= '18-Dec-1994'
And HOTEN_CN = 'nguyen hong van';
g Cho bi t h tên và nam sinh c a các ki n trúc su dã t t nghi p thành ph H Chí Minh và dã thi t k ít nh t m t công trình có kinh phí d u tu trên 400 tri u
d ng
Phân tích câu h i:
Yêu c u cho bi t: HOTEN_KTS, NAMS_KTS L y t b ng: KTRUCSU
Ði u ki n: NOI_TN = 'TP HCM' Ð t ÐK trên b ng: KTRUCSU
Và KINH_PHI > 400 Ð t ÐK trên b ng: CGTRINH Nhu v y, ta s truy xu t 2 b ng: KTRUCSU và CGTRINH Tuong t câu c, vì hai b ng này không liên thông nhau nên ta ph i thêm vào b ng THIETKE trong truy v n
Luu ý:
- Vì don v tính c a kinh phí trong CSDL là tri u d ng nên 400 tri u s là 400
- T 'ít nh t m t' trong câu truy v n có th b qua vì n u m t KTS không có công trình nào tho
di u ki n thì khi d t ÐK ch n và k t n i, KTS dó s t d ng b lo i b Quy lu t này áp d ng dúng cho m i câu truy v n
Câu truy v n:
Select a.HOTEN_KTS, NAMS_KTS
From KTRUCSU a, CGTRINH b, THIETKE c
Trang 27B ng 1 BAIBAO(STT_BAI, TUA, MA_THLOAI)
M i bài báo du c dánh m t s th t phân bi t, có m t t a bài và cho bi t nó thu c th lo i nào
B ng 2 BAOTCHI(MA_BAO_TC, TEN, DCHI_TS, TEL, DINH_KY)
M i t báo ho c t p chí có m t mã riêng bi t, có m t tên, m t d a ch toà so n, m t s di n tho i,
và du c xu t b n theo m t d nh k nào dó
B ng 3 THELOAI(MA, DGIAI)
M i th lo i bài báo có m t mã th lo i và m t di n gi i
B ng 4 DANGBAI(STT_BAI, MA_BAO_TC, SO_BAO_TC, TRANG)
M i bài báo khi du c dang trong m t báo ho c t p chí nào dó, thì du c ghi nh n là dã dang trong
s báo ho c s t p chí nào và dang t i trang s m y
B ng 5 PHATHANH(MA_BAO_TC, SO_BAO_TC, NGAY)
M i s báo ho c s t p chí khi du c phát hành s du c ghi nh n ngày phát hành
B ng 6 VIETBAI(STT_BAI, BUT_HIEU)
M i bài báo du c vi t b i m t tác gi mà ta ghi nh n b ng bút hi u
2 Yêu c u 1: Tìm s thông thuong gi a các b ng trong CSDL2
3 Yêu c u 2: Ð t synonym cho các b ng này t schema CSDL2 Sau dó m các b ng d
li u d xem ki u d li u c a t ng tru ng và quan sát d li u c a t ng b ng
4 Yêu c u 3: Hãy vi t câu l nh SQL d tr l i các câu h i sau:
a Tìm tên các báo / t p chí có dang bài c a tác gi Tô Phan Cho bi t dang trên s nào? Ðu c phát hàng vào nh ng ngày nào?
b N i dung c a t p chí Ki n th c ngày nay s 156 g m nh ng bài t a gì? Ðang t trang nào?
c Cho bi t t a và th lo i t t c các bài báo do tác gi Nguy n Tr ng Vinh sáng tác và dã du c dang trên các báo / t p chí xu t b n hàng tu n Cho bi t d ng th i tên và s c a t báo / t p chí tuong ng m i bài du c dang
d Cho bi t các s báo / t p chí và các ngày phát hành tuong ng trong nam 1994 c a t báo Lao
d ng
e T Tu i tr ch nh t s 23 có nh ng bài bút ký nào? (Cho bi t t a c a chúng)
f Cho bi t ngày dang, tên và s c a t báo / t p chí dã dang bài "Chúc vui nam L n"
g Cho bi t tên, d a ch và s di n tho i c a t báo t p chí dã dang bài "Tìm hi u ch t d c sarin" trong tu n l t 23/04/95 d n 30/04/1995
h Tác gi Hàn Ng c C m có nh ng truy n nào dã du c dang trên báo / t p chí? Cho bi t t a c a chúng
i Cho bi t s lu ng bài báo mà t p chí Ki n th c ngày nay dã dang trên t t c các s báo
Trang 28
Khoa CNTT & TT - ÐHCT
j Cho bi t th lo i c a các bài báo do các tác gi có h Lê sáng tác
k Tìm t a các bài tho dã du c dang trên các báo/t p chí trong tu n l t 23/4/95 d n 30/4/95
l Tìm tên các tác gi du c dang bài trên báo C u Chi n Binh
m Tìm tên nh ng báo/t p chí có dang xã lu n In ra tên các bài xã lu n dó và các s báo/t p chí tuong ng
Trang 29Luy n t p câu l nh SELECT l ng nhau d tr l i cho các câu h i c n s d ng phép giao ho c phép
tr Ngoài ra, còn luy n t p kh nang v n d ng các hàm k t t p max, min, sum, count, avg
* Ði u ki n ch a select con có các d ng sau dây:
D ng 1 <Tên c t> <so sánh> (<select con>):
ÐK dúng khi giá tr c a c t so sánh dúng v i giá tr tr v t select con
D ng 2 <Tên c t> <so sánh> ALL (<select con>):
ÐK dúng khi giá tr c a c t so sánh dúng v i t t c các giá tr tr v t select con
D ng 3 <Tên c t> <so sánh> ANY|SOME (<select con>):
ÐK dúng khi giá tr c a c t so sánh dúng v i b t k m t giá tr nào tr v t select con
D ng 4 <Tên c t> [NOT] IN (<select con>):
ÐK dúng khi giá tr c a c t n m trong t p h p các giá tr tr v c a select con
D ng 5 [NOT] EXISTS (<select con>):
Ðk dúng khi k t qu tr v c a select con khác r ng
Các d ng này ph i du c l a ch n s d ng h p l tùy theo k t qu tr v c a select con nhu sau:
Select con tr v : M t c t Nhi u c t
M t dòng D ng 1 D ng 5 Nhi u dòng D ng 2, 3, 4
Trang 30
B ng 1 KTRUCSU(HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KT)
B ng 2 CHUTHAU(TEN_THAU, TEL, DCHI_THAU)
B ng 3 CHUNHAN(TEN_CHU, DCHI_CHU)
B ng 4 CONGNHAN(HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON)
B ng 5 CGTRINH(STT_CTR, TEN_CTR, DIACHI_CTR, TINH_THANH, KINH_PHI, TEN_CHU, TEN_THAU, NGAY_BD)
B ng 6 THAMGIA(HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY)
B ng 7 THIETKE(HOTEN_KTS, STT_CTR, THU_LAO) Tham kh o bài 2 d xem di n gi i cho t ng b ng
2 Yêu c u 1: Hãy vi t câu l nh SQL d tr l i các câu h i sau:
a Cho bi t h tên các ki n trúc su v a thi t k các công trình do Công ty Xây d ng
s 6 thi công, v a thi t k các công trình do ch th u Lê Van Son thi công
Phân tích câu h i:
Có th minh h a câu h i này b ng hình nh giao nhau c a hai t p sau:
V y ta ph i tìm hai t p h p này b ng hai câu l nh SELECT và giao chúng l i v i nhau Tuy nhiên,
vì phép giao không du c h tr tr c ti p nên ta s d ng d ng câu SELECT l ng nhau trong dó s
d ng t khóa IN d k t n i select cha và select con v i nhau (t c là d ng di u ki n ch a select con
s 4 dã d c p trên)
Luu ý: Cách nh n bi t d ng câu h i s d ng phép GIAO d tr l i:
Yêu c u tìm m t <d i tu ng nào dó> v a th c hi n <m t hành d ng> này hay s h u m t <tính
ch t> này, l i v a th c hi n <m t hành d ng> khác hay s h u m t <tính ch t> khác Câu truy v n:
Select distinct HOTEN_KTS From THIETKE a, CGTRINH b
qu c n tìm
Trang 31Th c m c: Hai l nh select trên có th d i ch cho nhau du c không?
Ho c:s d ng select l ng nhau nhu sau:
Select distinct HOTEN_KTS From THIETKE a, CGTRINH b
Where a.STT_CTR = b.STT_CTR
and TEN_THAU = 'cty xd so 6'
and HOTEN_KTS in (Select HOTEN_KTS From THIETKE a, CGTRINH b Where a.STT_CTR = b.STT_CTR
Luu ý: Trong câu SELECT con d ng này (dùng t khóa IN) ta ch du c select m t c t duy nh t (không du c select nhi u c t), và c t select ph i là c t ta d t trong di u ki n ch a select con Trong ví d trên dó là c t hoten_kts
Th c m c: Hai l nh select cha và con có th d i ch cho nhau du c không?
b Cho bi t tên công trình có kinh phí cao nh t
(Select max(KINH_PHI) From CGTRINH);
Luu ý: Ð i v i các câu h i d ng câu h i:
Tìm <d i tu ng> s h u m t <thông s > < l n / nh / nhi u / > nh t
Ta d u ph i s d ng select con trong câu truy v n
c Cho bi t h tên các công nhân có tham gia các công trình C n Tho, nhung không có tham gia công trình Vinh Long
Phân tích câu h i:
Nhu ta bi t CSDL c a ta ch luu tr nh ng thông tin có hay dã x y ra Vì v y d tr l i du c cây
h i này, ta ch có th l y t p h p nh ng công nhân có tham gia C n Tho tr di t p h p nh ng công nhân có tham gia Vinh Long, nhu minh h a trong trong hình sau:
H tên Công Nhân
có tham gia các công trình
H tên Công Nhân
có tham gia các công trình 'Vinh Long'
Vùng bên trái chính là vùng k t
qu c n tìm
Trang 32Luu ý: Cách nh n bi t d ng câu h i s d ng phép TR d tr l i:
Yêu c u tìm m t <d i tu ng nào dó> có th c hi n <m t hành d ng> này hay s h u m t <tính
ch t> này, nhung không (ho c chua) th c hi n <m t hành d ng> khác hay s h u m t <tính
ch t> khác Câu truy v n:
Select distinct HOTEN_CN
From THAMGIA a, CGTRINH b
and TINH_THANH = 'vinh long');
Th c m c: Hai câu select này có th d i ch cho nhau du c không?
Ho c: s d ng l ng nhau nhu sau:
Select distinct HOTEN_CN
From THAMGIA a, CGTRINH b
Where a.STT_CTR = b.STT_CTR
and TINH_THANH = 'can tho'
and HOTEN_CN NOT IN
(Select HOTEN_CN
From THAMGIA a, CGTRINH b
Where a.STT_CTR = b.STT_CTR
and TINH_THANH = 'vinh long');
Th c m c: Select cha va select con c a câu truy v n trên có th d i ch cho nhau du c không?
d Cho bi t tên c a các ch th u dã thi công các công trình có kinh phí l n hon t t c các công trình do ch th u Phòng D ch v S Xây d ng thi công
Phân tích câu h i:
Tru c h t ta ph i dùng m t select d tìm t t c các kinh phí c a các công trình do ch th u Phòng
d ch v s xây d ng thi công Sau dó m t select th 2 d tìm các ch th u thi công các công trình
l n hon t t c các kinh phí này Ta th y hai câu select này có th l ng nhau select th nh t s là select con vì nó du c th c hi n tru c, còn select th 2 s là select cha, và select cha s dùng di u
ki n ch a select con d ng th 2 (có t khóa ALL)
Câu truy v n:
Select TEN_THAU
From CGTRINH
Where KINH_PHI > ALL
(Select KINH_PHI From CGTRINH
Where TEN_THAU = 'phong dich vu so xd');
Th c m c:Câu này ta có th vi t l i b ng cách s d ng d ng di u ki n ch a select con s 1 du c không?
Trang 33Select a.TEN_THAU, DCHI_THAU
From CHUTHAU a, CGTRINH b
Where a.TEN_THAU = b.TEN_THAU
And KINH_PHI = (Select min(KINH_PHI) From CGTRINH);
Th c m c: - D ng câu h i này gi ng câu h i nào trong bài th c hành này?
- Câu này có th s d ng d ng di u ki n ch a select con s 3 hay không?
f Tìm h tên và chuyên môn c a các công nhân tham gia các công trình do ki n trúc
su 'Le Thanh Tung' thi t k
Phân tích câu h i:
Tru c h t ta ph i dùng m t select d tìm s th t các công trình do ki n trúc su Lê Thanh Tùng thi t k Sau dó dùng m t select th 2 d tìm các công nhân dã tham gia vào các công trình tìm
du c Ta th y hai câu select này có th l ng nhau: select th nh t s là select con vì nó du c th c
hi n tru c, còn select th 2 s là select cha, và select cha s dùng di u ki n ch a select con d ng
th 4
Câu truy v n:
Select a.HOTEN_CN, CH_MON
From CONGNHAN a, THAMGIA b
Where a.HOTEN_CN = b.HOTEN_CN and b.STT_CTR IN
(Select STT_CTR From THIETKE
Where HOTEN_KTS = 'le thanh tung');
g Tìm các c p tên ch th u có trúng th u các công trình t i cùng m t thành ph
Phân tích câu h i:
Vì m i dòng trong b ng CGTRINH ch cho bi t ch th u nào thi công công trình nào, nên d tìm
du c nh ng c p ch th u trúng th u các công trình t i cùng thành ph , thì ta ph i m b ng CGTRINH hai l n v i hai bí danh khác nhau, k t n i chúng b ng các di u ki n khác tên th u nhung cùng t nh thành:
a.TEN_THAU <> b.TEN_THAU (1) a.TINH_THANH = b.TINH_THANH
Tuy nhiên, v i di u ki n k t n i nhu v y, ta s nh n du c hai dòng cho m i c p v i th t tên
th u ngu c nhau; ch ng h n: (Le Van Son, Cty xd so 6) và (Cty xd so 6, Le Van Son) Ð kh c
ph c tình tr ng này, ta s a l i di u ki n k t n i (1) b ng:
a.TEN_THAU < b.TEN_THAU Câu truy v n:
Select Distinct c1.TEN_THAU, c2.TEN_THAU, c1.TINH_THANH
Where c1.TEN_THAU < c2.TEN_THAU and c1.TINH_THANH = c2.TINH_THANH;
Trang 34Tru c h t ta ph i dùng m t select d tìm các c p h tên công nhân có tham gia cùng công trình
Sau dó dùng m t select th hai truy xu t t k t qu c a select th nh t d nhóm t ng c p công nhân l i và d m s công trình h tham gia chung v i nhau, ch n ra nh ng c p có s công trình tham gia chung l n hon ho c b ng 2
Vì select th nh t c n du c luu l i tru c khi select th hai th c hi n nên select th nh t s n m trong m nh d FROM c a select th hai
Câu select th nh t hoàn toàn tuong t nhu câu h trên Vì m i dòng trong b ng THAMGIA ch cho bi t công nhân nào tham gia công trình nào, nên d tìm du c nh ng c p công nhân tham gia cùng công trình, thì ta ph i m b ng THAMGIA hai l n v i hai bí danh khác nhau, k t n i chúng
b ng các di u ki n:
a.HOTEN_CN <> b.HOTEN_CN (1) a.STT_CTR = b.STT_CTR
Tuy nhiên, v i di u ki n k t n i nhu v y, ta s nh n du c hai dòng cho m i c p v i th t h tên ngu c nhau; ch ng h n: (Nguyen Van A, Tran Thi B) và (Tran Thi B, Nguyen Van A) Ð kh c
ph c tình tr ng này, ta s a l i di u ki n k t n i (1) b ng:
a.HOTEN_CN < b.HOTEN_CN Câu truy v n:
Select t1.HOTEN_CN As cn1, t2.HOTEN_CN As cn2, t1.STT_CTR
From THAMGIA t1, THAMGIA t2
Where t1.HOTEN_CN < t2.HOTEN_CN and t1.STT_CTR = t2.STT_CTR ;
Luu ý:M c dù hai c t l y t hai b ng v i bí danh khác nhau nhung có tên gi ng nhau, nên ta ph i
d t l i tên c t b ng t khóa AS thì m i có th luu l i Ta có th d t tên cho k t qu trung gian này nhu d t bí danh cho b ng
Select cn1, cn2
From (Select t1.HOTEN_CN As cn1, t2.HOTEN_CN As cn2, t1.STT_CTR
From THAMGIA t1, THAMGIA t2
Where t1.HOTEN_CN < t2.HOTEN_CN and t1.STT_CTR = t2.STT_CTR) tam
M i hàng hóa du c gán m t mã hàng riêng bi t d d phân bi t, và có m t tên hàng
B ng 2 DAILY(STT_DL, TEN_DL, DCHI_DL)
M i d i lý du c gán m t s th t phân, có m t tên d i lý và m t d a ch liên l c
Trang 35du c ghi nh n l i s lu ng mua và tr giá mua t ng c ng
B ng 4 BAN(MA_HANG, STT_DL, NGAY_BAN, SOLG_BAN, TRIGIA_BAN) Khi m t d i lý bán m t m t hàng nào dó (MA_HANG), vào m t ngày nào dó (NGAY_BAN), s
du c ghi nh n l i s lu ng bán và tr giá bán t ng c ng
2 Yêu c u 1: Tìm s thông thuong gi a các b ng trong CSDL3
3 Yêu c u 2: Ð t synonym cho các b ng này t schema CSDL3 Sau dó m các b ng d
li u d xem ki u d li u c a t ng tru ng và quan sát d li u c a t ng b ng
4 Yêu c u 3: Hãy vi t câu l nh SQL d tr l i các câu h i sau:
a Tìm tên nh ng d i lý v a có bán coca cola v a có bán pepsi cola
b Tìm tên nh ng m t hàng du c mua nhung chua du c bán
c Tìm tên và d a ch nh ng d i lý có mua cùng m t hàng v i V n L i mua
d Cho bi t tên các m t hàng du c ít nh t là hai d i lý mua vào v i s lu ng trên 50
e Tìm t ng tr giá mua Coca Cola d i lý Tân Hi p Hung
f Tìm t ng tr giá bán Coca Cola d i lý Tân Hi p Hung
g Tìm tên nh ng m t hàng du c bán d i lý Tân Hi p Hung vào c hai ngày 15/12/94 và ngày 31/12/94
h Có bao nhiêu m t hàng du c mua vào nhung chua du c bán ra d i lý Tân Hi p Hung trong tháng 12 nam 1994
i Tìm tên các m t hàng có mua và bán trong cùng m t ngày cùng m t d i lý
j Tìm tên và d a ch c a các d i lý và nh ng m t hàng có s lu ng mua và bán b ng nhau trong cùng m t ngày
k Tìm tên d i lý dã mua coca cola v i s lu ng nhi u hon t t c các d i lý khác
Trang 36Câu l nh SQL s d ng trong bài này:
SELECT <các c t phân nhóm>, <hàm-k t-t p(<bi u th c>)>
FROM <tên b ng>
[ WHERE <Ði u ki n> ]
GROUP BY <C t d phân nhóm> [, <C t d phân nhóm> [, ]]
HAVING <di u ki n ch n trên nhóm>
Cú pháp t o b ng t m (tham chi u d n m t kh i l nh truy v n):
WITH <tên b ng t m> AS (<câu truy v n con>) [, <tên b ng t m> AS (<câu truy v n con>) [,…]]
1 KTRUCSU(HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KT)
2 CHUTHAU(TEN_THAU, TEL, DCHI_THAU)
3 CHUNHAN(TEN_CHU, DCHI_CHU)
4 CONGNHAN(HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON)
5 CGTRINH(STT_CTR, TEN_CTR, DIACHI_CTR, TINH_THANH, KINH_PHI, TEN_CHU, TEN_THAU, NGAY_BD)
6 THAMGIA(HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY)
7 THIETKE(HOTEN_KTS, STT_CTR, THU_LAO) Tham kh o bài 2 d xem di n gi i cho t ng b ng
2 Yêu c u 1: Hãy vi t câu l nh SQL d tr l i các câu h i sau:
a Tìm t ng kinh phí c a t t c các công trình theo t ng ch th u
Phân tích câu h i:
Trang 37
Khoa CNTT & TT - ÐHCT
Vì m i dòng d li u trong b ng CGTRINH ch cho bi t kinh phí c a t ng công trình, nên mu n
bi t t ng kinh phí theo t ng ch th u thì ta ph i nhóm các dòng d li u theo c t TEN_THAU, sau
dó dùng hàm sum d c ng kinh phí cho m i nhóm
Câu truy v n:
Select TEN_THAU, sum(KINH_PHI) As TongKP
Group by TEN_THAU;
Th c m c:N u trong m nh d Select ta thêm c t TEN_CTR thì có du c không?T i sao?
b Cho bi t h tên các ki n trúc su có t ng thù lao thi t k các công trình l n hon 25 tri u
Phân tích câu h i:
Vì m i dòng d li u trong b ng THIETKE ch cho bi t thù lao thi t k c a m t ki n trúc su cho
m t công trình nào dó, nên mu n bi t t ng thù lao thi t k các công trình c a t ng ki n trúc su, thì
ta ph i nhóm các dòng d li u theo c t HOTEN_KTS, sau dó dùng hàm sum d c ng thù lao cho
m i nhóm Sau cùng, dùng m nh d HAVING d ch n l i các nhóm (hay các ki n trúc su) có t ng thù lao > 25
Câu truy v n:
Select HOTEN_KTS, sum(THU_LAO) As TongTL
Group by HOTEN_KTS
Having sum(THU_LAO) > 25;
c Cho bi t s lu ng các ki n trúc su có t ng thù lao thi t k các công trình l n hon
25 tri u
Phân tích câu h i:
Câu h i này tuong t nhu câu b, nhung thay vì li t kê h tên các ki n trúc su th a di u ki n, thì ta
ch c n cho bi t có t ng c ng bao nhiêu ki n trúc su th a di u ki n nhu v y
Vì v y, tru c h t ta ph i tìm danh sách các ki n trúc su th a di u ki n tru c r i m i d m trên danh sách tìm du c Hay nói khác hon, ta ph i th c hi n 2 bu c b ng 2 l nh select:
Câu 1 Gi ng h t câu b, nhung câu này d t trong m nh d FROM c a câu 2
Câu 2 Ð m s dòng trên b ng k t qu c a câu 1
Having sum(THU_LAO) > 25);
Th c m c: Ta có nh t thi t là ph i d m phân bi t không?
d Tìm t ng s công nhân dã tham gia c a m i công trình
Phân tích câu h i:
Vì m i dòng d li u trong b ng THAMGIA ch cho công nhân nào tham gia công trình nào, nên
mu n bi t t ng s công nhân dã tham gia theo t ng công trình, thì ta ph i nhóm các dòng d li u
Trang 38
Khoa CNTT & TT - ÐHCT
theo c t STT_CTR, sau dó dùng hàm count d d m s dòng (m i dòng là m t công nhân) trong
m i nhóm d có du c t ng s công nhân tham gia
Câu truy v n:
Select STT_CTR, count(*) As TongSoCN
Group by STT_CTR;
Th c m c:Trong m nh d Select c a câu này có th thêm c t HOTEN_CN không?
e Tìm tên và d a ch công trình có t ng s công nhân tham gia nhi u nh t
Phân tích câu h i:
Câu h i này tuong t nhu câu d, nhung thay vì cho bi t t ng s công nhân tham gia c a t t c các công trình, thì dây ta ch yêu c u k t xu t ra công trình nào có t ng s công nhân tham gia nhi u
nh t
Vì v y, tru c h t ta ph i th c hi n câu d tru c d t k t qu c a nó v i bí danh a, t b ng a này ta
m i có th ch n ra công trình có t ng s công nhân tham gia nhi u nh t du c V y, ta ph i th c
hi n 2 câu select:
Câu 1 gi ng h t câu d, câu này s d t trong m nh d FROM c a câu 2, d t bí danh a
Câu 2 Ch n ra dòng có TongSoCN cao nh t t k t qu câu 1 (b ng a), d ng th i k t n i v i
b ng CGTRINH d l y thông tin v tên và d a ch công trình
Câu truy v n:
Select TEN_CTR, DIACHI_CTR, TongSoCN
From (Select STT_CTR, count(*) As TongSoCN
Group by STT_CTR) a, CGTRINH b
Where a.STT_CTR = b.STT_CTR
(Select Max(TongSoCN)
From (Select STT_CTR, count(*) As TongSoCN
Group by STT_CTR) );
f Cho bi t tên các thành ph và kinh phí trung bình cho m i công trình c a t ng thành ph tuong ng
Phân tích câu h i:
Vì m i dòng d li u trong b ng CGTRINH ch cho bi t kinh phí c a m i công trình và cho bi t công trình dó nào thu c t nh thành nào, nên mu n bi t kinh phí trung bình cho m i công trình c a
t ng thành ph , thì ta ph i nhóm các dòng d li u theo c t TINH_THANH, sau dó dùng hàm avg
d tính kinh phí trung bình cho m i nhóm (t c là m i thành ph )
Câu truy v n:
Select TINH_THANH, Avg(KINH_PHI) As KinhPhiTB
g Cho bi t h tên các công nhân có t ng s ngày tham gia vào các công trình l n hon
t ng s ngày tham gia c a công nhân Nguyen Hong Van
Phân tích câu h i:
Trang 39Câu 1 Nhóm d li u trong b ng THAMGIA theo HOTEN_CN, và tính t ng s ngày tham gia Câu này n m trong m nh d FROM c a câu select 2, d t bí danh cho b ng k t qu là a
Câu 2 Ch n các dòng trên b ng a th a di u ki n
Câu truy v n:
Select HOTEN_CN, TongSoNgay
From (Select HOTEN_CN, Sum(SO_NGAY) As TongSoNgay
h Cho bi t t ng s công trình mà m i ch th u dã thi công t i m i thành ph
Phân tích câu h i:
Vì m i dòng d li u trong b ng CGTRINH ch cho công trình nào thu c t nh thành nào và do ch
th u nào thi công, nên mu n bi t t ng s công trình mà m i ch th u dã thi công t i m i t nh thành, thì ta ph i nhóm các dòng d li u theo 2 c t TEN_THAU và TINH_THANH, sau dó dùng hàm count d d m s dòng chính là s công trình c a m i nhóm
Câu truy v n:
Select TEN_THAU, TINH_THANH, Count (STT_CTR) As TongSoCTR
Group By TEN_THAU, TINH_THANH
i Cho bi t h tên công nhân có tham gia t t c các công trình
Phân tích câu h i:
Vì m i dòng d li u trong b ng THAMGIA ch cho công nhân nào tham gia công trình nào, nên
mu n bi t công nhân nào có tham gia h t t t c các công trình tru c h t ta d m xem m i công nhân dã tham gia t ng c ng bao nhiêu công trình, dua vào b ng t m Sau dó, ch n t b ng t m
nh ng công nhân có t ng s công trình tham gia b ng v i t ng s công trình ta có, b ng cách d m
Trang 402 DAILY(STT_DL, TEN_DL, DCHI_DL)
3 MUA(MA_HANG, STT_DL, NGAY_MUA, SOLG_MUA, TRIGIA_MUA)
4 BAN(MA_HANG, STT_DL, NGAY_BAN, SOLG_BAN, TRIGIA_BAN) Tham kh o bài 3 d xem di n gi i cho t ng b ng
2 Yêu c u 1: Hãy vi t câu l nh SQL d tr l i các câu h i sau:
a Tìm don giá mua trung bình c a bia Sài gòn tính trên t t c các d i lý
b Tìm don giá mua trung bình c a bia Sài gòn tính trên trên t ng d i lý
c Hi n th s lu ng t n kho c a t ng m t hàng theo t ng d i lý
d Tìm tên, d a ch c a d i lý có t ng giá tr mua trong m t ngày l n hon 700000
e V i m i d i lý, hãy cho bi t ngày nào có s lu ng m t hàng bán ra là ít nh t
f Tìm tên và d a ch c a nh ng d i lý có t ng tr giá bán cao nh t
g Tìm t ng só ti n mà m i d i lý dã chi d mua hàng theo t ng tháng
h Tìm tên và t ng s lu ng bán ra c a các m t hàng dã bán du c v i s lu ng nhi u nh t c a
t ng d i lý
i Cho bi t t ng s món hàng mà m i d i lý kinh doanh (mua và bán)
j Tìm tên d i lý dã mua vào m t hàng bia Heineken v i don giá mua là cao nh t