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

Oracle cơ bản - SQL và PL/SQL pptx

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 (1.02 MB, 106 trang )

SQL và PL/SQL
C b nơ ả
Oracle c b n - SQL và PL/SQL ơ ả
M C L C Ụ Ụ
M C L C Ụ Ụ 1
CH NG 1. GI I THI U CHUNG ƯƠ Ớ Ệ 5
1.1. NGÔN NG SQL Ữ 5
1.1.1. L ch s phát tri n c a ngôn ng SQL ị ử ể ủ ữ .5
1.1.2. Chu n SQL ẩ 5
1.2. CÁC KHÁI NI M C B N TRONG C S D LI U Ệ Ơ Ả Ơ Ở Ữ Ệ 5
1.2.1. Các thành ph n logic trong database ầ 5
1.2.2. Các đ i t ng trong database ố ượ 6
1.2.3. Các nhóm l nh SQL c b n ệ ơ ả .6
1.3. C S D LI U TH C HÀNH Ơ Ở Ữ Ệ Ự 7
1.3.1. Mô hình d li u ữ ệ 7
1.3.2. C u trúc b ng d li u ấ ả ữ ệ .7
CH NG 2. L NH TRUY V N C B N ƯƠ Ệ Ấ Ơ Ả .9
2.1. CÂU L NH TRUY V N Ệ Ấ 9
2.1.1. Quy t c vi t l nh ắ ế ệ 9
2.1.2. Câu l nh truy v n c b n ệ ấ ơ ả 9
2.1.3. Các thành ph n khác c a m nh đ SELECT ầ ủ ệ ề 9
2.1.4. Phân bi t giá tr d li u tr v ệ ị ữ ệ ả ề 10
2.1.5. Giá tr NULL ị 11
2.2. SQL*PLUS, CÔNG C T NG TÁC L NH SQL V I DATABASE Ụ ƯƠ Ệ Ớ 11
2.2.1. Câu l nh t ng tác c a SQL*Plus ệ ươ ủ .11
2.2.2. Phân nhóm câu l nh trong SQL*Plus ệ 12
2.2.3. Chi ti t các l nh SQL*Plus c b n ế ệ ơ ả .13
2.3. BÀI T P Ậ 15
CH NG 3. TRUY V N D LI U CÓ ĐI U KI N ƯƠ Ấ Ữ Ệ Ề Ệ 17
3.1. CÁC GI I H N TRONG TRUY V N D LI U Ớ Ạ Ấ Ữ Ệ 17
3.1.1. M nh đ WHERE ệ ề 17


3.1.2. Các toán t s d ng trong m nh đ WHERE ử ử ụ ệ ề 18
3.1.3. Ví d s d ng các toán t đi u ki n ụ ử ụ ử ề ệ .19
3.2. S P X P D LI U TR V Ắ Ế Ữ Ệ Ả Ề 20
3.2.1. M nh đ ORDER BY ệ ề 20
3.2.2. S p x p nhi u c t d li u tr v ắ ế ề ộ ữ ệ ả ề 20
3.3. BÀI T P Ậ 21
CH NG 4. CÁC HÀM SQL ƯƠ 23
4.1. T NG QUAN V HÀM SQL Ổ Ề 23
4.1.1. C u trúc hàm SQL ấ .23
4.1.2. Phân lo i hàm SQL ạ 23
4.2. HÀM SQL THAO TÁC TRÊN T NG DÒNG D LI U Ừ Ữ Ệ .24
4.2.1. Các hàm thao tác trên ki u d li u s ể ữ ệ ố 24
4.2.2. Các hàm thao tác trên ki u d li u ký t ể ữ ệ ự .26
4.2.3. Các hàm thao tác trên ki u d li u th i gian ể ữ ệ ờ .30
4.2.4. Các hàm chuy n đ i ki u ể ổ ể 32
4.3. HÀM THAO TÁC TRÊN T P H P Ậ Ợ 34
4.3.1. Các hàm tác đ ng trên nhóm ộ 34
4.3.2. M nh đ GROUP BY ệ ề 35
4.4. M T S HÀM M I B SUNG TRONG Oracle9i Ộ Ố Ớ Ổ 36
4.4.1. Hàm NULLIF .36
4.4.2. Hàm COALSCE 36
4.4.3. Câu l nh case ệ 36
Trang 1
Oracle c b n - SQL và PL/SQL ơ ả
4.5. BÀI T P Ậ 36
4.5.1. Hàm trên t ng dòng d li u ừ ữ ệ 36
4.5.2. Hàm trên nhóm d li u ữ ệ 39
CH NG 5. L NH TRUY V N D LI U M R NG ƯƠ Ệ Ấ Ữ Ệ Ở Ộ .40
5.1. K T H P D LI U T NHI U B NG Ế Ợ Ữ Ệ Ừ Ề Ả 40
5.1.1. M i liên k t t ng đ ng ố ế ươ ươ 40

5.1.2. M i liên k t không t ng đ ng ố ế ươ ươ .40
5.1.3. M i liên k t c ng ố ế ộ .40
5.1.4. Liên k t c a b ng v i chính nó (t thân) ế ủ ả ớ ự .41
5.1.5. Cách bi u di n k t n i m i trong Oracle 9i ể ễ ế ố ớ 41
5.1.6. Các toán t t p h p ử ậ ợ 42
5.2. L NH TRUY V N L NG Ệ Ấ Ồ 43
5.2.1. Câu l nh SELECT l ng nhau. ệ ồ 43
5.2.2. Toán t SOME/ANY/ALL/NOT IN/EXITS ử 43
5.3. C U TRÚC HÌNH CÂY Ấ .44
5.3.1. C u trúc hình cây trong 1 table ấ 44
5.3.2. K thu t th c hi n ỹ ậ ự ệ 44
5.3.3. M nh đ WHERE trong c u trúc hình cây ệ ề ấ 45
5.4. BÀI T P Ậ 46
CH NG 6. BI N RUNTIME ƯƠ Ế 50
6.1. D LI U THAY TH TRONG CÂU L NH Ữ Ệ Ế Ệ .50
6.2. L NH DEFINE Ệ 50
6.3. L NH ACCEPT Ệ 51
6.4. BÀI T P Ậ 51
CH NG 7. TABLE VÀ CÁC L NH SQL V TABLE ƯƠ Ệ Ề 52
7.1. L NH T O TABLE Ệ Ạ 52
7.1.1. Cú pháp t o b ng ạ ả 52
7.1.2. Tính toán kích th c table (tham kh o) ướ ả 53
7.2. M T S QUY T C KHI T O TABLE Ộ Ố Ắ Ạ 54
7.2.1. Quy t c đ t tên Object ắ ặ 54
7.2.2. Quy t c khi tham chi u đ n Object ắ ế ế 54
7.3. Các Ki u d li u c b n ể ữ ệ ơ ả 55
7.3.1. Ki u CHAR ể 55
7.3.2. Ki u VARCHAR2 ể 55
7.3.3. Ki u VARCHAR ể 56
7.3.4. Ki u NUMBER ể 56

7.3.5. Ki u FLOAT ể 56
7.3.6. Ki u LONG ể 56
7.3.7. Ki u DATE ể 57
7.3.8. Ki u RAW và ki u LONG RAW ể ể 58
7.3.9. Ki u ROWID ể 58
7.3.10. Ki u MLSLABEL ể 58
7.3.11. Chuy n đ i ki u ể ổ ể 58
7.4. RÀNG BU C D LI U TRONG TABLE Ộ Ữ Ệ 59
7.4.1. NULL/NOT NULL 59
7.4.2. UNIQUE 59
7.4.3. PRIMARY KEY 59
7.4.4. FOREIGN KEY ( Referential ) 60
7.4.5. CHECK 60
7.5. L NH DDL CAN THI P T I TABLE Ệ Ệ Ớ 60
7.5.1. Ch nh s a c u trúc table ỉ ử ấ 60
7.5.2. Các l nh DDL khác ệ 61
7.5.3. Chú d n cho table ẫ 61
7.5.4. Thay đ i tên object ổ 62
7.5.5. Xóa d li u c a table ữ ệ ủ 62
Trang 2
Oracle c b n - SQL và PL/SQL ơ ả
7.6. THÔNG TIN V TABLE TRONG T ĐI N D LI U Ề Ừ Ể Ữ Ệ 62
7.7. BÀI T P Ậ 63
CH NG 8. CÁC L NH THAO TÁC D LI U ƯƠ Ệ Ữ Ệ 64
8.1. THAO TÁC D LI U TRONG TABLE Ữ Ệ .64
8.1.1. Thêm m i dòng d li u ớ ữ ệ 64
8.1.2. C p nh t dòng d li u ậ ậ ữ ệ .65
8.1.3. L nh Merge ệ 65
8.1.4. Xóa dòng d li u ữ ệ .66
8.1.5. L i ràng bu c d li u ỗ ộ ữ ệ 66

