Upload
oleg-botezatu
View
256
Download
1
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 ()
. - , :
:
-, - ( ). :
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