Professional Documents
Culture Documents
Original PDF
Original PDF
QL
L
SQL
:
.
:
SQL
.
:
:
SQL
SQL
.
SQL .
.
PL/SQL .
.
SQL
) SQL (SEQUEL . SQL
) (CODD .
SQL ISO ANSI
MicrosoftOracle
SQL
:1970
1970
1974
1979
45 6' SQL 3 >BCA 8?> ' <'8= 6 5 889 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
.
.
.
.:
o
o
o
o
o
[ \
^] 4
$ >5
userAddress
B23-A1
Ds-22A1
.
userEmail
sd@fs.com
ahd@srf.com
..
password
samipass
ahmadp
..
userName
sami
ahmad
.
!!
8H 5 =889
[>^8
8#$
'>9
?UR
'`
85
889
49
85
889
. SQL serverOracle
MS-Access .
:
SQL
SQL .
SQL :
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
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 . )(%
.
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
.
) (
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
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,..
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
:
'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
)( .
) oracle Acess (SQL server:
; Select [user name] from users
SQL ) ; ( .
SQL SQL .
)( .
) oracle Acess.(SQL server
SQL
:
.
:
SQL : .
.
:
:
SQL
.
) ( ) ( .
SQL
SQL SQL-99 :
-
:f(x,y,z)=x+y+z :
:f(x) = |x| :
SQL
) (SQL-99
.
) ( ) ( .
SQL
SQL SQL-99 :
-
:
.
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 .
:
grades studentName studentGrade.studentClass
:
select avg(studentGrade) from grades
"" :
= select avg(distinct studentGrade) form grades where studentName
''adel
:
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
:
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
:
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
DB2 :
Select field1, field2 from table_name
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
.
tasks taskID
taskDate taskIncom
taskHandler .
:
.2004
.
:
.
:
:
.
:
SQL
.
:
:
SQL
.
SQL
SQL99 .
: .
SQL
.
SQL
SQL-99 .
:
: .
: .
Universal Knowledge Solutions s.a.l.
30
) (Floor
) (Ceiling
) (Round
) (Abs
) (SQRT
) (RAND
0 1
.
:Floor .
:Ceiling .
:Round
.
:Abs .
: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 .
Angle Angles
:
Select sin(angle), cos(angle), tan(angle) from Angles
:Rand
Rand 0 1
seed Numbers :
Select rand(seed) from numbers
: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
:
)(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
:Length
Length .
Title :
Select length(title) from News
:Concat
Concat .
Title Details News :
Select concat(title, details) from News
:
. Left Right
Left
.Right Substr
. Length . Concat
.
Upper:Lower
:Trim
Trim . Title
:
;Select trim(title) from News
:Instr
Instr . 0 .
' 'Test Title News
:
;Select Instr(title, 'Test') from News
:
)(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
:
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
CURRENT_DATE .
CURRENT_TIME .
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP )(.GetDate
)(Str
)(To_Number
)(Cast
)(Convert
:
.
:
Str . To_Number . Cast - :Convert
-
:
: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
:
.
:
.
.
:
:
~
B9
~
:
. . MySQL Join . .
:
-1
-2
-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
' '.
.
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 .
.
:
;)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
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
:
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 .
:
-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 IntersectExcept
:Intersect
Intersect
.
Intersect :
select columnA,columnB from tableA
Intersect
;Select columnC,columnD from tableB
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
Union IntersectExcept
:Except
Except .
Except :
select columnA,columnB from tableA
Except
;Select columnC,columnD from tableB
:
:
Movies movieName
movueType .movieNumber rentMovies .
Action :
Select movies.movieName, Movies.movieNumber from Movies
where movieType=Action
Minus
;Select rentMovies.movieName, rentMovies.movieNumber from rentMovies
:
.
:
.
:
:
. .
.
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
.
. :
.
. } {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
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
)(
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 :
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
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
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 .
:
Customers Orders. Coutries
.
:
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 Orders Countries
Customers .
:
.
:
.
:
:
. : .
.
:
-
. .
* :
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 .
.
SQL Server Enterprise Manager DB2
Control Center .
. .
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,
:
;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
:
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
. .
:
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 .
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 .
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
:
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
.
:
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
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 .
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
IDENTITYAUTO_INCREMENT
Oracle IDENTITY AUTO_INCREMENT .
Oracle CREATE SEQUENCE .
:
CREATE SEQUENCE sequence_name
INCREMENT increment_step
;START WITH start_seed
SQL. - sequence_name.NextVal
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
:
.
:
.
:
:
1
.
.
:
:
.
:
.
:
.
2
: )
(
.
PK
FK
2
PK
PK
PK
3
)
Universal Knowledge Solutions s.a.l.
89
( .
.
.
.
:
.
.
.
customerID customerInfo
customerID orderDescription
?
?
?
) Customers (
) Orders (.
4
SQL
.
:
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));
: 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) ,
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;
:
.
:
.
:
:
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;
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
:
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
: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
.
.
.
.
:
.
.
:
.
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
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;
:
.
:
.
:
:
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 :
.
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
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
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
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
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
:
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
.
.
.
:
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:
-
:
Update myTable SET myColumn = 10 Where otherColumn = 5
;WITH RR
:
.
:
.SQL
.
:
:
) (
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
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
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
:
: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;
: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
) ( .
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
:
/.
.
SQL .
:SQL
SQL
.
:
;)DECLARE var_name var_type (length
. :
;)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
.
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 .
.
: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 - .
: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 - .
: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
:
.
:
.
:
:
:
SQL
.
.
:
.
.
.
:
IF..ELSE :IF condition
;conditionTrueBody
ELSE
;conditionFalseBody
condition conditionTrueBody
.conditionFalseBody
CASE.WHEN :expression
value1 THEN result1
value2 THEN result2
valueN THEN resultN
resultElse
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
: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
. 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
.
: 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;
: 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
:
;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
: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;
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
.
:
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;
:
.
:
.
:
:
.
.
SQL
.
SQL .
.
.
.
:RETURN
DB2 SQL Server RETURN :
;RETURN value
.
.
0
.
SQL Server
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 .
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
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
.
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 .
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
.
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
: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
.
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
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
.
:
-1
.
-2
.
-3 .
SQL
:
.
:
. SQL
.
:
:
SQL99
ACCESS
SQL SERVER
) ORACLE (
SQL
.
.
SQL .
:
-1 : .
) (.
-2 :
.
.
.
:
.
:
-1 :
. .
-2 .
.
.
.
.
.
:
.
. SQL
.
.
.
MySQL Access
.
sysAdmin
SQL Server sa .
:
.
.
SQL
SQL99
.
SQL99 GRANT: REVOKE
.
SQL99 CREATE ROLE SET ROLE DROP
.ROLE
: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 :
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 .
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
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
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 .
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
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(
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 .
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
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
:
ORACLE
:Oracle
Oracle GRANT.REVOKE
:
;GRANT privilege_type TO user_name
:
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
:
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
.
.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
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 .
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
.
.
.
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
. .
:
.
:
.
SQL Server.Oracle
:
:
SQL Server
Oracle
.
.
SQL .
.
.
.
.
.
.
.
SQL server,
.DB2,Oracle,mySQL
:
:
: 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 :
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
:
Oracle
Oracle
.
Oracle .
.
)
(.
DELETE OLD: INSERTNEW:
Inserted Deleted .SQL Server
Oracle
.
CREATE TABLE ALTER TABLE DROP TABLE
.
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 .
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
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;
:
.
:
.
DB2.MySQL
:
:
DB2
MySQL
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
:
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
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
:
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
:
.
:
.
:
:
SQL Server
DB2
MySQL
Oracle
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
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
: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
@ =: .
: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
: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
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