8.2. L NH ĐI U KHI N GIAO D CH Ệ Ề Ể Ị 66
8.3. BÀI T P Ậ 67
CH NG 9. SEQUENCE VÀ INDEX ƯƠ 68
9.1. SEQUENCE 68
9.1.1. T o Sequence ạ 68
9.1.2. Thay đ i và hu sequence ổ ỷ .69
9.2. INDEX 69
9.2.1. T o index ạ 69
9.2.2. S d ng index ử ụ 69
9.3. BÀI T P Ậ 70
CH NG 10. VIEWS ƯƠ 71
10.1. VIEWS 71
10.1.1. T o view ạ 71
10.1.2. Xóa các view 71
10.2. BÀI T P Ậ 72
CH NG 11. QUY N VÀ B O M T ƯƠ Ề Ả Ậ 73
11.1. QUY N - PRIVILEGE Ề .73
11.2. ROLE 74
11.3. SYNONYM 74
CH NG 12. GI I THI U NGÔN NG PL/SQL ƯƠ Ớ Ệ Ữ 76
12.1. T NG QUAN V PL/SQL Ổ Ề 76
12.1.1. Cú pháp l nh PL/SQL ệ 76
12.1.2. Kh i l nh PL/SQL ố ệ 76
12.2. L NH L P TRÌNH PL/SQL Đ N GI N Ệ Ậ Ơ Ả 77
12.2.1. L nh IF ệ 77
12.2.2. L nh l p LOOP không đ nh tr c ệ ặ ị ướ 78
12.2.3. L nh l p LOOP có đ nh tr c ệ ặ ị ướ 78
12.2.4. L nh l p WHILE ệ ặ 78
12.2.5. L nh GOTO, nh y vô đi u ki n ệ ả ề ệ .78
12.3. GI I THI U CURSOR Ớ Ệ 79

12.4. CÁC KI U D LI U THÔNG D NG Ể Ữ Ệ Ụ 81
12.4.1. Ki u d li u Table ể ữ ệ 81
12.4.2. Ki u d li u Record ể ữ ệ 81
12.4.3. Sao ki u d li u m t dòng ể ữ ệ ộ 82
12.4.4. Sao ki u d li u c a m t c t ể ữ ệ ủ ộ ộ 82
12.4.5. L nh SELECT INTO ệ 82
12.5. BÀI T P Ậ 83
CH NG 13. GI I THI U PROCEDURE BUILDER ƯƠ Ớ Ệ 84
13.1. CÁC THÀNH PH N TRONG PROCEDURE BUILDER Ầ 84
13.1.1. Object Navigator 84
13.1.2. Program Unit Editor .85
13.1.3. Store Program Unit Editor 85
Trang 3
Oracle c b n - SQL và PL/SQL ơ ả
13.1.4. Database Trigger Edditor .85
13.2. CÁC HÀM, TH T C Ủ Ụ .86
13.2.1. T o hàm, th t c trên Client ạ ủ ụ 86
13.2.2. T o hàm, th t c trên Server ạ ủ ụ .86
13.2.3. Dò l i đ i v i các hàm, th t c ỗ ố ớ ủ ụ 87
CH NG 14. GI I THI U CÁC TH T C, HÀM VÀ PACKAGE ƯƠ Ớ Ệ Ủ Ụ 88
14.1. TH T C Ủ Ụ 88
14.1.1. T o th t c ạ ủ ụ 88
14.1.2. Hu b th t c ỷ ỏ ủ ụ 89
14.1.3. Các b c l u gi m t th t c ướ ư ữ ộ ủ ụ 89
14.2. HÀM 89
14.2.1. T o hàm ạ 90
14.2.2. Th c hi n m t hàm ự ệ ộ .90
14.2.3. L i ích c a vi c s d ng hàm ợ ủ ệ ử ụ 91
14.2.4. M t s h n ch khi s d ng hàm trong câu l nh SQL ộ ố ạ ế ử ụ ệ 91
14.2.5. Hu b hàm ỷ ỏ .91

14.2.6. Hàm và th t c ủ ụ 92
14.3. PACKAGE 92
14.3.1. C u trúc c a package ấ ủ 92
14.3.2. T o package ạ 93
14.3.3. Hu package ỷ 95
14.3.4. L i ích c a vi c s d ng package ợ ủ ệ ử ụ 95
14.3.5. M t s package chu n c a Oracle ộ ố ẩ ủ 96
CH NG 15. DATABASE TRIGGER ƯƠ .97
15.1. T O TRIGGER Ạ 97
15.1.1. Phân lo i trigger ạ 97
15.1.2. L nh t o trigger ệ ạ .98
15.1.3. S d ng Procedure builder đ t o trigger ử ụ ể ạ 99
15.2. QU N LÝ TRIGGER Ả 100
15.2.1. Phân bi t database trigger ệ 100
15.2.2. Thay đ i tr ng thái c a database trigger ổ ạ ủ 101
15.2.3. Hu b trigger ỷ ỏ .101
15.2.4. L u ý khi s d ng trigger ư ử ụ 102
PH L C Ụ Ụ 103
A - TÀI LI U THAM KH OỆ Ả .103
B - DANH M C CÁC HÌNH VỤ Ẽ 103
Trang 4
Oracle c b n - SQL và PL/SQL ơ ả
Ch ng 1. GI I THI U CHUNG ươ Ớ Ệ
1.1.NGÔN NG SQL Ữ
1.1.1. L ch s phát tri n c a ngôn ng SQL ị ử ể ủ ữ
Mô hình c s d li u (CSDL) quan h - RDBMS, do E.F Codd đ a ra vào đ u th p k 70. T đó đ n nay,ơ ở ữ ệ ệ ư ầ ậ ỷ ừ ế
nó liên t c phát tri n tr thành mô hình CSDL ph bi n b c nh t. Mô hình quan h g m các thành ph nụ ể ở ổ ế ậ ấ ệ ồ ầ
sau:
T p h p các đ i t ng và / ho c các m i quan h ậ ợ ố ượ ặ ố ệ T p h p cácậ ợ
x lý tác đ ng t i các quan h ử ộ ớ ệ

