+ All Categories
Home > Documents > Advanced SQL Programming (ITD310)

Advanced SQL Programming (ITD310)

Date post: 04-Apr-2018
Category:
Upload: ahmed-naqshbandi
View: 222 times
Download: 0 times
Share this document with a friend

of 209

Transcript
  • 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;

    [email protected].

    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


Recommended