You are on page 1of 209

SSQ

QL
L

SQL
:

.
:
SQL
.
:
:

SQL

Universal Knowledge Solutions s.a.l.


1


SQL
.
SQL .


.
PL/SQL .

.

SQL
) SQL (SEQUEL . SQL
) (CODD .
SQL ISO ANSI
MicrosoftOracle

Universal Knowledge Solutions s.a.l.


2

SQL
:1970
1970


  

  

1974

  &' sql"#$ mainFrame

1979

 45 6' SQL 3 >BCA  8?> ' <'8 = 6 5 8 89 oracle

1987

8
HC' FG ISO 9?8
 ANSI '89  SQL SQL89

1991

Q 3R
89 SQL -92

1999

Q 3R
89 SQL -99 'SQL3 V9 WU? 8

.SQL 99
:
!!!:
SQL
.
.
.

Universal Knowledge Solutions s.a.l.


3

.:
o
o
o
o
o


[ \
^] 4

$ >5

userAddress
B23-A1
Ds-22A1
.

userEmail
sd@fs.com
ahd@srf.com
..

password
samipass
ahmadp
..

Universal Knowledge Solutions s.a.l.


4

userName
sami
ahmad
.

!!

8H 5 =8 89

[>^8

8#$
'>9

?UR
'`
85
8 89
49
85
8 89

. SQL serverOracle
MS-Access .
:

Universal Knowledge Solutions s.a.l.


5

SQL
SQL .
SQL :

Select, insert, delete, update :

create table, drop table, alter table, create index :

grant, revoke :

]?R

'>8

3a`R

SQL
.
SQL :
:
:Select

:Insert

:Delete

:Update

:
:Create table
:drop table

:alter table

:create index
:
grant
revoke
Universal Knowledge Solutions s.a.l.
6



:
.
:
SQL :
. .
SELECT,INSERT,DELETE,UPDATE .
:
:

SELECT

INSERT

DELETE

UPDATE

Universal Knowledge Solutions s.a.l.


7

1 Select
Select .

Select:
;]Select [ field1,field2,] from [table_name

* )
(.

Distinct .

Order by ASC :
DESC .

.AS

:
Users username password
SQL :
Select username, password from Users

:
Select * from Users

UserName :
Select Distinct UserName from Users

:
Select userName, Password from users order by userName ASC

userName Names :
Select username As Names from users
Universal Knowledge Solutions s.a.l.
8

Select .

* ) (star )
(.

Distinct .

Order by ASC :
DESC .

.AS

2 SELECT
:WHERE
Where Select
.
where:
;Select * from users where condition

) (

)=> (= , < > , > , < , <= ,


.

Likebetween

Like . )(%
.

Universal Knowledge Solutions s.a.l.


9

Between

where AND OR
NOT.

:
) am (
Select:
;Select * from users where userName like %am%
15 25 Select
:
;Select * from users where userAge between 15 and 25
) am (
15 25 :
Select * from users where userName like %am%
And
;userAge between 15 and 25

:WHERE
Where Select
.

) (

)=> (= , < > , > , < , <= ,


.

Universal Knowledge Solutions s.a.l.


10

Likebetween

Like . )(%
.

Between

where AND OR
NOT.

DELETE
Delete .
Delete:
]Delete from [table_name
:

users Delete:
Delete from Users
.Users
Where .
' 'Ahmed :
;'Delete from Users where username='Ahmed

Universal Knowledge Solutions s.a.l.


11

Delete
Delete .

INSERT
Insert .
Insert:
;)insert into table_name values ( value1,value2,value3,
value1,..value n .
:
)Insert into table_name (field1,field2.
;)values (value1,value2,..

Insert )(Sub queries


.
:
users :
insert into Users values
;)'('adel','adelPassword',33,'adel@yahoo.com
:
)insert into Users (username,password
;)'values ('adel','adelPassword

Universal Knowledge Solutions s.a.l.


12

otherUserTable users
:
Insert into users select * from OtherUserTable
Insert
Insert )(Sub queries
.

Update
Update .
Update:
Update table_name Set
Field1= new_field_value1 ,
;Field2= new_field_value 2

where Update :
Update table_name Set
Field1= new_field_value1 ,
Field2= new_field_value 2
; Where condition

Universal Knowledge Solutions s.a.l.


13

:
'Update Users set username='sami' , password='sami pass

where :
'Update Users set password='sami pass' where username='sami

Update . where
Update .

SQL ) ; ( .

SQL SQL .
:
-- this is the comment

;Select * from users

)( .
) oracle Acess (SQL server:
; Select [user name] from users

SQL ) ; ( .
SQL SQL .
)( .
) oracle Acess.(SQL server

Universal Knowledge Solutions s.a.l.


14

SQL
:
.
:
SQL : .
.
:
:

Universal Knowledge Solutions s.a.l.


15

SQL
.
) ( ) ( .
SQL
SQL SQL-99 :
-

:f(x,y,z)=x+y+z :

:f(x) = |x| :
SQL
) (SQL-99

.
) ( ) ( .

SQL
SQL SQL-99 :
-

:
.

Universal Knowledge Solutions s.a.l.


16

SQL
SQL :

)AVG(expression

)COUNT(expression

)MIN(expression

)MAX(expression

)SUM(expression

SQL :
AVERAGE .
COUNT .
MIN .
MAX .
SUM .
.

AVG
AVG .
:
select avg([ALL | DISTINCT]column_name) from table_name

All .
Distinct .All

Distinct .

Universal Knowledge Solutions s.a.l.


17

:
grades studentName studentGrade.studentClass
:
select avg(studentGrade) from grades
"" :
= select avg(distinct studentGrade) form grades where studentName
''adel
:

All Distinct .MS Access

AVG
.

AVG .

All .
Distinct .All

Distinct .

COUNT
COUNT .
:
select count([* | ALL | DISTINCT]column_name) from table_name
Universal Knowledge Solutions s.a.l.
18

All
.Null Distinct .All

Distinct
Null .

*
.Null

:
grades studentName studentGrade .studentClass
:
select count(*) from grades
.Null

( :
) Null
select count(all studentName) from grades
:
select count(distinct studentName) from grades
:
All Distinct .MS Access

COUNT .

All
.Null Distinct .All
Universal Knowledge Solutions s.a.l.
19

Distinct
Null .

*
.Null

MIN MAX
MIN .
:
select min(column_name) from table_name
MAX .
:
select max(column_name) from table_name
All Distinct MIN MAX .
) .(Null
:
grades studentName studentGrade studentClass
:
select min(studentGrade) from grades

Universal Knowledge Solutions s.a.l.


20

:
select max(studentGrade) from grades
MIN MAX .
All Distinct MIN MAX .

) .(Null

SUM
SUM .
:
select sum([ALL | Distinct]column_name) from table_name

All .
Distinct .All

Distinct .

:
grades studentName studentGrade studentClass
:
select sum(studentGrade) from grades
:
SUM
SUM .
Universal Knowledge Solutions s.a.l.
21

SUM :

All .
Distinct .All

Distinct .

1
:


) (Products ) (unitCost

SUM :
;Select sum(unitCost) from products where supplier ID= 1
;Select sum(unitCost) from products where supplier ID= 2
;Select sum(unitCost) from products where supplier ID= 3

SQL
.
:




SUM
SQL
.
Universal Knowledge Solutions s.a.l.
22

2
SQL Group by :
Select columnA, aggFunc (aggFuncSpec) from table
where whereSpec
Group by columnA
:
Sales ProductName Quantity
.
Select productName, sum (quantity) from sales
'where saleDate > 'May 2,2002
Group by productName
SQL .Group by

Having

where .
Select field_name from table_name where condition
.

Having
.

Having :
Select columnA, aggFunc (aggFuncSpec) from table
where whereSpec
Group by columnA
Having filterCondition

: Having where
Universal Knowledge Solutions s.a.l.
23

:
StudentsGrade ) (StudentNumber ) (grade
) (70 ) (50
:
Select studentNumber, Avg(grade) as averageMark from studentGrades
Where avg(grade)>70 or avg(grade)<50
Group by studentNumber

where ) (avg
. :
Having
Select studentNumber, Avg(grade) as averageMark from studentGrades
Group by studentNumber
Having avg(grade)>70 or avg(grade)<50
where .

having
.
Having where
.

Top N
) (Top N .
N .
:
Select top N field1, field2 from table_name

Universal Knowledge Solutions s.a.l.


24

:
StudentsGrade ) (StudentName
) (StudentMark
) (.
subject
math
math
history

studentName
ahmad
adel
ahmad

studentMark
15
22
26

:
)Select top 5 studentName, avg(studentMark
From studentsGrades
Group by studentName
order by avg(studentMark) DESC
) (Top N . N
.

Top N
) (Top N .

Mysql :
Select field1, field2 from table_name
Limit 0,N

limit ) 0 (N
.Select

Universal Knowledge Solutions s.a.l.


25

DB2 :
Select field1, field2 from table_name
Fetch first N rows only

N fetch first N rows only


.

Oracle rowNum
Oracle .Select
:
Select field1, field2 where rowNum<= N

:

) (callLog : ) (userName
) .(phoneNumber Oracle :
Select phoneNumber, count(userName) from callLog
Group by phoneNumber
)Order by count(userName
Where rowNum<= 3
) (Top N .
Mysql limit K
.Select
DB2 fetch first N rows only
.
Oracle rowNum Oracle
.Select
Universal Knowledge Solutions s.a.l.
26

:
.
tasks:
taskIncom taskHandler
10000
adel

taskID taskDate
1 27/1/2003

taskID
taskDate
taskIncom
taskHandler
:

.2004

.
:


.
:
)Select taskHandler, count(taskID), sum(taskIncom), max(taskIncom
From tasks
Group by taskHandler
Where taskDate between 01/01/2004 and 31/12/2004
Order by max(taskIncom) DESC

Universal Knowledge Solutions s.a.l.


27

.
tasks taskID
taskDate taskIncom
taskHandler .
:

.2004

.
:


.

Universal Knowledge Solutions s.a.l.


28

:
:
.
:
SQL
.
:
:

Universal Knowledge Solutions s.a.l.


29

SQL

.
SQL

SQL99 .

: .

SQL
.
SQL

SQL-99 .
:

: .

: .
Universal Knowledge Solutions s.a.l.
30

) (Floor

) (Ceiling

) (Round

) (Abs

Sin( ), Cos( ), Tan( ),


Atan( ),

) (SQRT

) (RAND

0 1
.

:Floor .

:Ceiling .

:Round
.

:Abs .

:Sin, Cos, Tan, Atan, .


:SQRT .

:RAND 0 1 .
Universal Knowledge Solutions s.a.l.
31

-
:

:Floor

Floor .
Select floor(studentMark) from marks
66.5 : 66.2 66.7 66 :

:Ceiling

Ceiling :
Select ceiling(studentMark) from marks
66.5 : 66.2 66.7 67 :

:Round

Round :
Select round(studentMark, 1) from marks
. 66 66.0
66.55 66.5
:
Access Floor .ceiling
INT .Floor
:
Select Int(studentMark) from marks
Ceiling .Round
:
Select Round(studentMark+0.5,0) from marks
Oracle Ceil Ceiling
:
Floor .
66.5 : 66.2 66.7 66 :Floor
Universal Knowledge Solutions s.a.l.
32

.Ceiling
66.5 : 66.2 66.7 67 :Ceiling
Round
. 66 66.0 Round 66.55
.66.5

-

.
:

:ABS

height geoTable
:
Select Max(abs(height)) from geoTable
abs max .

...Sin, Cos, Tan

Angle Angles
:
Select sin(angle), cos(angle), tan(angle) from Angles

:Rand

Rand 0 1
seed Numbers :
Select rand(seed) from numbers

Universal Knowledge Solutions s.a.l.


33

:SQRT

SQRT :3
)select sqrt(9
:
0 1 rnd MS-Access .rand

.
height geoTable
abs max
. Sin, Cos, Tan
Rand 0 .1 SQRT .

)(Left

)(Right

)(Substr

)(Length

)(Concat

Lower() /
)(Upper
)(Trim

)(Instr

Universal Knowledge Solutions s.a.l.


34

:
)(Left

)(Right

)(Substr

)(Length

)(Concat

Lower() /
)(Upper
)(Trim

)(Instr

-
:

Left:Right

Left Right
Left .Right 50
Title News :
Select left(title, 50) from News

:Substr

Substr .
5 Title 10
:
Select substr(title, 10, 5) from News

Universal Knowledge Solutions s.a.l.


35

:Length

Length .
Title :
Select length(title) from News

:Concat

Concat .
Title Details News :
Select concat(title, details) from News
:

Oracle Left Right .Substr

Ms-Access SQL-Server Len Length


.

Mysql SQL-Server Substring Substr



.

. Left Right
Left
.Right Substr
. Length . Concat
.

Upper:Lower

Upper Lower ) .(A-Z


Title :
;Select upper(title) from News

Universal Knowledge Solutions s.a.l.


36

:Trim

Trim . Title
:
;Select trim(title) from News

:Instr

Instr . 0 .
' 'Test Title News

:
;Select Instr(title, 'Test') from News
:

Ms-Access Ucase Lcase


Upper.Lower

SQL-Server Charindex DB2 Posstr



.Instr

Upper Lower ) .(A-Z Trim


. Instr
0 .

)(DateDiff

)(GetDate

CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP


Universal Knowledge Solutions s.a.l.
37

:
Days, Hours, Minutes, Seconds
DateDiff .
:

)(DateDiff

)(GetDate


CURRENT_DATE

CURRENT_TIME

CURRENT_TIMESTAMP

:GetDate

.
:
)( getDate
2003-12-06 04:50:32.28 :

:DateDiff

.
RegistrationDate RegistrationInfo :
Select dateDiff(dd, RegistrationDate, getDate()) from
registrationInfo
Universal Knowledge Solutions s.a.l.
38

dd .
.dd
:

Ms-Access Date .getDate

Oracle .

GetDate
. DateDiff .

CURRENT_DATE

)
( . :
Select CURRENT_DATE as myDate
CURRENT_TIME

)
( . :
Select CURRENT_TIME as myTime

CURRENT_TIMESTAMP

)
( CURRENT_TIMESTAMP
)( .GetDate RegistrationDate
RegistrationInfo :
Select dateDiff(dd, RegistrationDate, CURRENT_TIMESTAMP) from
registrationInfo

Universal Knowledge Solutions s.a.l.


39

CURRENT_DATE .
CURRENT_TIME .
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP )(.GetDate

)(Str

)(To_Number

)(Cast

)(Convert

:


.
:
Str . To_Number . Cast - :Convert

Universal Knowledge Solutions s.a.l.


40

-
:

:STR
. :
)STR (Float, Length, Precision
53.45 :

)STR(53.45 , 5 , 2
5 2 .

: Length STR
'*'

:To_Number
.
.
' '$3,15.2 :
)'To_Number('$3,15.2' , '$9,99.9
' '$9,99.9
.

:
SQL-Server To_Number Cast DB2 INT, Float, DEC To_Number MySql 0 To_Number
Ms-Access INT Universal Knowledge Solutions s.a.l.
41

STR To_Number
.
.

)(

:Cast
. Cast:
)Cast(Expression as Data_Type
' '4.123 :

))Cast('4.123' as Decimal(3,2
4.12

:Convert
. Convert:
)Convert(Expression, Data_Type
' '5.2 :
)Convert('5.2', integer

:
SQL Server, Oracle, DB2, MySql Cast MySql SQL-Server Convert Cast Convert

Universal Knowledge Solutions s.a.l.
42


:
.
:
.
.
:
:

Universal Knowledge Solutions s.a.l.


43

~  B9
~  

:
. . MySQL Join . .
:
-1
-2

Universal Knowledge Solutions s.a.l.


44


-1 :
.

.
:
Customers Orders .
) (customerName :
Select customerName,(select count(*) from Orders
;where Orders.customerID=Customers.customerID) from Customers
) (
.
-2 :
.
:
Students ) (studentName ) .(studentID
Grades ) (grade ) .(studentID
:
Select studentName from Students where Students.studentID in (select
;)Grades.studentID from Grades where Grades.grade>=50
) .(50
) (
.Students
:
.
.Table_Name.Field_Name
Universal Knowledge Solutions s.a.l.
45

-1 :
.

.
-2 :
.


:
;Select columnA, (subquery) as columnB from Table_Name
Subquery .
.
.
:
Accounts accountID
.accountBalance Clients clientName
.accountID :
Select Accounts.accountID, (select clientName from Clients where
Clients.accountID = Accounts.accountID)as myClientName,
Accounts.accountBalance
;from Accounts
)
( .Accounts.accountID

Universal Knowledge Solutions s.a.l.


46

' '.
.

Where
:
;)Select columnA, columnB from Table_Name where columnB=(Subquery
Subquery .
.Where
:
Tickets Owners
carNumber .ownerName ownerName 1234
:
Select ownerName, Owners.carNumber from Owners
where Owners.carNumber=(select Tickets.carNumber from tickets
;)where ticketNumber=1234

Where .

Universal Knowledge Solutions s.a.l.


47


.
:
;)Select columnA, columnB from Table_Name where columnC IN(Subquery
.IN
) (Subquery
:
;Select column1 from Table1
:
:
Select ownerName from Owners where Owners.carNumber IN
;)(select Distinct Tickets.carNumber from Tickets

.Distinct


Where .
IN
(.
)
IN

Universal Knowledge Solutions s.a.l.


48

Exists All Any


:Exists
True
Exists .
False .

Exists :
;)Select columnA, columnB from Table_Name where Exists (Subquery
:
Orders orderID orderType
clientID . Clients .clientID
" " :
Select Clients.clientName from Clients where Exists
( select * from Orders
where Orders.clientID = Clients.clientID
and
;)' '=orderType

Exists All Any


:All
All Where
.

Universal Knowledge Solutions s.a.l.


49

All :
Select columnA from TableA
;)where columnA > All from (select columnB from TableB
A columnA
columnB .TableB
:
Time Name
currentRecords oldRecords
.oldTime
:
Select Name from currentRecords
;)where time < All (select oldTime from oldRecords

Exists All Any


:ANY
ANY
Where .
Any :
Select columnA from TableA
;)where columnA > ANY from (select columnB from TableB
A columnA
columnB .TableB

Universal Knowledge Solutions s.a.l.


50

:
Time Name
currentRecords bestRecords
.bestTime
:
Select Name from currentRecords
;)where time < ANY (select bestTime from bestRecords

Union IntersectExcept
Union Intersect) Except(Minus .
.
:
select columnA,columnB from tableA
Operator
;Select columnC,columnD from tableB
Operator .
:

]^ _`Z[WXYZ N1
c
]^ _`Z[WXYZ N2
defgh

ColumnA
.......
.......
.......
.......
.......

ColumnB
........
.......
.......
.......
.......

N1 N2 .

Universal Knowledge Solutions s.a.l.


51

:
-1 .
-2 .
.

Union ,Intersect ,Except


Union Intersect) Except(Minus .
.
:
-1 .
-2 .
.

Union IntersectExcept
:UNION
Union :
select columnA,columnB from tableA
UNION
;Select columnC,columnD from tableB

.

Union All .Union
Universal Knowledge Solutions s.a.l.
52

:
Employees employeeName employeeGrade
. Managers managerName managerGrade
.
50
60 :
Select employeeName, employeeGrade from Employees
where employeeGrade >50
Union
Select managerName, managerGrade from Managers
;where managerGrade>60

Union ,Intersect , Except


:UNION
Union .
.

Union All .Union

Union IntersectExcept
:Intersect
Intersect
.
Intersect :
select columnA,columnB from tableA
Intersect
;Select columnC,columnD from tableB

Universal Knowledge Solutions s.a.l.


53

Intersect
:
DB2 Oracle .Intersect
:
Theoretical Name Mark -
Practical Name Mark -
. :
Select Theoretical.Name from Theoretical where Theoretical.Mark>50
Intersect
;Select Practical.Name from Practical where Practical.Mark>50

Universal Knowledge Solutions s.a.l.


54

Union IntersectExcept
:Except
Except .
Except :
select columnA,columnB from tableA
Except
;Select columnC,columnD from tableB
:

Except Oracle .Minus

(Minus) Except DB2.Oracle

:
Movies movieName
movueType .movieNumber rentMovies .
Action :
Select movies.movieName, Movies.movieNumber from Movies
where movieType=Action
Minus
;Select rentMovies.movieName, rentMovies.movieNumber from rentMovies

Universal Knowledge Solutions s.a.l.


55


:
.
:


.
:
:

Universal Knowledge Solutions s.a.l.


56



. .
.
SQL .

.
:
-

:
;Select Table1.Column1, Table2.Column2 from Table1, Table2
Names, Classes
:
;Select class, Name from Classes, Names
.
Universal Knowledge Solutions s.a.l.
57


. } {A, B, C

} {D, E, F 9 :
}){(A,D), (A,E), (A,F), (B,D), (B,E), (B,F), (C,D), (C,E), (C,F
100 10000
.

. :

;Select Table1.Column1, Table2.Column2 from Table1 Cross Join Table2


:
.
) (productName Products )(materialName
ChemicalEffects .
:
;Select productName, materialName from Products, ChemicalEffects

Select productName, materialName from Products Cross Join


;ChemicalEffects
:
DB2 Cross Join


.

. } {A, B, C
} {D, E, F 9 :
}){(A,D), (A,E), (A,F), (B,D), (B,E), (B,F), (C,D), (C,E), (C,F
Universal Knowledge Solutions s.a.l.
58

100 10000
.
.

:
Select Table1.Column1, Table1.Column2, Table2.Column3
;From Table1, Table2 where Table1.Column1 = Table2.Column2
Table1.Column1
Table2.Column2 :
Table1.Column1, Table1.Column2, Table2.Column3

:
Select Table1.Column1, Table1.Column2, Table2.Column3
From Table1
Join Table2
;ON Table1.Column1 = Table2.Column2

:
Names ) (name ) (INumber
Addresses ) (address ) (INumber
:
Select Names.name, Addresses.address from Names, Addresses
;Where Names.INumber = Addresses.INumber

Universal Knowledge Solutions s.a.l.


59


Select Names.name, Addresses.address
From Names
Join Addresses
;ON Names.INumber = Addresses.INumber


.
:
Select Table1.Column1, Table2.Column2, Table3.Column4
From Table1 Join Table2
ON Table1.Column1 = Table2.Column2
Join Table3
;ON Table1.Column3 = Table3.Column4
.ON
Table1 Table2 Column1 Table1 Column2
Table2 Table3 Table1 Column3 Table1
Column4 .Table3
:
Customers customerID customerName CreditCards
cardNumber customerID Addresses
.country
:
Select Customers.customerID, Customers.customerName,
CreditCards.cardNumber, Addresses.country
From Customers
Join CreditCards
ON Customers.customerID = CreditCards.customerID
Join Addresses
;ON Customers.customerID = Addresses.customerID

Universal Knowledge Solutions s.a.l.


60

)(
MS Access
:
Select Table1.Column1, Table2.Column2, Table3.Column4
From Table2
Inner Join
)(Table3 Inner Join Table1 ON Table3.Column4 = Table1.Column1
;ON Table2.Column2 = Table1.Column1
MS Access
. Table3 Table1

Column4 Table3 Column1 Table1
Table2 Column2 Table2 Column1
.Table1
:
: ) Sectors - - (...
sectorID .sectorName Seasons
) 2004 seasonID (...2003 .seasonInfo Products
productID productDescription productPrice
seasonID sectorID .
.
:
Select productDescription, productPrice, seasonName, sectorName
From Sectors
Inner Join
)(Seasons Inner Join Products ON Seasons.seasonID = Products.seasonID
;ON Sectors.sectorID = Products.sectorID
MS Access
. MS Access
.
Universal Knowledge Solutions s.a.l.
61


Where
) ( :
Select Table1.Column1, Table2.Column2
From Table1, Table2
;Where Table1.Column1 < Table2.Column2
:
Stores storeName storeID
Occupation stroreID quantity
.Type
:
Select Stores.storeID, Stores.storeName from Stores, Occupation
Where Stores.storeID <> Occupation.storeID


.Inner Join
Inner Join ON
. Outer Join
.
.Left, Right, Full :

Universal Knowledge Solutions s.a.l.


62

Table1 Table2
Column1 Table1 Column2 Table2 :
Select * from Table1 LEFT OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2

Table2 Table1
Column1 Table1 Column2 Table2 :
Select * from Table1 RIGHT OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2

Table2 Table1
Column1 Table1 Column2 Table2
:
Select * from Table1 FULL OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2

NULL
.


.Inner Join
Inner Join ON
. Outer Join
.
Left : Right .Full
Universal Knowledge Solutions s.a.l.
63

NULL
.

Left Join
Column1 Table1 Column2
:Table2
Select * from Table1 LEFT OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2
:

Null
.

.
:
:
Select * from Table1 LEFT OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2
Table1 Column1 } {1, 5, 8, 3 Table2
Column2 } {6, 5, 7, 9 :
Column1 Column2
1
Null
5
5
8
Null
3
Null
Null Column2 Column2
.Column1
Universal Knowledge Solutions s.a.l.
64

Column1 .Table1
:

Null
.

Right Join
Column1 Table1 Column2
:Table2
Select * from Table1 RIGHT OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2
:

Null
.

.
:
:
Select * from Table1 RIGHT OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2
Table1 Column1 } {1, 5, 8, 3 Table2
Column2 } {6, 5, 7, 9 :
Column2
6
5
7
9

Column1
Null
5
Null
Null

Universal Knowledge Solutions s.a.l.


65

Null Column2 Column2


.Column1
Column2 .Table2
:

Null
.

Full Join
Column1 Table1 Column2
:Table2
Select * from Table1 FULL OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2
:

Null
.

Null
.

:
:
Select * from Table1 FULL OUTER JOIN Table2
;ON Table1.Column1 = Table2.Column2

Universal Knowledge Solutions s.a.l.


66

Table1 Column1 } {1, 5, 8, 3 Table2


Column2 } {6, 5, 7, 9 :
Column1 Column2
1
Null
5
5
8
Null
3
Null
Null
6
Null
7
Null
9
Null Column1 Column1
Column2 Null Column2 Column1 .Column2

Full Join
:

Null
.

Null
.

Natural Join
Natural Join .
:
Select Table1.Column1, Table2.Column1 from Table1 Natural Join
;Table2
ON Natural Join
.
Universal Knowledge Solutions s.a.l.
67

:
Pictures ) (pictureID
) .(pictureDescription Names ) (clientName
) .(pictureID :
Select clientName, pictureDescription from Names Natural Join
;Pictures
.pictureID

Natural Join
Natural Join .
ON
Natural Join .

Using
Using .
Using:
Select Table1.Column2, Table2.Column3
)From Table1 Join Table2 Using (Column1
Column1 Column1 .
:
Using Natural Join Oracle 9I
Using .

Universal Knowledge Solutions s.a.l.


68


:
Customers Orders. Coutries

Customers ) (customerInfo ) (countryID


.

Orders ) (customerID ) (orderDescription


.

Orders ) (countryID ) (countryName ).(countryInfo


.
:
Select orderDescription, customerName, countryName
From Countries Inner Join (customers RIGHT OUTER JOIN Orders
ON Customers.customerID = Orders.customerID
;ON Countries.countryID = Customers.countryID
Customers Orders Countries
.Customers
:
Customers Orders. Coutries

Customers ) (customerInfo ) (countryID


.

Orders ) (customerID ) (orderDescription


.

Orders ) (countryID ) (countryName ).(countryInfo

Universal Knowledge Solutions s.a.l.


69


.
:
Customers Orders Countries
Customers .

Universal Knowledge Solutions s.a.l.


70


:
.
:
.
:
:

Universal Knowledge Solutions s.a.l.


71



. : .
.
:
-


. .
* :
Oracle SQL Server MySQL DB2 :
;CREATE DATABASE database_name
* :
:
;DROP DATABASE database_name
) (DROP DATABASE SQL Server My SQL DB2 Oracle
) (CREATE DATABASE Oracle
Database Assistant .

Universal Knowledge Solutions s.a.l.


72

) (CREATE DATABASE Oracle


.

.
SQL Server Enterprise Manager DB2
Control Center .

MS Access New File


.Access Access
).(.mdb

. .
Oracle SQL Server MySQL DB2
)(CREATE DATABASE
)(DROP DATABASE
) (DROP DATABASE SQL Server My SQL DB2 Oracle
) (CREATE DATABASE Oracle
Database Assistant .


:
CREATE TABLE table_name
(column1_name column1_data_type column1_constraints,
;)column2_name column2_data_type column2_constraints,

Universal Knowledge Solutions s.a.l.


73

:
;DROP TABLE table_name
:
;TRUNCATE TABLE table_name
:
Store Customers .Products
Customers ) (ID ) (name ) .(phone Products
) (ID ).(description
:
;CREATE DATABASE Store
CREATE TABLE Customers
;)(ID Int, name varchar(50), phone varchar(15
CREATE TABLE Products
;))(ID Int, description varchar(75
:
;)Insert into products (ID,description) values (1,HPComputer
Int.varchar
: .
:
MySQL SQL Server Oracle DB2
.
SQL Server, Oracle, MySQL :
DELETE from table_name
Universal Knowledge Solutions s.a.l.
74


) (CREATE TABLE) (DROP TABLE) (TRUNCATE TABLE .
.


:
;CREATE TABLE table_name_copy AS Select* from table_name
SQL Server :
;Select * Into table_name_copy from table_name
MySQL :
;CREATE TABLE table_name_copy Select* from table_name
table_name table_name_copy
.table_name
Where False
:
CREATE TABLE table_name_copy AS Select* from table_name
;Where 1 = 0
0 = 1 .0 =1
DB2 DEFINITION ONLY :
CREATE TABLE table_name_copy AS (Select* from table_name) DEFINITION
;ONLY
Universal Knowledge Solutions s.a.l.
75

:
Logs OldLogs :
;CREATE TABLE OldLogs AS Select * from Logs
) (CREATE TABLE
Oracle MySQL.SQLServer
Where False
1=0 .
DB2 DEFINITION ONLY
.


:
;) ]ALTER TABLE table_name [ADD | DROP COLUMN] (column_name [data_type
ADD DROP .
:
Members ID .Name
.Type :
;) )ALTER TABLE Members ADD (Type varchar(15
ID .Members :
;ALTER TABLE Members DROP COLUMN ID

Universal Knowledge Solutions s.a.l.


76

:
ALTER TABLE .

) (ALTER TABLE .


:
CREATE TABLE table_name
(column1_name column1_data_type column1_constraints,
;)column2_name column2_data_type column2_constraints,
column_constraints .
.

-

:
Not Null
Default
Primary key
Unique
Check
Identity
Auto_increment

:
.


column_ constraints
. .

Universal Knowledge Solutions s.a.l.


77

:
Not Null
Default
Primary key
Unique
Check
Identity
Auto_increment

NOT NULL
Null . NOT
NULL .
:
Null
:
CREATE TABLE Employees (name varchar(40) NOT NULL ,
;)Job varchar(50) NOT NULL
:
)Insert into Employees(name) values(Adel
Job
Job .Null
NOT NULL
Null . NOT
NULL .

Universal Knowledge Solutions s.a.l.


78

DEFAULT
.
.
DEFAULT :
CREATE TABLE MyTable
(Column1 varchar(50) DEFAULT Unknown ,
;) )Column2 varchar(10
Unknown Column1
.Column1
:
) (Description ) . (Days
.
:
CREATE TABLE Shipments
;)(Description varchar(75) Not Null , Days INT DEFAULT 2 Not Null
Shipments :
Description Null . Days 2 . Days :
;)INSERT INTO Shipments (Description) Values (Computer
Computer | 2 :
Days 2 .

Universal Knowledge Solutions s.a.l.


79

DEFAULT
DEFAULT .
.

PRIMARY KEY
Codd
.
.
PRIMARY KEY .
:
CREATE TABLE MyTable
(Column1 data_type Not Null , Column2 data_type ,
;))Constraint myPrimaryKey PRIMARY KEY (Column1
MyPrimaryKey Column1 .
:
CREATE TABLE MyTable
(Column1 data_type Not Null , Column2 data_type ,
;))PRIMARY KEY (Column1
:
CREATE TABLE MyTable
(Column1 data_type PRIMARY KEY Not Null , Column2 data_type ,
;))PRIMARY KEY (Column1

Universal Knowledge Solutions s.a.l.


80

:
CreditCards cardNumber .cardHolder

:
CREATE TABLE CreditCards
(cardNumber varchar(20) PRIMARY KEY Not Null ,
;)cardHolder varchar(50) Not Null

Primary Key
Codd
.
.
PRIMARY KEY .

UNIQUE
UNIQUE
.
:

CREATE TABLE MYTable


;)(Column1 data_type UNIQUE , Column2 data_type
:
PhoneBook Name Phone
:

Universal Knowledge Solutions s.a.l.


81

CREATE TABLE PhoneBook


;)(Name varchar(50) UNIQUE , Phone Primary Key Not Null
UNIQUE
UNIQUE
.

Check
Check
.
Check Where
.

Check:
CREATE TABLE MyTable
(Column1 data_type ,
Column2 data_type ,
;))Constraint Cname CHECK (Condition
Cname Condition .Check
:
Ages Name Age 12.
:
CREATE TABLE Ages
(Name varchar(50) Not Null ,
Age INT ,
;))Constraint CheckAge CHECK (Age between 1 And 12

Universal Knowledge Solutions s.a.l.


82

CheckAge .
CREATE TABLE Ages
(Name varchar(50) Not Null ,
;))Age INT CHECK(Age between 1 And 12

Check And Or
1 12 15 :
CREATE TABLE Ages
(Name varchar(50) Not Null ,
;))Age INT CHECK(Age = 15 OR Age between 1 And 12
1 12 3 :
Check
CREATE TABLE Ages
(Name varchar(50) Not Null ,
Age INT,
Constraint CheckAge1 CHECK (Age between 1 And 12),
;))Constraint CheckAge2 CHECK (Age <> 3
:
Check ) .(Null
Check
Check
.
Check Where .

Check And .Or - Check .

Universal Knowledge Solutions s.a.l.


83

IDENTITYAUTO_INCREMENT
.
PRIMARY KEY .
:
SQL Server IDENTITY MySQL AUTO_INCREMENT DB2 GENRATED ALWAYS AS IDENTITY Access AUTOINCREMENT Oracle Create Sequence:
:
:SQL Server 100 :1
CREATE TABLE Students
(Name varchar(50) ,
;)ID INT IDENTITY (100,1) PRIMARY KEY NOT NULL
) (100 ) (1 ).(1
MySQL:CREATE TABLE Students
(Name varchar(50) ,
;)ID INT AUTO_INCREMENT PRIMARY KEY NOT NULL
:AccessCREATE TABLE Students
(Name varchar(50) ,
;)ID INT AUTOINCREMENT (100,1) PRIMARY KEY NOT NULL

Universal Knowledge Solutions s.a.l.


84

DB2 :CREATE TABLE Students


(Name varchar(50) ,
;)ID INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY
ALWAYS .
BY DEFAULT .ALWAYS
IDENTITY , AUTO_INCREMENT
.
PRIMARY KEY .
:
SQL Server IDENTITY MySQL AUTO_INCREMENT DB2 GENRATED ALWAYS AS IDENTITY Access AUTOINCREMENT - Oracle Create Sequence

IDENTITYAUTO_INCREMENT
Oracle IDENTITY AUTO_INCREMENT .
Oracle CREATE SEQUENCE .
:
CREATE SEQUENCE sequence_name
INCREMENT increment_step
;START WITH start_seed
SQL. - sequence_name.NextVal

Universal Knowledge Solutions s.a.l.


85

Insert :
INSERT INTO mytable
)(Column1, Column2, Column3
;)Values (sequence_name.NextVal, Value2, Value3
Column1 NextVal .
:
Products Oracle productID
.ProductDescription productID
.
:

CREATE TABLE Products
(productID INT PRIMARY KEY NOT NULL ,
;))productDescription varchar(75
Counter :

;CREATE SEQUENCE Counter
.1
productID :
INSERT INTO Products
)(productID , productDescription
;)Values (Counter.NextVal , any Porduct description
Oracle IDENTITY AUTO_INCREMENT .
Oracle CREATE SEQUENCE .
SQL.
sequence_name.NextVal
Universal Knowledge Solutions s.a.l.
86


:

.
:
.
:
:

Universal Knowledge Solutions s.a.l.


87

1
.
.
:

:
.

:
.

:
.

Universal Knowledge Solutions s.a.l.


88

2
: )
(
.
PK

FK
2

PK

PK

PK

3
)
Universal Knowledge Solutions s.a.l.
89


( .
.

.
.

:
.
.

.
customerID customerInfo

customerID orderDescription
?
?
?

) Customers (
) Orders (.

4
SQL

Universal Knowledge Solutions s.a.l.


90

.
:
CREATE TABLE myTable
(Column1 Column1Type PRIMARY KEY NOT NULL , Column2 Column2Type ,
Column3 Column3Type ,
CONSTAINT foreign_key_name FOREIGN KEY (Column3)
REFERENCES other_table (other_table_primary_key));
Column2 Column1 myTable
other_table FOREIGN KEY Column3
.other_table_primary_key
:
Models Brands
Models Brands
:Brands Models Brands
brandID INT PRIMARY KEY NOT NULL ,
brandName varchar (50));

CREATE TABLE Brands (

: Models
modelID INT PRIMARY KEY NOT NULL ,
CREATE TABLE Models (
modelName varchar (50) ,
modelBrand INT ,
CONSTRAINT myFK FOREIGN KEY (modelBrand)
REFERENCES Brands (brandID));
.Access SQL Server, Oracle, DB2

:
modelID INT PRIMARY KEY NOT NULL ,
modelName varchar (50) ,

CREATE TABLE Models (

Universal Knowledge Solutions s.a.l.


91

modelBrand INT ,
FOREIGN KEY (modelBrand)
REFERENCES Brands (brandID));

MySQL
: MySQL
InnoDB MySQL
:
CREATE TABLE myTable
(Column1 Column1Type PRIMARY KEY NOT NULL , Column2 Column2Type ,
Column3 Column3Type ,
FOREIGN KEY (Column3)
REFERENCES other_table (other_table_primary_key)
INDEX myIndex (Column3))
Type = InnoDB;

Universal Knowledge Solutions s.a.l.


92


:
.
:
.
:
:

Universal Knowledge Solutions s.a.l.


93

SQL
SQL .
. SQL .

.
.
.
.
.

.


:
;CREATE VIEW view_name AS query
view_name query .
:
Inner Join
:
CREATE VIEW MySimpleView Projects.projectName ,
count (Tasks.taskID) AS TasksNumber
From Tasks Inner Join Projects
ON Tasks.projectID = Projects.projectID
;Group by projectName
Universal Knowledge Solutions s.a.l.
94

MySimpleView projectName.tasksNumber
:

;Select projectName from MySimpleView


Update, Insert Delete
:
.Group By Top .Distinct - .


:
;ALTER VIEW viewName AS newQuery
SQL Server Oracle :
CREATE OR REPLACE VIEW viewName AS newQuery
:
ALTER VIEW Oracle DB2 .SQL Server DB2 . MySQL 5.0.1 .SQL Server
Universal Knowledge Solutions s.a.l.
95

:
studioName, studioNumber Studio
ActorName Actors . programNumber
SQL Server ActorsStudios .programName
: MySQL
ALTER VIEW ActorsStudios AS
Select actorName , studioName from Actors Inner Join Studios
ON Studios.studioNumber = Actors.studioNumber;
:Oracle
CREATE OR REPLACE VIEW ActorsStudios AS
Select actorName , studioName from Actors Inner Join Studios
ON Studios.studioNumber = Actors.studioNumber;


.DROP VIEW
.
: DROP VIEW
DROP VIEW viewName;
:
: MyView
CREATE VIEW MyView AS
Select * from MyTable;
: MyView
DROP VIEW MyView;

Universal Knowledge Solutions s.a.l.


96

MyView :
;Select* from MyView

MyTable .MyView


.DROP VIEW
.



.
:SQL Server
SQL Server :
CREATE TABLE # tmp_Table (Field1Name Field1Type , Field2Name
;Field2Type
CREATE TABLE #
.
) (SQL Server #
Universal Knowledge Solutions s.a.l.
97

. ## .
SQL Server tempdb .
.
:
Students studentName studentID .studentMark
:
;)CREATE TABLE #tmp (studentName varchar(50) , average INT
:
Insert Into #tmp select Students.studentName AS studentName ,
;AVG (studentMark) AS average from Students
50 :

;Select studentName , average from #temp where average<50


:Oracle
Oracle :
CREATE GLOBAL TEMPORARY TABLE CREATE TABLE .SQL Server
:
;CREATE GLOBAL TEMPORARY TABLE temp_table AS query
query .temp_table

:
;Insert Into temp_table query

Universal Knowledge Solutions s.a.l.


98

:
myTemp productName productPrice
Products :
CREATE GLOBAL TEMPORARY TABLE myTemp AS
;select productName , productPrice from Products
:
;Insert Into myTemp select productName , productPrice from Products


:DB2
DB2 DECLARE GLOBAL TEMPORARY TABLE
: SQL Server Select
.Oracle
DB2
. .userTemporary
userTemporary
system .
userTemporary .
DB2 :
-1 :
CREATE USER TEMPORARY SPACE table_space MANAGED BY SYSTEM USING
;)(path
-2 :
Universal Knowledge Solutions s.a.l.
99

DECLARE GLOBAL TEMPPORARY TABLE temp_table


(Field1 Field1Type , Field2 Field2Type) IN table_space;
Insert Into -3
:
:
CREATE USER TEMPORARY SPACE tempSpace MANAGED BY SYSTEM USING
(c:\temp_space);
:
DECLARE GLOBAL TEMPPORARY TABLE tempCallers
(Name varchar(50) , Number varchar (15)) IN tempSpace;
:
Insert Into tempCallers
Select Distinct callerName AS Name , callerNumber AS Number from
Callers where Destination = 62918763;


:mySQL
CREATE CREATE TEMPORARY TABLE mySQL
. TABLE
: mySQL mySQL
CREATE TEMPPORARY TABLE temp_table
(Field1 Field1Type , Field2 Field2Type;
Universal Knowledge Solutions s.a.l.
100

:
myTemp 100
:
;))CREATE TEMPORARY TABLE myTemp (Name varchar(50
:
Insert Into myTemp select Name , sum (Quantity) from Sales
Group By Name
;Having sum (Quantity) > 100


.
.
Select
Update, Delete Insert
.
.

.

.

Universal Knowledge Solutions s.a.l.


101

:


.
.
:
.


Where Order By ON
.Join
.
:
. . UNIQUE
UNIQUE .
:
;)CREATE UNIQUE INDEX index_name ON tableName (FieldName
:
;)CREATE INDEX index_name ON tableName (FieldName
:
Universal Knowledge Solutions s.a.l.
102

Phonebook Name Number :Category


... Number
Category .
:
;)CREATE UNIQUE INDEX myIndex ON Phonebook (Number
:
;Select * from Phonebook where Number = 5437268
:

) ( :
;Select * from tableName where strColumn like %substr
strColumn .


SQL .DROP INDEX
SQL Server :
;DROP INDEX myTable.myIndex
Oracle DB2 :
;DROP INDEX myIndex
MySQL :
;DROP INDEX myIndex ON myTable
Universal Knowledge Solutions s.a.l.
103

:
:SQL Server Phonebook numberIndex
DROP INDEX Phonebook.numberIndex;
: DB2 Oracle
DROP INDEX numberIndex;
: My SQL
DROP INDEX numberIndex ON Phonebook;

Universal Knowledge Solutions s.a.l.


104

:

.
:

.
:
:

Universal Knowledge Solutions s.a.l.


105

1

. .

200$ .

:SQL
UPDATE creditAccount set
;creditBalance=creditBalance - 200 where creditNumber=345276778543
UPDATE SiteAccount set
;SiteBalance=SiteBalance + 200 where accountNumber=345231
SQL


.


.

2
:

.
.Universal Knowledge Solutions s.a.l.
106

. .
. .
. .
).(ACID

3
):(ACID
-1 : . .
.
-2 : .
.
.
-3 :
.
.
-4 :
.

Universal Knowledge Solutions s.a.l.


107

4

.
:
SQL99 START TRANSACTION
DB2 Oracle SQL Server.MySQL
SQL Server:
;BEGIN TRANSACTION transaction_name
MySQL :
;BEGIN
Oracle . DB2
.
Access .
:
Checking :SQL Server
;BEGIN TRANSACTION Checking
MySQL :
;BEGIN

Universal Knowledge Solutions s.a.l.


108

5
:
.
.
SQL99 SAVEPOINT :
;SAVEPOINT savepoint_name
DB2 Oracle SQL Server :
;SAVE TRANSACTION savepoint_name
MySQL .
:
BeforeChange DB2 Oracle :
;SAVEPOINT BeforeChange
SQL Server :
;SAVE TRANSACTION BeforeChange

Universal Knowledge Solutions s.a.l.


109

6
:

.
: SQL99
ROLLBACK [WORK] [TO SAVEPOINT savepoint_name];
TO SAVEPOINT DB2 Oracle
. MySQL MySQL
: SQL Server
ROLLBACK TRANSACTION [<transaction_name>|<savepoint_name>];
:
:
BEGIN TRANSACTION myTransaction;
Update Accounts SET myBalance = myBalance-100;
SAVE TRANSACTION mySavePoint;
Update Products SET Quantity = Quantity-1;
SAVE BEGIN TRANSACTION SQL Server
.TRANSACTION
: mySavePoint
ROLLBACK TRANSACTION myTransaction;
: DB2 Oracle
Update Accounts SET myBalance = myBalance-100;
SAVEPOINT mySavePoint;
Update Products SET Quantity = Quantity-1;
ROLLBACK TO mySavePoint;
Universal Knowledge Solutions s.a.l.
110

mySQL :
;BEGIN
;Update Accounts SET myBalance = myBalance-100
;Update Products SET Quantity = Quantity-1
;ROLLBACK

7
:
SQL COMMIT
. .ROLLBACK
SQL99 :
;]COMMIT [WORK
.mySQL, SQL Server, Oracle, DB2
SQL Server COMMIT TRANSACTION
:
;COMMIT TRANSACTION transaction_name
:
:
BEGIN TRANSACTION
SAVE TRANSACTION beforeChange
UPDATE creditAccount set
;creditBalance=creditBalance - 200 where creditNumber=345276778543
Universal Knowledge Solutions s.a.l.
111

ROLLBACK TRANSACTION beforeChange


UPDATE SiteAccount set
;SiteBalance=SiteBalance + 200 where accountNumber=345231
COMMIT TRANSACTION

8
:
SQL Server mySQL
.

.
:
:
;Update myTable SET ID = 10
;Update Customers SET customerName = Adel

.
:
BEGIN WORK
;Update myTable SET ID = 10
;Update Customers SET customerName = Adel
;COMMIT WORK
:Oracle

Universal Knowledge Solutions s.a.l.


112

;SET AUTOCOMMIT ON|OFF


SQL Server :
;SET IMPLICIT_TRANSACTIONS ON|OFF
DB2 Command Center >Options

9
:
.
.
.
:
:
BEGIN TRANSACTION myTransaction
)Insert Into Graduated (ID, Name) Values (20, Samer
IF @@ERROR <> 0 ROLLBACK TRANSACTION myTransaction
;Update Students SET Status = Graduated where ID = 20
COMMIT TRANSACTION myTransaction
:
myTransaction Samer 20 o ROLLBACK
o Samer
.COMMIT TRANSACTIONUniversal Knowledge Solutions s.a.l.
113


.

.
.
.
.
.
SQL99 :
READ UNCOMMITED READ COMMITED REPEATABLE READ SERIALIZABLE : .
:
) SET [LOCAL] TRANSACTION (( READ ONLY | READ WRITE
ISOLATION LEVEL
) ( READ COMMITED | READ UNCOMMITED | REPEATABLE READ | SERIALIZABLE
;) | DIAGNOSTIC SIZE INT
:
;] SET TRANSACTION [ READ ONLY | READ WRITE
:
;SET TRANSACTION ISOLATION LEVEL isolation_level_name

Universal Knowledge Solutions s.a.l.


114

:
SQL Server, DB2, mySQL, Oracle .READ COMMITED


:READ UNCOMMITED
. :
;SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED

.

.COMMIT .
:

. .


:READ COMMITED
.

Universal Knowledge Solutions s.a.l.
115

.
.
:
;SET TRANSACTION ISOLATION LEVEL READ COMMITED
.


.



.READ COMMITED .REPEATABLE READ


:REPEATABLE READ


.READ COMMITED
.
.

.
:

Universal Knowledge Solutions s.a.l.


116

;SET TRANSACTION ISOLATION LEVEL REPATABLE READ


. .
:

where


.
.


:SERIALIZABLE
where
.
.
:
;SET TRANSACTION ISOLATION LEVEL SERIALISABLE


:SQL server
SQLserver .
SLQ Server .READ COMMITED
Universal Knowledge Solutions s.a.l.
117

:
SET TRANSACTION ISOLATION LEVEL
{ READ COMMITED
| READ UNCOMMITED
| REPEATABLE READ
| SERIALIZABLE
}
:Oracle
READ UNCOMMITED Oracle
.REPEATABLE READ
Oracle SET TRANSACTION .READ COMMITED Oracle
.
:
SET TRANSACTION
{ {READ ONLY | READ WRITE}
| ISOLATION LEVEL
{ READ COMMITED
| SERIALIZABLE
}};
: ALTER SESSION
ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;

:MySQL
: InnoDB MySQL
SET [GLOBAL | SESSION ] TRANSACTION ISOLATION LEVEL
{ READ COMMITED
| READ UNCOMMITED
| REPEATABLE READ
| SERIALIZABLE
};
Universal Knowledge Solutions s.a.l.
118

SET TRANSACTION .
SESSION GLOBAL
.
:DB2
DB2
WITH .
:
;Any query WITH isolation_level
isolation_level:
-

:RR REPEATABLE READ

:RS REPEATABLE READ

:CS READ COMMITED

:UR READ UNCOMMITED

:

Update myTable SET myColumn = 10 Where otherColumn = 5
;WITH RR

Universal Knowledge Solutions s.a.l.


119


:

.
:
.SQL
.
:
:

) (

Universal Knowledge Solutions s.a.l.


120

1
.
.

.

SQL.
SQL
.
.

2
CALL Oracle
DB2 EXECUTE EXEC SQL Server.Access
Oracle EXECUTE.
:
UpdateRec 3 OracleDB2
:
;)CALL UpdateRec (3
SQL Access :
;EXECUTE UpdateRec 3

Universal Knowledge Solutions s.a.l.


121

SQL Server.Access
.


CREATE PROCEDURE :
)CREATE PROCEDURE sp_name (parameter_list
;AS sp_body
sp_name Parameter_list
sp_body .
Oracle, DB2, SQL Server.Access
.
:
Products
ID :
)CREATE PROCEDURE deleteProduct (@ProductID INT
AS
BEGIN
;Delete from Products where ID = @ProductID
;END
END, BEGIN
ProductID .
@ .SQL Server

Universal Knowledge Solutions s.a.l.


122

ID
8 :
;)EXECUTE deleteProduct (8


:Oracle
Oracle SQL Server ANSI
:
)CREATE [OR REPLACE] PROCEDURE sp_name (parameter_list
AS
BEGIN
;Sp_body
;END
OR REPLACE
.
@.
/
.SQL Server
:
Oracle
OR REPLACE .
:
Status Students
:

Universal Knowledge Solutions s.a.l.


123

CREATE OR REPLACE PROCEDURE updateStatus


(minMark IN INT, myStatus IN varchar)
AS
BEGIN
Update Students SET Status = myStatus where Mark < minMark;
END;


:mySQL
5.0.3 mySQL
.mySQL
CREATE PROCEDURE sp_name (parameter_list)
BEGIN
query_body;
END;

:
myCount myTable
:
CREATE PROCEDURE getCount (OUT myCount INT)
BEGIN
SELECT Count (*) Into myCount form myTable;
END;

Universal Knowledge Solutions s.a.l.


124


:DB2
DB2 SQL
Microsoft Visual C++ .
DB2 .
:
)CREATE PROCEDURE sp_name (parameter_list
block_name: BEGIN
;sp_body
;END block_name

:
Students :
CREATE PROCEDURE
))insertStudent (mystudentID INT, mystudentName varchar(50
Label1: BEGIN
)Insert Into Students (studentID, studentName
)Values(myStudentID, mystudentName
;END Label1


:Ms Access
Access .CREATE PROCEDURE
) ( .

Universal Knowledge Solutions s.a.l.


125

getProducts :
;Select productName from getProducts
:
;EXECUTE getProducts
Access .
SQL .
:
Access Quantity
:
)CREATE PROCEDURE deleteQuantity (@myQuantity INT
AS
;Delete from Products where Quanity <@myQuantity
EXECUTE
8 :
;)EXECUTE deleteQuantity (8


:
:
;DROP PROCEDURE procedure_name
:
Universal Knowledge Solutions s.a.l.
126

ALTER PROCEDURE CREATE PROCEDURE


.
:
myStoredProcedure myTable
:
)ALTER PROCEDURE myStoredProcedure (myRecordID INT
AS
;Delete from myTable where ID = myRecordID

.CREATE PROCEDURE


:
/.

.
SQL .
:SQL
SQL
.
:
;)DECLARE var_name var_type (length

Universal Knowledge Solutions s.a.l.


127

. :
;)DECLARE var1_name, var2_name, var3_name var_type (length
:
varchar :
;DECLARE var1 INT
;)DECLARE var2, var3, var4 varchar(50
DB2 .BEGIN END
Oracle BEGIN END
.


.
.
SQL Server :
;SET @var_name = value

;SELECT @var_name = value


mySQL DB2 SET @ = :
mySQL Oracle :
;var_name:= value
Oracle DB2 SELECT :
SELECT field_name from tableName Into variable_name
;where field_name = 1
Universal Knowledge Solutions s.a.l.
128


.

SQL Server
Default .Oracle
:
Contacts
.Unknown :
CREATE PROCEDURE Insert Contacts
)(@myName varchar(50), @myAddress varchar(50) = Unknown
)AS Insert Into Contacts (contactName, contactAddress
;)Values (@myName, @myAddress
Oracle :
CREATE OR REPLACE PROCEDURE Insert Contacts
)(myName IN varchar(50), myAddress IN varchar(50) DEFAULT Unknown
AS
BEGIN
)Insert Into Contacts (contactName, contactAddress
;)Values (myName, myAddress
;END
DB2 .

Universal Knowledge Solutions s.a.l.


129


.
:SQL Server
SQL Server OUTPUT
:
CREATE PROCEDURE procedure_name
)(@output_parameter_name INT OUTPUT
;

:
theName
:
CREATE PROCEDURE getName
)(@theNumber varchar(15) , @theName varchar(50) OUTPUT
AS
BEGIN
)SET @theName = (SELECT Name from Phonebook where Number = @theNumber
;END
SET theName .
:
;)DECLARE @theName varchar(50
;EXECUTE getName 4445467 , @theName OUTPUT
;PRINT @theName
:
theName theName - .

Universal Knowledge Solutions s.a.l.


130


:Oracle
Oracle :
CREATE OR REPLACE PROCEDURE getName
))(theNumber IN varchar(15) , theName OUT varchar(50
AS
BEGIN
SELECT Name INTO theName from Phonebook
;where Number = theNumber
;END
SELECT INTO Name .theName
:
SET SERVER ON
;)DECLARE theName varchar(50
BEGIN
;)getName (4465873 , theName
;)dbms_output.put_line(theName
;END
:
SET SERVER ON SQL* plus SQL* plus
theName theName - .

Universal Knowledge Solutions s.a.l.


131


:DB2
DB2 :
CREATE PROCEDURE getName
))(theNumber INT , OUT theName varchar(50
P1:BEGIN
;)SET theName = (SELECT Name from Phonebook where Number = theNumber
;END P1
theName SET
:
;)? CALL (getName 5738894 ,
DB2 .
:MySQL
Mysql :
CREATE PROCEDURE getName
))(IN theNumber varchar(15) , OUT theName varchar(50
BEGIN
SELECT Name INTO theName from Phonebook
;where Number = theNumber
;END
:
;))CALL (getName 5738894 ,OUT theName varChar(50
;Select theName

Universal Knowledge Solutions s.a.l.


132



:

.
:

.
:
:

Universal Knowledge Solutions s.a.l.


133


:
SQL

.
.

:

.

.
.

:
IF..ELSE :IF condition
;conditionTrueBody
ELSE
;conditionFalseBody
condition conditionTrueBody
.conditionFalseBody
CASE.WHEN :expression
value1 THEN result1
value2 THEN result2
valueN THEN resultN
resultElse

Universal Knowledge Solutions s.a.l.


134

CASE
WHEN
WHEN
..
WHEN
ELSE
;END

expression Value1..ValueN
result .resultElse
.


IFELSE CASEWHEN SQL Server
.
:IF..ELSE
IF.ELSE :SQL Server
IF condition
BEGIN
trueStatments
END
ELSE
BEGIN
falseStatments
END
BEGIN END .BEGIN END
ELSE .
:

:
CREATE PROCEDURE getSalesAndComment
)(@myProductID INT, @mySales INT OUTPUT,@myComment VARCHAR(40) OUTPUT
AS
BEGIN

Universal Knowledge Solutions s.a.l.


135

SET @mySales= (Select sum(Quantity) from sales


where productID=@myProductID);
IF @mySlales=0
SET @myComment=STOP THIS PRODUCT;
ELSE
SET @myComment=KEEP THIS PRODUCT;
Update products set ProductComment=@myComment
Where productID=@myProductID ;
END
ELSE IF BEGIN END
:
DECLARE @theComment VARCHAR(40);
DECLARE @theSales INT
EXECUTE getSalesAndComment(3, @theSales OUTPUT, @theComment OUTPUT);
PRINT @theSales;
PRINT @theComment;
.


:CASE.WHEN
:SQL Server CASEWHEN
SET @aVariable= CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
..
WHEN valueN THEN resultN
ELSE resultElse
END;
. Yskh] SELECT SQL Server CASEWHEN

Universal Knowledge Solutions s.a.l.


136

. value1valueN CASE

:

:
CREATE PROCEDURE getStudentLevel
(@myStudentName VARCHAR(50), @myStudentLevel VARCHAR(40) OUTPUT)
AS
BEGIN
DECLARE studentGrade INT;
SET @studentGrade= (Select studentGrade from students
where studentName=@myStudentName);
SET @myStudentLevel= CASE
WHEN @studentGrade>80 THEN VERY GOOD
WHEN @studentGrade>70 THEN GOOD
WHEN @studentGrade>60 THEN NOT BAD
WHEN @studentGrade>50 THEN PASS
WHEN @studentGrade<50 THEN FAIL
END;
END;
:
DECLARE @theStudentLevel VARCHAR(40);
EXECUTE getSalesAndComment(sami, @ theStudentLevel OUTPUT);
PRINT @ theStudentLevel;
.


mySQL DB2 Oracle CASEWHEN IFELSE
: SQL Server
. IFELSE ELSEIF mySQL DB2 Oracle CASEWHEN mySQL DB2 Oracle Universal Knowledge Solutions s.a.l.
137

.SQL Server SELECT


END END CASE CASEWHEN .SQL Server
Oracle = : .SET
:
Reservations
:Oracle
CREATE OR REPLACE PROCEDURE Reservations
(myRoomType IN varchar(10), myDays IN INT)
AS
BEGIN
IF myRoomType= Single THEN
Insert Into Reservations (roomType, Fee)
Values(myRoomType,20*myDays);
ELSEIF myRoomType=Double THEN
Insert Into Reservations (roomType, Fee)
Values(myRoomType,35*myDays);
ELSEIF myRoomType=Sweet THEN
Insert Into Reservations (roomType, Fee)
Values(myRoomType,45*myDays);
END IF;
END;
:
CALL Reservations (Single,5);


.
: END BEGIN WHILE SQL Server
WHILE Condition
Universal Knowledge Solutions s.a.l.
138

BEGIN
loopBody
END;
: END LOOP LOOP Oracle
WHILE Condition
LOOP
loopBody
END LOOP;
: END WHILE DO DB2
WHILE Condition
DO
loopBody
END WHILE;
: END WHILE WHILE mySQL
WHILE Condition
loopBody
END WHILE;
:
Numbers 100 1
: SQL Server
CREATE PROCEDURE tenRandoms()
AS
BEGIN
DECLARE @myNumber INT;
WHILE @myNumber<10
BEGIN
Insert Into Numbers(number) Values(Round(rand)*100);
SET @myNumber=@myNumber+1;
END;
END;

Universal Knowledge Solutions s.a.l.


139


: Oracle
CREATE OR REPLACE PROCEDURE tenRandoms()
AS
BEGIN
DECLARE myNumber INT;
myNumber:=1;
WHILE myNumber<10
LOOP
Insert Into Numbers(number) Values(Round(rand)*100);
MyNumber:=myNumber+1;
END LOOP;
END;
: DB2
CREATE PROCEDURE tenRandoms()
AS
P1:BEGIN
DECLARE myNumber INT;
myNumber=1;
WHILE myNumber<10
DO
Insert Into Numbers(number) Values(Round(rand)*100);
myNumber=myNumber+1;
END WHILE;
END P1;

: mySQL
CREATE PROCEDURE tenRandoms()
BEGIN
DECLARE myNumber INT;
SET myNumber=1;
WHILE myNumber<10
Insert Into Numbers(number) Values(Round(rand)*100);
SET myNumber=myNumber+1;
Universal Knowledge Solutions s.a.l.
140

;END WHILE
;END



SQL .

.
:
:
;DECLARE cursorName CURSOR FOR cursorSpecification

cursorSpecification .
Oracle IS FOR .
FOR UPDATE :
;DECLARE cursorName CURSOR IS cursorSpecification FOR UPDATE
.
OF columnList columnList
.
.
FOR READ ONLY FOR UPDATE
DB2 WITH HOLD.WITH RETURN
WITH HOLD .
WITH RETURN TO CALLER
TO CLIENT

Universal Knowledge Solutions s.a.l.


141


:

;OPEN cursorName
.
FETCH :
;FETCH cursorName INTO var1,var2,var3,,varN
var1,var2,var3,,varN .
.
SQL Server :
.DB2
;FETCH NEXT from cursorName INTO @var1,@var2,@var3,,@varN
FETCH FIRST FETCH PRIOR
FETCH LAST .FETCH NEXT
FETCH ABSOLUTE N
.FETCH RELATIVE N

:
;CLOSE cursorName
:
Universal Knowledge Solutions s.a.l.
142

SQL Server .


Oracle DB2 .
FOR .
Oracle :
)FOR cursorName IN (cursorSpecification
LOOP
loopBody
;END LOOP
DB2 :
)FOR cursorName AS (cursorSpecification
DO
loopBody
;END FOR
.
:
myColumn myTable
:
SET SERVEROUT ON
)FOR myCursor IN (select myColumn from myTable
LOOP
)Dbms_output.put_line(myCursor.myColumn
;END LOOP
myCursor
.
.myColumn

Universal Knowledge Solutions s.a.l.


143


:SQL Server

.
DECLARE @myNumber varchar(15);
DECLARE @myName varchar(50);
DECLARE myCursor CURSOR FOR
Select contactNumber, contactName from Contacts;
OPEN myCursor;
WHILE @@FETCH_STATUS = 0
FETCH NEXT from myCursor INTO @myNumber, @myName;
PRINT @myName, @myNumber;
END;
myCursor
.FETCH NEXT
0 -1 @@ FETCH_STATUS
.
:Oracle
: Oracle
SET SERVEROUT ON
DECLARE myNumber varchar(15);
DECLARE myName varchar(50);
DECLARE myCursor CURSOR IS
Select contactNumber, contactName from Contacts;
OPEN myCursor;
WHILE myCursor%FOUND
LOOP
FETCH NEXT from myCursor INTO myNumber, myName;
dbms_output.put_line(myName, myNumber);
END LOOP;

Universal Knowledge Solutions s.a.l.


144

SET SERVEROUT .
.myCursor%FOUND %FOUND TRUE
.
%ISOPEN %ROWCOUNT
.



. SQL Server Access :
;CREATE PROCEDURE procedureName AS query
EXEC EXECUTE:
;EXEC procedureName

:
myProcedure :
CREATE PROCEDURE myProcedure
;AS select productName from Products
DB2 :
)(CREATE PROCEDURE procedureName
RESULT SETS 1
LANGUAGE SQL
P1:BEGIN
DECLARE cursorName CURSOR WITH RETURN FOR
query
open cursorName
Universal Knowledge Solutions s.a.l.
145

END P1
RESULT SETS 1
.cursorName
DB2
.RESULT SETS
WITH RETURN .
DB2 :
;CALL procedureName


SQL Server DB2 Oracle
CREATE PACKAGE
.
.

:
CREATE [OR REPLACE] PACKAGE packageName
AS types, procedure, ect
;END packageName
CREATE PACKAGE BODY
:
CREATE [OR REPLACE] PACKAGE BODY packageName
AS
definition of procedure
;END packageName

Universal Knowledge Solutions s.a.l.


146

.
:
myProcedure myCursor myPackage
.CURSOR theCursor
CREATE OR REPLACE PACKAGE myPackage
AS
Type myCursor IS REF CURSOR;
PROCEDURE myProcedure (theCursor OUT myCursor);
END myPackage;
:
CREATE OR REPLACE PACKAGE BODY myPackage
AS
PROCEDURE myProcedure (theCursor OUT myCursor);
IS
BEGIN
OPEN theCursor FOR
Select myColumn from myTable;
END myProcedure;
END myPackage;

Universal Knowledge Solutions s.a.l.


147


:
.
:
.
:
:

Universal Knowledge Solutions s.a.l.


148


.
.
SQL
.
SQL .
.
.


.
:RETURN
DB2 SQL Server RETURN :
;RETURN value
.
.
0
.

SQL Server

Universal Knowledge Solutions s.a.l.


149

SQL Server @@ .
ERROR .
0 .
IF :
)IF (@@ERROR <> 0
;errorHandler
errorHandler .
.
RAISERROR :
;]RAISERROR {msg_id | msg_str}, severity, state [,argument
msg_id 13000.2147483647
msg_str .
severity 0 25 20
.
state 1 127 .
.
. % . %d
%u %s .

Universal Knowledge Solutions s.a.l.


150

SQL Server
:
Customers
:
CREATE PROCEDURE safeInsert
))(@myCustomerID INT, @myCustomerName varchar(50
AS
BEGIN
;DECLARE @theError INT
;)Insert Into Customers Values (@myCustomerID, @myCustomerName
;SET @theError = @@ERROR
IF @theError <> 0
BEGIN
RAISERROR
(cannot insert the customer with ID %d,
;)10, 1, @customerID
;RETURN @theError
;END
ELSE
;RETURN 0
;END
:
safeInsert theError @@ERROR .Customers
theError o 0 .
.
o theError
.%d


:
;EXEC safeInsert 20, Adel

Universal Knowledge Solutions s.a.l.


151

Oracle
Oracle EXCEPTION

END .
:

BEGIN
--SQL Code
EXCEPTION
WHEN Exception1 THEN
--handelException1
WHEN EXCEPTION2 THEN
--handelException2
;END
.
:
* :CURSOR_ALREADY_OPEN .
* :DUP_VAL_ON_INDEX .
* :INVALID_NUMBER
.
* :NO_DATA_FOUND SELECT INTO
.
* :TO_MANY_ROWS SELECT INTO
.
* :OTHERS .
EXCEPTION
.

Universal Knowledge Solutions s.a.l.


152

Oracle
:
Students
Sami Students .
CREATE OR REPLACE PROCEDURE insertSudent( myStudentName IN
)varchar(50),myStudentID IN INT
AS
;myCustomException EXCEPTION
BEGIN
IF myStudentName =samiTHEN
; RAISE myCustomException
;END IF
;)Insert into students values (myStudentID,myStudentName
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
;)Dbms_output.put_line(we have this ID ion our table
WHEN myCustomException THEN
;)Dbms_output.put_line(this student is not allowed to register
;END
Students :
DUP_VAL_ON_INDEX myCustomException .
EXCEPTION
.
:
;)CALL insertStudent (Adel, 10

DB2
DB2 . :

:SQLSTATE .

:SQLCODE .

.
Universal Knowledge Solutions s.a.l.
153

:
;DECLARE SQLCODE INT DEFAULT 0
SQLSTATE:
;DECLARE SQLSTATE CHAR(5) DEFAULT 00000
.
.

DECLAREHANDLER :
DECLARE handler_type HANDLER FOR error_type
BEGIN
--handler_code
;END
handler_type :
:CONTINUE .
:EXIT BEGINEND BEGINEND
.
error_type .
:
:SQLEXCEPTION .SQL :SQLWARNING .SQL :NOT FOUND WHERE .

Universal Knowledge Solutions s.a.l.


154

DB2
:
SQL 23405

:
DECLARE CONTINUE HANDLER FOR SQLSTATE 23505
;--code to handle the error
.
SIGNAL :
SIGNAL SQLSTATE SQLStateCode
;SET MESSAGE_TEXT = errorDescription
SQLSTATE
.
:
7 9 T Z
.

Universal Knowledge Solutions s.a.l.


155

DB2
:
SQLSTATE
:
))CREATE searchFor (myName varchar(50), OUT myMessage varchar(50
P1: BEGIN
;DECLARE SQLSTATE char(5) DEFAULT 00000
DECLARE EXIT HANDLER FOR NOT FOUND
;myMessage = did not find name
IF myName = sami THEN
SIGNAL SQLSTATE 87000
;SET MESSAGE_TEXT = can not search for that name
;myMessage = can not search for that name
;END IF
;Select name from Names where name = myName
;END p1
SQLSTATE EXIT
NOT FOUND
.87000
:
;)?CALL searchFor (samer ,

MySQL
MySQL .DB2
:
;DECLARE handler_type HANDLER FOR condition_value [,...] sp_statement

Universal Knowledge Solutions s.a.l.


156

:CONTINUE

:EXIT END-BEGIN

condition_value MYSQL :

SQLWARNING 01

NOT FOUND 02

SQLEXCEPTION .

:mysql_error_code .
NOT FOUND .

:Condition_name .

:Sp_statement . SET
.

MySQL .DB2

:

:CONTINUE

:EXIT END-BEGIN

condition_value MYSQL :

SQLWARNING 01

NOT FOUND 02

SQLEXCEPTION .

:mysql_error_code .
NOT FOUND .

:Condition_name .

:Sp_statement . SET
.

Universal Knowledge Solutions s.a.l.


157

MySQL
:1
emps :
))CREATE PROCEDURE handlerproc(OUT p_end VARCHAR(10
BEGIN
;'declare continue handler for 1062 SET @b = '- With Error 1062
;'declare continue handler for 1048 SET @b = '- With Error 1048
; )insert into emps VALUES (NULL,'Dave',1,10
;)set p_end:= concat('The End ',@b
;END
:

ER_DUP_ENTRY 1062

ER_BAD_NULL_ERROR 1048 NULL


.

b Continue
.
:2
SQLSTATE 23000
SQLSTATE
))create procedure conditionproc(OUT p_end VARCHAR(10
begin
;'declare not_null condition for SQLSTATE '23000
declare continue handler for not_null SET @b = '- With not_null
;'Error
; )insert into emps VALUES (NULL,'Dave',1,10
;)set p_end:= concat('The End ',@b
;end

Universal Knowledge Solutions s.a.l.


158


.
:
-1
.
-2
.
-3 .

Universal Knowledge Solutions s.a.l.


159

SQL
:
.
:
. SQL
.
:
:

SQL99

ACCESS

SQL SERVER

) ORACLE (

Universal Knowledge Solutions s.a.l.


160

SQL
.

.

SQL .
:
-1 : .
) (.
-2 :
.
.
.
:
.
:
-1 :
. .
-2 .

.

.
.
.

.

Universal Knowledge Solutions s.a.l.


161


:

.
. SQL
.
.

.
MySQL Access
.
sysAdmin
SQL Server sa .
:
.

.

SQL
SQL99
.
SQL99 GRANT: REVOKE
.
SQL99 CREATE ROLE SET ROLE DROP
.ROLE

Universal Knowledge Solutions s.a.l.


162

:GRANT
GRANT . :
-1 :
CREATE DATABASE, CREATE TABLE,
.CREATE PROCEDURE, CREATE VIEW :
GRANT prevelage_type TO user_name
-2 :
INSERT, UPDATE, DELETE, SELECT
. .EXECUTE
.
:
GRANT privilege_type ON resource TO user_name

.
Oracle SQL Server DB2 GRANT
.

SQL
:REVOKE
REVOKE GRANT .
REVOKE GRANT :

Universal Knowledge Solutions s.a.l.


163

: REVOKE prevelage_type FROM user_name


: REVOKE prevelage_type ON resource FROM user_name

.
: GRANT REVOKE SQL99
GRANT
GRANT {ALL PRIVILEGES}
|SELECT
|INSERT [(column_name [,n]
|DELETE
|UPDATE [(column_name [,n]
|REFERENCES [(column_name
[,n]
|USAGE } [,n]
ON {[TABLE] table_name
|DOMAIN domain_name
|COLLATION collation_name

REVOKE
REVOKE [GRANT OPTION FOR]
{ALL PRIVILEGES}
| SELECT
| INSERT
| DELETE
| UPDATE
| REFERENCES
| USAGE }[,n]
ON { [TABLE] table_name
| DOMAIN domain_name
| COLLATION collation_name
| CHARACTER SET charset_name
| TRANSLATION
translation_name
FROM (grantee_name | PUBLIC}
[,n]
{CASCAD | RESTRICT}

SQL
:MS Access
.Oracle DB2 SQL Server Access
Universal Knowledge Solutions s.a.l.
164

.
Access 2002 GRANT REVOKE .
Access Tools .Security

Access .
Tools Security .set database password
Encrypt/Decrypt Database Tools
.Security
Access User and
Group Accounts Tools Security .

.User and Group Permissions

Universal Knowledge Solutions s.a.l.


165

SQL
:SQL Server
SQL Server
.
.sp_addlogin
:
EXEC sp_addlogin userName, userpassword
.sp_password :
. :sp_password
EXEC sp_password oldpass, newpass, userName
.sp_droplogin
:
EXEC sp_droplogin userName
:
Adel thepass :
EXEC sp_addlogin Adel, thepass
:
EXEC sp_droplogin Adel

SQL
:SQL Server
Universal Knowledge Solutions s.a.l.
166

SQL Server
.
sp_addlogin
.sp_password :
.
.sp_droplogin
Windows :SQL Server
SQL Server
Windows .Windows
Windows
.
domain\userName
.mymachine\userName
SQL Server Windows
.SQL Server

SQL
.
.sp_grantdbaccess
. :
EXEC sp_grantdbaccess userName
:
myDatabase myTable Adel
:
Universal Knowledge Solutions s.a.l.
167

CREATE DATABASE myDatabase


GO
useMyDatabase
GO
;))CREATE TABLE myTable (myColumn varchar(10
GO
EXEC sp_grantdbaccess Adel
sp_grantdbaccess
useMyDatabase .myDatabase
sp_revokedbaccess :

EXEC sp_revokedbaccess userName


.

SQL
:
SQL Server SQL99
) (GRANT, REVOKE .
:
myTest myDB Sami SELECT
UPDATE :
CREATE DATABASE myDB
GO
USE myDB
GO
Universal Knowledge Solutions s.a.l.
168

;)CREATE TABLE myTest (call1 INT


GO
EXEC sp_grantdbaccess Sami
GO
GRANT SELECT , UPDATE ON myTest TO Sami
Sami GRANT WITH
GRANT OPTION :
WITH GRANT OPTION

GRANT SELECT, UPDATE ON myTest TO Sami

SQL Server GRANT DENY .


REVOKE SQL Server GRANT .DENY
.REVOKE ALL
SELECT myTest :

REVOKE SELECT ON myTest FROM Sami
WITH GRANT OPTION
CASCADE :
REVOKE SELECT ON myTest FROM Sami

SQL
:MySQL
SQL Server .
sp_addrole .

GRANT .
SELECT myTable myRole :
;GRANT SELECT ON myTable TO myRole
Universal Knowledge Solutions s.a.l.
169

:
;EXEC sp_addrolemember myRole, userName
sp_droprolemember :
;EXEC sp_droprolemember myRole, userName
:
DENY REVOKE GRANT DENY
.

SQL
:
SQL Server GRANT, DENY REVOKE
.
SQL Server :
CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION,
CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, BACKUP
.DATABSE, BACKUP LOG
:
test :
EXEC sp_addlogin test, testpass
GRANT CREATE DATABASE TO test
WITH GRANT OPTION .

Universal Knowledge Solutions s.a.l.


170

Oracle
ORACLE oracle
.
:
Oracle SYS.SYSTEM
oracle SYSTEM
.
Oracle CREATE USER Oracle .simplepassword
CREATE USER:
;CREATE USER user_name IDENTIFIED BY user_password
ALTER USER :;ALTER USER user_name IDENTIFIED BY new_password
:
;ALTER USER user_name ACCOUNT LOCK
;ALTER USER user_name ACCOUNT UNLOCK
DROP USER :DROP USER user_name
:
test Oracle sss :
;CREATE USER test
;ALTER USER test IDENTIFIED BY sss
;DROP USER test

Universal Knowledge Solutions s.a.l.


171

Oracle
ALTER USER
ORACLE
:
;ALTER USER user_name PASSWORD EXPIRE
Oracle8 PROFILE .
ALTER USER :
;ALTER USER user_name PROFILE my_profile
Profile :
CREATE PROFILE my_profile LIMIT what_to_limit
what_to_limit :
FAILED_LOGIN_ATTEMPTS
PASSWORD_LIFE_TIME .
PASSWORD_REUSE_TIME
PASSWORD_REUSE_MAX
PASSWORD_LOCK_TIME
PASSWORD_GRACE_TIME
PASSWORD_VERIFY_FUNCTION
PROFILE :
;DROP PROFILE my_profile
:
Profile 30 Sara :
CREATE PROFILE my_profile LIMIT
;PASSWORD_LIFE_TIME 30
;ALTER USER sara PROFILE my_profile
Universal Knowledge Solutions s.a.l.
172

) SQL(
:

.
:
SQL .
.
:
:

DB2

MySQL

) ORACLE(

Universal Knowledge Solutions s.a.l.


173

ORACLE

Oracle Oracle.
:Oracle
Oracle GRANT .REVOKE
.
Oracle :
CONNECT .-

RESOURCE .

DBA . myUser :
;GRANT CONNECT,RESOURCE TO myUser
.REVOKE RESOURCE
myUser :
;REVOKE RESOURCE FROM myUser
myUser .
:
RESOURCE CONNECT RESOURCE
RESOURCE .

Universal Knowledge Solutions s.a.l.


174

ORACLE
:
:
;GRANT privilege_type ON resource TO user_name
Oracle :
:ALTER .ALTER TABLE DELETE INSERT SELECT :UPDATE . :INDEX . :REFRENCES ) ( .
:EXECUTE .:
CONNECT :

;CONNECT myUser/myPassword
.
SELECT test

.
SELECT * FROM otherUser.test
myUser test
.otherUser :otherUser
CONNECT otherUser/otherPass
:
;GRANT SELECT ,INSERT ON test TO myUser

Universal Knowledge Solutions s.a.l.


175

myUser .
Oracle :
:ALTER .ALTER TABLE DELETE INSERT SELECT :UPDATE . :INDEX . :REFRENCES ) ( .
:EXECUTE - .

ORACLE
:
Oracle
.
CREATE ROLE Oracle :
;CREATE ROLE role_name
DROP ROLE :
;DROP ROLE role_name
SYSTEM .
. GRANT
:
GRANT privilege_type ON resource TO role_name
:

Universal Knowledge Solutions s.a.l.


176

;GRANT my_role TO unser_name


:
customer Products
Rami rpass Customer :
; CREATE ROLE customer
;GRANT SELECT ON Products TO customer
;CREATE USER Ram IDENTFIED BY rpass
;GRANT customer TO Rami

ORACLE
:Oracle
Oracle GRANT.REVOKE
:
;GRANT privilege_type TO user_name

;REVOKE privilege_type FROM user_name


GRANT REVOKE :
CREATE DATABASE CREATE TABLE ALTER TABLEDROP TABLE
GRANT WITH GRANT OPTION
.
.RESOURCE
RESOURCE .
Universal Knowledge Solutions s.a.l.
177

:
test
. :
;CREATE USER test
;GRANT CREATE TABLE,CREAT DATABASE TO test
;REFOKE DROP TABLE FROM test

DB2
:DB2
DB2
. .
.
:DB2
DB2 GRANTREVOKE
:
;GRANT privilege_type ON resource TO user_name

REVOKE privilege_type ON resource FROM user_name


ALTER, DELETE, SELECT, UPDATE, INSERT, INDEX, REFRENCE, :
EXECUTE .
CONTROL )
(CONTRTOL .

Universal Knowledge Solutions s.a.l.


178

:
Maria test

:

GRANT CONNECT ON DATABASE TO USER Maria
:
;GRANT DELETE,INSERT ON test TO Maria
:
;REVOKE ALTER ON test FROM Maria

DB2
:DB2
DB2 .
:
;GRANT privilege_name ON resource TO GROUP myGroup
:

Special Customer
:
;GRANT CONNECT ON DATABASE TO GROUP Special
;GRANT INSERT , DELETE ON Customer TO Special

Universal Knowledge Solutions s.a.l.


179


.
.REVOKE
SELECT :
;REVOKE SELECT ON Customer FROM Special
:
;REVOKE ALL PRIVILEGES ON resource from userName

DB2
:
DB2
....
DB2:
;GRANT privilege_type ON DATABESE TO user_name
:
Farid :
;GRANT CREATE TAB ON DATABASE TO Farid
DBADM
:
Universal Knowledge Solutions s.a.l.
180

;GRANT DBADM ON DATABASE TO Farid

MySQL
.
MySQL
GRANT TABLES
.MySQL

user :GRANT TABLES tables_priv column_priv db func host
.
user :
USE mysql
Insert Into user values(localhost, userName, PASSWORD
(simplepass) ,Y, Y, Y, Y, Y, Y, Y, Y, Y, Y,
;)Y, Y, Y, Y,
;FLUSH PRIVILEGES
userName@localhost . Y . PASSWORD . FLUSH PRIVILEGES .
MySQL .
GRANT .
GRANT .

Universal Knowledge Solutions s.a.l.


181

MySQL
GRANT:
GRANT privilege_type ON recourse TO userName [IDENTIFIED BY
;]password
GRANT .FLUSH PRIVILEGES
:
Tony myTable :
;GRANT SELECT ON myTable TO Tony
:
;GRANT ALL ON *.* TO Tony@locahost
Test :
;REVOKE DROP ON dbName.Test FROM Tony@localhost
SELECT :
;REVOKE SELECT ON *.* FROM Tony@localhost
SHOW GRANTS :
;SHOW GRANTS FOR Tony@localhost

Universal Knowledge Solutions s.a.l.


182



.

.
.
SQL Server, Oracle DB2
GRANT CREATE VIEW CREATE TABLE .

.

CREATE SCHEMA AUTHORIZATION :

CREATE SCHEMA AUTHORIZATION schemaName
-- create tables
-- create view
;-- grant permissions
:
mySchema Customers Names Sami

SELECT Names :
CREATE SCHEM AUTHORIZATION mySchema
CREATE TABLE Customers
))(ID INT PRIMARY KEY NOT NULL , Name varchar(50
CREATE VIEW Names AS SELECT Name FROM Customers
;GRANT SELECT ON Names TO Sami
. .

Universal Knowledge Solutions s.a.l.


183


:
.
:
.


SQL Server.Oracle
:
:

SQL Server

Oracle

Universal Knowledge Solutions s.a.l.


184


.
.
SQL .

.



.

.
.

.

.
.

SQL server,
.DB2,Oracle,mySQL

Universal Knowledge Solutions s.a.l.


185


:
:
: INSERT DELETE UPDATE .
.
: UPDATE DELETE .INSERT UPDATE
.
.

.
.

.
:
.CREATE TRIGGER
SQL-99
:
CREATE TRIGGER trigger_name
} { BEFORE | AFTER
]{[DELETE] | [INSERT] | [UPDATE
{OF column [,n]} ON table_name
[ROW] [AS] new_name [REFERNCING {OLD [ROW][AS] old_name | NEW
]}OLD TABLE [AS] old_name | NEW TABLE [AS] new_name
\} [FOR EACH { ROW | STATEMENT
])[WHEN (condition
--sql code block
Universal Knowledge Solutions s.a.l.
186


:
:
-1 ) ( .

.
-2 .
-3 .
-4 CHECK .
-5
.
:SQL Server
SQL Server .
.
SQL Server BEFORE .
SQL Server 2000 .INSTEAD

SQL Server
:
CREATE TRIGGER :

Universal Knowledge Solutions s.a.l.


187

CREATE TRIGGER triggerName ON tableName FOR [|INSTEAD] action AS


;-- procedureBody
Test Value
ID Audit :
CREATE TRIGGER myTrigger ON Test FOR Insert
AS
)DECALRE @newValue varchar(50
SELECT @newValue = value FROM Inserted
;)Insert Into Audit (newValue) Values (@newValue
Test
Inserted .
Deleted
.
.
INSERT INTOSELECT . SQL Server
.
:
Test :
CREATE TRIGGER logDelete
ON Test FOR DELETE AS
)DECALRE @newValue varchar(50
SELECT @deletedValue = value FROM Deleted
;)Insert Into Audit (newValue) Values (@deletedValue

Universal Knowledge Solutions s.a.l.


188

SQL Server
:
ALTER TRIGGER :
ALTER TRIGGER triggerName ON tableName FOR [|INSTEAD] action AS
;-- procedureBody
:
myTrigger :
ALTER TRIGGER myTrigger ON Test
FOR INSERT, DELETE
AS
)IF EXISTS (SELECT 1 FROM Inserted
BEGIN
INSERT INTO Audit (newValue) SELECT Inserted.Value FROM Inserted
END
)ELSE IF EXISTS (SELECT 1 FROM Deleted
BEGIN
INSERT INTO Audit (newValue) SELECT Deleted.Value FROM Deleted
;END
Test
( Audit
)
Deleted Inserted .Audit
:
DROP TRIGGER :
;DROP TRIGGER triggerName
:
myTrigger :
;DROP TRIGGER myTrigger
Universal Knowledge Solutions s.a.l.
189

SQL Server
:UPDATE
SQL Server Updated Deleted
.
Inserted
Inserted.Deleted
UPDATE
:
ALTER TRIGGER myTrigger ON Test FOR INSERT, DELETE, UPDATE AS
)IF EXISTS (SELECT 1 FROM Inserted) AND EXISTS (SELECT 1 FROM Deleted
BEGIN
INSERT INTO Audit (newValue) SELECT D.Value FROM Deleted D JOIN
Inserted I on D.Value = I.Value
END
)ELSE IF EXISTS (SELECT 1 FROM Inserted
BEGIN
INSERT INTO Audit (newValue) SELECT Inserted.Value FROM Inserted
END
)ELSE IF EXISTS (SELECT 1 FROM Deleted
BEGIN
INSERT INTO Audit (newValue) SELECT Deleted.Value FROM Deleted
;END
Inserted Deleted
JOIN .
:

.
ALTER TABLE :
;ALTER TABLE table_name DISABLE TRIGGER trigger_name
:

Universal Knowledge Solutions s.a.l.


190

;ALTER TABLE table_name ENABLE TRIGGER trigger_name


. :
ALL
;ALTER TABLE table_name [ENABLE | DISABLE] TRIGGER ALL

Oracle
Oracle
.
Oracle .

.
)
(.
DELETE OLD: INSERTNEW:
Inserted Deleted .SQL Server
Oracle
.
CREATE TABLE ALTER TABLE DROP TABLE
.

Universal Knowledge Solutions s.a.l.


191

Oracle
:Oracle
Oracle CREATE TRIGGER :
CREATE TRIGGER trigger_name
][AFTER | BEFORE INSTEAD] [INSERT | DELETE | UPDATE
ON table_name
;-- trigger_body
:
myTable ID .Comment
CREATE TABLE myTable
))(ID INT PRIMARY KEY NOT NULL , Comment varchar(50
myTrigger myTable
Audit :
CREATE TRIGGER myTrigger
AFTER INSERT ON myTable
FOR EACH ROW
BEGIN
)INSERT INTO Audit (ID , operationType) Values (:NEW.ID , INSERT
;END
FOR EACH ROW myTable
.
NEW.ID: ID .

Universal Knowledge Solutions s.a.l.


192

Oracle
:Oracle
: CREATE OR REPLACE TRIGGER Oracle
CREATE OR REPLACE TRIGGER trigger_name
INSTEAD] [INSERT | DELETE | UPDATE] | [AFTER | BEFORE
ON table_name
-- trigger_body;
:
:
OR REPLACE TRIGGER myTrigger CREATE
AFTER INSERT OR DELETE OR UPDATE ON myTable
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO Audit
(ID , operationType) Values (:NEW.ID , INSERT);
ELSIF DELETING THEN
INSERT INTO Audit
(ID , operationType) Values (:OLD.ID , DELETE);
ELSIF UPDATEING THEN
INSERT INTO Audit
(ID , operationType) Values (:OLD.ID , UPDATE);
END IF;
END;
Oracle UPDATE DELETE INSERT
.UPDATING DELETING INSERTING True SQL
OLD.: OLD.: :NEW. Update
. NEW.:
:
Universal Knowledge Solutions s.a.l.
193

DROP TRIGGER SQLserver :


;DROP TRIGGER trigger_name

Oracle
:Oracle
Oracle WHEN
.CREATE TRIGGER
:
Accounts Depositions
sami :
CREATE OR REPLACE TRIGGER myTrigger
AFTER INSERT ON Depositions
FOR EACH ROW
)WHEN (NEW.name!=sami
BEGIN
;)INSERT INTO Accounts (AccountName) Values (:NEW.name
;END
:
SQL
Server DB2 MySQL Access .
:
;CREATE SEQUENCE mySequence
.
.
Universal Knowledge Solutions s.a.l.
194

:
CREATE OR REPLACE TRIGGER myTrigger
BEFORE INSERT ON myTable
FOR EACH ROW
BEGIN
SELECT mySequence.NEXTVAL INTO:NEW.myTable FROM DUAL
END;

Universal Knowledge Solutions s.a.l.


195


:
.
:
.
DB2.MySQL
:
:

DB2

MySQL

Universal Knowledge Solutions s.a.l.


196

DB2
.DB2
:
DB2 Oracle . :
CREATE TRIGGER trigger_name [AFTER |NOCASCADBEFORE | INSTEADOF] ON
table_name REFERENCING [OLD AS | NEW AS] refname
FOR EACH ROW MODE DB2SQL
;trigger_body
DB2 AFTER
. DB2 NOCASCADBEFORE INSTEADOF
.
NOCASCADBEFORE .
Oracle DB2 .
REFERENCING
.
OLD AS old_name NEW AS new_name .
:
Table2 Table1:
CREATE TRIGGER myTrigger
AFTER INSERT ON Table1 REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
)INSERT INTO Table2 (operation , ID) Values (INSERT, N.ID
;END

Universal Knowledge Solutions s.a.l.


197

:
MODE DB2SQL .

DB2
:
. DROP TRIGGER :
;DROP TRIGGER trigger_name
.
DELETE:UPDATE
REFERENCING
DELETE.UPDATE
myTrigger myTable
.Audit
myTable Value Audit oldValue .newValue
:
CREATE TRIGGER myTrigger
AFTER UPDATE ON myTable REFERENCING OLD AS O NEWAS N
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
)INSERT INTO Audit (oldValue, newValue) Values (O.Value, N.Value
;END

Universal Knowledge Solutions s.a.l.


198

MySQL
:
Oracle DB2 .
:
Sales .
Company .Discounts
:

;DROP TRIGGER myTrigger
:
CREATE TRIGGER myTrigger
AFTER INSERT ON Sales
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
)WHEN (N.association=company
BEGIN ATOMIC
)INSERT INTO Discounts (userName) Values (N.userName
;END

MySQL
MySQL 5.0.2.
Oracle.DB2
MySQL BEFORE.AFTER
:

Universal Knowledge Solutions s.a.l.


199

CREATE TRIGGER :
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name
FOR EACH ROW trigger_stmt
:
.
CREATE TRIGGER checkBalance
AFTER INSERT ON payments
FOR EACH ROW
BEGIN
UPDATE accounts
set Balance=Balance-NEW.paymentAmount where AccountID=NEW.ID
;END
:
:
;DROP TRIGGER trigger_name

MySQL
OLD NEW .
NEW
.OLD OLD NEW
.
OLD . NEW
.BEFORE
Universal Knowledge Solutions s.a.l.
200

:UPDATE
Log myTable
:
CREATE TRIGGER myTrigger
AFTER UPDATE ON myTable
FOR EACH ROW
BEGIN
INSERT INTO Log (oldValue, newValue) Values (OLD.Column1,
NEW.Column1)
END;
. 10
CREATE TRIGGER addTen
BEFORE INSERT ON numberTable
FOR EACH ROW
BEGIN
NEW.Number = NEW.Number +10
END;
. MySQL

Universal Knowledge Solutions s.a.l.


201


:
.
:

.
:
:

SQL Server

DB2

MySQL

Oracle

Universal Knowledge Solutions s.a.l.


202




ANSI SQL-99 CREATE FUNCTION .
CREATE FUNCTION
.User Defined Functions
:
])CREATE FUNCTION function_name [(parameter_list
RETURNS data_type
-- SQL Statements
.
:

:
;SELECT function_name (parameter_list) AS Test
:Access
Access .
:SQL Server
SQL Server :
])CREATE FUNCTION function_name [(parameter_list
RETURNS data_type
AS
BEGIN
SQL Statements
RETURN expression
;END

Universal Knowledge Solutions s.a.l.


203

SQL .


:

)( formatName
:

))CREATE FUNCTION formatName (@fullName varchar(50
)RETURNS varchar(50
AS
BEGIN
)RETURN WRITE (@fullName, LEN (@fullName) CHARINDEX ( , @fullName
+1) + , +
)LEFT (@fullName, CHARINDEX ( , @fullName) 1
;END
:
fullName RETURNS RETURNS RETURN .RETURNS :
;)SELECT formatName (Majd Amer

Universal Knowledge Solutions s.a.l.


204


:Oracle
Oracle Oracle
:
CREATE [OR REPLACE] FUNCTION function_name
)(parameter_list
RETURN data_type
IS
Variable_list
BEGIN
-- SQL Statements
;RETURN expression
;END
:
SQL server :
)CREATE OR REPLACE FUNCTION FormatName(FullName IN varchar
RETURN VARCHAR
IS
)FormattedName varchar(50
BEGIN
=formattedName:
|| SUBSTR(FullName,INSTR(FullName, )+1) || ,
;)SUBSTR(FullName,1,INSTR(FullName, )-1
)RETURN(formattedName
;END
) IN (OUT
BEGINEND .formattedName
@ =: .

Universal Knowledge Solutions s.a.l.


205


:DB2
DB2 ANSI :
CREATE FUNCTION function_name
)(parameter_list
RETURN data_type
)[LANGUAGE SQL
][DETERMINISTIC | NON DETERMINISTIC
][CONTAINS SQL | READS SQL DATA
][BEGIN ATOMIC
][SQL Statements
;RETURN expression
][END
:
-1 . SQL C++
.JAVA
-2
DETERMINISTIC NON
.DETERMINISTIC
-3 SQL
. READS SQL DATA .CONTAINS SQL
RETURN SQL
.BEGIN ATOMICEND
:
DB2 :
))CREATE FUNCTION formatName (fullName varchar(50
)RETURNS varchar(50
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
BEGIN ATOMIC
)DECALRE formattedName varchar(50
= SET formattedName
|| SUBSTR (fullName, POSSTR (fullName, ) +1) || ,
;)SUBSTR (fullName, 1, POSSTR (fullName, ) -1
;RETURN formattedName
;END

Universal Knowledge Solutions s.a.l.


206

DETERMINISTIC CONTAINS SQL


.


:MySQL
MySQL SQL
C++ C MySQL CREATE FUNCTION :
CREATE [AGGREGATE] FUNCTION function_name
RETURNS {STRING | REAL |INTEGER} SONAME chared_library_name
AGGREGATE .COUNT
SONAME SO .DLL
:

CREATE FUNCTION formatName
RETURNS STRING
;SONAME C:\\MYSQL\\LIB\\MYSQLFUNCTION.DLL
.DLL
LINUX SO

Universal Knowledge Solutions s.a.l.


207


http://www-db.stanford.edu/~ullman/fcdb/oracle/my-nonstandard.html
http://www-db.stanford.edu/~ullman/fcdb/oracle/or-nonstandard.html
http://www-db.stanford.edu/~ullman/fcdb/oracle/or-plsql.html

Universal Knowledge Solutions s.a.l.


208

Universal Knowledge Solutions s.a.l.


209

You might also like