Ràng bu c d li u đ m b o tính chính xác và nh t quán. ộ ữ ệ ả ả ấ
SQL (Structured Query Language, đ c là "sequel") là t p l nh truy xu t CSDL quan h . ọ ậ ệ ấ ệ
Ngôn ng SQL đ c IBM s d ng đ u tiên trong h qu n tr CSDL System R vào gi a ữ ượ ử ụ ầ ệ ả ị ữ
nh ng năm 70. H ngôn ng SQL đ u tiên (SEQUEL2) đ c IBM công b vào tháng 11 ữ ệ ữ ầ ượ ố
năm 1976. Năm 1979, t p đoàn Oracle gi i thi u th ng ph m đ u tiên c a SQL. SQL cũng ậ ớ ệ ươ ẩ ầ ủ
đ c cài đ t trong các h qu n tr CSDL nh DB2 c a IBM và SQL/DS. ượ ặ ệ ả ị ư ủ
Ngày nay, SQL đ c s d ng r ng rãi và đu c xem là ngôn ng chu n đ truy c p CSDL ượ ử ụ ộ ợ ữ ẩ ể ậ
quan h . ệ
1.1.2. Chu n SQL ẩ
Năm 1989, vi n tiêu chu n qu c gia Hoa Kỳ (ANSI) công nh n SQL là ngôn ng chu n đ truy c p CSDLệ ẩ ố ậ ữ ẩ ể ậ
quan h trong văn b n ANSI SQL89. ệ ả
Năm 1989, t ch c tiêu chu n qu c t (ISO) công nh n SQL ngôn ng chu n đ truy c p CSDL quan hổ ứ ẩ ố ế ậ ữ ẩ ể ậ ệ
trong văn b n ISO 9075-1989. ả
T t c các h qu n tr CSDL l n trên th gi i cho phép truy c p b ng SQL và h u h t theo chu n ANSI. ấ ả ệ ả ị ớ ế ớ ậ ằ ầ ế ẩ
1.2.CÁC KHÁI NI M C B N TRONG C S D LI U Ệ Ơ Ả Ơ Ở Ữ Ệ
1.2.1. Các thành ph n logic trong database ầ
Thành ph n ầ Di n gi i ễ ả
Table C u trúc l u tr c b n nh t trong CSDL quan h (RDBMS), nó bao ấ ư ữ ơ ả ấ ệ
g m 1 ho c nhi u columns (c t d li u) v i 0 ho c nhi u rows (dòng d li u).ồ ặ ề ộ ữ ệ ớ ặ ề ữ ệ
Row T h p nh ng giá tr c a Column trong b ng. M t row còn đ c g i ổ ợ ữ ị ủ ả ộ ượ ọ
là 1 record (b n ghi). ả
Column Quy đ nh m t lo i d li u trong b ng. Ví d : lo i d li u tên phòng ị ộ ạ ữ ệ ả ụ ạ ữ ệ
ban có trong b ng phòng ban. Ta th hi n th column này thông qua tên columnả ể ể ị
và có th kèm theo m t vài thông tin khác v column nh ki u d li u, đ dàiể ộ ề ư ể ữ ệ ộ
c a d li u. ủ ữ ệ
Field Giao c a column và row. Field chính là n i ch a d li u. N u không ủ ơ ứ ữ ệ ế
có d li u trong field ta nói field có gia tr là ữ ệ ị NULL.
Primary Key Là m t column ho c m t t p các column xác đ nh tính duy nh t c a ộ ặ ộ ậ ị ấ ủ
các rows trong b ng. Ví d ở ả ụ DEPTNO là Primary Key c a b ng ủ ả DEPT
vì nó đ c dùng đ xác đ nh duy nh t m t phòng ban trong b ng ượ ể ị ấ ộ ả

DEPT mà đ i di n là m t row d li u. ạ ệ ộ ữ ệ
Trang 5
Oracle c b n - SQL và PL/SQL ơ ả
Primary Key nh t thi t ph i có s li u. ấ ế ả ố ệ
Foreign Key Là m t column ho c m t t p các columns có tham chi u t i chính ộ ặ ộ ậ ế ớ
b ng đó ho c m t b ng khác. ả ặ ộ ả
Foreign Key xác đ nh m i quan h gi a các b ng. ị ố ệ ữ ả
Constraints Là các ràng bu c đ i v i d li u trong các b ng thu c database. Ví ộ ố ớ ữ ệ ả ộ
d : Foreign Key, Primary Key ụ
Ví d : minh ho các thành ph n logic trong database ụ ạ ầ
EMP
EMPNO ENAME EMP DEPT DEPTNO
7369 SMITH 20
Row
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
DEPT
DEPTNO DNAME
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
Foreign key
7782 CLARK 10
Primary key
Column
Hình v 1. Minh ho các thành ph n logic trong database ẽ ạ ầ

1.2.2. Các đ i t ng trong database ố ượ
Đ i t ng ố ượ Di n gi i ễ ả
Table C u trúc l u tr c b n nh t trong CSDL quan h (RDBMS), g m ấ ư ữ ơ ả ấ ệ ồ
row và column
View Là c u trúc logic hi n th d li u t 1 ho c nhi u b ng ấ ể ị ữ ệ ừ ặ ề ả
Sequence L t sinh giá tr cho các primary key ế ị
Index Tăng tính th c thi cho câu l nh truy v n ự ệ ấ
Synonym Tên t ng đ ng c a đ i t ng ươ ươ ủ ố ượ
Program unit T p h p các câu l nh th c hi n đ c vi t b i ngôn ng SQL và ậ ợ ệ ự ệ ượ ế ở ữ
PL/SQL, bao g m Procedure, function, package ồ
1.2.3. Các nhóm l nh SQL c b n ệ ơ ả
Tên l nh ệ
SELECT
INSERT
UPDATE
DELETE
Di n gi i ễ ả
Là l nh thông d ng nh t, dùng đ l y, xem d li u trong CSDL. ệ ụ ấ ể ấ ữ ệ
Là 3 l nh dùng đ nh p thêm nh ng row m i, thay đ i n i dung ệ ể ậ ữ ớ ổ ộ
d li u trên các row hay xoá các row trong table. Nh ng l nh này ữ ệ ữ ệ
đ c g i là các l nh thao tác d li u DML (Data Manipulation ượ ọ ệ ữ ệ
Language)
Trang 6
Oracle c b n - SQL và PL/SQL ơ ả
CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMIT

ROLLBACK
SAVE POINT
GRANT
REVOKE
Là 3 l nh dùng đ thi t l p, thay đ i hay xoá b c u trúc d li u ệ ể ế ậ ổ ỏ ấ ữ ệ
nh là table, view, index. Nh ng l nh này đ c g i là các l nh đ nh nghĩaư ữ ệ ượ ọ ệ ị
d li u DDL (Data Definition Language) ữ ệ
Qu n lý vi c thay đ i d li u b ng các l nh DML. Vi c thay đ i d li u cóả ệ ổ ữ ệ ằ ệ ệ ổ ữ ệ
th đ c nhóm l i thành các transaction. ể ượ ạ
2 l nh này dùng đ gán ho c hu các quy n truy nh p vào CSDL Oracle vàệ ể ặ ỷ ề ậ
các c u trúc bên trong nó. Nh ng l nh này đ c g i là các l nh đi u khi nấ ữ ệ ượ ọ ệ ề ể
d li u DCL (Data Control Language) ữ ệ
1.3.C S D LI U TH C HÀNH Ơ Ở Ữ Ệ Ự
1.3.1. Mô hình d li u ữ ệ
DEPT EMP
SALGRADE
DUMMY
BONUS
Hình v 2. Mô hình d li u th c hành ẽ ữ ệ ự
1.3.2. C u trúc b ng d li u ấ ả ữ ệ
B ng DEPT ả
Tên c t ộ Ki u ể Đi u ki n ề ệ Di n gi i ễ ả
DEPTNO NUMBER(2) PRIMARY KEY
Mã phòng ban
DNAME VARCHAR2(14)
Tên phòng ban
LOC VARCHAR2(13)
Đ a ch ị ỉ
B ng SALGRADE ả
Tên c t ộ Ki u ể Đi u ki n ề ệ Di n gi i ễ ả

GRADE NUMBER PRIMARY KEY
M c l ng ứ ươ
LOSAL NUMBER
Giá tr th p nh t ị ấ ấ
HISAL NUMBER
Giá tr cao nh t ị ấ
Trang 7
Oracle c b n - SQL và PL/SQL ơ ả
B ng EMP ả
Tên c t ộ Ki u ể Đi u ki n ề ệ
EMPNO NUMBER(4) PRIMARY KEY
ENAME VARCHAR2(10)
JOB VARCHAR2 (9)
MGR NUMBER(4) FOREIGN KEY
(EMP.EMPNO)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO
NUMBER(2) NOT FOREIGN KEY
NULL, (DEPT.DEPTNO)
Di n gi i ễ ả
Mã nhân viên
Tên nhân viên
Ngh nghi p ề ệ
Mã ng i qu n lý ườ ả
Ngày gia nh p công ty ậ
L ng ươ
Th ng ưở
Mã phòng ban

