第 八 章 合併理論與實作

Click here to load reader

Upload: lacy-jennings

Post on 03-Jan-2016

87 views

Category:

Documents


0 download

DESCRIPTION

第 八 章 合併理論與實作. 課程名稱: 資料庫系統 授課老師:李春雄 博士. 本章學習目標. 1. 讓讀者瞭解 View 視界的概念 及 View 與 ANSI/SPARC 架構 的關係 2. 讓讀者瞭解 兩個及兩個以上資料表 如何進行 查詢 的動作。. 本章內容. 8-1 關聯式代數運算子 8-2 非集合運算子 8-3 集合運算子 8-4 巢狀結構查詢 8-5 View 視界. 前言 . - PowerPoint PPT Presentation

TRANSCRIPT

  • 1.ViewViewANSI/SPARC 2.

  • 8-1 8-2 8-3 8-4 8-5 View

  • SQLSQL

  • 8-1 8-1

    SQL

    (Restrict)(Project)(Cartesian Product)(Join)(Division)(Union)(Intersection)(Difference)

  • 8-2 1.(Restrict)2.(Project)3.(Cartesian Product)4.(Join)5.(Division)

  • 8-2.1(Restrict) () (sigma)Pp(R)R () SQL Where (AND, OR , NOT)

  • R (Predicate) PR

    SQLPp(R)SELECT FROM RWHERE P //

  • 3

    SQL

    SQL=3() SELECT *FROM WHERE ='3'

  • 8-2.2 (Project) R (pai)RA1A2A3An A1,A2,A3An(R)R () SQLSelect From

  • RR

    SQLSELECT //FROM

    (R)

  • SQL

    SQL() SELECT ,FROM

  • 8-2.3 (Cartesian Product)R1R2 R3(Cartesian Product) (Cross Product)(Cross Join) R1r1mR2r2nR3 rrm n R3=X SQLSELECT * FROM A,B

  • R1r1mR2r2nR3rrm n

    1 2SELECT *FROM A,BSELECT *FROM A CROSS JOIN B

  • 1.R1 () R2 () R1 () R2 ()=R3 R1(r=3)(m=2)R2(r2=3)(n=3) R3rr=6 R3(..) R3m n=6

  • (2)(3)(23)=6

    6

  • C001(C002,C003)(Inner Join)

  • 2.SQL

    SQL Server

    SQL1.

    2. CROSS JOIN --1.SELECT *FROM ,--2.SELECT *FROM CROSS JOIN

  • 8-2.4 (Join) R1R2R3PR1 pR2 R3= R1 pR2 SQLSELECT * FROM A,B WHERE P

  • ()

  • (FKPK)

    ()Inner Join() ()Outer Join() 1. 2. ()Join Itself()

  • (FKPK) ()Cross Join() ()Union() ()Intersect() ()Except()

  • 8-2.4.1 (Inner Join) (Inner Join)(Condition Join)Outer join

    ().=. ().60< ().= ().>=60

  • 1.SELECTWHERE(Equi-Join)

    2.SELECTFROMINNER JOIN(Natural Join)(Inner Join)From A ,BWhere (A.c=B.c)From A INNER JOIN BON A.c=B.c

  • 1. .=..=.

  • 2.SQL (1)(Equi-Join)

    (2)INNER JOIN

    Select ,,.,,From ,Where .=.SELECT ,,.,,FROM INNER JOIN ON .=.

  • 3. () ? ? () ? , , ,

    ch8-2.4.1A.accdbSELECT *FROM AS A, AS B

  • (Join) Where

    SELECT *FROM AS A, AS BWHERE A.=B.SELECT *FROM AS A, AS BWHERE A.=B.And B.>=7054

  • SELECT A., , , FROM AS A, AS BWHERE A.=B.And B.>=70SELECT A., , AVG() AS FROM AS A, AS BWHERE A.=B.And B.>=70GROUP BY A., (85+100)/2=92.5

  • SELECT A., , AVG() AS FROM AS A, AS BWHERE A.=B.And B.>=70GROUP BY A., HAVING AVG()>=70SELECT A., , AVG() AS FROM AS A, AS BWHERE A.=B.And B.>=60GROUP BY A., HAVING AVG()>=70ORDER BY AVG() DESC;70()

  • 4. (Inner Join)

  • 8-2.4.2 (Outer Join) (Join)NULL

  • 1.(Left Outer Join ) 2.(Right Outer Join ) 3.(Full Outer Join )

  • SELECT *FROM A [RIGHT | LEFT | FULL] [OUTER ][JOIN] B ON A.PK=B.FK

  • 1

    ch8-2-4-2.accdb

  • ()(Tuples)NULL()1. Access2007SQL Server 2008

  • 2.SQL

    SELECT *FROM AS A LEFT JOIN AS B ON A.=B.

  • 2SQL

    1.

  • 2.SQL

    3.

    --1.1()SELECT A.,A.FROM AS A LEFT OUTER JOIN AS B ON A.=B.WHERE B. IS NULL

  • 1

  • ()(Tuples)NULL()1. Access2007SQL Server 2008

  • 2.SQL

    --2.SELECT *FROM AS A RIGHT JOIN AS B ON A.=B. ORDER BY B.

  • 2SQL

    1.

  • 2.SQL

    3.

    --2.1()SELECT B.,B.FROM AS A RIGHT OUTER JOIN AS B ON A.=B.WHERE A. IS NULL

  • 1

  • (Tuples)NULL()1.

  • 2.SQL

    SELECT *FROM AS A FULL OUTER JOIN AS B ON A.=B.;FULL OUTER JOINSQL Server

  • 8-2.4.3(Join Itself)

  • ()

    3333

    1Null2132425363738395104

  • 1

    SELECT A. AS , B. AS , B.FROM AS A LEFT JOIN AS B ON A.=B.WHERE A.=

  • 2()SELECT , , , (Select from B where A.=B.) AS FROM AS A;

  • 3()SELECT A., A., A., B. AS FROM AS A LEFT JOIN AS B ON A.=B.;

  • 4()SELECT A. AS , B. AS FROM AS A LEFT JOIN AS B ON A.=B.; -- A,B

  • 5()SELECT A. AS , A., B. AS FROM AS A, AS BWHERE A.=B. AND Right(A.,2)=''; -- A,B

  • 8-2.5 (Division) R1 R2 R1R2 SQL Select WhereNOT EXISTS NOT(Divide)

    SQL(Divide) (Divide)FORALLWHERENOT EXISTSNOT

  • R1 R2

  • SELECT FROM WHERE NOT EXISTS (SELECT * FROM WHERE NOT EXISTS (SELECT * FROM WHERE .1=.1 AND .2=.2))

  • 1

  • () () () ?

  • 2(60)

  • () () 60() ? ?

  • (60)

    S0001C00573S0002C00292S0002C00563S0003C00492S0003C00570S0004C00375S0004C00488S0004C00568S0005C00560

    #1S0001C00156#2S0001C00573#3S0002C00292#4S0002C00563#5S0003C00492#6S0003C00570#7S0004C00375#8S0004C00488#9S0004C00568#10S0005C00560

  • (Join)

  • EXISTS

  • EXISTS

    FOR ALL(NOT EXITSTS NOT)

    .C0054C0054C0054C0054

    4

  • 307

  • () ? LIKE '07'() ()

  • 07

    C0207-7878788C0307-6454555C0507-3355444

  • (Join)

  • EXISTS

  • EXISTS

    FOR ALL(NOT EXITSTS NOT)

    .C0207-7878788C0507-3355444

  • 8-3 1.(Intersection)2.(Union)3.(Difference)

  • 8-3.1(Intersection) R1R2 ()R3 R1 R2 SQLFrom R1 Intersect R2

  • SQLABSelect *From A Intersect B

  • 9798 97 98

    SQLSELECT * FROM [97]INTERSECTSELECT * FROM [98]

  • 8-3.2(Union) R1R2 R3R3 R1 R2 SQLFrom R1 Union R2

  • SQL

    SQLABSelect *From A Union B

  • 9798 97 98

    SQLSELECT * FROM [97]UNIONSELECT * FROM [98]

  • 8-3.3(Difference) R1R2 RR1R2 R1R1R2 R1 R2 SQLFrom R1 Except R2

  • R1R1R2R1-R2R1-(R1R2)

    SQLABSelect *From A Except B

  • 9798 97 98

    SQLSELECT * FROM [97]ExceptSELECT * FROM [98]

  • 1

  • 1

    (1) (2)

  • 2 ?

  • 2 ?(1)()(2)()

  • 8-4 Where 1.(=)2.(IN)3.(EXIST)

  • SQL

    ch8-4.accdb

  • Access

  • 8-4.1 ==Where

  • 18-4

    SQLSELECT A., FROM AS A, AS BWHERE A.=B. AND B.=(SELECT C. FROM AS C WHERE = '');

  • 1

    SQL

    ch8-Score.accdb

    SQLSELECT *FROM WHERE > (SELECT AVG() FROM );

  • 2

    SQL

    ch8-Score.accdb

    SQLSELECT *FROM WHERE = (SELECT MAX() FROM );

  • VB2005VB2008SQL

    [] ch8-4.sln

  • 8-4.2 IN INININ

  • (IN) 8-4

    SQLSELECT A., FROM AS A, AS BWHERE A.=B. AND B. IN(SELECT C. FROM AS C WHERE LIKE '*');

  • 8-4.3 EXIST TRUEFALSETRUEFALSE

  • EXISTS8-4

    TRUE

    SQLSELECT DISTINCT A., FROM AS A, AS BWHERE A.=B. AND EXISTS(SELECT C. FROM AS C WHERE ='');

  • 8-4.4 ALLANY ()ALLANY ALL1 A >ALL BA25 60 80 100B 30 50

    A >ALL BAB{60,80,100}

  • 1

    SQLSELECT , , FROM WHERE >ALL (SELECT FROM );

  • ALL2 A
  • 2

    SQLSELECT , , FROM WHERE

  • ANY1 A >ANY BA25 60 80 100B 30 50

    A >ANY BAB{60,80,100}

  • 3

    SQLSELECT , , FROM WHERE >ANY (SELECT FROM );

  • ANY 2 A
  • 4

    SQLSELECT , , FROM WHERE

  • __

  • 1EXISTSP3 8-4

    1. (1) (2)2.

    () ?() || 'P3'()

  • []

    [1]TrueFalse

    Select DISTINCTFromWhere.=.AND ='P3'

  • (True)

  • 2INP3 8-4

    1. (1) (2)2.

    () ?() || 'P3'()

  • []

    (JOIN)Select DISTINCTFromWhere.=.AND ='P3'

    (IN)SELECT DISTINCT FROM StepWHERE . IN(SELECT .FROM StepWHERE ='P3')

  • (P3)

    IN

    .S1S4S5

  • 3EXISTSP38-4 NOT EXISTS

    Select DISTINCTFromWhere NOT EXISTS(Select * From Where.=.AND ='P3')

  • 4INP38-4

    1. (1) (2)2.

    () ?() || 'P3'()

  • [][] [2]

    NOT INSELECT DISTINCT FROM WHERE . NOT IN(SELECT .FROM WHERE ='P3')

  • 5IN8-4

    1. (1) (2)2.

    () ? Step () Step() || Step '

  • []

    (JOIN)SELECT DISTINCTFROM,,WHERE .=.AND.=.AND=''

    (IN)SELECT DISTINCT FROM StepWHERE . IN(SELECT .FROM StepWHERE . IN(SELECT .FROM StepWHERE=''))

  • IN

    IN

    P3

    .S1S4S5

  • 8-5 View ViewViewView ViewANSI/SPARC(View Table)ANSI/SPARCExternal Level

  • 8-5-1VIEW (View)(Base Table) (View Table)SQL

  • (Base Table)SQL

  • (View Table)(Base Table)View Select SQL

  • 8-5-2 View View1. 2. 3. ()4.

    **

    ***********(Join)(Cartesian Product)(Cross Product)(Cross Join)

    ***********************************************************************************************************************