474
SQL

SQL и Реляционная Теория

Embed Size (px)

DESCRIPTION

SQL и Реляционная Теория

Citation preview

  • -(812) 324-5353, (495) 945-8100

    www.symbol.ru

    : : / SQL

    SQL

    :

    , SQL-

    , , SQL. , 3-

    . .

    SQL

    . .

    , , - , - 1970 IBM. - - . - - -. 2004 - . - - - -.

    SQL . -: , , SQL- - . , SQL, - , , .

    . . , - 1970 , -, SQL. , , - .

    , SQL, :

    ?

    null- - ?

    ?

    SQL-?

    - , -. , - SQL , .

    SQL

    SQL.

    9 785932 861738

    ISBN 978-5-93286-173-8

  • SQL and Relational

    TheoryHow to Write Accurate SQL Code

    C. J. Date

  • - 2010

    SQL

    SQL

    . .

  • . .

    SQL SQL

    . . . . . . . .

    . .

    SQL . SQL. . . .: -, 2010. 480 ., .

    ISBN 978-5-93286-173-8

    SQL . : , , SQL- . -, SQL, , - , .

    . . , - 1970 , , - SQL. , , - - .

    , - . , - SQL , .

    ISBN 978-5-93286-173-8 ISBN 978-0-596-52306-0 ()

    -, 2010Authorized translation of the English edition 2009 OReilly Media Inc. This trans-lation is pub lished and sold by permission of OReilly Media Inc., the owner of all rights to publish and sell the same.

    , - . -, , .

    -. 199034, -, 16 , 7,. (812) 324-5353, www.symbol.ru. N 000054 25.12.98.

    005-93, 2; 953000 .

    17.02.2010. 70100 1/16. . 30 . . 1200 .

    199034, -, 9 , 12.

  • ,

    , ,

    .

    , , , ,

    , , .

    .

    (14521519)

    , - , , .

    (18181885)

    ... .

    . .

    , ,

    .

  • ...............................................................................13

    1. ........................................................................21 ......................................22 .........................................23, ..........................................................25 ........................................................26 .................................................................35 ..................................................................39 ..............................................42 - ..........................................44 .............................................................46 .......................................................47 .............................................................................49

    2. ...............................................................51 ....................................................................51 .............................................................52 ....................................................58 ? ..........................................................................62 ..................................................66 SQL ...............................................................68 SQL .............................................70 SQL ........................................................72 SQL .......................................................74 .......................................................76 .............................................................................77

    3. , .........................81 ? .....................................................................81 ..........................................................84 SQL ............................................................................86 ? ................................................................88 .................................................................90 n- ..................................................................91

  • 8

    ................................................................92TABLE_DUM TABLE_DEE .......................................................93 SQL ..........................................................................94 SQL ........................................................96 .......................................................98 .............................................................................99

    4. , null- ............................. 101 ? ............................................................ 101: .................................................... 106 SQL ................................................ 107 null-? ........................................................ 109 null- SQL ............................................. 113 .............................................. 115 ..................................................... 116 ........................................................................... 117

    5. - , ..... 121 ............................................................... 122 ................................ 122 ...................................................... 125 ........................................................... 126 ................................................... 127 ............................................................ 130 - ........................................ 134 .................................................................. 137 ........................................................................... 139

    6. SQL I: .......................................................... 142

    ...................................................... 142 .................................................................. 145........................................................................... 149 ............................................................................... 149 ............................................................................ 151, ........................................ 155 ?............................... 157 .................................... 157 ? ..................................... 159 SQL .................................. 160 ..................................................... 161 ................................................. 165 ........................................................................... 167

  • 9

    7. SQL II: ........................................................ 171

    ................................................ 171 ........................................................................... 172 - .................................................................. 174 ................................................................................. 177 ............................................................. 179 - ..................................................... 183 ............................................................................. 185 ................................................................... 190 .......................................... 191 ................................................................. 193 ORDER BY? ......................................................... 194 ........................................................................... 195

    8. SQL .................................... 200 ................................................................... 201 ........................................................ 204 SQL ........................................................... 205 ........................................................ 206 SQL ............................................... 210 ............................................................................ 211 .............................................. 213 ? ............................................ 216 ........................................................ 219 ................................................................................... 221 ........................................................................... 223

    9. SQL ..................................................... 228 - .............................. 229 ..................................................... 233 .................................................................. 234 .................................................. 236 .............................................................. 240 ? ................................................... 244 ................................................................... 245 ........................................................................... 247

    10. SQL ............................................ 250 .......................................... 251 ............................................... 254

  • 10

    ...................................................................... 256 .......................................................... 260 ............................................................. 267 ......................................................... 274 ..................................................... 277 ........................................................................... 278

    11. SQL- ....................................... 281

    ........................................... 282 1. ........................................... 284 2. .............................. 285 3. ........................... 286 4. ................................... 288 5. ....................................... 290 6. ............................. 293 7. ..................................... 294 8. COUNT ............................................. 296 9. ............................................. 297 10. UNIQUE .................................................... 298 11. ALL ANY ....................................... 299 12. GROUP BY HAVING ............................................. 303 ........................................................................... 304

    12. , SQL ........................... 306SELECT * ............................................................................... 307 ....................................................................... 307 ................................................................ 307 ............................................................... 308 ............................................................................ 311 .................... 314 .................................................................. 315- SQL ............................. 315 ........................................................................... 318

    A. ......................................... 320 ................................................... 322 ............................................. 325 ....................................................... 331 .............................................. 331 ? .............................................................. 333

    B. ................... 338 .................................................. 339

  • 11

    / ............................................. 342 .................... 348 ................................................. 357 ..................................................................... 361 ................... 364 ..................................................... 366 ........................................................................... 368

    . ...................................... 372 1 .................................................................................. 372 2 .................................................................................. 379 3 .................................................................................. 387 4 .................................................................................. 392 5 .................................................................................. 398 6 .................................................................................. 404 7 .................................................................................. 413 8 .................................................................................. 424 9 .................................................................................. 433 10 ................................................................................. 440 11 ................................................................................. 448 12 ................................................................................. 450 B ........................................................................ 450

    D. ............................. 460

    .............................................................. 469

  • SQL . SQL : , , SQL- , , . , SQL- ( , , , ), . , - SQL . ? SQL - ?

    , , SQL -, . , SQL -; - null- -, . , , . , - ( ), , SQL , , - . , SQL - . , SQL , , .

    , SQL , , , . -, SQL . , -, - ( ); - . 1969 , , , - . ; - , -, SQL.

  • 14

    , , - SQL. , , SQL, ( -) - , SQL. - ( -, , -, ). - , , SQL . , , - , , , - , -, --. ( , - , ; .)

    , SQL. -, , SQL , . ( - -. . 12.)

    Database in Depth Database in Depth: Re-la tional Theory for Practitioners (OReilly, 2005) . ( ):

    , , ( ), - - , SQL. , - , -, , , , , . , , - , , - , , , , ,

  • 15

    . . , , 1... ?

    ?

    ?

    ?

    -?

    ?

    - ?

    - ?

    ?

    , - ?

    SQL ?

    ?

    XML ?

    . , - -.

    , , - . , - SQL , , - , , . , -, ( SQL ). , - , ( -- - -), , , - . -, , SQL ( - ).

    1 , , - .

  • 16

    . - , . ; ( , , ), - . , , ; , - , , .

    -, , , , - , . , , , - : , -, . , - ( , , ) . , , . -. , (Stphane Faroult), : , , . , , , -, , , ( - ).

    , . , : , - . - : , - ? , , , , - .

    -, , - SQL . ( - , -, .) , - SQL, -, . , - SQL. SQL

  • 17

    , , - , -, , . , , . , , -, , , - : SQL -. , - .

    , , , - , SQL . -, - (, ), - . , , , : - , . , , , .

    , , , - ( , - ). - .

    -, , SQL - , - - ( ). , , 1 ( ).

    -, - , (- -, ). - , . , , , . , - , C.

    , , - . . http://www.clik.to/chris_date http://www.thethirdmanifesto.com.

    1 SQL, SQL. . .

  • 18

    :

    . . , , - , - , x.

    .

    , .

    . - -. , . , , - . - - . . - , .

    , , . - , , ISBN, : SQL and Relational Theory, C. J. Date, Copyright 2009 C. J. Date, 978-0-596-52306-0.

    , , , [email protected].

    , , - . - , :

    OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472

  • 19

    800-998-9938 ( )707-829-0515 ( )707-829-0104 ()

    . - , :

    [email protected]

    :

    [email protected]

    -, - ( ). :

    http://www.oreilly.com/catalog/9780596523060

    OReilly:

    http://www.oreilly.com

    Safari

    Safari Enabled, , - e Safari OReilly.

    Safari . , - , , - . http://safari.oreilly.com.

    , , - SQL, , - , , - 2007 , . (Toon Koppelaars) , (Lex de Haan) ( ), , -. , - - SQL. , - - , -

  • 20

    , , - - . . - , , - . - (Herb Edelstein), (Sheeri Ktitzer), (Andy Oram), (Peter Robson) - (Baron Schwartz) - (Hugh Darwen) (Jim Melton) . , - - . , - OReilly (Isabel Kunkle), - (Andy Oram) (Adam Witwer) , - .

    . .

    , , 2008

  • 1.

    SQL -. , , - , , SQL. - , . - SQL . , , - , . , , . , , - , , - . , (-, , ); , , . - , . -, , , ? ?1

    1 . - , ( !) SQL: Oracle SQL Server - (-, . . -.). - . - .

  • 22 1.

    . , ( - ), . , -, -, -, ; , - . - .

    , . - , , -.

    - .

    - SQL - , - Oracle.

    , - SQL - - , , . -, . -, , - SQL, - SQL, , , , , , - -. : SQL . - , SQL ( ):

    , -

    - --

  • 23

    ( ). - .

    : - SQL, -. , , , , , , -, , - , -, , .

    , , - - , . SQL - , : , . , , . , ; -, .

    , , , . - - , , , - , , , . -: - , , , , -. , , - , - , SQL, . , SQL .

    : , SQL , , . - , , , ; ( , ). .

    SQL, , ( ) -

  • 24 1.

    1, , - .

    , -. , (table expression) - (query expression), - () , -, () , . ( , - , ; , , SELECT - SELECT.)

    , , - SQL , - . , JOIN, , , , - ( ), , - (. 12). , - , , . ( - 12.)

    , - , , Core SQL ( SQL), . - (OLAP), SQL, , - , .

    , , - , . , - /* */.

    , SQL , - . . - : , ( , - SQL). , , -, (. -

    1 International Organization for Standardization (ISO): Database Language SQL, Document ISO/IEC 9075:2003 (2003).

  • , 25

    9), , . , : - , , , .

    , , - ( ) - . , ; -. ? :

    , , , -; , ; -.1

    . - ( SQL ) . , , - Oracle; , Oracle. Oracle, , , DB2 SQL Server ( ). - , , : , .

    , -, , . , . -, -, . - SQL. , SQL - ( , ), - , - - (, -, ). - , - . , :

    , , .

    , -, .

    1 . . . . .

  • 26 1.

    ; , - (, - , - - ), - .

    (14521519), , , 500 - :

    , , , , , -, . .

    ( .)

    -; - , . ! - , - . . : , . - . , . , -, , - , .

    , , . . , IBM ( , , ; , , ). - 1968 , , , - - , . - - IBM 1969 , D.

    -, , - . , -

  • 27

    ; , - .

    , . , , , , ( . 1.1 ). ( - ). , , - . - , . 1.1, DNO ( ), , DNO DEPT DNO - EMP - . (, - , , . .)

    DNO DNAME BUDGET ENO ENAME DNO SALARY

    DEPT EMP

    D1 Marketing 10MD2 Development 12MD3 Research 5M

    E1 Lopez D1 40KE2 Cheng D1 42KE3 Finzi D2 30KE4 Saito D2 35K

    DEPT.DNO EMP.DNO

    . 1.1.

    , , . 1.1, - , n- . N- n ; - , . n . 1- - , 2- , 3- . .

    . ! 1. ; , , , , , - . , . 1.1 -

    1 , : -- (. - ). - . . 1.1 - .

  • 28 1.

    , -, , {DNO} - DEPT, {ENO} EMP. -, ; , - , , - -, - , .

    ( ) (com malist), . - . xyz (-, ). xyz xyz, - ( ). , A, B C , - :

    A , B , C

    C , A , B

    A , C

    B

    . , , , -, () ( ) () - , , ( ).

    , , - - . , . - , - , , - - . , , - , , , , , {ENO}, {ENAME} EMP. , , {ENO} .

    : , -. . - , ; - , -

  • 29

    ( , ). -, , . , , - , . 1.1, - -, , - , . , , . ( -, , - ; .)

    , - , - - ( ) - . , . 1.1 {DNO} EMP, - - {DNO} DEPT ( - ). -, , EMP , -, , DNO D2, DEPT - , DNO D2, EMP , , .

    (, , ) , - TRUE. , , , SALARY () . , , . - - , ( ). , .

    , , - null-.

    , .

  • 30 1.

    . , , , ; , , - EMP , , D2 DNO, - DEPT DNO. - , - , - , - . , : B A, A .

    , , , - . , - null-; , - . ( , , - .) , - , ( - , ) . - , null- 3 4.

    , null , , - ( , null- , , ). , , E2. , - - SALARY , - EMP, , - , , SALARY null:

    ENO ENAME DNO

    E2 Cheng D1

    SALARY

    , SA-LARY. ! , SALARY , - , . , : - , , - . , , , null.

    EMP, - ( ), , , , -

  • 31

    , , , () .

    , null- . .

    , , -:

    , , - ( MINUS), .

    , - (, r1 MINUS r2, r1 r2 ) - .

    , - . : , (update) - INSERT, DELETE UPDATE ( -). UPDATE, .

    , -, . ; , (MINUS) - , - . , : . - -; , , , , r1 MINUS r2 - r3, r4 . .

    , - : , - . , - ( , , - )1; 6 7 -

    1 - divide. 7 , .

  • 32 1.

    . . 1.2 . : , , ; , - , .

    1

    , -, . , EMP , - DNO D2.

    abc

    xy

    aab

    xyx

    b yc xc y

    a1a2a3

    b1b1b2

    b1b2b3

    c1c2c3

    a1a2a3

    b1b1b2

    c1c1c2

    ()

    . 1.2.

    1 constraint ( ) restriction () - . , , . . .

  • 33

    , () - , . , EMP - ENO SALARY ( ENAME DNO).

    , , - , - . ( - ), , - ; , , 6.

    , , - . ( , , - 6.)

    , , - , .

    , , - , .

    , , - , - , , - - ( , ). : - . , - , - , -; .

    : , , , - . -

  • 34 1.

    , , - ( -) ( -). , - . , 10 11.

    , - , , : - . ( , - , , , - .) . 1.3 .

    SNO PNO QTY

    S1 300S1 200S1 400S1 200

    SNO SNAME STATUSS

    S1 Smith 20S2 Jones 10S3 Blake 30

    CITY

    S4S5

    ClarkAdams

    2030

    LondonParisParisLondonAthens S1

    S1S2S2S3S4S4S4

    P1P2P3P4P5P6P1P2P2P2P4P5

    100100300400200200300400

    SP

    PNO PNAME COLORP

    P1 Nut RedP2 Bolt GreenP3 Screw Blue

    WEIGHT

    P4P5

    ScrewCam

    RedBlue

    12.017.017.014.012.0

    CITY

    LondonParisOsloLondonParis

    P6 Cog Red 19.0 London

    . 1.3.

    .

    S (, -). (SNO) ( , {SNO} ), - (SNAME), ( . 1.3 SNAME ) (STATUS), - , , (CITY).

  • 35

    P (, ). - (PNO) ({PNO} ), (PNAME), (COLOR), (WEIGHT) , , - (CITY).

    SP ( , - ). - (SNO), (PNO) (QTY). , - ({SNO,PNO} , , {SNO} {PNO} , - S P, ). , . 1.3 , S5, .

    , , , . , - . , , . - :

    : ( ) -, , , , - , - .

    , - . , , , , , .

    : - - , .

    . , -: , , , , . .

  • 36 1.

    . , - , , , .

    : , , , - . . -, . , , , - , / , .

    : ( -) , , . ; - , . , , - (, - , . 8).

    :

    ( ) , .

    , .

    , -; , . , - , , - .

    . ( -), , . , , . - ! , , ; - . , - X , Y, .

    , . , ; , , . , , : . S JOIN SP, -

  • 37

    , ; , ( ):

    do for all tuples in S ; fetch S tuple into TNO , TN , TS , TC ; do for all tuples in SP with SNO = TNO ; fetch SP tuple into TNO , TP , TQ ; emit tuple TNO , TN , TS , TC , TP , TQ ; end ; end ;

    . : . .1

    , SQL. - SQL, (- ); -. SQL , - . - , .

    . - , , - ; , - - . , - , ( ) - SQL - . , - : , , , .

    . -, , , , , - - . , -

    1 , - ( ?). , , -, ; , , , / .

  • 38 1.

    , , , , , , - . , , , ; , -, , -, , . , - , , - .

    , ( ) , , - , ; , . (, - .) , -, SQL. : - SQL, . ( , , -, SQL.)

    , , - - . , -, SQL- , . , - , , , - . .

    -, , , . :

    : ( ) - ( ) .

    , (- , , ) . , , .

    , , -, , .

  • 39

    -, - , -.

    , , , - , .

    , , , . , , . - A.

    , - , .

    . - . , . ( -/-), -, . , . 1.3 , -. , , , , , , .

    , , -/-, -, . 1.3, , - , . , STATUS , , INTEGER, . 1.3 -. , - !

    , ( -), . , S, P SP . 1.3 4, 5 3, 5, 6 12. : - . , S - 4 ( S).

    -. , , - . -

  • 40 1.

    SQL, , , , : SQL - . , - -, SQL. , , -, . , - . 1.3 CITY -, , :

    CITY

    LondonParisAthens

    CITY

    LondonParisParisLondonAthens

    ( SQL- - SELECT DISTINCT CITY FROM S. DISTINCT, , . -, , , .)

    , . - , , - ( , {a,b,c} {c,a,b} - , , , ). , , , . , . 1.3 -, , S3, S1, S5, S4 S2, . : , -, , ORDER BY, , , , - . ORDER BY -, .

    , , - . - , - , - . , . 1.3 , , STATUS, SNAME, CITY, SNO, ( , SQL ). , - , SQL:

  • 41

    SNO

    S1S2S3

    CITY

    LondonParisParisLondonAthens

    S4S5

    CITY

    LondonParisParisLondonAthens

    SNO

    S1S2S3S4S5

    ( SQL SELECT SNO, CITY FROM S SELECT CITY, SNO FROM S. , , , , - . ., , - SQL- JOIN 6.)

    , (, , - , 1).1 , - . - - . .

    , : , -, . 1.1 1.3. , , . 1.1 1.3, , - , , , SQL. , , , , , , . , , .

    , - -. - . , Cei nest pas une pipe , , , , .

    , ,

    1 , , - , - , . ., . . - 2.9 2, B.

  • 42 1.

    , - ; - . , , (, - ).

    : , - . :

    .

    ; - , , , . . - , :

    SQL

    ( ) ( )

    .

    , , , , - . 1.3, (, -). , -. , , - - . SQL CREATE TABLE ( SQL , , ). , -, :

    CREATE TABLE S ... ;

    , , . ( ) , - t - . SQL:

    CREATE VIEW SST_PARIS AS SELECT SNO , STATUS

  • 43

    FROM S WHERE CITY = Paris ;

    , , - 1, . , , , , , - -. , - -; , - . - , 9.

    . -:

    , - .

    , - .

    , ! , , . , , , -, - -, ( , -). , . , , -; S SP . - -: , - ( !) , .

    - . , - , - , -

    1 , , - . , - ; , . . 9.

  • 44 1.

    . , , SQL- , , ; - 1, - ( ) - , - . , - SQL ( - SQL ), , . , , , , , , , -, , . , ( - ), - , ( , - ), -. - (, , - . .); () , , . : -. , , SQL .

    - , , , ; , , - , . -, , , , . , , : - .

    - . , :

    DECLARE N INTEGER ... ;

    1 , , SQL- - , , -, . , - .

  • - 45

    N , , - . . , SQL :

    CREATE TABLE T ... ;

    T ; , ( - , SQL, null- -) - , - ( ).

    . 1.3, - . -, , - -. , , , -, -. , S, P SP -, - . , , - - S - -, . 1.3, ( , ) :

    DELETE S WHERE CITY = Athens ;

    :

    SNO

    S1S2S3

    SNAME

    SmithJonesBlakeClarkS4

    STATUS

    20103020

    CITY

    LondonParisParisLondon

    S

    S . -, ( ) ( -) , - -. DELETE - :

    S := S WHERE NOT ( CITY = Athens ) ;

    , : () () . -, .

    SQL, SQL . ( DELETE) Tutorial D, - . Tutorial D

  • 46 1.

    (Hugh Darwen), Databases, Types, and the Relational Model: The Third Manifesto (. D) , - . - - SQL, - SQL.

    INSERT UPDATE . , , - - ; -, .

    , - - . , - , , , , - , 1. , , - , , : - - . - - ( , - ).

    , , - .

    - - - , - . (, , , , - -.) .

    : , - , 3. . - -

    1 , SQL, , , , - .

  • 47

    , , , . - , , - (. ) . , ( ) - ; , .

    : - . . , , - , - , , . ( ; , - .)

    , , 3. : , , , XML-, - , , , , ( ). , , - . .

    , - , -. . , -, ( ):

    , [-, ] - [, ] [ , ,] - [, ].

    , , , , ( - , -). :

    , , -, ( , )

  • 48 1.

    ( , , -) SQL.

    , , , - : , n- , , , - , , , -, , - . , , , , , , .

    , -, , . - -, , . - (, -- ) .

    -, -- . - - .

    , SQL . , -: SQL null- -; - SQL ; SQL - - ( - , ). - . - .

    ( , -, ): , , , , . - : , , ( , - , ). - , , , - . .

    , , SQL- - , ! , -

  • 49

    (, , ), , -, . - . Caveat lector1.

    1.1. ( -

    .) , , , - .

    1.2. . . ?

    1.3. ?

    1.4. ?

    1.5. , , , , - , -, - - . , .

    1.6. .

    1.7. , () ; () -.

    1.8. , , . 1.1 1.3, , . .

    1.9. ( , - .) - ? ? ? ( , - . , .)

    1.10. . - .

    1.11. : -, , , - ,

    1 (.). . .

  • 50 1.

    . , -, , - , . . , .

    1.12. - : [] - --. - , . . ?

    1.13. CREATE TABLE SQL- .

    1.14. SQL- IN SERT :

    INSERT INTO SP ( SNO , PNO , QTY ) VALUES ( S5 , P6 , 250 ) ;

    . : , , , .

    1.15 ( ). SQL-- UPDATE :

    UPDATE S SET STATUS = 25 WHERE CITY = Paris ;

    . ( , - . . . 7.)

    1.16. , SQL - . ? , ? : - INSERT / DELETE / UPDATE? , ? ?

    1.17. , , -, - ? ( , . .)

  • 2.

    . -, , , , ( ). - , -, , - SQL. , SQL - , , , - ; , - SQL - (, , - ). - .

    ( ) - . - , -, ( , , - ). , STATUS - S (-) INTEGER. - , - - S, STATUS INTEGER, , , , STATUS INTEGER, STATUS .

    . , ( ,

  • 52 2.

    ) , . , - , . - -, :

    ( , , - , ) , .

    , - - , - - .

    , , , , . - BOOLEAN ( ). BOOLEAN , , , - TRUE FALSE. , - , , INTEGER ( ), FIXED ( - ) CHAR ( ). -: SQL , SQL.

    , - , - , . . , - , - . , , , . , - :

    , .

    , .

    - , , -

  • 53

    (SNO) - S SP - , , - SNO. (: .) -, , (PNO) - P SP ( ), PNO. , ; , - , , .

    , , (?), - , . , ( - WHERE SQL-), , :

    SP.SNO = S.SNO /* */

    , , (?), :

    SP.PNO = S.SNO /* */

    ? - , . , , 1 (, . .), - . , , SQL-, - , - :

    SELECT S.SNO , S.SNAME , S.STATUS , S.CITY FROM SWHERE NOT EXISTS ( SELECT * FROM SP WHERE SP.PNO = S.SNO ) /* */

    ( , , -. . 2.23 .)

    , . , , , WHERE SP.SNO = S.SNO, , WHERE SP.PNO = S.SNO. ( ),

    1 = . , ? ( , - , , Oracle, , . , , ?)

  • 54 2.

    , , , , , , , .

    SQL- , ; , - , , - . , , - . ( ?)

    : , - SP.PNO = S.SNO, . , - , , , - , . , , , , - . , , - , , , . , , -. - - , - : , - ? , . , - (- -). , , , ; , - .

    , (domain check override DCO). , - , - . SQL , IGNORE DOMAIN CHECKS, SQL-, -, :

    SELECT ... FROM ... WHERE CUSTNO = SNO IGNORE DOMAIN CHECKS

    - ( , ).

    -, . :

  • 55

    SELECT ... | SELECT ... FROM P , SP | FROM P , SPWHERE P.WEIGHT = SP.QTY | WHERE P.WEIGHT - SP.QTY = 0

    ( ), - , , , . ? , ! The Relational Model for Database Management Version 2 (Addison-Wesley, 1990), 47 , [] , ; - ( -), .

    . , - P.WEIGHT = SP.QTY P.WEIGHT SP.QTY = 0 . - ; , -, , . , - , . ( , - , . , P.WEIGHT = SP.QTY , P.WEIGHT SP.QTY = 0 .)

    . - ( WHERE - SQL):

    S.SNO = X4 P.PNO = X4 S.SNO = P.PNO

    , , ( TRUE), . , , , : , a, b c , a = c , b = c , - a = b, , ! ?

    , S.SNO P.PNO - SNO PNO, , ; , SNO PNO - . , - CHAR, , 1, , ; ( , )1. , ,

    1 (representation) - , .

  • 56 2.

    , -, , , CHAR (. ? ). , , ( , SNO ).

    , - (- ?). , , , - 1. , SNO ( , , SNO) SNO, CHAR. :

    SNO(S1)

    SNO - (, , - S1). :

    PNO(P1)

    PNO - (, , P1). -, SNO PNO CHAR - SNO PNO, .

    S.SNO = X4. , - ( , SNO CHAR). , (, , ). , , SNO, CHAR SNO. - - CHAR , :

    S.SNO = SNO(X4)

    , .

    P.PNO = X4 :

    1 , SQL ( ) - , , SQL , , - SQL . , , SQL- SELECT.

  • 57

    P.PNO = PNO(X4)

    S.SNO = P.PNO ( , ) , , - : .

    (coercion). , X4 - SNO, PNO. - SQL SQL .

    . - , SNO PNO, - THE_, SNO PNO ( ), -1. , THE_ - SNO PNO THE_SC THE_PC . S.SNO P.PNO , , , . - :

    THE_SC ( S.SNO ) = THE_PC ( P.PNO )

    : , - .

    , , , - THE_, : () () . , -, . -, ; , ( , - , ).

    , , , , - . -

    1 - , SQL , ( ) - THE_ SQL , , THE_ SQL . , THE_; . - POINT ?.

  • 58 2.

    , - , () - () , ( ). , - , -, ; - , , - , , . -, , :

    P.WEIGHT * SP.QTY

    P.WEIGHT + SP.QTY

    , -, ( , , ). , , , - ( ?).

    , - (=). - . , -, , . , (. ?), - = , ! , T v, , v - , T.

    , = : v1 v2 , - v1 = v2 TRUE, v1 v2 , FALSE . (, v1 v2 , v1 = v2 , v1 v2 , v1 v2.)

    , , - , . ( 1). - 1 , 1 , - ( ) - , , -

  • 59

    . -: ?

    6 (The Relational Model for Data-base Management Version 2) - , - ( ). - , / . , - ? ? LIKE, SUBSTR (), || () , , -. ? ?

    , -, :

    , - ( , , - , , , , -).

    , - .

    , // // .

    .

    . . 2.1. R1 - ; -, - - , - SNO/PNO. , , , R1 .

    , R1 R2, -, - - ( PNO R2, , -, -). , R2 1; - , , , -, 1 ( , ?).

  • 60 2.

    SNO PNO

    R1

    S2 P1S2 P2S3 P2S4 P2S4 P4

    SNO PNO

    R2

    S2 P1, P2S3 P2

    SNO PNO_SET

    R3

    S2 {P1, P2}S3 {P2}

    S4 P5

    S4 P2, P4, P5 S4 {P2, P4, P5}

    . 2.1. R1, R2 R3

    , , R2 1. R2 R3. , R3 1! ( , , , , . , -, . R3 -.) :

    -, , PNO_SET -, PNO_SET, , , - : -, , - .

    - ( , -), , {P2,P4,P5}, - , , . , , . , 1, , , - .

    , ; , . - , , , . , . (-, , ) - : , (, ), . , -, , -. , .

  • 61

    R3. . 2.1 PNO_SET . -, (. . 2.2, - PNO_REL). ? , , 1. , - , , . . , - ( , ) , !

    PNO_REL . 2.2 , - (relation valued attribute RVA). - RVA- 7, , SQL . (, , - RVA-, -. , SQL -, - , - , - , . -, , , - , SQL- - , , - SQL.

    . , RVA- , - , , -. - ; (, , ), , , , , - , , , XML- , . , , , .

    , , - ,

    1 , , , - , , . , , , , , .

  • 62 2.

    , , - . - , - . , -: - ( , , ), , , -. , - - , , .

    SNOR4

    S2

    PNO_REL

    PNO

    P1P2

    PNO

    P2P4P5

    S4

    S3 PNO

    P2

    . 2.2. R4 ( R3)

    ? , . ? , - 1 , : - , , -, XML-, - . . :

    , - , , . : - , ( ). , , . , -, , , ? -

    1 , , . : .

  • ? 63

    , , , , -, , . , , , - , .

    , , , - , . , , -, V T, , v, V, - T.

    , , , - ( , ). ,

    ( a / b ) + ( x - y )

    +, .

    , , , - , , , - , - . Op T , Op T.1 , - ; ; XML- - XPath-; -. (:=) (=). , , - , -, , - - , . -

    1 -. : , T, - T, T. , , SNO CHAR, , ; , (||) SNO. ( -, .)

  • 64 2.

    : , .

    , , , , -. , , INTEGER:

    :=, - .

    =, ,

  • ? 65

    , POINT -. Tutorial D - SQL, SQL - , -, REFLECT, P - (x, y) - ( x, y):

    1 OPERATOR REFLECT ( P POINT ) RETURNS POINT ; 2 RETURN POINT ( - THE_X ( P ) , - THE_Y ( P ) ) ; 3 END OPERATOR ;

    :

    1 , REFLECT, - P POINT POINT ( , - POINT).

    2 , . RETURN. , POINT; - , X Y . - THE_; X Y -, P, - , 1.

    3 .

    , . - , - , . , INTEGER , , - , - :=, =, + . . ( -, , ).

    . -, , , , -

    1 , : (. 2.5 - ). , POINT, - , ( , ).

  • 66 2.

    . , -, ( , - , ); , POINT(X,Y), POINT(1.0,2.5) POINT, POINT . , - , . (, , , - .)

    . - , , - , . , , , , T , - T. :

    INTEGER ; , , . . INTEGER , .

    ; ; , -, . . -.

    , . , , , -, -. - - . - ( ); , , - , , - , , .

    . Tutorial D - S (); , :

    1 VAR S BASE 2 RELATION { SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR } 3 KEY { SNO } ;

  • 67

    :

    VAR 1 , - S, BASE , - - .

    2 . RELATION , ; - , (, 1 , -/-). , , . .

    3 , {SNO} -- .

    , , :

    RELATION { SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR }

    . - , ( RELATION). , ; - () ( ) () , . , - ARRAY, - . - TUPLE RELATION. - TUPLE:

    VAR S_TUPLE TUPLE { STATUS INTEGER , SNO CHAR , CITY CHAR , SNAME CHAR } ;

    S_TUPLE , - S ( - , , ). , , , ( , S1), - - S, - , , - S_TUPLE. Tutorial D - :

    S_TUPLE := TUPLE FROM ( S WHERE SNO = S1 ) ;

    : . -, S_TUPLE, , - , -

  • 68 2.

    , , - . : - , . A .

    , ( ) t r, t. : t , r ( -).

    :

    , - ( ), , - . - , . ( - 1.)

    , , , ( - ). . - THE_ ; , ( - , THE_ - ).

    . - ; , , .

    SQL SQL. , 1:

    BOOLEAN NUMERIC(p,q) DATECHARACTER(n) DECIMAL(p,q) TIMECHARACTER VARYING(n) INTEGER TIMESTAMPFLOAT(p) SMALLINT INTERVAL

    1 , , - .

  • SQL 69

    , - , : CHAR CHARACTER, VARCHAR CHARACTER VARYING, INT INTEGER; - , , SQL, Tutorial D, , - . :

    , - . : , , - , THE_.

    . :

    SET = ;

    - (, FETCH). : , , ref exp reference () expression () .

    - 1. - (, -, , ).

    BOOLEAN , - SQL, - , -. , - WHERE, ON HAVING, BOOLEAN . BOOLEAN, . .

    , - (CLOB), (BLOB), (NCHAR . .) ( , XML). .

    1 , . -, CHAR VARCHAR = TRUE, , , (. SQL). , , CHAR VARCHAR, = TRUE, ; , , null ( ).

  • 70 2.

    , , SQL , , SQL , - , - . , , , - ( ).

    SQLSQL ( -, ). :

    BOOLEAN BOOLEAN BOOLEAN.

    - - ( - CHAR VARCHAR).

    ( - FLOAT, NUMERIC, DECIMAL, INTEGER SMALLINT).

    , , - , .

    , . , , INTEGER FLOAT ( INTEGER FLOAT -). - : , . SQL : -, , , ! , , SQL- T1 T2, . 2.3. , - X T1 INTEGER, T2 NUMERIC(5,1), Y T1 NUMERIC(5,1), T2 INTEGER. SQL-:

    SELECT X , Y FROM T1 UNION SELECT X , Y FROM T2

  • SQL 71

    . 2.3, X Y - (. ) NUMERIC(5,1), INTEGER NUMERIC(5,1). , - , T1, T2, -, - .1

    X

    00

    T1 Y

    1.02.0

    X

    0.00.0

    T2 Y

    01

    1.0 2

    X

    0.00.00.01.0

    Y

    1.02.00.02.0

    . 2.3.

    : - . ( , , SQL -.) - SQL -; - , , . - , - CAST . ( - UNION):

    SELECT CAST ( X AS NUMERIC(5,1) ) AS X , Y FROM T1 UNION SELECT X , CAST ( Y AS NUMERIC(5,1) ) AS Y FROM T2

    , -, , SQL, . ( , , .) :

    tx - , , t, -

    1 , , , -, . , , , . SQL , , , , , -, (UNION), , - ( ), , - , , SQL , .

  • 72 2.

    tx, r, t r. : SQL- . 12, , , - .

    tx , , t, tx, , v, t - , v. : , , - SQL (. 7).

    rx rx sq - ALL ANY ( , >ALL

  • SQL 73

    S. C : - a < b, a = b a > b TRUE, FALSE ( C).

    . . , - PAD SPACE ( ) NO PAD ( -). , AB AB ( - ) - . , -, , PAD SPACE. : PAD SPACE, - NO PAD. (, , PAD SPACE / NO PAD , - .)

    , a = b - TRUE , a b . , CASE_INSENSITIVE, -. , , - .

    , , SQL v1 = v2 TRUE , v1 v2 (, -, ). - , . , - , , (-, MATCH, LIKE, UNIQUE, UNION JOIN), , . -, CASE_INSENSITIVE PAD SPACE. , PNO P SP - P PNO P2, - SP p2 , - SP P, - p .

    , , -, UNION, INTERSECT, EXCEPT, JOIN, GROUP BY DISTINCT, , , - . , SQL - . - SQL, - , SQL -

  • 74 2.

    , ; , - . , Z T CASE_INSENSITIVE, SELECT MAX(Z) FROM T ZZZ, zzz, T .

    SQL, , - ( - 12). , - (. 8), ( - , ). , , - SELECT , - ! : - .

    SQL - :

    VAR S_TUPLE TUPLE { STATUS INTEGER , SNO CHAR , CITY CHAR , SNAME CHAR } ;

    , TUPLE{...} - TUPLE. SQL ROW ( ). SQL :

    DECLARE S_ROW /* SQL */ ROW ( SNO VARCHAR(5) , SNAME VARCHAR(25) , STATUS INTEGER , CITY VARCHAR(20) ) ;

    , SQL 1; 24 (= 4 * 3 * 2 * 1) , (!).

    SQL . , , - Tu to rial D:

    1 , SQL , ROW ( ), - , .

  • SQL 75

    SET S_ROW = ( S WHERE SNO = S1 ) ;

    , , , , , (. SQL).

    SQL- UPDATE (. 3).

    : , SQL ( ) TABLE! - RELATION, . CREATE TABLE - , -. , , - :

    VAR S BASE RELATION { SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR } KEY { SNO } ;

    SQL:

    CREATE TABLE S ( SNO VARCHAR(5) NOT NULL , SNAME VARCHAR(25) NOT NULL , STATUS INTEGER NOT NULL , CITY VARCHAR(20) NOT NULL , UNIQUE ( SNO ) ) ;

    , , TABLE. ( , -, UNIQUE(SNO) - , , SNO SNAME.) - - S ( SQL), , ROW (SNO VARCHAR(5), SNAME VARCHAR(25), STATUS INTEGER, CITY VARCHAR(20)).

    - , SQL , - . , -, TT , - T, TT, - T ! ,

  • 76 2.

    , SQL , 1. , , - , . -, , , , - SQL; , - , ( REF). , , SQL; , - - . : -, , .

    , SQL - . . , , ; , - , - . , , - ! - , , , , , , ( 1, , , ).

    , : , -, , . -, , , . , - , , ( , -

    1 , , . - ( , ), - , -. : () V, V V; () v ( ), - v , - v ( ).

  • 77

    ). , , -, . , : .

    , , - , - . , , , , .

    , , . , . - , r T, r T ( !). - . - , ; - - , . ( - , - .) , , .

    2.1. ? -

    ?

    2.2. ? ?

    2.3. THE_?

    2.4. : - ?

    2.5. ( 1, - ), :

  • 78 2.

    , -.

    2.6. ? ?

    2.7. -?

    2.8. ?

    2.9. . , ?

    2.10. X . X? , X - ?

    2.11. - REFLECT ( ?) , - Tutorial D , .

    2.12. Tutorial D , x y - f(x) g(y), f g .

    2.13. . - , - - - .

    2.14. Tutorial D SQL - - P SP - . SQL, Tutorial D, , -. , - P ( -) ?

    2.15. , - 1 (. 1.1) - :

    DNO : DNO DNAME : NAME

  • 79

    BUDGET : MONEY ENO : ENO ENAME : NAME SALARY : MONEY

    , LOCATION CITY ( ). ? , , ; , .

    a. LOCATION = London

    b. ENAME = DNAME

    c. SALARY * 5

    d. BUDGET + 50000

    e. ENO > E2

    f. ENAME || DNAME

    g. LOCATION || burg

    2.16. , - . , - -, - . .

    2.17. , . , , . ? SQL?

    2.18. - = . , SQL , = ( , , , - ), , -, . ?

    2.19. , , v1 = v2 TRUE - , Op v1 - Op v2 Op. , - SQL . -? ?

    2.20. -?

  • 80 2.

    2.21. , , v V V = v TRUE (. 5). SQL ( -). ? - ?

    2.22. , , - ?

    2.23. SQL- SELECT, - , , , , . ?

    2.24. , - RVA- - .

    2.25. ?

    2.25. , = . SQL?

  • 3. ,

    - , , , . . , SQL ( ) , - SQL . , , , - . , - , , .

    ? ?

    SNO

    S1

    SNAME

    Smith

    STATUS INTEGER

    20

    CITY CHAR

    London

    CHAR CHAR

    , , ( - , , ). 1 , - , . , - , - ( ?):

  • 82 3. ,

    STATUS INTEGER

    20

    SNAME

    Smith

    CITY CHAR

    London

    SNO

    S1

    CHAR CHAR

    , , , , , . , - , :

    : T1, T2, ..., Tn (n 0), . - Ti Ai; n -/- . - vi Ti; n / - . , n - , t, - ( -) A1, A2, ..., An. n - t; 1 , 2 , 3 -, , , n n-. , n , - t.

    , , S1, :

    : 4. , 4.

    : CHAR, CHAR, INTEGER, CHAR.

    : SNO, SNAME, STATUS, CITY.

    : S1, Smith, 20, London. , , - ; , , , .

    , - 2, SNO SNO ( -), CHAR. , SNO S1 S1; - SNO(S1). SNO SNO, CHAR! , , - . (, 2 , SNO(S1) SNO.)

  • ? 83

    : :

    SNO SNAME STATUS INTEGER CITY CHARCHAR CHAR

    , - . :

    SNOSNAMESTATUS INTEGER CITY CHARCHAR CHAR

    : , ? (: 4 * 3 * 2 * 1 = 24)

    , ; , , ( 2), , , . Tutorial D TUPLE{H}, {H} -. , :

    TUPLE { SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR }

    ( ).

    : . , -, - (-, , ). (- Tutorial D):

    TUPLE { SNO S1 , SNAME Smith , STATUS 20 , CITY London }

    ( ). , Tutorial D -/-, ; , .

    ( , , ):

    TUPLE { SNO SX , SNAME James , STATUS STX , CITY SCX }

    , SX, STX SCX CHAR, INTEGER CHAR .

    , Tutorial D TUPLE, - -/, -, . -, TUPLE Tutorial D : , , , . -

  • 84 3. ,

    RELATION (. ).

    , - . null-. , , , - ( ) , , 1, null , SQL , , null-. : - null- , , null1.

    , null-, ; , null-. - .

    -, . (: - A A B, , A B , , . , - , . , -.) - S1, , {SNO,CITY} , ( 2):

    SNO CITY CHAR

    S1 London

    CHAR

    , TUPLE {SNO CHAR, CITY CHAR}. :

    SNO CHAR

    S1

    1 , - null- . . .

  • 85

    1 TUPLE {SNO CHAR}. , - S1, - . Tutorial D - SNO FROM t ( t , - SNO). SQL - : t.SNO. : 2 , - t r, t -, . , v t, , ; , .

    , , - . , , , , , - , - . TUPLE{} ( ); 0-, , 0. . , , , , , , . TABLE_DUM TABLE_DEE.

    , , . (, 2 , - = , .) , , ( , , ). , , - , - . :

    : tx ty , A1, A2, ..., An , i (i = 1, 2, ..., n) vx Ai tx vy Ai ty.

    ( , - -), , .

    , , 0- - . - 0-, - 0-.

  • 86 3. ,

    , , -. , (-, ), - .

    SQL SQL , ; , - , - , -, TUPLE Tutorial D. ( , - , 2.) - , , , : . -, ROW(1,2) ROW(2,1) - , SQL -. : ROW - SQL .

    - SQL ( ) , . , , ( -, SQL ):

    ( S1 , Smith , 20 , London )

    , ( ) - Smith; , SNAME, , .

    , SQL , 0- .

    2, SQL - 1. , ( -) SQL- UPDATE. , - UPDATE

    UPDATE S SET STATUS = 20 , CITY = London WHERE CITY = Paris ;

    1 , , , . - SQL .

  • SQL 87

    ( ):

    UPDATE SSET ( STATUS , CITY ) = ( 20 , London ) WHERE CITY = Paris ;

    , - SQL, ( , ) - , , -. SELECT, WHERE - :

    SELECT SNO FROM S WHERE ( STATUS , CITY ) = ( 20 , London )

    SELECT :

    SELECT SNO FROM S WHERE STATUS = 20 AND CITY = London

    SELECT SNO FROM S WHERE ( STATUS , CITY ) ( 20 , London )

    :

    SELECT SNO FROM S WHERE STATUS 20 OR CITY London

    OR !

    , , SQL , -:

    SELECT SNO FROM S WHERE ( STATUS , CITY ) > ( 20 , London )

    :

    SELECT SNO FROM S WHERE STATUS > 20 OR ( STATUS = 20 AND CITY > London )

    - 1, :

  • 88 3. ,

    SELECT SNO FROM S WHERE ( STATUS ) = ( 20 )

    . - , , :

    SELECT SNO FROM S WHERE STATUS = 20

    WHERE - (STATUS 20 ). , , SQL , , ; - STATUS = 20 - ( ).

    : ( ), =; , , - , . ( , - SQL, - , .)

    ? . :

    SNO SNAME STATUS INTEGER CITY CHAR

    S1 Smith 20 LondonS2 Jones 10 ParisS3 Blake 30 ParisS4 Clark 20 LondonS5 Adams 30 Athens

    CHAR CHAR

    :

    : {H} , t1, t2, ..., tm (m 0) {H}. r, {H} {t1, t2, ..., tm}, - ( ) A1, A2, ..., An, A1, A2, ..., An , - {H}. r {H}; r - (, , ),

  • ? 89

    . r {t1, t2, ..., tm}. m r.

    - . , , . , n- (relationship) n ( - ), , - (relation). , - , (relating) - , - . , , - , .

    , , , , . Tutorial D RELATION{H}, {H} , :

    RELATION { SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR }

    ( .) , - - - , :

    RELATION { TUPLE { SNO S1 , SNAME Smith , STATUS 20 , CITY London } , TUPLE { SNO S2 , SNAME Jones , STATUS 10 , CITY Paris } , TUPLE { SNO S3 , SNAME Blake , STATUS 30 , CITY Paris } , TUPLE { SNO S4 , SNAME Clark , STATUS 20 , CITY London } , TUPLE { SNO S5 , SNAME Adams , STATUS 30 , CITY Athens } }

    . ( , ):

    RELATION { tx1 , tx2 , tx3 }

    , tx1, tx2 tx3 - . , Tutorial D RELATION, - .

    , , 1, , , . , -, :

  • 90 3. ,

    -, (), - .

    null-, - , , , - null-.

    , , . .

    : ( , ). , - , ( - ). , , . - - SP , -, ( - , - ; , - ):

    SNO PNO QTY

    , , , . -, ( , ).

    , :

    SNO

    S1

    PNO

    P1

    QTY

    300

    (- , 1). , - . Tutorial D - TUPLE FROM rx ( rx , - 1, RELATION {TUPLE {SNO S1, PNO P1, QTY 300}}, - ). , SQL

  • n- 91

    : () tx , - ( , ), () , t, tx, r () - r. :

    SET S_ROW = ( S WHERE SNO = S1 ) ;

    , t - r. Tutorial D :

    t r

    TRUE, t r, FALSE . - , t r t r. , , , SQL- IN , SQL IN , , - ( ). ( , - ):

    SELECT SNO , SNAME , STATUS , CITY FROM SWHERE SNO IN ( SELECT SNO FROM SP )

    n- , , . ( , .) , - , . , 1 , , , - - . , , - -, .

    , , , - , , . . r n , r - n- ( ). , 4-

  • 92 3. ,

    , -. , n-, .1 ( ): - .

    , , =; , - rx ry T, , , - , . - ; , , - rx ry ( , , - rx, ry) - ry ( , rx, - ry, ry , - rx). - Tutorial D:

    S { CITY } = P { CITY }

    CITY, - CITY, TRUE, , FALSE . -, ( ) : , , , .

    :

    S { SNO } SP { SNO }

    . : , -?

    (-), () ( ). - = rx - ; , , rx. :

    IS_EMPTY ( rx )

    , TRUE, , rx, , FALSE -

    1 , , - ( , - ), , , .

  • TABLE_DUM TABLE_DEE 93

    . - ( 8). :

    IS_NOT_EMPTY ( rx )

    NOT (IS_EMPTY(rx)).

    TABLE_DUM TABLE_DEE , , , -, , ( 0-), , , . , , , ? RELATION{}, .

    , r 0. - ? : . -, r ( ) , . -, r , 0-. 0-! , , 0- - , r . - , -: , . ( , , - -).

    ? , . , ? ( , , ), - ? , , , : TABLE_DUM TABLE_DEE, DUM DEE (DUM , DEE ).1 : FALSE () DUM

    1 , . -, , -, , : Tweedledum Tweedledee , ( . -- --). -, , , , , ! , - .

  • 94 3. ,

    TRUE () DEE. . : 5 6.

    , , , : DEE yes E, DUM no .

    - DUM DEE, . , : ( TABLE_DEE) , - . , ; , ( , ). , TABLE_DEE. SQL SQL 0-, , ( -), TABLE_DUM TABLE_DEE.

    SQL

    SQL, (, CREATE TABLE). 5.

    2 , SQL ; SQL ( , ), . , SQL , RELATION, - , , ARRAY, MULTISET - 3 ROW. , - , - - . :

    VALUES ( 1, 2 ), ( 2, 1 ), ( 1, 1 ), ( 1, 2 )

    ( - , SQL ) - ! . . , SQL- ; , - ( ) , .

    - :

  • SQL 95

    VALUES ( S1 , Smith , 20 , London ) , ( S2 , Jones , 10 , Paris ) , ( S3 , Blake , 30 , Paris ) , ( S4 , Clark , 20 , London ) , ( S5 , Adams , 30 , Athens )

    , , ( -, , - - S, . 1.3), :

    1. , VALUES, , . ( -, i- - - , , - i- ).

    2. , .

    , . , SQL, , - , - (, ). -, , - (?) .

    ? - , 5 7. , SQL , . , , SQL:

    NOT EXISTS ( SELECT CITY FROM S EXCEPT SELECT CITY FROM P ) AND NOT EXISTS ( SELECT CITY FROM P EXCEPT SELECT CITY FROM S )

    S{SNO} SP{SNO}:

    EXISTS ( SELECT SNO FROM S EXCEPT SELECT SNO FROM SP ) ANDNOT EXISTS ( SELECT SNO FROM SP EXCEPT SELECT SNO FROM S )

  • 96 3. ,

    SQL () ( ) () ( ). SQL , . -, , , CREATE TABLE CREATE VIEW , - 1. : AS, , () () . :

    SELECT DISTINCT SNAME , Supplier AS TAG FROM S

    SELECT DISTINCT SNAME , 2 * STATUS AS DOUBLE_STATUS FROM S

    SELECT MAX ( WEIGHT ) AS MBW FROM P WHERE COLOR = Blue

    CREATE VIEW SDS AS SELECT DISTINCT SNAME , 2 * STATUS AS DOUBLE_STATUS FROM S ;

    SELECT DISTINCT S.CITY AS SCITY , P.CITY AS PCITY FROM S , SP , P WHERE S.SNO = SP.SNO AND SP.PNO = P.PNO

    SELECT TEMP.* FROM ( S JOIN P ON S.CITY > P.CITY ) AS TEMP ( SNO , SNAME , STATUS , SCITY , PNO , PNAME , COLOR , WEIGHT , PCITY )

    , , . , -

    1 , SQL -. , - ; , , , -, . , -, (. 12). , , .

  • SQL 97

    (, WHERE HAVING) :

    SELECT MAX ( WEIGHT ) FROM P WHERE COLOR = Blue

    , , VALUES.

    : , - . -, 6 , UNION , - (, , ); . - , -, ! , SQL , SQL. : - , . ( - , , SNO, , , SNO SNUM .) , - , .

    , -, , . , , - EMP, , - . - -, ENO MNO. - , :

    ( SELECT ENO , MNO FROM EMP ) AS TEMP1 NATURAL JOIN ( SELECT ENO AS MNO , ... FROM EMP ) AS TEMP2/* ... EMP, ENO MNO */

    SQL , - , - ( , - - ). - :

    - , , - .

  • 98 3. ,

    , - .

    , (, , , ).

    , , SQL . (, SQL - .) , , SQL - , ( ); . : SQL , . , SQL - , :

    SELECT *

    JOIN, UNION, INTERSECT, EXCEPT , CORRESPONDING (. 6)

    , , - (range variable) (. 12)

    , , CREATE VIEW (. 9)

    INSERT,

    ALL ANY, 1 (. 11)

    VALUES

    . , , , , , . , , , - , ( , - TABLE_DUM TABLE_DEE). , SQL , . ( , ) SQL. .

  • 99

    3.1. , ,

    , , , , .

    3.2. , , : () , () .

    3.3. Tutorial D () - -, () - . - SQL, .

    3.4. Tutorial D - . SQL, .

    3.5. ( , 1.8 - 1, , .) . , .

    3.6. ( ; - -?). () , ; () , (RVA-).

    3.7. () RVA- -, () RVA-. -, , RVA-. RVA- - , , , RVA-.

    3.8. TABLE_DUM and TABLE_DEE. SQL?

    3.9. TABLE_DEE TRUE, TABLE_DUM FALSE. , BOOLEAN? , DEE DUM , - . , -- 0?

    3.10. ( - ) SQL:

    VALUES ( 1, 2 ), ( 2, 1 ), ( 1, 1 ), ( 1, 2 )

    VALUES ( ( 1, 2 ), ( 2, 1 ), ( 1, 1 ), ( 1, 2 ) )

  • 100 3. ,

    3.11. SQL?

    SELECT SNO FROM S WHERE ( NOT ( ( STATUS , SNO )

  • 4. , null-

    ():

    -, (), - .

    null-, - , null-.

    , , , - . . : -, SQL, , , SQL, ( , -). , , .

    ? , - ( ) . , .1 , , :

    1 , - ( , ) , , , , 1 . .

  • 102 4. , null-

    1. , , , ( -).

    2. , , . - - exp1 (, , ) - exp2 , - , exp2 ( , ). : , - - .

    . , , , -, , SQL - - , -. () , . 4.1. , ( ). : , , , , , -

    PNO PNAMEP

    P1 ScrewP1 ScrewP1 ScrewP2 Screw

    SNO PNOSP

    S1 P1S1 P1S1 P2

    . 4.1.

    , : - P (P1,Screw), , , , ? - , ? - :

    , -. , - - , , - . , , , Double Trouble, Double Trouble (. D).

  • ? 103

    , -, 1.

    , - - , . ( , - , - , , , . , - .) - , , - , , P - (P1,Screw), , , - - -. , () ?

    : , - (screw), S1, . SQL :

    1. SELECT P.PNO FROM P WHERE P.PNAME = Screw OR P.PNO IN ( SELECT SP.PNO FROM SP WHERE SP.SNO = S1 )

    : P1 * 3, P2 * 1.

    2. SELECT SP.PNO FROM SP WHERE SP.SNO = S1 OR SP.PNO IN ( SELECT P.PNO FROM P WHERE P.PNAME = Screw )

    : P1 * 2, P2 * 1.

    3. SELECT P.PNO FROM P, SP WHERE ( SP.SNO = S1 AND SP.PNO = P.PNO ) OR P.PNAME = Screw

    1 - , - : !, : , .

  • 104 4. , null-

    : P1 * 9, P2 * 4.

    4. SELECT SP.PNO FROM P, SP WHERE ( SP.SNO = S1 AND SP.PNO = P.PNO ) OR P.PNAME = Screw

    : P1 * 8, P2 * 4.

    5. SELECT P.PNO FROM P WHERE P.PNAME = Screw UNION ALL SELECT SP.PNO FROM SP WHERE SP.SNO = S1

    : P1 * 5, P2 * 2.

    6. SELECT DISTINCT P.PNO FROM P WHERE P.PNAME = Screw UNION ALL SELECT SP.PNO FROM SP WHERE SP.SNO = S1

    : P1 * 3, P2 * 2.

    7. SELECT P.PNO FROM P WHERE P.PNAME = Screw UNION ALL SELECT DISTINCT SP.PNO FROM SP WHERE SP.SNO = S1

    : P1 * 4, P2 * 2.

    8. SELECT P.PNO FROM P WHERE P.PNAME = Screw OR P.PNO IN ( SELECT SP.PNO FROM SP WHERE SP.SNO = S1 )

    : P1 * 3, P2 * 1.

    9. SELECT DISTINCT SP.PNO FROM SP WHERE SP.SNO = S1 OR SP.PNO IN ( SELECT P.PNO

  • ? 105

    FROM P WHERE P.PNAME = Screw )

    : P1 * 1, P2 * 1.

    10. SELECT P.PNO FROM P GROUP BY P.PNO, P.PNAME HAVING P.PNAME = Screw OR P.PNO IN ( SELECT SP.PNO FROM SP WHERE SP.SNO = S1 )

    : P1 * 1, P2 * 1.

    11. SELECT P.PNO FROM P, SP GROUP BY P.PNO, P.PNAME, SP.SNO, SP.PNO HAVING ( SP.SNO = S1 AND SP.PNO = P.PNO ) OR P.PNAME = Screw

    : P1 * 2, P2 * 2.

    12. SELECT P.PNO FROM P WHERE P.PNAME = Screw UNION SELECT SP.PNO FROM SP WHERE SP.SNO = S1

    : P1 * 1, P2 * 1.

    ( , -? , , - . - .)

    , , -. (, , - ; , - .) , - , - , - .

    , : - -, . , -

  • 106 4. , null-

    1 3 -, . , - . - .

    -, , .

    , .

    . , , , -, , .

    , , -, , - , . :

    -.

    , , -.

    , .

    - , - , DISTINCT, (, , !). - .

    : -, . , - , , - , , - . -, ; , SQL . , - , -

  • SQL 107

    . , , , (, ):

    SELECT SNO | SELECT SNOFROM S | FROM S NATURAL JOIN SP WHERE SNO IN | ( SELECT SNO | FROM SP ) |

    , . (: ?) . 4.1 , ; , , .

    , , ( - (Jonathan Gennick), ): , (. 3), -, n- , -, .

    . , T -. , ! , -, , , T ? (, SQL .) - , ? , , .

    SQL , - SQL , , . , (. 5), . , - , SQL- , . - , :

    SELECT ALL

    UNION ALL

    VALUES (. . )

    VALUES . 3. ALL , - ( DISTINCT) :

  • 108 4. , null-

    SELECT, SELECT.

    , , - (UNION, INTERSECT EXCEPT ).

    , SUM, -.

    DISTINCT UNION, INTERSECT EXCEPT; ALL.

    ; ALL, , , , (. 7). - , , - , SQL -. , -: DISTINCT, , ALL. - .

    . ? , :

    , , - DISTINCT , , SQL. - DISTINCT. : , SQL, , SELECT DISTINCT - . , () , , -, - , SQL, () , , , DISTINCT.1 SELECT DISTINCT SNO FROM S ..., DISTINCT . EXISTS (SELECT DISTINCT ...) IN (SELECT DISTINCT ...), DISTINCT . SELECT DISTINCT SNO FROM SP ... GROUP BY SNO, DISTINCT . SELECT DISTINCT ... UNION

    1 , SELECT DISTINCT , SELECT ALL, DISTINCT . , , - , , DISTINCT , -, ( , -).

  • null-? 109

    SELECT DISTINCT ... . , -, , -, DISTINCT -, ? SQL , - , ?

    . - , - ( , ) - , , . , , , . - , -.

    , ( ) : --, , , SQL , - . -, , , , -, . -, - , DISTINCT (, , ). ALL!

    null-? ? - , , . - , null- . , . , -, :

    1. , , -, null, UNKNOWN, TRUE FALSE. , null - , A -, , A > B, B. , (3VL): null , SQL, , . (, , 2VL.)

    2. , , , NOT, AND OR (T = TRUE, F = FALSE, U = UNKNOWN):

  • 110 4. , null-

    p NOT p

    T FU U

    p p AND q

    T TT U

    q

    TU

    T FU T

    FU

    F T

    p OR q

    TTTT

    U U UU F FF T FF U FF F F

    p

    TT

    q

    TU

    T FU TU UU FF TF UF F

    UUTUF

    , , NOT UNKNOWN, UNKNOWN; AND UNKNOWN, UNKNOWN, UNKNOWN, TRUE; OR UNKNOWN, UNKNOWN, UNKNOWN, FALSE.

    . - , , - , , , . () , - . 4.2, P1 CITY null. , - CITY, -; - - ( P1 - , - ).

    SNO CITYS

    S1 London

    PNO CITYP

    P1

    . 4.2.

    (, ) . 4.2: (SNO,PNO), - , - ( ). SQL:

    SELECT S.SNO, P.PNO FROM S, P WHERE S.CITY P.CITY OR P.CITY Paris

    WHERE:

    ( S.CITY P.CITY ) OR ( P.CITY Paris )

  • null-? 111

    ( .) , , UNKNOWN OR UNKNOWN, - UNKNOWN. SQL- , - WHERE TRUE, FALSE UNKNOWN; , .

    P1 - -1; , , P1 CITY null, , -, , , , xyz. xyz , . ,

    ( S.CITY P.CITY ) OR ( P.CITY Paris )

    ( , )

    ( London Paris ) OR ( Paris Paris )

    TRUE, TRUE. -, xyz , (- )

    ( London xyz ) OR ( xyz Paris )

    , , TRUE, TRUE. - , TRUE, (S1,P1) , null. , ( ) , , !

    P, . 4.2 ( -, , , ):

    SELECT PNO FROM P WHERE CITY = CITY

    , , , - , P ( , -, P1, , . 4.2). SQL .

    . null-, - . , - , ,

    1 , - - . , . - . 5.

  • 112 4. , null-

    ; . - , , - null-. , .

    , SQL - UNKNOWN, TRUE FALSE - BOOLEAN! ( - SQL; , .) , BOOLEAN - ; - null. :

    UNKNOWN X BOOLEAN X null.

    X = UNKNOWN TRUE, null ( SQL , , , - , X UNKNOWN).

    X = UNKNOWN null ( UNKNOWN) X, X = NULL ( ).

    , - , null .

    , null--, . , , , null . - , :

    , null, ( - ).

    , null, ( ).

    , null, ( , null).

    , null- , (. - A).

    , , null-, ( ,

  • null- SQL 113

    , ); , .

    null- SQL null-; SQL , , - . , - NOT NULL, (. 5); null- . -, , SQL- , null. , null- .

    SQL, SUM, null, ( COUNT COUNT(*), ).

    , null.

    , , null. -: C null- null- (, ), SQL , , . .

    (union join) - , null-.

    CASE ELSE, , ELSE ELSE NULL.

    x = y, NULLIF(x,y) null.

    ON DELETE SET NULL ON UPDATE SET NULL null- ( -).

    :

    NOT NULL, , .

    NULL ( , NOT NULL).

    UNKNOWN -.

  • 114 4. , null-

    ELSE CASE, , .

    NULLIF.

    - OUTER, FULL, LEFT RIGHT (, , -, ).

    .

    PARTIAL FULL - MATCH ( null-). MATCH - IS DISTINCT FROM. ( null- x IS DISTINCT FROM y - x y.)

    IS TRUE, IS NOT TRUE, IS FALSE IS NOT FALSE. , bx , null- :

    bx IS TRUE bxbx IS NOT TRUE NOT bxbx IS FALSE NOT bxbx IS NOT FALSE bx

    , IS TRUE null- .

    , COALESCE - , - null. ( , null .)

    . , COALESCE null , - null, ( , - ). . x, y, ..., z . COALESCE (x,y,...,z) null, null, - , null. , - , x, y, ..., z null. :

    SELECT S.SNO , ( SELECT COALESCE ( SUM ( ALL QTY ) , 0 ) FROM SP WHERE SP.SNO = S.SNO ) AS TOTQ FROM S

    , SUM null , , , - , COALESCE null . -

  • 115

    , , :

    SNO TOTQ

    S1S2S3S4S5

    13007002009000

    , - null-, , , . , - - : -, , , , , - (. 6). , , null- - , - , :

    SELECT SNO , PNO FROM SP UNION SELECT SNO , nil AS PNO FROM S WHERE SNO NOT IN ( SELECT SNO FROM SP )

    ( ):

    SNO

    S1S1S1S1S1

    PNO

    P1P2P3P4P5

    S1S2S2S3

    P6P1P2P2

    S4S4S4S5

    P2P4P5nil

    SQL- COALESCE:

    SELECT SNO , COALESCE ( PNO , nil ) AS PNO FROM ( S NATURAL LEFT OUTER JOIN SP ) AS TEMP

  • 116 4. , null-

    null- . - , , , , -, . - , , - , . .

    , null- , . - ! , - , -, null- , , , , .

    , -. : , null- - ? , , - - , , - null-, ( ), . , - , null-; , .

    -, , - ( , ) , - null-. , .

    -, , , , - null-, - . , - . , , - null- . -, , ; , null-, , . , - , , - .

    , null-, - . -, ,

  • 117

    . SQL - ( null). , - , , null-, -, D.

    4.1. , -

    . , - . - ?

    4.2. r , bx by . ( - ), (r WHERE bx) UNION (r WHERE by) r WHERE bx OR by ( - ). , r -, , ?

    4.3. a, b . ( - ) , a INTERSECT (b UNION c) (a INTERSECT b) UNION (a INTERSECT c). - , a, b c , ?

    4.4. SQL, FROM ( SELECT - FROM - WHERE), :

    ( from) , ( ) [ ]. -, CP, r, -, r , -

    , CP ! , : CP - . , -, T1 T2:

    C1T1

    00

    C2T2

    12

    , - CP T1 T2 ( , ):

  • 118 4. , null-

    C1CP1

    0000

    C2

    1122

    C1CP2

    0000

    C2

    1222

    ?

    4.5. :

    DECLARE X CURSOR FOR SELECT SNO , QTY FROM SP ;

    , () X , () -, X, , () SP . , DELETE ... WHERE CURRENT OF X. , SP . ?

    4.6. , (10100) : .

    4.7. , null- - ?

    4.8. null - . ? ( , : , ?)

    4.9. (NOT) (AND OR) - , (. -). , MAYBE :

    p

    T FU TF F

    MAYBE p

    SQL?

    4.10. , , - (2VL)? (3VL)? ?

    4.11. , . - ; , - , , -

  • 119

    , +. 2VL ? 3VL?

    4.12. bx . bx OR NOT bx , 2VL TRUE ( , -). 3VL? , 3VL ?

    4.13. , , bx . bx AND NOT bx , - 2VL FALSE ( , ). - 3VL? , 3VL - ?

    4.14. 2VL r JOIN r r, INTERSECT TIMES JOIN (. 6). 3VL?

    4.15. - SQL: ROW (1,NULL). null -null?

    4.16. bx SQL-. NOT (bx) (bx) IS NOT TRUE SQL-. ?

    4.17. x SQL-. x IS NOT NULL NOT (x IS NULL) SQL-. ?

    4.18. DEPT EMP SQL- , - DNO , ENO EMP. - DEPT.DNO = EMP.DNO AND EMP.DNO = D1 ( , , WHERE). DEPT.DNO = EMP.DNO AND EMP.DNO = D1 AND DEPT.DNO = D1, , a = b b = c, a = c (. 6.13 6). ? , -? ?

    4.19. , null-. , , - , SQL, - (. 10):

    S WHERE NOT EXISTS SP ( SP.SNO = S.SNO AND SP.PNO = P2 )

    ? - ?

    S WHERE NOT ( S.SNO IN ( SP.SNO WHERE SP.PNO = P2 ) )

  • 120 4. , null-

    4.20. k1 k2 . SQL?

    a. k1 k2 , - WHERE.

    b. k1 k2 .

    c. k1 k2 .

    4.21. , UNION ALL . INTERSECT ALL EXCEPT ALL?

    4.22. DISTINCT ALL ?

    4.23. TABLE_DEE TRUE (), TABLE_DUM FALSE (), UNKNOWN ( )?

  • 5. - ,

    , - ( ) - - . ; , , - , . : , - , SQL, , SQL , - . , TABLE CREATE TABLE, , , -, , S , , S ( - S). - .

    :

    -, - , - , - -, , INSERT, DELETE UPDATE (, , -, INSERT, DELETE UPDATE ).

    , R - , r , R, R r ( - ).

    , , , , , - , 3 ,

  • 122 5. - ,

    -- .

    -- ( SQL); , , - - - , . 9 , - , .

    - ( - Tutorial D, SQL, ):

    VAR S BASE RELATION | CREATE TABLE S { SNO CHAR , | ( SNO VARCHAR(5) NOT NULL , SNAME CHAR , | SNAME VARCHAR(25) NOT NULL , STATUS INTEGER , | STATUS INTEGER NOT NULL , CITY CHAR } | CITY VARCHAR(20) NOT NULL , KEY { SNO } ; | UNIQUE ( SNO ) ) ;

    VAR P BASE RELATION | CREATE TABLE P { PNO CHAR , | ( PNO VARCHAR(6) NOT NULL , PNAME CHAR | PNAME VARCHAR(25) NOT NULL , COLOR CHAR , | COLOR CHAR(10) NOT NULL , WEIGHT FIXED , | WEIGHT NUMERIC(5,1) NOT NULL , CITY CHAR } | CITY VARCHAR(20) NOT NULL , KEY { PNO } ; | UNIQUE ( PNO ) ) ;

    VAR SP BASE RELATION | CREATE TABLE SP { SNO CHAR , | ( SNO VARCHAR(5) NOT NULL , PNO CHAR , | PNO VARCHAR(6) NOT NULL , QTY INTEGER } | QTY INTEGER NOT NULL , KEY { SNO , PNO } | UNIQUE ( SNO , PNO ) , FOREIGN KEY { SNO } | FOREIGN KEY ( SNO ) REFERENCES S | REFERENCES S ( SNO ) , FOREIGN KEY { PNO } | FOREIGN KEY ( PNO ) REFERENCES P ; | REFERENCES P ( PNO ) ) ;

    , -, . ( ,

  • 123

    - , ). -, INSERT -- , DELETE - , UPDATE - . , , , - , , :

    , - .

    , 1 - .

    , , - S (. 8), - S1 S4 . - UPDATE , , . , , :

    UPDATE S | UPDATE S WHERE SNO = S1 | SET CITY = New York OR SNO = S4 : | WHERE SNO = S1 { CITY := New York } ; | OR SNO = S4 ;

    , .

    , - SQL ( c - UPDATE DELETE WHERE CURRENT OF cursor), , , (, -), . SQL- - , , . - , - , , , -, . : SQL - , , , - , , . ( , - , - SQL .)

    . , - , , ( ). - 1. V , V - , , ( ) - .

  • 124 5. - ,

    t1 t2 - - R, t1 R t2. ! r1, R, - r2. r2? : s1 s2 , t1 t2 -; r2 (r1 MINUS s1) UNION s2. , - t1 t2 - R : t1, - t2, ( , ) - .

    A - t r, - R. , , ( - ), , - , 1, , , - , .

    , , , - , (- . 8). , - - ( SQL). , SQL , , , ; - (. ). , , , , .

    , , : -, ON DELETE CASCADE (. ), , , . , , SQL , ( -) , , , -. : , . , - 1, :

  • 125

    UPDATE S WHERE SNO = S5 : | UPDATE S { CITY := New York } ; | SET CITY = New York | WHERE SNO = S5 ;

    , -, , - , , - ( , , - ). , - , -, .

    - -, - , - , . :

    S := S WHERE NOT ( CITY = Athens ) ;

    1 , DELETE Tutorial D:

    DELETE S WHERE CITY = Athens ;

    , DELETE

    DELETE R WHERE bx ;

    ( R - , bx ) :

    R := R WHERE NOT ( bx ) ;

    INSERT Tutorial D

    INSERT R rx ;

    ( R - , rx -) :

    R := R D_UNION rx ;

    D_UNION . - , -- (. 6).

  • 126 5. - ,

    , UPDATE Tutorial D - , , INSERT DELETE, - 7.

    SQL

    INSERT, DELETE UPDATE SQL Tutorial D, , - INSERT. SQL INSERT - (, , VALUES . - 3). , INSERT SQL , , . INSERT SQL - . : -. , INSERT

    INSERT INTO SP ( PNO , SNO , QTY ) VALUES ( P6 , S5 , 700 ) ;

    :

    INSERT INTO SP VALUES ( S5 , P6 , 700 ) ;

    SP, . :

    INSERT INTO SP ( SNO , PNO , QTY ) VALUES ( S3 , P1 , 500 ) , ( S2 , P5 , 400 ) ;

    , SQL . ,

    R := rx ;

    :

    DELETE FROM T ; INSERT INTO T ( ... ) tx ;

    ( T tx SQL- R rx ). , -, , ( ) , , T , .

    , , , -

  • 127

    . , , - v V v = V - TRUE. : - , -, . , , , , () . , - , , . 8 .

    1, . .

    : K -- R. K ( ) R, - :

    1. : R - K.

    2. : K - .

    K n , n K.

    , - . - S {SNO,CITY} SK -, , S, - ( , - S, - SK). , CITY, - {SNO} . SK , . , {SNO} - .

    , ? : , -, . , , (!), {SNO,CITY} . -, , - , .

  • 128 5. - ,

    , , . : SQL , - , -.

    - , , - . ( Tuto