Trang 8
Oracle c b n - SQL và PL/SQL ơ ả
Ch ng 2. L NH TRUY V N C B N ươ Ệ Ấ Ơ Ả
2.1.CÂU L NH TRUY V N Ệ Ấ
2.1.1. Quy t c vi t l nh ắ ế ệ
Các câu l nh truy v n đ c bi u di n theo các quy t c sau: ệ ấ ượ ể ễ ắ
Các lênh trong câu l nh SQL thu c lo i không phân bi t ch vi t hoa hay th ng. ệ ộ ạ ệ ữ ế ườ N i dungộ
c a m t câu l nh SQL có th đ c tr i dài trên nhi u dòng. ủ ộ ệ ể ượ ả ề Các t khoá không đ c phép vi từ ượ ế
t t hay phân cách trên nhi u dòng ắ ề Các m nh đ thông th ng đ c đ t trên nhi u dòng khácệ ề ườ ượ ặ ề
nhau
Đ rõ ràng trong vi c th hi n câu l nh, ta nên s d ng các d u TAB khi vi t l nh ể ệ ể ệ ệ ử ụ ấ ế ệ Ta có
th s d ng các ký t đ c bi t nh : +, -, \, *, đ bi u di n giá tr trong câu ể ử ụ ự ặ ệ ư ể ể ễ ị
l nh. ệ
L nh k t thúc b i d u ch m ph y (;). ệ ế ở ấ ấ ẩ
2.1.2. Câu l nh truy v n c b n ệ ấ ơ ả
Cú pháp:
SELECT [DISTINCT ] {*, column [alias], }
FROM table;
V i: ớ
SELECT Hi n th n i dung c a m t hay nhi u c t ể ị ộ ủ ộ ề ộ
DISTINCT Phân bi t n i dung gi a các dòng d li u tr v ệ ộ ữ ữ ệ ả ề
L y t t các các c t trong b ng ấ ấ ộ ả
column Tên c t d li u c n tr v ộ ữ ệ ầ ả ề
alias Ph n tiêu đ c a c t d li u tr v ầ ề ủ ộ ữ ệ ả ề
FROM table Tên b ng ch a d li u truy v n ả ứ ữ ệ ấ
Ví d : ụ
SELECT
FROM emp;
C u trúc c a l nh truy v n g m có hai ph n: ấ ủ ệ ấ ồ ầ
M nh đ ch n l a bao g m L nh ệ ề ọ ự ồ ệ SELECT và tên c t d li u tr vộ ữ ệ ả ề

M nh đ bi u di n n i ch a bao g m ệ ề ể ễ ơ ứ ồ FROM và tên b ng. ả
2.1.3. Các thành ph n khác c a m nh đ SELECT ầ ủ ệ ề Trong m nh đ ệ ề SELECT
còn có th đ a vào các thành ph n khác: ể ư ầ
Bi u th c toán h c ể ứ ọ
Column alias
Các column đ c ghép chu i ượ ỗ
Literal
Bi u th c toán h c ể ứ ọ
Trong m nh đ ệ ề SELECT bi u th c toán h c có th các giá tr (column ho c hàng s ), các toán t , các hàm.ể ứ ọ ể ị ặ ố ử
Các toán t đ c dùng là (+), (-), (*), (/). Đ u tiên c a các toán t gi ng trong ph n s h c. ử ượ ộ ư ủ ử ố ầ ố ọ
Ví d : ụ
Trang 9
Oracle c b n - SQL và PL/SQL ơ ả
SELECT ename, sal *12, comm FROM emp;
SELECT ename, (sal+250)*12 FROM emp;
Tiêu đ c a c t (column alias) ề ủ ộ
Trong m nh đ ệ ề SELECT, column alias là ph n nhãn hi n th c a column khi l y s li u ra. Trong columnầ ể ị ủ ấ ố ệ
alias không đ c có d u cách và vi t cách sau tên column m t d u cách. Column alias đ c ch p nh n cóượ ấ ế ộ ấ ượ ấ ậ
d u cách khi đ c đ t trong d u nháy kép (ấ ượ ặ ấ “ “).
Ví d : ụ (ANUAL chính là column alias)
SELECT ename, SAL*12 ANUAL, comm
FROM emp;
Ghép ti p các c t d li u ế ộ ữ ệ
Toán t ghép ti p chu i (ử ế ỗ ||) cho phép ghép ti p d li u trong các c t khác nhau c a cùng m t dòng dế ữ ệ ộ ủ ộ ữ
li u v i nhau thành m t chu i. Ta có th có nhi u toán t ghép chu i trong cùng m t column alias. ệ ớ ộ ỗ ể ề ử ỗ ộ
Ví d : ụ
SELECT empno||ename EMPLOYEE
FROM emp;
Ghép ti p chu i ký t ế ỗ ự
Trong m nh đ ệ ề SELECT, ta có th th c hi n ghép ti p b t kỳ ký t nào, bi u th c hay s nào mà khôngể ự ệ ế ấ ự ể ứ ố

ph i là column ho c column alias. ả ặ
Ví d : ụ
SELECT empno || ename || ‘ WORK IN DEPARTMENT ’
|| deptno
‘Employee Detail’
FROM emp;
2.1.4. Phân bi t giá tr d li u tr v ệ ị ữ ệ ả ề
Trong th c t nhi u khi giá tr d li u trên các dòng d li u k t xu t trùng nhau. Gây nhi u b t ti n. Đự ế ề ị ữ ệ ữ ệ ế ấ ề ấ ệ ể
có th l y đ c ch các dòng d li u phân bi t v i nhau. Ta s d ng m nh đ ể ấ ượ ỉ ữ ệ ệ ớ ử ụ ệ ề DISTINCT trong câu l nhệ
truy v n. ấ
Ví d : ụ
SQL> SELECT deoptno FROM dept;
DEPTNO
10
30
10
20
14 rows selected.
SQL> SELECT DISTINCT deoptno FROM dept;
DEPTNO
10
30
20
3 rows selected.
Trang 10
Oracle c b n - SQL và PL/SQL ơ ả
2.1.5. Giá tr NULL ị
C t có giá tr r ng (ộ ị ỗ NULL) là c t ch a đ c gán giá tr , nói cách khác nó ch a đ c kh i t o giá tr . Cácộ ư ượ ị ư ượ ở ạ ị
c t v i b t c ki u d li u nào cũng có th có tr ộ ớ ấ ứ ể ữ ệ ể ị NULL, tr khi đ c nó là khóa hay có ràng bu c toàn v nừ ượ ộ ẹ
NOT NULL. Trong bi u th c có b t kỳ giá tr ể ứ ấ ị NULL nào k t qu cũng là ế ả NULL.

