Date post: | 04-Apr-2018 |
Category: |
Documents |
Upload: | ahmed-naqshbandi |
View: | 222 times |
Download: | 0 times |
of 209
7/30/2019 Advanced SQL Programming (ITD310)
1/209
Universal Knowledge Solutions s.a.l.
1
SSSQQQLLL
SQL
:
.
:SQL
.
::
SQL
7/30/2019 Advanced SQL Programming (ITD310)
2/209
7/30/2019 Advanced SQL Programming (ITD310)
3/209
Universal Knowledge Solutions s.a.l.
3
SQL
1970:
SQL 99.
::!!!
SQL
..
.
sql mainFrame 1974
SQL oracle
ISOANSI SQLSQL89
SQL -92
1979
1991
1999 SQL -99 SQL3
1970
1987
7/30/2019 Advanced SQL Programming (ITD310)
4/209
Universal Knowledge Solutions s.a.l.
4
:
.:ooooo
userAddressuserEmailpassworduserName [email protected]@srf.comahmadpahmad
......
7/30/2019 Advanced SQL Programming (ITD310)
5/209
Universal Knowledge Solutions s.a.l.
5
!!
.SQL serverOracleMS-Access.
:
7/30/2019 Advanced SQL Programming (ITD310)
6/209
Universal Knowledge Solutions s.a.l.
6
SQL
SQL.
SQL::Select, insert, delete, update:create table, drop table, alter table, create index:grant, revoke
SQL.
SQL:
:Select:.Insert:.
Delete:.Update:.
:
Create table:drop table:alter table:
create index:
:grant
revoke
7/30/2019 Advanced SQL Programming (ITD310)
7/209
Universal Knowledge Solutions s.a.l.
7
:.
:SQL:
..SELECT,INSERT,DELETE,UPDATE.
::
SELECTINSERTDELETEUPDATE
7/30/2019 Advanced SQL Programming (ITD310)
8/209
7/30/2019 Advanced SQL Programming (ITD310)
9/209
Universal Knowledge Solutions s.a.l.
9
Select.
*(star)).(
Distinct.Order by:ASC
DESC.AS.
SELECT2
WHERE:
WhereSelect.
where:
Select * from users where condition;
)(
)= , < > , > , < , =(
.
Likebetween
Like.(%).
7/30/2019 Advanced SQL Programming (ITD310)
10/209
Universal Knowledge Solutions s.a.l.
10
Between
whereANDORNOT.
:
am)(Select:
Select * from users where userName like %am%;
1525Select:
Select * from users where userAge between 15 and 25;
am)(1525:
Select * from users where userName like %am%AnduserAge between 15 and 25;
WHERE:
WhereSelect
.
)(
)= , < > , > , < , =(.
7/30/2019 Advanced SQL Programming (ITD310)
11/209
Universal Knowledge Solutions s.a.l.
11
Likebetween
Like.(%)
.Between
whereANDORNOT.
DELETE
Delete.
Delete:
Delete from [table_name]
:
usersDelete:
Delete from Users
Users.Where.
'Ahmed':
Delete from Users where username='Ahmed';
7/30/2019 Advanced SQL Programming (ITD310)
12/209
Universal Knowledge Solutions s.a.l.
12
DeleteDelete.
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,'[email protected]');
:
insert into Users (username,password)
values ('adel','adelPassword');
7/30/2019 Advanced SQL Programming (ITD310)
13/209
Universal Knowledge Solutions s.a.l.
13
otherUserTableusers
:
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;
whereUpdate:
Update table_name SetField1=new_field_value1 ,Field2=new_field_value 2Where condition ;
7/30/2019 Advanced SQL Programming (ITD310)
14/209
Universal Knowledge Solutions s.a.l.
14
:
Update Users set username='sami' , password='sami pass'
where:
Update Users set password='sami pass' where username='sami'
Update.ewherUpdate.
SQL);(.
SQLSQL.:
Select * from users; -- this is the comment
)(.)oracleAcessSQL server(:
Select [user name] from users ;
SQL);(.SQLSQL.
)(.)oracleAcessSQL server.(
7/30/2019 Advanced SQL Programming (ITD310)
15/209
Universal Knowledge Solutions s.a.l.
15
SQL
:.
:SQL:.
.
::
7/30/2019 Advanced SQL Programming (ITD310)
16/209
Universal Knowledge Solutions s.a.l.
16
SQL
.
)()(.
SQL
SQLSQL-99:
-::f(x,y,z)=x+y+z
-::f(x) = |x|
.)()(.
SQL
SQLSQL-99:
-:.
- .
SQL)SQL-99(
7/30/2019 Advanced SQL Programming (ITD310)
17/209
Universal Knowledge Solutions s.a.l.
17
SQL
SQL:
)expression(AVG)expression(COUNT)expression(MIN)expression(MAX)expression(SUM
SQL:AVERAGE.
COUNT .MIN.MAX.SUM.
.
AVG
AVG.
:select avg([ALL | DISTINCT]column_name) from table_name
All.DistinctAll.
Distinct.
7/30/2019 Advanced SQL Programming (ITD310)
18/209
Universal Knowledge Solutions s.a.l.
18
:
gradesstudentNamestudentGradestudentClass.
:
select avg(studentGrade) from grades
"":
select avg(distinct studentGrade) form grades where studentName =
'adel'
:
AllDistinctMS Access.AVG
.
AVG.
All.DistinctAll.
Distinct.
COUNT
COUNT.
:select count([* | ALL | DISTINCT]column_name) from table_name
7/30/2019 Advanced SQL Programming (ITD310)
19/209
Universal Knowledge Solutions s.a.l.
19
AllNull.DistinctAll.
DistinctNull.
*Null.
:grades
studentNamestudentGradestudentClass
. :
select count(*) from grades
Null.
Null)(:
select count(all studentName) from grades
:
select count(distinct studentName) from grades
:
AllDistinctMS Access.
COUNT.
AllNull.DistinctAll.
7/30/2019 Advanced SQL Programming (ITD310)
20/209
Universal Knowledge Solutions s.a.l.
20
DistinctNull.
*Null.
MINMAX
MIN.
:
select min(column_name) from table_name
MAX.
:
select max(column_name) from table_name
AllDistinctMINMAX.)Null.(
:
gradesstudentNamestudentGradestudentClass:
select min(studentGrade) from grades
7/30/2019 Advanced SQL Programming (ITD310)
21/209
Universal Knowledge Solutions s.a.l.
21
:
select max(studentGrade) from grades
MINMAX.
AllDistinctMINMAX.
)Null.(
SUM
SUM.
:
select sum([ALL | Distinct]column_name) from table_name
All.DistinctAll.
Distinct.
:
gradesstudentNamestudentGradestudentClass:
select sum(studentGrade) from grades
:SUM
SUM.
7/30/2019 Advanced SQL Programming (ITD310)
22/209
Universal Knowledge Solutions s.a.l.
22
SUM:All.
DistinctAll.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.
7/30/2019 Advanced SQL Programming (ITD310)
23/209
Universal Knowledge Solutions s.a.l.
23
2
SQLGroup by:
Select columnA, aggFunc (aggFuncSpec) from tablewhere whereSpecGroup by columnA
:
SalesProductNameQuantity
.Select productName, sum (quantity) from saleswhere saleDate > 'May 2,2002'Group by productName
SQLGroup by.
Having
where.Select field_name from table_name where condition
.
Having
.Having:
Select columnA, aggFunc (aggFuncSpec) from tablewhere whereSpecGroup by columnAHaving filterCondition
:Havingwhere
7/30/2019 Advanced SQL Programming (ITD310)
24/209
Universal Knowledge Solutions s.a.l.
24
:StudentsGrade(StudentNumber)(grade)
)70()50(:
Select studentNumber, Avg(grade) as averageMark from studentGradesWhere avg(grade)>70 or avg(grade)70 or avg(grade)
7/30/2019 Advanced SQL Programming (ITD310)
25/209
Universal Knowledge Solutions s.a.l.
25
:
StudentsGrade(StudentName)(StudentMark)
).(
subjectstudentMarkstudentNamemath15ahmadmath22adel
history26ahmad
:
Select top 5 studentName, avg(studentMark)From studentsGradesGroup by studentNameorder by avg(studentMark) DESC
(Top N).N
.
Top N
(Top N).
Mysql: Select field1, field2 from table_nameLimit 0,N
limit)0N(Select.
7/30/2019 Advanced SQL Programming (ITD310)
26/209
Universal Knowledge Solutions s.a.l.
26
DB2:
Select field1, field2 from table_name
Fetch first N rows only
Nfetch first N rows only.
OraclerowNumOracleSelect.
:
Select field1, field2 where rowNum
7/30/2019 Advanced SQL Programming (ITD310)
27/209
Universal Knowledge Solutions s.a.l.
27
:
.tasks:
taskHandlertaskIncomtaskDatetaskIDadel1000027/1/20031
taskIDtaskDate
taskIncom taskHandler
:.2004.
.
:
.
:
Select taskHandler, count(taskID), sum(taskIncom), max(taskIncom)
From tasksGroup by taskHandlerWhere taskDate between 01/01/2004 and 31/12/2004Order by max(taskIncom) DESC
7/30/2019 Advanced SQL Programming (ITD310)
28/209
Universal Knowledge Solutions s.a.l.
28
.taskstaskID
taskDatetaskIncomtaskHandler.
:.2004.
.
:
.
7/30/2019 Advanced SQL Programming (ITD310)
29/209
Universal Knowledge Solutions s.a.l.
29
:
:.
:SQL
.
::
7/30/2019 Advanced SQL Programming (ITD310)
30/209
Universal Knowledge Solutions s.a.l.
30
SQL
SQL..SQL99.:
.
: .
SQL
SQL.
SQL-99.
:
:::.:.
7/30/2019 Advanced SQL Programming (ITD310)
31/209
Universal Knowledge Solutions s.a.l.
31
:
( )Floor
( )Ceiling
( )Round
( )Abs.
,( )Tan,( )Cos,( )Sin
,( )Atan.
( )SQRT
( )RAND01
.
:Floor: .Ceiling: .Round:
.Abs:.,Atan,Tan,Cos,Sin:.SQRT: .RAND:01.
7/30/2019 Advanced SQL Programming (ITD310)
32/209
Universal Knowledge Solutions s.a.l.
32
-
:
Floor:Floor.
Select floor(studentMark) from marks:66.566.266.7:66
Ceiling:Ceiling
:Select ceiling(studentMark) from marks:66.566.266.7:67
Round:Round:
Select round(studentMark, 1) from marks.6666.0
66.55
66.5
:
AccessFloorceiling.INTFloor.
:Select Int(studentMark) from marks
CeilingRound.
:Select Round(studentMark+0.5,0) from marksOracleCeilCeiling
:
Floor.:66.566.266.7Floor:66
7/30/2019 Advanced SQL Programming (ITD310)
33/209
Universal Knowledge Solutions s.a.l.
33
Ceiling.:66.566.266.7Ceiling:67
Round.66Round66.066.55
66.5.
-
.
:
ABS:heightgeoTable
:
Select Max(abs(height)) from geoTable
absmax.
Sin, Cos, Tan...AngleAngles
:
Select sin(angle), cos(angle), tan(angle) from Angles
Rand: Rand01
seedNumbers:Select rand(seed) from numbers
7/30/2019 Advanced SQL Programming (ITD310)
34/209
Universal Knowledge Solutions s.a.l.
34
SQRT:SQRT3:
select sqrt(9)
:01MS-Accessrndrand.
.
heightgeoTableabsmax
.Sin, Cos, Tan
Rand01.SQRT.
:
()Left()Right()Substr()Length()Concat
() /Lower
()Upper
()Trim()Instr
7/30/2019 Advanced SQL Programming (ITD310)
35/209
Universal Knowledge Solutions s.a.l.
35
:
()Left()Right()Substr
()Length()Concat
() /Lower()Upper
()Trim
()Instr
-
:
LeftRight:LeftRight
LeftRight.50TitleNews:
Select left(title, 50) from News
Substr:Substr.
5Title10:
Select substr(title, 10, 5) from News
7/30/2019 Advanced SQL Programming (ITD310)
36/209
Universal Knowledge Solutions s.a.l.
36
Length:Length.Title:
Select length(title) from News
Concat:Concat.
TitleDetailsNews:
Select concat(title, details) from News
:OracleLeftRightSubstr.Ms-AccessSQL-ServerLenLength
.MysqlSQL-ServerSubstringSubstr
.
.LeftRightLeft
Right.Substr.Length.Concat
.
-
UpperLower:UpperLower)A-Z.(
Title:
Select upper(title) from News;
7/30/2019 Advanced SQL Programming (ITD310)
37/209
Universal Knowledge Solutions s.a.l.
37
Trim:Trim.Title
:
Select trim(title) from News;
Instr:Instr.0.
'Test'TitleNews:
Select Instr(title, 'Test') from News;
:Ms-AccessUcaseLcase
UpperLower.SQL-ServerCharindexDB2Posstr
Instr.
UpperLower)A-Z.(Trim .Instr0.
:
()DateDiff()GetDate
DATE_CURRENTTIME_CURRENT
TIMESTAMP_CURRENT
7/30/2019 Advanced SQL Programming (ITD310)
38/209
Universal Knowledge Solutions s.a.l.
38
:Days, Hours, Minutes, Seconds
DateDiff.
:
()DateDiff()GetDate
DATE_CURRENTTIME_CURRENT
TIMESTAMP_CURRENT
:
GetDate:.
:
getDate ()
:04:50:32.2806-12-2003
DateDiff:.
RegistrationDateRegistrationInfo:
Select dateDiff(dd, RegistrationDate, getDate()) fromregistrationInfo
7/30/2019 Advanced SQL Programming (ITD310)
39/209
Universal Knowledge Solutions s.a.l.
39
dd. dd.
:Ms-AccessDategetDate.Oracle.
GetDate.DateDiff.
-
CURRENT_DATE)
.(:Select CURRENT_DATE as myDate
CURRENT_TIME)
.(:Select CURRENT_TIME as myTime
CURRENT_TIMESTAMP
)
(CURRENT_TIMESTAMPGetDate().RegistrationDate
RegistrationInfo:
Select dateDiff(dd, RegistrationDate, CURRENT_TIMESTAMP) fromregistrationInfo
7/30/2019 Advanced SQL Programming (ITD310)
40/209
Universal Knowledge Solutions s.a.l.
40
CURRENT_DATE.
CURRENT_TIME.
CURRENT_TIMESTAMPCURRENT_TIMESTAMPGetDate().
:
()Str.()Number_To .()Cast()Convert
:
.
:
-Str.-To_Number .-Cast-Convert:
7/30/2019 Advanced SQL Programming (ITD310)
41/209
Universal Knowledge Solutions s.a.l.
41
-
:
STR:.:
STR (Float, Length, Precision)
53.45:
STR(53.45 , 5 , 2)
52.
:LengthSTR'*'
To_Number:
..
'$3,15.2':
To_Number('$3,15.2' , '$9,99.9')
'$9,99.9'.
:-SQL-ServerTo_NumberCast-DB2INT, Float, DECTo_Number-MySql0-Ms-AccessINTTo_Number
7/30/2019 Advanced SQL Programming (ITD310)
42/209
Universal Knowledge Solutions s.a.l.
42
STRTo_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, MySqlCast-MySqlSQL-ServerConvert
CastConvert
7/30/2019 Advanced SQL Programming (ITD310)
43/209
Universal Knowledge Solutions s.a.l.
43
:.
:.
.
::
7/30/2019 Advanced SQL Programming (ITD310)
44/209
Universal Knowledge Solutions s.a.l.
44
.
:-.
-.-MySQLJoin.
.
:
1-2-
7/30/2019 Advanced SQL Programming (ITD310)
45/209
Universal Knowledge Solutions s.a.l.
45
1-:.
.
:CustomersOrders.
(customerName):
Select customerName,(select count(*) from Orderswhere Orders.customerID=Customers.customerID) from Customers;
)(.
2-: .
:Students(studentName)(studentID).
Grades(grade)(studentID).:
Select studentName from Students where Students.studentID in (selectGrades.studentID from Grades where Grades.grade>=50);
)50.()(
Students.
:-
.-
Table_Name.Field_Name.
7/30/2019 Advanced SQL Programming (ITD310)
46/209
Universal Knowledge Solutions s.a.l.
46
1-:.
.
2-: .
:
Select columnA, (subquery) as columnB from Table_Name;
Subquery..
.
:AccountsaccountID
accountBalance.ClientsclientNameaccountID.:
Select Accounts.accountID, (select clientName from Clients where
Clients.accountID = Accounts.accountID)as myClientName,Accounts.accountBalancefrom Accounts;
)(Accounts.accountID.
7/30/2019 Advanced SQL Programming (ITD310)
47/209
Universal Knowledge Solutions s.a.l.
47
:'.'
.
.
.
Where
:
Select columnA, columnB from Table_Name where columnB=(Subquery);
Subquery.
Where.
:TicketsOwners
carNumberownerName.ownerName1234:
Select ownerName, Owners.carNumber from Ownerswhere Owners.carNumber=(select Tickets.carNumber from ticketswhere ticketNumber=1234);
Where.
7/30/2019 Advanced SQL Programming (ITD310)
48/209
Universal Knowledge Solutions s.a.l.
48
.
:
Select columnA, columnB from Table_Name where columnC IN(Subquery);
IN.
)Subquery(:
Select column1 from Table1;
::
Select ownerName from Ownerswhere Owners.carNumber IN(select Distinct Tickets.carNumber from Tickets);
Distinct.
Where.
ININ)(.
7/30/2019 Advanced SQL Programming (ITD310)
49/209
Universal Knowledge Solutions s.a.l.
49
ExistsAllAny
Exists:
Exists.TrueFalse.
Exists:
Select columnA, columnB from Table_Name where Exists (Subquery);
:OrdersorderIDorderType
clientID.ClientsclientID."":
Select Clients.clientName from Clients where Exists
( select * from Orders
where Orders.clientID = Clients.clientIDand
orderType=' ');
ExistsAllAny
All:
AllWhere.
7/30/2019 Advanced SQL Programming (ITD310)
50/209
Universal Knowledge Solutions s.a.l.
50
All:Select columnA from TableAwhere columnA> All from (select columnB from TableB);
AcolumnA columnBTableB.
:TimeName
currentRecordsoldRecordsoldTime.
:Select Name from currentRecordswhere time < All (select oldTime from oldRecords);
ExistsAllAny
ANY:
ANYWhere.
Any:
Select columnA from TableA
where columnA > ANY from (select columnB from TableB);
AcolumnAcolumnBTableB.
7/30/2019 Advanced SQL Programming (ITD310)
51/209
Universal Knowledge Solutions s.a.l.
51
:TimeName
currentRecordsbestRecordsbestTime.
:
Select Name from currentRecordswhere time < ANY (select bestTime from bestRecords);
UnionIntersectExcept
UnionIntersectExcept(Minus).
.:
select columnA,columnB from tableA
OperatorSelect columnC,columnD from tableB;
Operator.
:
ColumnA ColumnB
....... ............... .......
....... .......
....... .......
....... .......
N1N2.
N1
N2
7/30/2019 Advanced SQL Programming (ITD310)
52/209
Universal Knowledge Solutions s.a.l.
52
:1-.2-.
.
Union ,Intersect ,Except
UnionIntersectExcept(Minus)..
:1-.2-.
.
UnionIntersectExcept
UNION:
Union :
select columnA,columnB from tableAUNIONSelect columnC,columnD from tableB;
.
Union AllUnion.
7/30/2019 Advanced SQL Programming (ITD310)
53/209
Universal Knowledge Solutions s.a.l.
53
:EmployeesemployeeNameemployeeGrade
.ManagersmanagerNamemanagerGrade
.50
60:
Select employeeName, employeeGrade from Employeeswhere employeeGrade >50UnionSelect managerName, managerGrade from Managerswhere managerGrade>60;
Union ,Intersect , Except
UNION:Union.
.
Union AllUnion.
UnionIntersectExcept
Intersect: Intersect.
Intersect:select columnA,columnB from tableAIntersectSelect columnC,columnD from tableB;
7/30/2019 Advanced SQL Programming (ITD310)
54/209
Universal Knowledge Solutions s.a.l.
54
Intersect
:DB2OracleIntersect.
:TheoreticalNameMark-
PracticalNameMark-.:
Select Theoretical.Name from Theoretical where Theoretical.Mark>50IntersectSelect Practical.Name from Practical where Practical.Mark>50;
7/30/2019 Advanced SQL Programming (ITD310)
55/209
Universal Knowledge Solutions s.a.l.
55
UnionIntersectExcept
Except:
Except.
Except:
select columnA,columnB from tableAExceptSelect columnC,columnD from tableB;
:ExceptOracleMinus.Except(Minus)DB2Oracle.
:MoviesmovieName
movueTypemovieNumber.rentMovies.
Action:
Select movies.movieName, Movies.movieNumber from Movieswhere movieType=ActionMinusSelect rentMovies.movieName, rentMovies.movieNumber from rentMovies;
7/30/2019 Advanced SQL Programming (ITD310)
56/209
Universal Knowledge Solutions s.a.l.
56
:.
:
.
::
7/30/2019 Advanced SQL Programming (ITD310)
57/209
Universal Knowledge Solutions s.a.l.
57
...
SQL.
.
:
----
.
:Select Table1.Column1, Table2.Column2 from Table1, Table2;
Names, Classes:
Select class, Name from Classes, Names;
.
7/30/2019 Advanced SQL Programming (ITD310)
58/209
Universal Knowledge Solutions s.a.l.
58
.{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)}
10010000
.
.:
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 JoinChemicalEffects;
:DB2Cross 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)}
7/30/2019 Advanced SQL Programming (ITD310)
59/209
Universal Knowledge Solutions s.a.l.
59
10010000.
.
. :
Select Table1.Column1, Table1.Column2, Table2.Column3From Table1, Table2 where Table1.Column1 = Table2.Column2;
Table1.Column1Table2.Column2
: Table1.Column1, Table1.Column2, Table2.Column3
:
Select Table1.Column1, Table1.Column2, Table2.Column3From Table1Join Table2ON Table1.Column1 = Table2.Column2;
:Names(name)(INumber)
Addresses(address)(INumber):
Select Names.name, Addresses.address from Names, AddressesWhere Names.INumber = Addresses.INumber;
7/30/2019 Advanced SQL Programming (ITD310)
60/209
Universal Knowledge Solutions s.a.l.
60
Select Names.name, Addresses.addressFrom NamesJoin AddressesON Names.INumber = Addresses.INumber;
.
:Select Table1.Column1, Table2.Column2, Table3.Column4From Table1 Join Table2ON Table1.Column1 = Table2.Column2Join Table3ON Table1.Column3 = Table3.Column4;
ON.Table1Table2Column1Table1Column2Table2Table3Table1Column3Table1
Column4Table3.
:CustomerscustomerIDcustomerNameCreditCards
cardNumbercustomerIDAddressescountry.
:Select Customers.customerID, Customers.customerName,CreditCards.cardNumber, Addresses.countryFrom CustomersJoin CreditCardsON Customers.customerID = CreditCards.customerIDJoin AddressesON Customers.customerID = Addresses.customerID;
7/30/2019 Advanced SQL Programming (ITD310)
61/209
Universal Knowledge Solutions s.a.l.
61
)(
MS Access:
Select Table1.Column1, Table2.Column2, Table3.Column4From Table2Inner Join(Table3 Inner Join Table1 ON Table3.Column4 = Table1.Column1)ON Table2.Column2 = Table1.Column1;
MS Access.Table3Table1
Column4Table3Column1Table1Table2Column2Table2Column1
Table1.
::Sectors)--.(..
sectorID
sectorName
.Seasons
)20042003(...seasonIDseasonInfo.ProductsproductIDproductDescriptionproductPrice
seasonIDsectorID..
:Select productDescription, productPrice, seasonName, sectorNameFrom SectorsInner Join(Seasons Inner Join Products ON Seasons.seasonID = Products.seasonID)ON Sectors.sectorID = Products.sectorID;
MS Access.MS Access
.
7/30/2019 Advanced SQL Programming (ITD310)
62/209
Universal Knowledge Solutions s.a.l.
62
Where)(:
Select Table1.Column1, Table2.Column2From Table1, Table2Where Table1.Column1 < Table2.Column2;
:
StoresstoreNamestoreIDOccupationstroreIDquantity
Type.
:
Select Stores.storeID, Stores.storeName from Stores, OccupationWhere Stores.storeID Occupation.storeID
Inner Join.
Inner JoinON.Outer Join
.
:Left, Right, Full.
7/30/2019 Advanced SQL Programming (ITD310)
63/209
Universal Knowledge Solutions s.a.l.
63
Table1Table2Column1Table1Column2Table2:
Select * from Table1 LEFT OUTER JOIN Table2ON Table1.Column1 = Table2.Column2;
2TableTable1Column1Table1Column2Table2:
Select * from Table1 RIGHT OUTER JOIN Table2
ON Table1.Column1 = Table2.Column2;
2TableTable1Column1Table1Column2Table2
:
Select * from Table1 FULL OUTER JOIN Table2ON Table1.Column1 = Table2.Column2;
NULL.
Inner Join.
Inner JoinON.Outer Join
.
:LeftRightFull.
7/30/2019 Advanced SQL Programming (ITD310)
64/209
Universal Knowledge Solutions s.a.l.
64
NULL.
Left Join
Column1Table1Column2Table2:
Select * from Table1 LEFT OUTER JOIN Table2
ON Table1.Column1 = Table2.Column2;:
Null
..
::
Select * from Table1 LEFT OUTER JOIN Table2ON Table1.Column1 = Table2.Column2;
Table1Column1{1, 5, 8, 3}Table2Column2{6, 5, 7, 9}:
Column2Column1Null1
55Null8Null3
NullColumn2Column2
Column1.
7/30/2019 Advanced SQL Programming (ITD310)
65/209
Universal Knowledge Solutions s.a.l.
65
Column1Table1.
:Null
..
Right Join
Column1Table1Column2
Table2:
Select * from Table1 RIGHT OUTER JOIN Table2ON Table1.Column1 = Table2.Column2;
:
Null.
.
::
Select * from Table1 RIGHT OUTER JOIN Table2ON Table1.Column1 = Table2.Column2;
Table1Column1{1, 5, 8, 3}Table2
Column2{6, 5, 7, 9}:Column2Column1
6Null557Null9Null
7/30/2019 Advanced SQL Programming (ITD310)
66/209
Universal Knowledge Solutions s.a.l.
66
NullColumn2Column2Column1.
Column2Table2.
:Null
..
Full Join
Column1Table1Column2Table2:
Select * from Table1 FULL OUTER JOIN Table2ON Table1.Column1 = Table2.Column2;
:Null
.Null
.
:
:
Select * from Table1 FULL OUTER JOIN Table2ON Table1.Column1 = Table2.Column2;
7/30/2019 Advanced SQL Programming (ITD310)
67/209
Universal Knowledge Solutions s.a.l.
67
Table1Column1{1, 5, 8, 3}Table2Column2{6, 5, 7, 9}:
Column2Column1Null1
55Null8Null3
6Null7Null9Null
NullColumn1Column1
Column2NullColumn2Column1Column2.
Full Join
:Null
.Null
.
Natural Join
Natural Join. :
Select Table1.Column1, Table2.Column1 from Table1 Natural JoinTable2;
ONNatural Join.
7/30/2019 Advanced SQL Programming (ITD310)
68/209
Universal Knowledge Solutions s.a.l.
68
:Pictures(pictureID)
(pictureDescription).Names(clientName)(pictureID).:
Select clientName, pictureDescription from Names Natural JoinPictures;
pictureID.
Natural Join
Natural Join.ON
Natural Join.
Using
Using.
Using:
Select Table1.Column2, Table2.Column3From Table1 Join Table2 Using (Column1)
Column1Column1.
:UsingNatural JoinOracle9I
Using.
7/30/2019 Advanced SQL Programming (ITD310)
69/209
Universal Knowledge Solutions s.a.l.
69
:
CustomersOrdersCoutries.Customers(customerInfo)(countryID)
.Orders(customerID)(orderDescription)
.Orders(countryID)(countryName)(countryInfo).
.
:
Select orderDescription, customerName, countryNameFrom Countries Inner Join (customers RIGHT OUTER JOIN OrdersON Customers.customerID = Orders.customerID
ON Countries.countryID = Customers.countryID;
CustomersOrdersCountriesCustomers.
:
CustomersOrdersCoutries.Customers(customerInfo)(countryID)
.Orders(customerID)(orderDescription)
.Orders(countryID)(countryName)(countryInfo).
7/30/2019 Advanced SQL Programming (ITD310)
70/209
Universal Knowledge Solutions s.a.l.
70
.
:CustomersOrdersCountries
Customers.
7/30/2019 Advanced SQL Programming (ITD310)
71/209
Universal Knowledge Solutions s.a.l.
71
:.
:.
:
:
7/30/2019 Advanced SQL Programming (ITD310)
72/209
Universal Knowledge Solutions s.a.l.
72
.:..
:---
- --
..*:
OracleSQL ServerMySQLDB2:
CREATE DATABASE database_name;
*:
:DROP DATABASE database_name;
(DROP DATABASE)SQL ServerMy SQLDB2Oracle(CREATE DATABASE)Oracle
Database Assistant.
7/30/2019 Advanced SQL Programming (ITD310)
73/209
Universal Knowledge Solutions s.a.l.
73
:(CREATE DATABASE)Oracle
..
SQL ServerEnterprise ManagerDB2Control Center.
MS AccessNewFileAccess.Access
(.mdb).
..
OracleSQL ServerMySQLDB2(CREATE DATABASE)
(DROP DATABASE)
(DROP DATABASE)SQL ServerMy SQLDB2Oracle(CREATE DATABASE)Oracle
Database Assistant.
:
CREATE TABLE table_name(column1_name column1_data_type column1_constraints,column2_name column2_data_type column2_constraints,);
7/30/2019 Advanced SQL Programming (ITD310)
74/209
Universal Knowledge Solutions s.a.l.
74
:
DROP TABLE table_name;
:
TRUNCATE TABLE table_name;
:
StoreCustomersProducts.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);
Intvarchar.
:.:
-MySQLSQLServerOracleDB2.
-SQL Server, Oracle, MySQL:
DELETE from table_name
7/30/2019 Advanced SQL Programming (ITD310)
75/209
Universal Knowledge Solutions s.a.l.
75
(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_nametable_name_copy
table_name.
WhereFalse:
CREATE TABLE table_name_copy AS Select* from table_name
Where 1 = 0;
1=01=0.
DB2DEFINITION ONLY:
CREATE TABLE table_name_copy AS (Select* from table_name) DEFINITIONONLY;
7/30/2019 Advanced SQL Programming (ITD310)
76/209
Universal Knowledge Solutions s.a.l.
76
:LogsOldLogs:
CREATE TABLE OldLogs AS Select * from Logs;
(CREATE TABLE)OracleMySQLSQLServer.
WhereFalse1=0.
DB2DEFINITION ONLY
.
:
ALTER TABLE table_name [ADD | DROP COLUMN] (column_name [data_type] );
ADDDROP.
:MembersIDName.
Type.:
ALTER TABLE Members ADD (Type varchar(15) );
IDMembers.:
ALTER TABLE Members DROP COLUMN ID;
7/30/2019 Advanced SQL Programming (ITD310)
77/209
Universal Knowledge Solutions s.a.l.
77
: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
..
7/30/2019 Advanced SQL Programming (ITD310)
78/209
Universal Knowledge Solutions s.a.l.
78
:-Not Null-Default-Primary key-Unique -Check-Identity-Auto_increment
NOT NULL
Null.NOTNULL.
:Null
:
CREATE TABLE Employees (name varchar(40)NOT NULL ,
Job varchar(50)NOT NULL);
:
Insert into Employees(name) values(Adel)
Job
JobNull.
NOT NULL
Null.NOTNULL.
7/30/2019 Advanced SQL Programming (ITD310)
79/209
Universal Knowledge Solutions s.a.l.
79
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:
-DescriptionNull.-Days2.
Days:
INSERT INTO Shipments (Description) Values (Computer);
:Computer | 2Days2.
7/30/2019 Advanced SQL Programming (ITD310)
80/209
Universal Knowledge Solutions s.a.l.
80
DEFAULT
DEFAULT.
.
PRIMARY KEY
Codd
.
.PRIMARY KEY.
:
CREATE TABLE MyTable(Column1 data_type Not Null , Column2 data_type ,
Constraint myPrimaryKey PRIMARY KEY (Column1));
MyPrimaryKeyColumn1.
:
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));
7/30/2019 Advanced SQL Programming (ITD310)
81/209
Universal Knowledge Solutions s.a.l.
81
:CreditCardscardNumbercardHolder.
:
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);
:
PhoneBookNamePhone:
7/30/2019 Advanced SQL Programming (ITD310)
82/209
Universal Knowledge Solutions s.a.l.
82
CREATE TABLE PhoneBook(Name varchar(50) UNIQUE , Phone Primary Key Not Null);
UNIQUE UNIQUE
.
Check
Check.
CheckWhere.Check:
CREATE TABLE MyTable(Column1 data_type ,Column2 data_type ,
Constraint Cname CHECK(Condition));
CnameConditionCheck.
:AgesNameAge12.
:
CREATE TABLE Ages(Name varchar(50) Not Null ,
Age INT ,Constraint CheckAge CHECK(Age between 1 And 12));
7/30/2019 Advanced SQL Programming (ITD310)
83/209
Universal Knowledge Solutions s.a.l.
83
CheckAge.
CREATE TABLE Ages
(Name varchar(50) Not Null ,Age INT CHECK(Age between 1 And 12));
CheckAndOr
11215:
CREATE TABLE Ages(Name varchar(50) Not Null ,
Age INT CHECK(Age = 15 OR Age between 1 And 12));
Check1123:
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
.
-CheckAndOr.
-Check.
7/30/2019 Advanced SQL Programming (ITD310)
84/209
Universal Knowledge Solutions s.a.l.
84
IDENTITYAUTO_INCREMENT
.PRIMARY KEY.
:-SQL ServerIDENTITY-MySQLAUTO_INCREMENT-DB2GENRATED ALWAYS AS IDENTITY-AccessAUTOINCREMENT-OracleCreate Sequence
::
-SQL Server:1001:
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 INTAUTO_INCREMENT PRIMARY KEY NOT NULL);
-Access:
CREATE TABLE Students(Name varchar(50) ,
ID INTAUTOINCREMENT (100,1) PRIMARY KEY NOT NULL);
7/30/2019 Advanced SQL Programming (ITD310)
85/209
Universal Knowledge Solutions s.a.l.
85
-DB2:
CREATE TABLE Students
(Name varchar(50) ,ID INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY);
ALWAYS.BY DEFAULTALWAYS.
IDENTITY , AUTO_INCREMENT
.PRIMARY KEY.
:-SQL ServerIDENTITY-MySQLAUTO_INCREMENT-DB2GENRATED ALWAYS AS IDENTITY-AccessAUTOINCREMENT-OracleCreate Sequence
IDENTITYAUTO_INCREMENT
OracleIDENTITYAUTO_INCREMENT.OracleCREATE SEQUENCE.
:
CREATE SEQUENCE sequence_nameINCREMENT increment_step
START WITH start_seed;
-SQL.-sequence_name.NextVal
7/30/2019 Advanced SQL Programming (ITD310)
86/209
Universal Knowledge Solutions s.a.l.
86
Insert:
INSERT INTO mytable
(Column1, Column2, Column3)Values (sequence_name.NextVal, Value2, Value3);
Column1NextVal.
:ProductsOracleproductID
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);
OracleIDENTITYAUTO_INCREMENT.
OracleCREATE SEQUENCE.
SQL.sequence_name.NextVal
7/30/2019 Advanced SQL Programming (ITD310)
87/209
Universal Knowledge Solutions s.a.l.
87
:
.
:.
::
7/30/2019 Advanced SQL Programming (ITD310)
88/209
Universal Knowledge Solutions s.a.l.
88
1
..
::
.
:.
:.
7/30/2019 Advanced SQL Programming (ITD310)
89/209
Universal Knowledge Solutions s.a.l.
89
2
:)(
.
.
3
)
FK222
3
PK2
53
8
PK
ABCD
PK1
234 A3
B3A2
PK
7/30/2019 Advanced SQL Programming (ITD310)
90/209
Universal Knowledge Solutions s.a.l.
90
.(.
..
:.
.
.
Customers)(Orders).(
4
SQL
orderDescriptioncustomerID?
?
?
customerInfocustomerID
7/30/2019 Advanced SQL Programming (ITD310)
91/209
Universal Knowledge Solutions s.a.l.
91
.
:
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));
myTableColumn1Column2
Column3FOREIGN KEYother_table
other_table_primary_key.
:BrandsModels
BrandsModelsBrandsModelsBrands:
CREATE TABLE Brands (brandID INT PRIMARY KEY NOT NULL ,
brandName varchar (50));
Models:
CREATE TABLE Models (modelID INT PRIMARY KEY NOT NULL ,modelName varchar (50) ,
modelBrand INT ,CONSTRAINT myFK FOREIGN KEY (modelBrand)
REFERENCES Brands (brandID));
SQL Server, Oracle, DB2Access.
:
CREATE TABLE Models (modelID INT PRIMARY KEY NOT NULL ,modelName varchar (50) ,
7/30/2019 Advanced SQL Programming (ITD310)
92/209
Universal Knowledge Solutions s.a.l.
92
modelBrand INT ,FOREIGN KEY (modelBrand)
REFERENCES Brands (brandID));
MySQL
MySQL:
MySQLInnoDB:
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;
7/30/2019 Advanced SQL Programming (ITD310)
93/209
Universal Knowledge Solutions s.a.l.
93
:.
:.
::
7/30/2019 Advanced SQL Programming (ITD310)
94/209
Universal Knowledge Solutions s.a.l.
94
SQL
SQL..SQL.
.
..
..
.
:
CREATE VIEW view_name AS query;
view_namequery.
:Inner Join
:CREATE VIEWMySimpleView Projects.projectName ,count (Tasks.taskID)AS TasksNumberFrom Tasks Inner Join ProjectsON Tasks.projectID = Projects.projectIDGroup by projectName;
7/30/2019 Advanced SQL Programming (ITD310)
95/209
Universal Knowledge Solutions s.a.l.
95
MySimpleViewprojectNametasksNumber.
:
Select projectName from MySimpleView;
Update, InsertDelete
:
-Group By.-TopDistinct.-.
:
ALTER VIEW viewName AS newQuery;
SQL ServerOracle:
CREATE OR REPLACE VIEW viewName AS newQuery
:-ALTER VIEWOracleDB2SQL Server.-DB2.-MySQL5.0.1
SQL Server.
7/30/2019 Advanced SQL Programming (ITD310)
96/209
Universal Knowledge Solutions s.a.l.
96
:StudiostudioName, studioNumber
programNumber.ActorsActorName
programName.ActorsStudiosSQL ServerMySQL:
ALTER VIEW ActorsStudiosASSelect actorName , studioName from Actors Inner Join StudiosON Studios.studioNumber = Actors.studioNumber;
Oracle:
CREATE OR REPLACE VIEW ActorsStudiosASSelect actorName , studioName from Actors Inner Join StudiosON Studios.studioNumber = Actors.studioNumber;
DROP VIEW..
DROP VIEW:
DROP VIEW viewName;
:MyView:CREATE VIEW MyView ASSelect * from MyTable;
MyView:DROP VIEW MyView;
7/30/2019 Advanced SQL Programming (ITD310)
97/209
Universal Knowledge Solutions s.a.l.
97
MyView:Select* from MyView;
MyTableMyView.
DROP VIEW..
.
SQL Server:
SQL Server:
CREATE TABLE # tmp_Table (Field1Name Field1Type , Field2NameField2Type;
CREATE TABLE#
.)SQL Server(#
7/30/2019 Advanced SQL Programming (ITD310)
98/209
Universal Knowledge Solutions s.a.l.
98
.##.SQL Servertempdb.
.
:StudentsstudentNamestudentIDstudentMark.
:
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
7/30/2019 Advanced SQL Programming (ITD310)
99/209
Universal Knowledge Solutions s.a.l.
99
:
myTempproductNameproductPrice
Products:
CREATE GLOBAL TEMPORARY TABLE myTemp ASselect productName , productPrice from Products;
:
Insert Into myTemp select productName , productPrice from Products;
DB2:
DB2DECLARE GLOBAL TEMPORARY TABLE:SQL ServerSelect
Oracle.DB2
.userTemporary.
userTemporarysystem.
userTemporary.
DB2:1-:
CREATE USER TEMPORARY SPACE table_space MANAGED BY SYSTEM USING(path);
2-:
7/30/2019 Advanced SQL Programming (ITD310)
100/209
Universal Knowledge Solutions s.a.l.
100
DECLARE GLOBAL TEMPPORARY TABLE temp_table(Field1 Field1Type , Field2 Field2Type) IN table_space;
3-Insert Into
::
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 tempCallersSelect Distinct callerName AS Name , callerNumber AS Number fromCallers where Destination = 62918763;
mySQL:
mySQLCREATE TEMPORARY TABLECREATETABLE.
mySQLmySQL:
CREATE TEMPPORARY TABLE temp_table(Field1 Field1Type , Field2 Field2Type;
7/30/2019 Advanced SQL Programming (ITD310)
101/209
Universal Knowledge Solutions s.a.l.
101
:myTemp100
:
CREATE TEMPORARY TABLE myTemp (Name varchar(50));
:
Insert Into myTemp select Name , sum (Quantity) from SalesGroup By NameHaving sum (Quantity) > 100;
.
.
SelectUpdate, DeleteInsert
.
.
.
.
7/30/2019 Advanced SQL Programming (ITD310)
102/209
Universal Knowledge Solutions s.a.l.
102
:
.
.
:.
WhereOrder ByON
Join..
:-.-.
UNIQUE
UNIQUE.:
CREATE UNIQUE INDEX index_name ON tableName (FieldName);:
CREATE INDEX index_name ON tableName (FieldName);
:
7/30/2019 Advanced SQL Programming (ITD310)
103/209
Universal Knowledge Solutions s.a.l.
103
PhonebookNameNumberCategory:...Number
Category.
:
CREATE UNIQUE INDEX myIndex ON Phonebook (Number);
:
Select * from Phonebook where Number = 5437268;
:
)(:
Select * from tableName where strColumn like %substr;
strColumn.
SQLDROP INDEX.SQL Server
:DROP INDEX myTable.myIndex;
OracleDB2:DROP INDEX myIndex;
MySQL:DROP INDEX myIndex ON myTable;
7/30/2019 Advanced SQL Programming (ITD310)
104/209
Universal Knowledge Solutions s.a.l.
104
:numberIndexPhonebookSQL Server:
DROP INDEX Phonebook.numberIndex;
OracleDB2:DROP INDEX numberIndex;
My SQL:DROP INDEX numberIndex ON Phonebook;
7/30/2019 Advanced SQL Programming (ITD310)
105/209
Universal Knowledge Solutions s.a.l.
105
:
.
:
.
::
7/30/2019 Advanced SQL Programming (ITD310)
106/209
7/30/2019 Advanced SQL Programming (ITD310)
107/209
Universal Knowledge Solutions s.a.l.
107
-.-.-
..-.-.
(ACID).
3
(ACID):
1-:...
2-:...
3-:.
.4-:
.
7/30/2019 Advanced SQL Programming (ITD310)
108/209
Universal Knowledge Solutions s.a.l.
108
4
.
:SQL99START TRANSACTION
DB2OracleSQL ServerMySQL.
SQL Server:BEGIN TRANSACTION transaction_name;
MySQL:
BEGIN;
Oracle.DB2 .
Access.
:CheckingSQL Server:
BEGIN TRANSACTION Checking;
MySQL:
BEGIN;
7/30/2019 Advanced SQL Programming (ITD310)
109/209
Universal Knowledge Solutions s.a.l.
109
5
:
..
SQL99SAVEPOINT:
SAVEPOINT savepoint_name;
DB2OracleSQL Server:
SAVE TRANSACTION savepoint_name;
MySQL.
:BeforeChange
DB2Oracle
:SAVEPOINT BeforeChange;
SQL Server:
SAVE TRANSACTION BeforeChange;
7/30/2019 Advanced SQL Programming (ITD310)
110/209
Universal Knowledge Solutions s.a.l.
110
6
:
.SQL99:
ROLLBACK [WORK] [TO SAVEPOINT savepoint_name];
OracleDB2TO SAVEPOINTMySQL
MySQL
.SQL Server:
ROLLBACK TRANSACTION [|];
::
BEGIN TRANSACTION myTransaction;Update Accounts SET myBalance = myBalance-100;SAVE TRANSACTION mySavePoint;Update Products SET Quantity = Quantity-1;
SQL ServerBEGIN TRANSACTIONSAVETRANSACTION.
mySavePoint:
ROLLBACK TRANSACTION myTransaction;
OracleDB2:
Update Accounts SET myBalance = myBalance-100;SAVEPOINT mySavePoint;
Update Products SET Quantity = Quantity-1;ROLLBACK TO mySavePoint;
7/30/2019 Advanced SQL Programming (ITD310)
111/209
Universal Knowledge Solutions s.a.l.
111
mySQL:
BEGIN;Update Accounts SET myBalance = myBalance-100;
Update Products SET Quantity = Quantity-1;ROLLBACK;
7
:
SQLCOMMIT.ROLLBACK.
SQL99:
COMMIT [WORK];
mySQL, SQL Server, Oracle, DB2.
SQL ServerCOMMIT TRANSACTION:
COMMIT TRANSACTION transaction_name;
:
:
BEGIN TRANSACTIONSAVE TRANSACTION beforeChangeUPDATE creditAccount setcreditBalance=creditBalance - 200 where creditNumber=345276778543;
7/30/2019 Advanced SQL Programming (ITD310)
112/209
Universal Knowledge Solutions s.a.l.
112
ROLLBACK TRANSACTION beforeChangeUPDATE SiteAccount setSiteBalance=SiteBalance + 200 where accountNumber=345231;COMMIT TRANSACTION
8
:
SQL ServermySQL.
.
::
Update myTable SET ID = 10;Update Customers SET customerName = Adel;
.
:BEGIN WORKUpdate myTable SET ID = 10;Update Customers SET customerName = Adel;COMMIT WORK;
Oracle:
7/30/2019 Advanced SQL Programming (ITD310)
113/209
Universal Knowledge Solutions s.a.l.
113
SET AUTOCOMMIT ON|OFF;
SQL Server:
SET IMPLICIT_TRANSACTIONS ON|OFF;
DB2Command Center >Options
9
:
..
.
::
BEGIN TRANSACTION myTransactionInsert Into Graduated (ID, Name) Values (20, Samer)IF @@ERROR 0 ROLLBACK TRANSACTION myTransactionUpdate Students SET Status = Graduated where ID = 20;COMMIT TRANSACTION myTransaction
:-myTransaction-Samer20-
oROLLBACKoSamer
-COMMIT TRANSACTION.
7/30/2019 Advanced SQL Programming (ITD310)
114/209
Universal Knowledge Solutions s.a.l.
114
.
.
..
..
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;
7/30/2019 Advanced SQL Programming (ITD310)
115/209
Universal Knowledge Solutions s.a.l.
115
:SQL Server, DB2, mySQL, OracleREAD COMMITED.
READ UNCOMMITED:
.:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED;
.
COMMIT..
:
..
READ COMMITED:
.
7/30/2019 Advanced SQL Programming (ITD310)
116/209
Universal Knowledge Solutions s.a.l.
116
..
:
SET TRANSACTION ISOLATION LEVEL READ COMMITED;
.
.
READ COMMITED.REPEATABLE READ.
REPEATABLE READ:
READ COMMITED.
.
.
.
:
7/30/2019 Advanced SQL Programming (ITD310)
117/209
Universal Knowledge Solutions s.a.l.
117
SET TRANSACTION ISOLATION LEVEL REPATABLE READ;
..
:where.
.
.
.
SERIALIZABLE:where
..
:
SET TRANSACTION ISOLATION LEVEL SERIALISABLE;
SQL server:SQLserver.
SLQ ServerREAD COMMITED.
7/30/2019 Advanced SQL Programming (ITD310)
118/209
Universal Knowledge Solutions s.a.l.
118
:
SET TRANSACTION ISOLATION LEVEL{ READ COMMITED| READ UNCOMMITED| REPEATABLE READ| SERIALIZABLE}
Oracle:OracleREAD UNCOMMITED
REPEATABLE READ.OracleREAD COMMITED.SET TRANSACTIONOracle.
:
SET TRANSACTION{ {READ ONLY | READ WRITE}
| ISOLATION LEVEL{ READ COMMITED| SERIALIZABLE}};
ALTER SESSION:
ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;
MySQL:MySQLInnoDB:
SET [GLOBAL | SESSION ] TRANSACTION ISOLATION LEVEL{ READ COMMITED| READ UNCOMMITED| REPEATABLE READ| SERIALIZABLE};
7/30/2019 Advanced SQL Programming (ITD310)
119/209
Universal Knowledge Solutions s.a.l.
119
SET TRANSACTION.SESSIONGLOBAL
.
DB2:
DB2WITH.
:
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 = 5WITH RR;
7/30/2019 Advanced SQL Programming (ITD310)
120/209
Universal Knowledge Solutions s.a.l.
120
:
.
:SQL.
.
::
)(
7/30/2019 Advanced SQL Programming (ITD310)
121/209
Universal Knowledge Solutions s.a.l.
121
1
.
.
.
SQL.
SQL.
.
2
CALLOracleDB2EXECUTEEXECSQL ServerAccess.
OracleEXECUTE.
:UpdateRec3OracleDB2
:
CALL UpdateRec (3);
SQLAccess:
EXECUTE UpdateRec 3;
7/30/2019 Advanced SQL Programming (ITD310)
122/209
Universal Knowledge Solutions s.a.l.
122
SQL ServerAccess..
CREATE PROCEDURE:
CREATE PROCEDURE sp_name (parameter_list)
AS sp_body;
sp_nameParameter_listsp_body.
Oracle, DB2, SQL ServerAccess.
.
:Products
ID:
CREATE PROCEDURE deleteProduct (@ProductID INT)ASBEGINDelete from Products where ID = @ProductID;
END;
END, BEGINProductID.
@SQL Server.
7/30/2019 Advanced SQL Programming (ITD310)
123/209
Universal Knowledge Solutions s.a.l.
123
ID
8:
EXECUTE deleteProduct (8);
Oracle:
OracleSQL ServerANSI:
CREATE [OR REPLACE] PROCEDURE sp_name (parameter_list)ASBEGIN
Sp_body;
END;
OR REPLACE.
@./
SQL Server.
:Oracle
OR REPLACE.
:StatusStudents:
7/30/2019 Advanced SQL Programming (ITD310)
124/209
Universal Knowledge Solutions s.a.l.
124
CREATE OR REPLACE PROCEDURE updateStatus(minMark IN INT, myStatus IN varchar)ASBEGINUpdate Students SET Status = myStatus where Mark < minMark;END;
mySQL:
mySQL5.0.3mySQL.
CREATE PROCEDURE sp_name (parameter_list)BEGIN
query_body;END;
:myTablemyCount
:CREATE PROCEDURE getCount (OUT myCount INT)BEGIN
SELECT Count (*) Into myCount form myTable;END;
7/30/2019 Advanced SQL Programming (ITD310)
125/209
Universal Knowledge Solutions s.a.l.
125
DB2:
DB2SQLMicrosoft Visual C++.
DB2.
:
CREATE PROCEDURE sp_name (parameter_list)block_name: BEGINsp_body;END block_name;
:
Students:
CREATE PROCEDUREinsertStudent (mystudentID INT, mystudentName varchar(50))Label1: BEGINInsert Into Students (studentID, studentName)Values(myStudentID, mystudentName)END Label1;
Ms Access:AccessCREATE PROCEDURE.
).(
7/30/2019 Advanced SQL Programming (ITD310)
126/209
Universal Knowledge Solutions s.a.l.
126
getProducts:
Select productName from getProducts;
:
EXECUTE getProducts;
Access.
SQL.
:AccessQuantity
:
CREATE PROCEDURE deleteQuantity (@myQuantity INT)ASDelete from Products where Quanity
7/30/2019 Advanced SQL Programming (ITD310)
127/209
Universal Knowledge Solutions s.a.l.
127
ALTER PROCEDURECREATE PROCEDURE.
:myStoredProceduremyTable
:
ALTER PROCEDURE myStoredProcedure (myRecordID INT)ASDelete from myTable where ID = myRecordID;
CREATE PROCEDURE.
:/.
.
SQL.
SQL:SQL
.
:
DECLARE var_name var_type (length);
7/30/2019 Advanced SQL Programming (ITD310)
128/209
Universal Knowledge Solutions s.a.l.
128
.:
DECLARE var1_name, var2_name, var3_name var_type (length);
:
varchar:
DECLARE var1 INT;DECLARE var2, var3, var4 varchar(50);
DB2BEGIN END.Oracle
BEGIN END
.
..
SQL Server:SET @var_name = value;
SELECT @var_name = value;mySQLDB2SET@:=
mySQLOracle:
var_name:= value;
OracleDB2SELECT:
SELECT field_name from tableName Into variable_namewhere field_name = 1;
7/30/2019 Advanced SQL Programming (ITD310)
129/209
Universal Knowledge Solutions s.a.l.
129
.
.
SQL ServerDefaultOracle.
: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)ASBEGINInsert Into Contacts (contactName, contactAddress)Values (myName, myAddress);END;
DB2.
7/30/2019 Advanced SQL Programming (ITD310)
130/209
Universal Knowledge Solutions s.a.l.
130
.
SQL Server:SQL ServerOUTPUT
:
CREATE PROCEDURE procedure_name(@output_parameter_name INT OUTPUT);
:theName
:
CREATE PROCEDURE getName(@theNumber varchar(15) , @theName varchar(50) OUTPUT)AS
BEGINSET @theName = (SELECT Name from Phonebook where Number = @theNumber)END;
SETtheName.
:
DECLARE @theName varchar(50);EXECUTE getName 4445467 , @theName OUTPUT;PRINT @theName;
:-theName-theName-.
7/30/2019 Advanced SQL Programming (ITD310)
131/209
Universal Knowledge Solutions s.a.l.
131
Oracle:
Oracle:
CREATE OR REPLACE PROCEDURE getName(theNumber IN varchar(15) , theName OUT varchar(50))ASBEGINSELECT Name INTO theName from Phonebookwhere Number = theNumber;
END; SELECT INTONametheName.
:
SET SERVER ONDECLARE theName varchar(50);BEGINgetName (4465873 , theName);dbms_output.put_line(theName);END;
:
-SET SERVER ONSQL* plusSQL* plus
-theName-theName-.
7/30/2019 Advanced SQL Programming (ITD310)
132/209
7/30/2019 Advanced SQL Programming (ITD310)
133/209
Universal Knowledge Solutions s.a.l.
133
:
.
:
.:
:
7/30/2019 Advanced SQL Programming (ITD310)
134/209
Universal Knowledge Solutions s.a.l.
134
:SQL
..
:
..
.
:
-IF..ELSE:
IF conditionconditionTrueBody;
ELSEconditionFalseBody;
conditionconditionTrueBody
conditionFalseBody.
-CASE.WHEN:
CASE expression
WHEN value1 THEN result1WHEN value2 THEN result2
..WHEN valueN THEN resultN
ELSE resultElseEND;
7/30/2019 Advanced SQL Programming (ITD310)
135/209
Universal Knowledge Solutions s.a.l.
135
expressionValue1..ValueNresultresultElse.
.
IFELSECASEWHENSQL Server .
IF..ELSE:IF.ELSESQL Server:
IF conditionBEGIN
trueStatmentsENDELSEBEGIN
falseStatmentsEND
BEGINENDBEGIN END.ELSE.
:
:
CREATE PROCEDURE getSalesAndComment(@myProductID INT, @mySales INT OUTPUT,@myComment VARCHAR(40) OUTPUT)ASBEGIN
7/30/2019 Advanced SQL Programming (ITD310)
136/209
Universal Knowledge Solutions s.a.l.
136
SET @mySales= (Select sum(Quantity) from saleswhere productID=@myProductID);
IF @mySlales=0SET @myComment=STOP THIS PRODUCT;
ELSE SET @myComment=KEEP THIS PRODUCT;Update products set ProductComment=@myCommentWhere productID=@myProductID ;END
BEGIN ENDIFELSE
:DECLARE @theComment VARCHAR(40);DECLARE @theSales INT
EXECUTE getSalesAndComment(3, @theSales OUTPUT, @theComment OUTPUT);PRINT @theSales;PRINT @theComment;
.
CASE.WHEN:
CASEWHENSQL Server:
SET @aVariable= CASE expression
WHEN value1 THEN result1WHEN value2 THEN result2
..WHEN valueN THEN resultN
ELSE resultElseEND;
CASEWHENSQL ServerSELECTYskh].
7/30/2019 Advanced SQL Programming (ITD310)
137/209
Universal Knowledge Solutions s.a.l.
137
CASEvalue1valueN.
:
:
CREATE PROCEDURE getStudentLevel(@myStudentName VARCHAR(50), @myStudentLevel VARCHAR(40) OUTPUT)ASBEGINDECLARE studentGrade INT;SET @studentGrade= (Select studentGrade from students
where studentName=@myStudentName);SET @myStudentLevel= CASEWHEN @studentGrade>80 THEN VERY GOODWHEN @studentGrade>70 THEN GOODWHEN @studentGrade>60 THEN NOT BADWHEN @studentGrade>50 THEN PASSWHEN @studentGrade
7/30/2019 Advanced SQL Programming (ITD310)
138/209
Universal Knowledge Solutions s.a.l.
138
SELECTSQL Server.-CASEWHENEND CASEEND
SQL Server.
-:=OracleSET.
:
ReservationsOracle:
CREATE OR REPLACE PROCEDURE Reservations
(myRoomType IN varchar(10), myDays IN INT)ASBEGINIF myRoomType= Single THENInsert Into Reservations (roomType, Fee)Values(myRoomType,20*myDays);ELSEIF myRoomType=Double THENInsert Into Reservations (roomType, Fee)Values(myRoomType,35*myDays);ELSEIF myRoomType=Sweet THENInsert Into Reservations (roomType, Fee)
Values(myRoomType,45*myDays);END IF;END;
:
CALL Reservations (Single,5);
.SQL ServerWHILEBEGINEND:
WHILE Condition
7/30/2019 Advanced SQL Programming (ITD310)
139/209
Universal Knowledge Solutions s.a.l.
139
BEGINloopBodyEND;
OracleLOOPEND LOOP:
WHILE ConditionLOOPloopBodyEND LOOP;
DB2DOEND WHILE:
WHILE ConditionDOloopBodyEND WHILE;
mySQLWHILEEND WHILE:
WHILE ConditionloopBody
END WHILE;
:
1100NumbersSQL Server:
CREATE PROCEDURE tenRandoms()ASBEGINDECLARE @myNumber INT;WHILE @myNumber
7/30/2019 Advanced SQL Programming (ITD310)
140/209
Universal Knowledge Solutions s.a.l.
140
Oracle:
CREATE OR REPLACE PROCEDURE tenRandoms()ASBEGINDECLARE myNumber INT;myNumber:=1;WHILE myNumber
7/30/2019 Advanced SQL Programming (ITD310)
141/209
Universal Knowledge Solutions s.a.l.
141
END WHILE;END;
SQL.
.
::
DECLARE cursorName CURSOR FOR cursorSpecification;
cursorSpecification .
OracleISFOR.FOR UPDATE:
DECLARE cursorName CURSOR IS cursorSpecification FOR UPDATE;
.OF columnListcolumnList
. FOR READ ONLYFOR UPDATE.
DB2WITH HOLDWITH RETURN.WITH HOLD.
WITH RETURNTO CALLERTO CLIENT
7/30/2019 Advanced SQL Programming (ITD310)
142/209
Universal Knowledge Solutions s.a.l.
142
.
:
OPEN cursorName;
.
FETCH:
FETCH cursorName INTO var1,var2,var3,,varN;
var1,var2,var3,,varN.
.
DB2.SQL Server:FETCH NEXT from cursorName INTO @var1,@var2,@var3,,@varN;
FETCH FIRSTFETCH PRIORFETCH LASTFETCH NEXT.
FETCH ABSOLUTE NFETCH RELATIVE N
.
:
CLOSE cursorName;
:
7/30/2019 Advanced SQL Programming (ITD310)
143/209
Universal Knowledge Solutions s.a.l.
143
SQL Server.
OracleDB2.FOR.
Oracle:
FOR cursorName IN (cursorSpecification)
LOOPloopBodyEND LOOP;
DB2:
FOR cursorName AS (cursorSpecification)DOloopBodyEND FOR;
.
:
myColumnmyTable:
SET SERVEROUT ONFOR myCursor IN (select myColumn from myTable)LOOPDbms_output.put_line(myCursor.myColumn)END LOOP;
myCursormyColumn..
7/30/2019 Advanced SQL Programming (ITD310)
144/209
Universal Knowledge Solutions s.a.l.
144
SQL Server:
.
DECLARE @myNumber varchar(15);DECLARE @myName varchar(50);
DECLARE myCursor CURSOR FORSelect contactNumber, contactName from Contacts;OPEN myCursor;WHILE @@FETCH_STATUS = 0FETCH NEXT from myCursor INTO @myNumber, @myName;PRINT @myName, @myNumber;END;
myCursorFETCH NEXT.
@@FETCH_STATUS-10 .
Oracle:
Oracle:
SET SERVEROUT ON
DECLARE myNumber varchar(15);DECLARE myName varchar(50);DECLARE myCursor CURSOR ISSelect contactNumber, contactName from Contacts;OPEN myCursor;WHILE myCursor%FOUNDLOOPFETCH NEXT from myCursor INTO myNumber, myName;dbms_output.put_line(myName, myNumber);END LOOP;
7/30/2019 Advanced SQL Programming (ITD310)
145/209
Universal Knowledge Solutions s.a.l.
145
SET SERVEROUT.myCursor%FOUND.%FOUNDTRUE
.%ISOPEN%ROWCOUNT
.
.SQL ServerAccess:
CREATE PROCEDURE procedureName AS query;
EXECEXECUTE:
EXEC procedureName;
:myProcedure:
CREATE PROCEDURE myProcedureAS select productName from Products;
DB2:
CREATE PROCEDURE procedureName()RESULT SETS 1LANGUAGE SQLP1:BEGINDECLARE cursorName CURSOR WITH RETURN FORqueryopen cursorName
7/30/2019 Advanced SQL Programming (ITD310)
146/209
7/30/2019 Advanced SQL Programming (ITD310)
147/209
Universal Knowledge Solutions s.a.l.
147
.
:myPackagemyCursormyProcedure
theCursorCURSOR.
CREATE OR REPLACE PACKAGE myPackageASType myCursor IS REF CURSOR;PROCEDURE myProcedure (theCursor OUT myCursor);END myPackage;
:
CREATE OR REPLACE PACKAGE BODY myPackageASPROCEDURE myProcedure (theCursor OUT myCursor);ISBEGINOPEN theCursor FORSelect myColumn from myTable;END myProcedure;
END myPackage;
7/30/2019 Advanced SQL Programming (ITD310)
148/209
Universal Knowledge Solutions s.a.l.
148
:.
:.
:
:
7/30/2019 Advanced SQL Programming (ITD310)
149/209
7/30/2019 Advanced SQL Programming (ITD310)
150/209
Universal Knowledge Solutions s.a.l.
150
SQL Server@@.ERROR.
0.IF:
IF (@@ERROR 0)errorHandler;
errorHandler.
.
RAISERROR:
RAISERROR {msg_id | msg_str}, severity, state [,argument];
msg_id130002147483647.msg_str.
severity02520 .state1127.
..%.%d
%u%s.
7/30/2019 Advanced SQL Programming (ITD310)
151/209
Universal Knowledge Solutions s.a.l.
151
SQL Server
:
Customers:
CREATE PROCEDURE safeInsert(@myCustomerID INT, @myCustomerName varchar(50))ASBEGIN
DECLARE @theError INT;
Insert Into Customers Values (@myCustomerID, @myCustomerName);SET @theError = @@ERROR;IF @theError 0
BEGINRAISERROR
(cannot insert the customer with ID %d,10, 1, @customerID);
RETURN @theError;END;ELSE
RETURN 0;END;
:
-safeInsert-theError@@ERROR
Customers.-theError
o0.
otheError.%d.
:
EXEC safeInsert 20, Adel;
7/30/2019 Advanced SQL Programming (ITD310)
152/209
Universal Knowledge Solutions s.a.l.
152
Oracle
OracleEXCEPTIONEND.
:
BEGIN--SQL CodeEXCEPTIONWHEN Exception1 THEN--handelException1
WHEN EXCEPTION2 THEN--handelException2END;
.
:*CURSOR_ALREADY_OPEN:.*DUP_VAL_ON_INDEX:.*INVALID_NUMBER:
.*NO_DATA_FOUND:SELECT INTO
.*TO_MANY_ROWS:SELECT INTO
.*OTHERS:.
EXCEPTION.
7/30/2019 Advanced SQL Programming (ITD310)
153/209
Universal Knowledge Solutions s.a.l.
153
Oracle
:
StudentsSamiStudents.
CREATE OR REPLACE PROCEDURE insertSudent( myStudentName INvarchar(50),myStudentID IN INT)ASmyCustomException EXCEPTION;BEGIN
IF myStudentName =samiTHENRAISE myCustomException ;
END IF;Insert into students values (myStudentID,myStudentName);
EXCEPTIONWHEN DUP_VAL_ON_INDEX THENDbms_output.put_line(we have this ID ion our table);WHEN myCustomException THENDbms_output.put_line(this student is not allowed to register);END;
Students:DUP_VAL_ON_INDEXmyCustomException.
EXCEPTION.
:
CALL insertStudent (Adel, 10);
DB2
DB2.:SQLSTATE:.SQLCODE:.
.
7/30/2019 Advanced SQL Programming (ITD310)
154/209
Universal Knowledge Solutions s.a.l.
154
:
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:BEGINENDBEGINEND
.
error_type.:
-SQLEXCEPTION:SQL.
-SQLWARNING:SQL. -NOT FOUND:WHERE.
7/30/2019 Advanced SQL Programming (ITD310)
155/209
Universal Knowledge Solutions s.a.l.
155
DB2
:
SQL23405
:
DECLARE CONTINUE HANDLER FOR SQLSTATE 23505--code to handle the error;
.SIGNAL:
SIGNAL SQLSTATE SQLStateCodeSET MESSAGE_TEXT = errorDescription;
SQLSTATE.
:79TZ
.
7/30/2019 Advanced SQL Programming (ITD310)
156/209
Universal Knowledge Solutions s.a.l.
156
DB2
:
SQLSTATE:
CREATE searchFor (myName varchar(50), OUT myMessage varchar(50))P1: BEGINDECLARE SQLSTATE char(5) DEFAULT 00000;DECLARE EXIT HANDLER FOR NOT FOUNDmyMessage = did not find name;
IF myName = sami THENSIGNAL SQLSTATE 87000SET 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;
SQLSTATEEXITNOT FOUND
87000.
:
CALL searchFor (samer ,?);
MySQL
MySQLDB2.
:DECLARE handler_type HANDLER FOR condition_value [,...] sp_statement;
7/30/2019 Advanced SQL Programming (ITD310)
157/209
Universal Knowledge Solutions s.a.l.
157
:CONTINUE:EXIT:BEGIN-END
condition_valueMYSQL:SQLWARNING01NOT FOUND02SQLEXCEPTION.mysql_error_code:.
NOT FOUND.Condition_name
:. Sp_statement:.SET.
MySQLDB2.
:CONTINUE:EXIT:BEGIN-END
condition_valueMYSQL:SQLWARNING01NOT FOUND02SQLEXCEPTION.mysql_error_code:.
NOT FOUND.Condition_name:.Sp_statement:.SET
.
7/30/2019 Advanced SQL Programming (ITD310)
158/209
Universal Knowledge Solutions s.a.l.
158
MySQL
1:emps:
CREATE PROCEDURE handlerproc(OUT p_end VARCHAR(10))BEGINdeclare 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;
:1062ER_DUP_ENTRY1048ER_BAD_NULL_ERRORNULL
.bContinue
.
2:SQLSTATE23000
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_nullError';
insert into emps VALUES (NULL,'Dave',1,10) ;
set p_end:= concat('The End ',@b);
end;
7/30/2019 Advanced SQL Programming (ITD310)
159/209
Universal Knowledge Solutions s.a.l.
159
.
:1-
.2-
.3-.
7/30/2019 Advanced SQL Programming (ITD310)
160/209
Universal Knowledge Solutions s.a.l.
160
SQL
:.
:.SQL
.
::
SQL99ACCESSSQL SERVERORACLE)(
7/30/2019 Advanced SQL Programming (ITD310)
161/209
Universal Knowledge Solutions s.a.l.
161
SQL
.
.SQL.
:1-:.
).(2-:
. ..
:.
:1-:
..2-.
.
. .
.
.
7/30/2019 Advanced SQL Programming (ITD310)
162/209
Universal Knowledge Solutions s.a.l.
162
:
.SQL. .
.
.MySQLAccess
.sysAdminSQL Serversa.
:.
.
SQL
SQL99
.
SQL99:GRANTREVOKE.
SQL99CREATE ROLESET ROLEDROPROLE.
7/30/2019 Advanced SQL Programming (ITD310)
163/209
Universal Knowledge Solutions s.a.l.
163
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
.SQL ServerOracleDB2GRANT
.
SQL
REVOKE:
REVOKEGRANT.
REVOKEGRANT:
7/30/2019 Advanced SQL Programming (ITD310)
164/209
Universal Knowledge Solutions s.a.l.
164
-:REVOKE prevelage_type FROM user_name
-:REVOKE prevelage_type ON resource FROM user_name
.SQL99REVOKEGRANT:
REVOKEGRANT
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
| TRANSLATIONtranslation_nameFROM (grantee_name | PUBLIC}
[,n]{CASCAD | RESTRICT}
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
.
SQL
MS Access:
AccessSQL ServerDB2Oracle.
7/30/2019 Advanced SQL Programming (ITD310)
165/209
Universal Knowledge Solutions s.a.l.
165
.
Access 2002GRANTREVOKE.AccessToolsSecurity.
Access.ToolsSecurityset database password.
Encrypt/Decrypt DatabaseToolsSecurity
.AccessUser and
Group AccountsToolsSecurity.
User and Group Permissions.
7/30/2019 Advanced SQL Programming (ITD310)
166/209
Universal Knowledge Solutions s.a.l.
166
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:
Adelthepass:
EXEC sp_addlogin Adel, thepass
:
EXEC sp_droplogin Adel
SQL
SQL Server:
7/30/2019 Advanced SQL Programming (ITD310)
167/209
Universal Knowledge Solutions s.a.l.
167
SQL Server.
sp_addlogin
sp_password.:.
sp_droplogin.
WindowsSQL Server:SQL Server
WindowsWindows.
Windows.
domain\userName
mymachine\userName. SQL ServerWindows
SQL Server.
SQL
.sp_grantdbaccess.
.:EXEC sp_grantdbaccess userName
:myDatabasemyTableAdel
:
7/30/2019 Advanced SQL Programming (ITD310)
168/209
Universal Knowledge Solutions s.a.l.
168
CREATE DATABASE myDatabaseGOuseMyDatabaseGOCREATE TABLE myTable (myColumn varchar(10));GOEXEC sp_grantdbaccess Adel
sp_grantdbaccessuseMyDatabasemyDatabase.
sp_revokedbaccess
:
EXEC sp_revokedbaccess userName
.
SQL
:
SQL ServerSQL99)GRANT, REVOKE(.
:myTestmyDBSamiSELECT
UPDATE:
CREATE DATABASE myDBGOUSE myDBGO
7/30/2019 Advanced SQL Programming (ITD310)
169/209
Universal Knowledge Solutions s.a.l.
169
CREATE TABLE myTest (call1 INT);GOEXEC sp_grantdbaccess SamiGO
GRANT SELECT , UPDATE ON myTest TO Sami
SamiGRANTWITHGRANT OPTION:
GRANT SELECT, UPDATE ON myTest TO Sami WITH GRANT OPTION
SQL ServerGRANTDENY.
REVOKESQL ServerGRANTDENY.REVOKE ALL.
SELECTmyTest:REVOKE SELECT ON myTest FROM Sami
WITH GRANT OPTIONCASCADE:
REVOKE SELECT ON myTest FROM Sami
SQL
MySQL:
SQL Server.
sp_addrole.
GRANT.SELECTmyTablemyRole:
GRANT SELECT ON myTable TO myRole;
7/30/2019 Advanced SQL Programming (ITD310)
170/209
7/30/2019 Advanced SQL Programming (ITD310)
171/209
Universal Knowledge Solutions s.a.l.
171
Oracle
ORACLEoracle.
:OracleSYSSYSTEM.
oracleSYSTEM.
-OracleCREATE USER
Oraclesimplepassword. 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
:
testOraclesss:
CREATE USER test;ALTER USER test IDENTIFIED BY sss;DROP USER test;
7/30/2019 Advanced SQL Programming (ITD310)
172/209
Universal Knowledge Solutions s.a.l.
172
Oracle
ORACLEALTER USER:
ALTER USER user_name PASSWORD EXPIRE;
Oracle8PROFILE.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;
:
Profile30Sara:CREATE PROFILE my_profile LIMIT
PASSWORD_LIFE_TIME 30;ALTER USER sara PROFILE my_profile;
7/30/2019 Advanced SQL Programming (ITD310)
173/209
Universal Knowledge Solutions s.a.l.
173
SQL)(
:
.
:SQL.
.
::
DB2MySQLORACLE)(
7/30/2019 Advanced SQL Programming (ITD310)
174/209
Universal Knowledge Solutions s.a.l.
174
ORACLE
OracleOracle.
Oracle:OracleGRANTREVOKE.
.Oracle:
-CONNECT.
-RESOURCE. -DBA.
myUser:
GRANT CONNECT,RESOURCE TO myUser;
REVOKE.RESOURCE
myUser: REVOKE RESOURCE FROM myUser;
myUser.
:-RESOURCECONNECT
RESOURCE -RESOURCE.
7/30/2019 Advanced SQL Programming (ITD310)
175/209
Universal Knowledge Solutions s.a.l.
175
ORACLE
:
:
GRANT privilege_type ON resource TO user_name;
Oracle:
-ALTER:ALTER TABLE.-DELETEINSERTSELECTUPDATE:.-INDEX:.-REFRENCES:)(
.-EXECUTE: .
:CONNECT:
CONNECT myUser/myPassword;
SELECTtest.
.
SELECT * FROM otherUser.test
myUsertestotherUser.otherUser:
CONNECT otherUser/otherPass
:
GRANT SELECT ,INSERT ON test TO myUser;
7/30/2019 Advanced SQL Programming (ITD310)
176/209
Universal Knowledge Solutions s.a.l.
176
myUser.Oracle:
-ALTER:ALTER TABLE.
-DELETEINSERTSELECTUPDATE:.-INDEX:.-REFRENCES:)(
.-EXECUTE: .
ORACLE
:Oracle
.
CREATE ROLEOracle:CREATE ROLE role_name;
DROP ROLE:
DROP ROLE role_name;
SYSTEM.
.GRANT:
GRANT privilege_type ON resource TO role_name
:
7/30/2019 Advanced SQL Programming (ITD310)
177/209
Universal Knowledge Solutions s.a.l.
177
GRANT my_role TO unser_name;
:customerProducts
RamirpassCustomer:
CREATE ROLE customer ;GRANT SELECT ON Products TO customer;CREATE USER Ram IDENTFIED BY rpass;GRANT customer TO Rami;
ORACLE
Oracle:OracleGRANTREVOKE.
:GRANT privilege_type TO user_name;
REVOKE privilege_type FROM user_name;
GRANTREVOKE:
CREATE DATABASECREATE TABLEALTER TABLEDROP TABLE
GRANTWITH GRANT OPTION.
RESOURCE.RESOURCE.
7/30/2019 Advanced SQL Programming (ITD310)
178/209
Universal Knowledge Solutions s.a.l.
178
:test
.: CREATE USER test;GRANT CREATE TABLE,CREAT DATABASE TO test;REFOKE DROP TABLE FROM test;
DB2
DB2:DB2
...
DB2:
DB2GRANTREVOKE:
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(.
7/30/2019 Advanced SQL Programming (ITD310)
179/209
7/30/2019 Advanced SQL Programming (ITD310)
180/209
Universal Knowledge Solutions s.a.l.
180
.
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:
7/30/2019 Advanced SQL Programming (ITD310)
181/209
Universal Knowledge Solutions s.a.l.
181
GRANT DBADM ON DATABASE TO Farid;
MySQL
MySQL.
GRANT TABLES
MySQL.GRANT TABLES:usertables_privcolumn_privdbfunchost
.
user:
USE mysqlInsert Into user values(localhost, userName, PASSWORD(simplepass) ,Y, Y, Y, Y, Y, Y, Y, Y, Y, Y,Y, Y, Y, Y,);FLUSH PRIVILEGES;
FLUSH PRIVILEGES
. MySQL.
GRANT.GRANT.
7/30/2019 Advanced SQL Programming (ITD310)
182/209
7/30/2019 Advanced SQL Programming (ITD310)
183/209
Universal Knowledge Solutions s.a.l.
183
.
.
SQL Server, OracleDB2 .
CREATE TABLECREATE VIEWGRANT.
.
CREATE SCHEMA AUTHORIZATION:
CREATE SCHEMA AUTHORIZATION schemaName-- create tables-- create view-- grant permissions;
: mySchemaCustomersNamesSami
SELECTNames:
CREATE SCHEM AUTHORIZATION mySchemaCREATE TABLE Customers
(ID INT PRIMARY KEY NOT NULL , Name varchar(50))CREATE VIEW Names AS SELECT Name FROM CustomersGRANT SELECT ON Names TO Sami;
..
7/30/2019 Advanced SQL Programming (ITD310)
184/209
Universal Knowledge Solutions s.a.l.
184
:.
:.
SQL ServerOracle.
::
SQL ServerOracle
7/30/2019 Advanced SQL Programming (ITD310)
185/209
Universal Knowledge Solutions s.a.l.
185
..
SQL.
.
..
.
.
.
.
SQL server,
DB2,Oracle,mySQL.
7/30/2019 Advanced SQL Programming (ITD310)
186/209
Universal Knowledge Solutions s.a.l.
186
:
:-:INSERTDELETE
UPDATE..
-:UPDATEDELETEINSERT.UPDATE
.
.
..
.
:CREATE TRIGGER.
SQL-99:
CREATE TRIGGER trigger_name{ BEFORE | AFTER }{[DELETE] | [INSERT] | [UPDATE]{OF column [,n]} ON table_name
[REFERNCING {OLD [ROW][AS] old_name | NEW[ROW] [AS] new_nameOLD TABLE [AS] old_name | NEW TABLE [AS] new_name}][FOR EACH { ROW | STATEMENT }\[WHEN (condition)]--sql code block
7/30/2019 Advanced SQL Programming (ITD310)
187/209
Universal Knowledge Solutions s.a.l.
187
:
:
1-).(
.2-.
3-. 4-CHECK.5-
.
SQL Server:
SQL Server.
.
SQL ServerBEFORE.SQL Server 2000INSTEAD.
SQL Server
:
CREATE TRIGGER:
7/30/2019 Advanced SQL Programming (ITD310)
188/209
7/30/2019 Advanced SQL Programming (ITD310)
189/209
Universal Knowledge Solutions s.a.l.
189
SQL Server
:
ALTER TRIGGER:
ALTER TRIGGER triggerName ON tableName FOR [|INSTEAD] action AS-- procedureBody;
:
myTrigger:
ALTER TRIGGER myTrigger ON TestFOR INSERT, DELETEASIF EXISTS (SELECT 1 FROM Inserted)BEGININSERT INTO Audit (newValue) SELECT Inserted.Value FROM InsertedENDELSE IF EXISTS (SELECT 1 FROM Deleted)BEGININSERT INTO Audit (newValue) SELECT Deleted.Value FROM DeletedEND;
Test)(Audit
DeletedInsertedAudit.
:DROP TRIGGER:
DROP TRIGGER triggerName;
:
myTrigger:
DROP TRIGGER myTrigger;
7/30/2019 Advanced SQL Programming (ITD310)
190/209
Universal Knowledge Solutions s.a.l.
190
SQL Server
UPDATE:SQL ServerUpdatedDeleted
Inserted.
UPDATEInsertedDeleted.
:
ALTER TRIGGER myTrigger ON Test FOR INSERT, DELETE, UPDATE ASIF EXISTS (SELECT 1 FROM Inserted) AND EXISTS (SELECT 1 FROM Deleted)BEGININSERT INTO Audit (newValue) SELECT D.Value FROM Deleted D JOINInserted I on D.Value = I.ValueENDELSE IF EXISTS (SELECT 1 FROM Inserted)BEGININSERT INTO Audit (newValue) SELECT Inserted.Value FROM InsertedENDELSE IF EXISTS (SELECT 1 FROM Deleted)
BEGININSERT INTO Audit (newValue) SELECT Deleted.Value FROM DeletedEND;
InsertedDeleted
JOIN.:
.
ALTER TABLE:
ALTER TABLE table_name DISABLE TRIGGER trigger_name;
:
7/30/2019 Advanced SQL Programming (ITD310)
191/209
Universal Knowledge Solutions s.a.l.
191
ALTER TABLE table_name ENABLE TRIGGER trigger_name;
ALL.:
ALTER TABLE table_name [ENABLE | DISABLE] TRIGGER ALL;
Oracle
Oracle
.
Oracle.
.)
.(
DELETE:OLDINSERT:NEWInsertedDeletedSQL Server.
Oracle.
CREATE TABLEALTER TABLEDROP TABLE.
7/30/2019 Advanced SQL Programming (ITD310)
192/209
Universal Knowledge Solutions s.a.l.
192
Oracle
Oracle:OracleCREATE 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))
myTriggermyTable
Audit:
CREATE TRIGGER myTrigger
AFTER INSERT ON myTableFOR EACH ROWBEGININSERT INTO Audit (ID , operationType) Values (:NEW.ID , INSERT)END;
FOR EACH ROWmyTable
.
:NEW.IDID.
7/30/2019 Advanced SQL Programming (ITD310)
193/209
Universal Knowledge Solutions s.a.l.
193
Oracle
Oracle:OracleCREATE OR REPLACE TRIGGER:
CREATE OR REPLACE TRIGGER trigger_name
[AFTER | BEFORE|INSTEAD] [INSERT | DELETE | UPDATE]ON table_name-- trigger_body;
::
CREATEOR REPLACE TRIGGER myTriggerAFTER INSERT OR DELETE OR UPDATE ON myTableFOR EACH ROWBEGINIF 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;
INSERTDELETEUPDATEOracleSQLTrueINSERTINGDELETINGUPDATING.
Update:NEW.:OLD.:OLD.:NEW..
:
7/30/2019 Advanced SQL Programming (ITD310)
194/209
Universal Knowledge Solutions s.a.l.
194
DROP TRIGGERSQLserver:
DROP TRIGGER trigger_name;
Oracle
Oracle:
OracleWHENCREATE TRIGGER.
:AccountsDepositions
sami:
CREATE OR REPLACE TRIGGER myTriggerAFTER INSERT ON DepositionsFOR EACH ROWWHEN (NEW.name!=sami)BEGININSERT INTO Accounts (AccountName) Values (:NEW.name);END;
:SQL
ServerDB2MySQLAccess.
:
CREATE SEQUENCE mySequence;
..
7/30/2019 Advanced SQL Programming (ITD310)
195/209
Universal Knowledge Solutions s.a.l.
195
:
CREATE OR REPLACE TRIGGER myTrigger
BEFORE INSERT ON myTableFOR EACH ROWBEGINSELECT mySequence.NEXTVAL INTO:NEW.myTable FROM DUALEND;
7/30/2019 Advanced SQL Programming (ITD310)
196/209
Universal Knowledge Solutions s.a.l.
196
:.
:.
DB2MySQL.
::
DB2MySQL
7/30/2019 Advanced SQL Programming (ITD310)
197/209
Universal Knowledge Solutions s.a.l.
197
DB2
DB2.
:DB2Oracle.:
CREATE TRIGGER trigger_name [AFTER |NOCASCADBEFORE | INSTEADOF] ONtable_name REFERENCING [OLD AS | NEW AS] refnameFOR EACH ROW MODE DB2SQLtrigger_body;
DB2AFTER.DB2NOCASCADBEFOREINSTEADOF
.
NOCASCADBEFORE.
OracleDB2.
REFERENCING.
OLD AS old_nameNEW AS new_name.
:Table2Table1:
CREATE TRIGGER myTriggerAFTER INSERT ON Table1 REFERENCING NEW AS NFOR EACH ROW MODE DB2SQLBEGIN ATOMICINSERT INTO Table2 (operation , ID) Values (INSERT, N.ID)END;
7/30/2019 Advanced SQL Programming (ITD310)
198/209
7/30/2019 Advanced SQL Programming (ITD310)
199/209