Ví d : ụ
SELECT ename, sal*12 + comm ANUAL_SAL
FROM emp;
NULL trong các hàm c a SQL ủ
Trong các hàm làm vi c v i t ng c t hay hàm vô h ng (scalar function). Các hàm lo i này tr v tr nullệ ớ ừ ộ ướ ạ ả ề ị
khi có tham s ố NULL, tr hàm ừ NVL và TRANSLATE có th tr v giá tr th c. ể ả ề ị ự
Cú pháp c a hàm ủ NVL:
NVL (DATECOLUMN,’01-01-2001’)
NVL(NUMBERCOLUMN, 9)
NVL(CHARCOLUMN,’STRING’)
NVL(comm,0) tr v tr 0 khi comm là null ả ề ị
SELECT ename, sal*12 + NVL(comm,0) ANUAL_SAL FROM emp;
Trong các hàm làm vi c v i nhóm các c t (group function): H u h t các hàm làm vi c trên nhóm b qua trệ ớ ộ ầ ế ệ ỏ ị
null, ví d nh khi s d ng hàm AVG đ tính trung bình cho m t c t có các giá tr ụ ư ử ụ ể ộ ộ ị 1000, NULL, NULL,
NULL, 2000. Khi đó trung bình đ c tính là ượ (1000+2000)/2=1500, nh v y tr null b b qua chư ậ ị ị ỏ ứ
không ph i xem là tr 0. ả ị
NULL trong các bi u th c so sánh, đi u ki n ể ứ ề ệ
Đ ki m tra có ph i ể ể ả NULL hay không dùng các toán t ử IS NULL ho c ặ IS NOT NULL. N u trong bi uế ể
th c so sánh có tr null tham gia và k t qu c a bi u th c ph thu c vào tr null thì k t qu là không xácứ ị ế ả ủ ể ứ ụ ộ ị ế ả
đ nh, tuy nhiên trong bi u th c ị ể ứ DECODE, hai giá tr null đ c xem là b ng nhau trong phép so sánh. ị ượ ằ
Oracle xem các bi u th c v i k t qu không xác đ nh t ng đ ng v i ể ứ ớ ế ả ị ươ ươ ớ FALSE. (Ví d : ụ comm = NULL)
có k t qu không xác đ nh và do đó bi u th c so sánh xem nh cho k t qu ế ả ị ể ứ ư ế ả FALSE. Trong câu l nh sauệ
không có m u tin nào đ c ch n ẫ ượ ọ
SELECT * FROM emp WHERE comm=NULL;
N u mu n ch n các nhân viên có comm là NULL thì ph i dùng toán t IS NULL ế ố ọ ả ử
SELECT * FROM emp WHERE comm IS NULL;
2.2.SQL*PLUS, CÔNG C T NG TÁC L NH SQL V I DATABASE Ụ ƯƠ Ệ Ớ
2.2.1. Câu l nh t ng tác c a SQL*Plus ệ ươ ủ
Oracle h tr công c SQL*Plus cho phép ng i s d ng có th t ng tác tr c ti p v i Oracle Serverỗ ợ ụ ườ ử ụ ể ươ ự ế ớ
thông qua các câu l nh SQL và PL/SQL. ệ

Theo đó ng i s d ng có th t ng tác v i Oracle Server thông qua hai lo i câu l nh: ườ ử ụ ể ươ ớ ạ ệ
Câu l nh SQL ệ
Câu l nh c a b n thân ch ng trình SQL*Plus ệ ủ ả ươ
Trang 11
Oracle c b n - SQL và PL/SQL ơ ả
Hình v 3. Câu l nh c a SQL*Plus ẽ ệ ủ
Khác bi t gi a l nh SQL và SQL*Plus ệ ữ ệ
SQL
Là ngôn ng đ giao ti p v i Oracle Server ữ ể ế ớ
trong vi c truy xu t d li u ệ ấ ữ ệ
Câu l nh d a trên b ký t chu n ASCII ệ ự ộ ự ẩ
Thao tác trên các d li u có trong các b ng ữ ệ ả
đã đ c đ nh nghĩa trong database ượ ị
Câu l nh đ c n p vào b nh đ m trên ệ ượ ạ ộ ớ ệ
m t ho c nhi u dòng ộ ặ ề
Câu l nh không đ c vi t t t ệ ượ ế ắ
SQL*Plus
Nh n d ng l nh SQL và g i l nh lên ậ ạ ệ ử ệ
Server
Tuỳ thu c vào t ng phiên b n c a Oracle Khôngộ ừ ả ủ
thao tác v i d li u trong database ớ ữ ệ
Câu l nh đ c t i tr c ti p không thông qua bệ ượ ả ự ế ộ
đ m ệ
Câu l nh có th vi t t t ệ ể ế ắ
Có s d ng ký t k t thúc l nh khi th c hi n Không đòi h i ph i có ký t k t thúc l nh ử ụ ự ế ệ ự ệ ỏ ả ự ế ệ
S d ng các hàm trong vi c đ nh d ng d ử ụ ệ ị ạ ữ S d ng các l nh đ nh d ng d li u c a ử ụ ệ ị ạ ữ ệ ủ
li u ệ chính SQL*Plus
2.2.2. Phân nhóm câu l nh trong SQL*Plus ệ
Các l nh SQL*Plus có th phân thành nhóm chính sau: ệ ể
Nhóm l nh ệ Di n gi i ễ ả

Môi tr ng ườ Tác đ ng và gây nh h ng t i môi tr ng làm vi c c a SQL*Plus ộ ả ưở ớ ườ ệ ủ
trong phiên làm vi c hi n t i. ệ ệ ạ
Đ nh d ng d li u ị ạ ữ ệ Đ nh d ng l i d li u tr v t server ị ạ ạ ữ ệ ả ề ừ
Thao tác file L u gi , n p và ch y các file scrips ư ữ ạ ạ
Th c hi n l nh ự ệ ệ G i các l nh SQL có trong b đ m lên server ử ệ ộ ệ
So n th o ạ ả S a đ i l i l nh SQL có trong b đ m ử ổ ạ ệ ộ ệ
Trang 12
Oracle c b n - SQL và PL/SQL ơ ả
T ng tác ươ Cho phép ng i dùng có th t o các bi n s d ng trong câu l nh ườ ể ạ ế ử ụ ệ
SQL và thao tác v i các bi n đó nh : nh p d li u, k t xu t d li u. ớ ế ư ậ ữ ệ ế ấ ữ ệ
Các l nh khác ệ Các l nh khác cho phép k t n i t i c s d li u và hi n th các c t ệ ế ố ớ ơ ở ữ ệ ể ị ộ
d li u theo nh đ nh d ng. ữ ệ ư ị ạ
2.2.3. Chi ti t các l nh SQL*Plus c b n ế ệ ơ ả
K t n i t i CSDL ế ố ớ
Cú pháp:
Conn[ect] <user_name>/<password>[@<database>];
V i: ớ
user_name Tên truy nh p ậ
password M t kh u truy nh p ậ ẩ ậ
database Tên database truy nh p ậ
Ví d : ụ
Conn Tester/tester@DB1;
Hi n th c u trúc b ng d li u ể ị ấ ả ữ ệ
Cú pháp:
Desc[ribe] <table_name>;
V i: ớ
table_name Tên b ng c n hi n th c u trúc ả ầ ể ị ấ
Ví d : ụ
Desc Dept;
Name Null? Type

DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
L nh so n th o ệ ạ ả
Tên l nh ệ Di n gi i ễ ả
A[PPEND] text
Đ a thêm đo n text vào dòng hi n t i ư ạ ệ ạ
C[HANGE] /old/new
Chuy n đo n text cũ thành đo n text m i trong dòng hi n ể ạ ạ ớ ệ
t i ạ
C[HANGE] /text/
Xoá đo n text trong dòng hi n t i ạ ệ ạ
CL[EAR] BUFF[ER]
Xoá t t c các dòng trong SQL buffer ấ ả
DEL
Xoá dòng hi n t i ệ ạ
DEL n
Xoá dòng n
DEL m n
Xoá dòng t m đ n n ừ ế
I[NPUT]
Thêm m t s dòng nh t đ nh ộ ố ấ ị
I[NPUT] text
Thêm dòng có ch a text ứ
L[IST]
Li t kê toàn b các dòng trong SQL buffer ệ ộ
Trang 13
Oracle c b n - SQL và PL/SQL ơ ả
L[IST] n
L[IST] m n

R[UN]
N
N text
0 text
L nh thao tác file ệ
Tên l nh ệ
SAVE filename [.ext]
[REP[LACE]|APP[END]]
GET filename [.ext]
STA[RT] filename [.ext]
@ filename [.ext]
ED[IT]
ED[IT]filename [.ext ]
SPO[OL] filename [.ext ]
[OFF|OUT]
EXIT
L nh đ nh d ng c t d li u ệ ị ạ ộ ữ ệ
Cú pháp:
Li t kê dòng n ệ
Li t kê dòng m đ n n ệ ế
Hi n th và ch y l nh trong buffer ể ị ạ ệ
Nhày đ n dòng n ế
Thay dòng n b i đo n text ở ạ
Chèn 1 dòng tr c dòng 1 ướ
Di n gi i ễ ả
Ghi n i dung bufer thành file. ộ APPEND đ ghi thêm vào file.ể
REPLACE đ chèn lên n i dung file cũ. ể ộ
Ghi n i dung file vào buffer. M c đ nh ph n đuôi là .sql Ch y cácộ ặ ị ầ ạ
l nh trong file ệ
Gi ng l nh Start ố ệ

So n th o n i dung bufffer có tên là afiedt.buf Đ ch y n i dungạ ả ộ ể ạ ộ
buffer dùng l nh / ệ
So n th o n i dung file ạ ả ộ
C t k t qu hi n th trên màn hình ra file. Vd: ấ ế ả ể ị
SPOOL result.sql
SPOOL OFF
Thoát kh i SQL*Plus ỏ
COLUMN [{column | alias} [option]]
Tên l nh ệ Di n gi i ễ ả
CLE[AR]
Xoá đ nh d ng c a column ị ạ ủ
FOR[MAT] format
Chuy n đ nh d ng c a c t d li u ể ị ạ ủ ộ ữ ệ
HEA[DING] text
Đ t nhãn co column ặ
JUS[TIFY] align
Cán trái - left , ph i - right, gi a - center cho nhãn ả ữ
NOPRI[NT]
n column ẩ
NUL[L] text
Hi n th text n u giá tr c a column là NULL ể ị ế ị ủ
PRI[NT}
Hi n th column ể ị
TRU[NCATED]
Xoá chu i t i cu i dòng đ u tiên khi hi n th ỗ ạ ố ầ ể ị
WRA[PPED]
Ph cu i chu i c a dòng ti p theo ủ ố ỗ ủ ế
Ví d 1: Ch nh đ nh d ng và nhãn c a column ụ ỉ ị ạ ủ
Trang 14
Oracle c b n - SQL và PL/SQL ơ ả

COLUMN ename HEADING ‘Employee|Name’ FORMAT A15
COLUMN sal JUSTIFY LEFT FORMAT $ 99,990.00 COLUMN
hiredate FORMAT A9 NULL ‘ Not hired’
Ví d 2: Hi n th đ nh d ng hi n t i c a column ụ ể ị ị ạ ệ ạ ủ
COLUMN
COLUMN ename
Ví d 3: Xoá đ nh d ng hi n t i c a column ụ ị ạ ệ ạ ủ
COLUMN ename CLEAR
CLEAR COLUMN
Các lo i đ nh d ng ạ ị ạ
Đ nh d ng ị ạ Di n gi i ễ ả Ví d ụ K t qu ế ả
An Hi n th dài nh t n ký t dùng cho các column ể ị ấ ự
d ng ký t ho c d ng ngày ạ ự ặ ạ
9 Hi n th s , không bao g m s 0 ể ị ố ồ ố 999999 1234
0 Hi n th c s 0 ể ị ả ố 099999 01234
$Hi n thi $ ể $9999 $1234
L Hi n th ký t L ể ị ự L9999 L1234
Hi n th d u th p phân ể ị ấ ậ 9999.99 1234.00
, Hi n th d u phân chia hàng nghìn ể ị ấ 9,999 1,234
2.3.BÀI T P Ậ
1. Ch n toàn b thông tin trong b ng ọ ộ ả SALGRADE
GRADE LOSAL HISAL
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
2. Ch n toàn b thông tin trong b ng ọ ộ ả EMP
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7839 KING PRESIDENT 17-11-1981 5000 10

7698 BLAKE MANAGER 7839 01-05-1981 2850 30
7782 CLARK MANAGER 7839 09-06-1981 2450 10
7566 JONES MANAGER 7839 02-04-1981 2975 20
7654 MARTIN SALESMAN 7698 28-09-1981 1250 1400 30
7499 ALLEN SALESMAN 7698 20-02-1981 1600 300 30
7844 TURNER SALESMAN 7698 08-09-1981 1500 0 30
7900 JAMES CLERK 7698 03-12-1981 950 30
7521 WARD SALESMAN 7698 22-02-1981 1250 500 30
7902 FORD ANALYST 7566 03-12-1981 3000 20
7369 SMITH CLERK 7902 17-12-1980 800 20
7788 SCOTT ANALYST 7566 09-12-1982 3000 20
7876 ADAMS CLERK 7788 12-01-1983 1100 20
7934 MILLER CLERK 7782 23-01-1982 1300 10
Trang 15
Oracle c b n - SQL và PL/SQL ơ ả
3. Hi n th m i lo i ngh nghi p ể ị ọ ạ ề ệ
JOB
ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
4. Hi n th tên nhân viên và thu nh p trong m t năm (ể ị ậ ộ REMUNERATION)
ENAME REMUNERATION
KING 60000
BLAKE 34200
CLARK 29400
JONES 35700
MARTIN 16400
ALLEN 19500

TURNER 18000
JAMES 11400
WARD 15500
FORD 36000
SMITH 9600
SCOTT 36000
ADAMS 13200
MILLER 15600
14 rows selected.
5. Hi n th theo n i dung d i đây ể ị ộ ướ Who,
what and when
KING HAS HELP THE POSITION OF PRESIDENT IN DEPT 10 SINCE 17-11-1981 BLAKE
HAS HELP THE POSITION OF MANAGER IN DEPT 30 SINCE 01-05-1981 CLARK HAS HELP
THE POSITION OF MANAGER IN DEPT 10 SINCE 09-06-1981 JONES HAS HELP THE
POSITION OF MANAGER IN DEPT 20 SINCE 02-04-1981 MARTIN HAS HELP THE
POSITION OF SALESMAN IN DEPT 30 SINCE 28-09-1981 ALLEN HAS HELP THE
POSITION OF SALESMAN IN DEPT 30 SINCE 20-02-1981 TURNER HAS HELP THE
POSITION OF SALESMAN IN DEPT 30 SINCE 08-09-1981 JAMES HAS HELP THE
POSITION OF CLERK IN DEPT 30 SINCE 03-12-1981 WARD HAS HELP THE POSITION OF
SALESMAN IN DEPT 30 SINCE 22-02-1981 FORD HAS HELP THE POSITION OF ANALYST
IN DEPT 20 SINCE 03-12-1981
SMITH HAS HELP THE POSITION OF CLERK IN DEPT 20 SINCE 17-12-1980
SCOTT HAS HELP THE POSITION OF ANALYST IN DEPT 20 SINCE 09-12-1982
ADAMS HAS HELP THE POSITION OF CLERK IN DEPT 20 SINCE 12-01-1983
MILLER HAS HELP THE POSITION OF CLERK IN DEPT 10 SINCE 23-01-1982
14 rows selected.
6. Hi n th c u trúc b ng emp; ể ị ấ ả
7. Thay đ i nhãn và đ nh d ng hi n th c a c t sal và hiredate trong b ng emp; ổ ị ạ ể ị ủ ộ ả
Trang 16
Oracle c b n - SQL và PL/SQL ơ ả

Ch ng 3. TRUY V N D LI U CÓ ĐI U KI N ươ Ấ Ữ Ệ Ề Ệ
3.1.CÁC GI I H N TRONG TRUY V N D LI U Ớ Ạ Ấ Ữ Ệ
Trong ph n l n các tr ng h p l y d li u t database, ta ch c n l y m t ph n d li u ch không c nầ ớ ườ ợ ấ ữ ệ ừ ỉ ầ ấ ộ ầ ữ ệ ứ ầ
l y t t c . Đ h n ch các d li u tr v không c n thi t, ta có th s d ng m nh đ đi u ki n trong câuấ ấ ả ể ạ ế ữ ệ ả ề ầ ế ể ử ụ ệ ề ề ệ
l nh truy v n. ệ ấ
Hình v 4. H n ch d li u tr v ẽ ạ ế ữ ệ ả ề
3.1.1. M nh đ WHERE ệ ề
Cú pháp:
SELECT [DISTINCT ] {*, column [alias], }
FROM table
[WHERE condition (s)];
V i: ớ
column tên c t d li u tr v ộ ữ ệ ả ề
alias tiêu đ c a c t d li u tr v ề ủ ộ ữ ệ ả ề
table tên b ng truy v n d li u ả ấ ữ ệ
condition m nh đ đi u ki n đ l c d li u tr v ệ ề ề ệ ể ọ ữ ệ ả ề
M nh đ ệ ề WHERE dùng đ đ t đi u ki n cho toàn b câu l nh truy v n. Trong m nh đ ể ặ ề ệ ộ ệ ấ ệ ề WHERE có th cóể
các thành ph n: ầ
Tên column
Toán t so sánh ử
Tên column, h ng s ho c danh sách các giá tr ằ ố ặ ị
Ví d : ụ
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000 ;
Trang 17
Oracle c b n - SQL và PL/SQL ơ ả
Truy v n d li u v i nhi u đi u ki n ấ ữ ệ ớ ề ề ệ
M nh đ ệ ề WHERE cho phép ghép đ c nhi u đi u ki n thông qua các toán t logic ượ ề ề ệ ử AND/OR. Toán t ử AND
yêu c u d li u ph i tho mãn c 2 đi u ki n. Toán t ầ ữ ệ ả ả ả ề ệ ử OR cho phép d li u tho mãn 1 trong 2 đi u ki n. ữ ệ ả ề ệ

Ví d : ụ
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000
AND JOB = ‘MANAGER’;
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000
OR JOB = ‘MANAGER’;
SELECT DEPTNO, JOB, EMPNO, ENAME, SAL
FROM EMP
WHERE SAL > 1500
AND JOB = ‘MANAGER’
OR JOB =’SALESMAN’;
SELECT DEPTNO, JOB, EMPNO, ENAME, SAL
FROM EMP
WHERE SAL > 1500
AND (JOB = ‘MANAGER’
OR JOB =’SALESMAN’);
3.1.2. Các toán t s d ng trong m nh đ WHERE ử ử ụ ệ ề Toán t soử
sánh
Toán t ử
=
!=, ^=, '+, <\>
>
<
>=
<=
Các toán t c a SQL ử ủ
Toán t ử

[NOT] BETWEEN x AND y
IN (danh sách):
x [NOT] LIKE y
IS [NOT] NULL
EXISTS
Di n gi i ễ ả
Toán t b ng hay t ng đ ng ử ằ ươ ươ
Toán t khác hay không t ng đ ng ử ươ ươ
Toán t l n h n ử ớ ơ
Toán t nh h n ử ỏ ơ
Toán t l n h n ho c b ng ử ớ ơ ặ ằ
Toán t nh h n ho c b ng ử ỏ ơ ặ ằ
Di n gi i ễ ả
[Không] l n h n ho c b ng x và nh h n ho c b ng y Thu c b t kỳ giáớ ơ ặ ằ ỏ ơ ặ ằ ộ ấ
tr nào trong danh sách ị
Đúng n u x [không] gi ng khung m u y ế ố ẫ
Các ký t dùng trong khuôn m u: ự ẫ
D u g ch d i (_) ấ ạ ướ : Ch m t ký t b t kỳ ỉ ộ ự ấ
D u ph n trăm (%) : Ch m t nhóm ký t b t kỳ ấ ầ ỉ ộ ự ấ
Ki m tra giá tr r ng ể ị ỗ
Tr v ả ề TRUE n u có t n t i ế ồ ạ
Trang 18
Oracle c b n - SQL và PL/SQL ơ ả
Các toán t logic ử
Toán t ử Di n gi i ễ ả
NOT
Ph đ nh m nh đ ủ ị ệ ề
AND
Yêu c u d li u ph i tho mãn c 2 đi u ki n ầ ữ ệ ả ả ả ề ệ
OR

Cho phép d li u tho mãn 1 trong 2 đi u ki n ữ ệ ả ề ệ
C p đ u tiên khi th c hi n đ i v i các lo i toán t ấ ộ ư ự ệ ố ớ ạ ử
C p đ u tiên ấ ộ ư
1
2
3
4
Các toán t so sánh ử
NOT
AND
OR
Toán t ử
3.1.3. Ví d s d ng các toán t đi u ki n ụ ử ụ ử ề ệ
[NOT] BETWEEN x AND y
Ví d ch n nhân viên có l ng n m trong kho ng 2000 và 3000 ụ ọ ươ ằ ả
SELECT * FROM emp WHERE sal BETEEN 2000 AND 3000;
IN (danh sách)
Ch n nhân viên có l ng b ng m t trong 2 giá tr 1400 ho c 3000 ọ ươ ằ ộ ị ặ
SELECT * FROM emp WHERE sal IN (1400, 3000);
Tìm tên phòng ban n u phòng đó có nhân viên làm vi c. ế ệ
SELECT dname FROM dept WHERE EXISTS
(SELECT * FROM emp WHERE dept.deptno = emp.deptno);
x [NOT] LIKE y
Tìm nhân viên có tên b t đ u b ng chu i ắ ầ ằ ỗ SMITH
SELECT * FROM emp WHERE
ename LIKE 'SMITH_';
Đ ch n nh ng nhân viên có tên b t đ u b ng ể ọ ữ ắ ầ ằ 'SM'
SELECT * FROM emp WHERE ename LIKE 'SM%';
Đ tìm nh ng nhân viên có tên có chu i ể ữ ỗ 'A_B'
SELECT ename FROM emp WHERE ename LIKE '%A\_B%'; ESCAPE '\'

Vì ký hi u "_" dùng đ đ i di n cho m t ký t b t kỳ nên n u không có m nh đ ệ ể ạ ệ ộ ự ấ ế ệ ề ESCAPE, câu l nh trênệ
s tìm t t c các nhân viên tên ẽ ấ ả AAB, ABB, ACB, v.v
N u mu n ký hi u "_" mang ý nghĩa nguyên th y, t c là không còn đ i di n cho ký t b t kỳ n a, ta đ tế ố ệ ủ ứ ạ ệ ự ấ ữ ặ
d u "\" tr c ký hi u. Đ ng th i khai báo thêm m nh đ ấ ướ ệ ồ ờ ệ ề ESCAPE "\"
Trang 19
Oracle c b n - SQL và PL/SQL ơ ả
Ta cũng có th dùng m t ký t b t kỳ thay cho "\". Ch ng h n m nh đ sau có cùng k t qu v i m nh để ộ ự ấ ẳ ạ ệ ề ế ả ớ ệ ề
trên
SELECT ename FROM emp WHERE ename LIKE '%A^_B%'; ESCAPE '^';
Ta g i các ký t nh "\" hay "^" nói trên là các ký t ọ ự ư ự ESCAPE.
IS [NOT] NULL
Ví d : ụ
SELECT * FROM emp WHERE comm IS NULL ;
3.2.S P X P D LI U TR V Ắ Ế Ữ Ệ Ả Ề
3.2.1. M nh đ ORDER BY ệ ề
Cú pháp:
SELECT [DISTINCT ] {*, column [alias], }
FROM table;
[WHERE condition]
[ORDER BY expr/position [DESC/ASC]];
M nh đ ệ ề ORDER BY dùng đ s p x p s li u đ c hi n th và ph i đ t v trí sau cùng c a câu l nhể ắ ế ố ệ ượ ể ị ả ặ ở ị ủ ệ
truy v n. ấ
Ví d : ụ
SELECT ENAME, JOB, SAL*12, DEPTNO
FROM EMP
ORDER BY ENAME;
M nh đ ệ ể ORDER BY m c đ nh s p x p theo th t tăng d n ặ ị ắ ế ứ ự ầ ASC[ENDING]
S th p tr c ố ấ ướ
Ngày nh tr c ỏ ướ
Ký t theo b ng ch cái ự ả ữ

Đ s p x p theo th t ng c l i (gi m d n) đ t t khoá DESC[ENDING] sau column c n s p th t . ể ắ ế ứ ự ượ ạ ả ầ ặ ừ ầ ắ ứ ự
Vi d : ụ
SELECT ENAME, JOB, HIREDATE
FROM EMP
ORDER BY HIREDATE DESC ;
3.2.2. S p x p nhi u c t d li u tr v ắ ế ề ộ ữ ệ ả ề
M nh đ Order còn có th s p x p nhi u column. Các column c n s p x p đ c vi t th t sau m nh đệ ề ể ắ ế ề ầ ắ ế ượ ế ứ ự ệ ề
ORDER BY và cách b i d u ph y (ở ấ ẩ ,). Column nào g n m nh đ ầ ệ ể ORDER BY h n có m c đ u tiên khiơ ứ ộ ư
s p x p cao h n. Ch đ nh cách th c s p x p ắ ế ơ ỉ ị ứ ắ ế ASC/DESC đ c vi t sau column cách b i m t d u cách. ượ ế ở ộ ấ
Ví d : ụ
SELECT DEPTNO, JOB, ENAME, SAL
Trang 20
Oracle c b n - SQL và PL/SQL ơ ả
FROM EMP
ORDER BY DEPTNO, SAL DESC ;
Order giá tr NULL ị
Riêng đ i v i giá tr NULL, n u s p x p theo th t ASCENDING s n m các v trí cu i cùng. ố ớ ị ế ắ ế ứ ự ẽ ằ ở ị ố
Chú ý: Có th ch đ nh s p x p theo th t các column trong m nh đ SELECT. ể ỉ ị ắ ế ứ ự ệ ề
Ví d : ụ
SELECT DEPTNO, JOB, ENAME, SAL
FROM EMP
ORDER BY 2;
3.3.BÀI T P Ậ
1. Ch n nhân viên trong b ng ọ ả EMP có m c l ng t 1000 đ n 2000 (ch n các tr ng ứ ươ ừ ế ọ ườ
ENAME, DEPTNO, SAL).
ENAME DEPTNO SAL
ALLEN 30 1600
WARD 30 1250
MARTIN 30 1250
TURNER 30 1500

ADAMS 20 1100
MILLER 10 1300
2. Hi n th mã phòng ban, tên phòng ban, s p x p theo th t tên phòng ban. ể ị ắ ế ứ ự
DEPTNO DNAME
10 ACCOUNTING
40 OPERATIONS
20 RESEARCH
30 SALES
3. Hi n th danh sách nh ng nhân viên làm t i phòng 10 và 20 theo th t A,B,C ể ị ữ ạ ứ ự
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7876 ADAMS CLERK 7788 12-01-1983 1100 20
7782 CLARK MANAGER 7839 09-06-1981 2450 10
7902 FORD ANALYST 7566 03-12-1981 3000 20
7566 JONES MANAGER 7839 02-04-1981 2975 20
7839 KING PRESIDENT 17-11-1981 5000 10
7934 MILLER CLERK 7782 23-01-1982 1300 10
7788 SCOTT ANALYST 7566 09-12-1982 3000 20
7369 SMITH CLERK 7902 17-12-1980 800 20
4. Hi n th tên và ngh nghi p nh ng nhân viên làm ngh th ký (cleck) t i phòng 20. ể ị ề ệ ữ ề ư ạ
ENAME JOB
SMITH CLERK
ADAMS CLERK
Trang 21
Oracle c b n - SQL và PL/SQL ơ ả
5. Hi n th t t c nh ng nhân viên mà tên có các ký t TH và LL. ể ị ấ ả ữ ự
ENAME
SMITH
ALLEN
MILLER
6. Hi n th tên nhân viên, ngh nghi p, l ng c a nh ng nhân viên có giám đ c qu n ể ị ề ệ ươ ủ ữ ố ả

lý.
ENAME JOB SAL
SMITH CLERK 800
ALLEN SALESMAN 1600
WARD SALESMAN 1250
JONES MANAGER 2975
MARTIN SALESMAN 1250
BLAKE MANAGER 2850
CLARK MANAGER 2450
SCOTT ANALYST 3000
TURNER SALESMAN 1500
ADAMS CLERK 1100
JAMES CLERK 950
FORD ANALYST 3000
MILLER CLERK 1300
13 rows selected.
7. Hi n th tên nhân viên, mã phòng ban, ngày gia nh p công ty sao cho gia nh p công ể ị ậ ậ
ty trong năm 1983.
ENAME DEPTNO HIREDATE
ADAMS 20 12-JAN-83
8. Hi n th tên nhân viên, l ng m t năm (ể ị ươ ộ ANUAL_SAL ), th ng sao cho l ng l n ưở ươ ớ
h n th ng và ngh nghi p là ơ ưở ề ệ SALEMAN, s p theo th t l ng gi m d n và tên tăng ắ ứ ự ươ ả ầ
d n. ầ
ANUAL_SAL COMM
19200 300
18000 0
15000 500
Trang 22
Oracle c b n - SQL và PL/SQL ơ ả
Ch ng 4. CÁC HÀM SQL ươ

4.1.T NG QUAN V HÀM SQL Ổ Ề
4.1.1. C u trúc hàm SQL ấ
Hàm SQL là m t đ c đi m làm tăng kh năng s d ng câu l nh SQL. Hàm SQL có th nh n nhi u thamộ ặ ể ả ử ụ ệ ể ậ ề
s vào và tr v ch m t giá tr . ố ả ề ỉ ộ ị
Hình v 5. C u trúc hàm SQL ẽ ấ
Hàm SQL có m t s đ c đi m sau: ộ ố ặ ể
Th c hi n vi c tính toán ngay trên d li u ự ệ ệ ữ ệ
Có th thao tác, thay đ i ngay trên t ng m c d li u tr v ể ổ ừ ụ ữ ệ ả ề Ho c cũng cóặ
th thao tác trên nhóm các d li u tr v ể ữ ệ ả ề
Có th đ nh d ng l i các d li u tr v có ki u s , hay ki u th i gian ể ị ạ ạ ữ ệ ả ề ể ố ể ờ Có
th chuy n đ i ki u d li u tr v ể ể ổ ể ữ ệ ả ề
4.1.2. Phân lo i hàm SQL ạ
Hàm SQL có th phân ra làm hai lo i: ể ạ
Hàm tác đ ng trên t ng dòng d li u: Giá tr tr v t ng ng v i t ng d li u đ u ộ ừ ữ ệ ị ả ề ươ ứ ớ ừ ữ ệ ầ
vào t i m i dòng d li u. ạ ỗ ữ ệ
Hàm tác đ ng trên nhóm các dòng d li u: Giá tr tr vê t ng ng v i các phép thao ộ ữ ệ ị ả ươ ứ ớ
tác trên nhóm d li u tr v . ữ ệ ả ề
Trang 23
Oracle c b n - SQL và PL/SQL ơ ả
Hình v 6. Phân lo i hàm SQL ẽ ạ
4.2.HÀM SQL THAO TÁC TRÊN T NG DÒNG D LI U Ừ Ữ Ệ
4.2.1. Các hàm thao tác trên ki u d li u s ể ữ ệ ố
Đ u vào và đ u ra là các giá tr ki u s ầ ầ ị ể ố
M t s hàm SQL hay dùng ộ ố
Hàm SQL Di n gi i ễ ả
ROUND(n[,m])
Cho giá tr làm tròn c a n (đ n c p m, m c nhiên m=0) ị ủ ế ấ ặ
TRUNC(n[,m])
Cho giá tr n l y m ch s tính t ch m th p phân ị ấ ữ ố ừ ấ ậ
CEIL(n)

Cho s nguyên nh nh t l n h n ho c b ng n ố ỏ ấ ớ ơ ặ ằ
FLOOR(n)
Cho s nguyên l n nh t b ng ho c nh h n n ố ớ ấ ằ ặ ỏ ơ
POWER(m,n)
Cho lũy th a b c n c a m ừ ậ ủ
EXP(n)
Cho giá tr c a en ị ủ
SQRT(n)
Cho căn b c 2 c a n, n>=0 ậ ủ
SIGN(n)
Cho d u c a n. ấ ủ
n<0 có SIGN(n)= -1
n=0 có SIGN(n)= 0
n>0 có SIGN(n)= 1
ABS(n)
Cho giá tr tuy t đ i ị ệ ố
MOD(m,n)
Cho ph n d c a phép chia m cho n ầ ư ủ
M t s hàm ki u s tham kh o khác ộ ố ể ố ả
Hàm SQL
LOG(m,n)
SIN(n)
Di n gi i ễ ả
Cho logarit c s m c a n ơ ố ủ
Tr v cosin c a n (n tính b ng radian) ả ề ủ ằ
Trang 24

×