<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    周浩

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      28 隨筆 :: 0 文章 :: 16 評論 :: 0 Trackbacks

    3.1 名詞解釋

    (1)SQL模式:SQL模式是表和授權的靜態定義。一個SQL模式定義為基本表的集合。 一個由模式名和模式擁有者的用戶名或賬號來確定,并包含模式中每一個元素(基本表、視圖、索引等)的定義。
    (2)SQL數據庫:SQL(Structured Query Language),即‘結構式查詢語言’,采用英語單詞表示和結構式的語法規則。 一個SQL數據庫是表的匯集,它用一個或多個SQL模式定義。
    (3)基本表:在SQL中,把傳統的關系模型中的關系模式稱為基本表(Base Table)。 基本表是實際存儲在數據庫中的表,對應一個關系。
    (4)存儲文件:在SQL中,把傳統的關系模型中的存儲模式稱為存儲文件(Stored File)。 每個存儲文件與外部存儲器上一個物理文件對應。
    (5)視圖:在SQL中,把傳統的關系模型中的子模式稱為視圖(View),視圖是從若干基本表和(或)其他視圖構造出來的表。
    (6):在SQL中,把傳統的關系模型中的元組稱為行(row)。
    (7)列:在SQL中,把傳統的關系模型中的屬性稱為列(coloumn)。
    (8)實表:基本表被稱為“實表”,它是實際存放在數據庫中的表。
    (9)虛表:視圖被稱為“虛表”,創建一個視圖時,只把視圖的定義存儲在數據詞典中,而不存儲視圖所對應的數據。
    (10)相關子查詢:在嵌套查詢中出現的符合以下特征的子查詢:子查詢中查詢條件依賴于外層查詢中的某個值, 所以子查詢的處理不只一次,要反復求值,以供外層查詢使用。
    (11)聯接查詢:查詢時先對表進行笛卡爾積操作,然后再做等值聯接、選擇、投影等操作。 聯接查詢的效率比嵌套查詢低。
    (12)交互式SQL:在終端交互方式下使用的SQL語言稱為交互式SQL。
    (13)嵌入式SQL:嵌入在高級語言的程序中使用的SQL語言稱為嵌入式SQL。
    (14)共享變量:SQL和宿主語言的接口。共享變量有宿主語言程序定義,再用SQL的DECLARE語句說明, SQL語句就可引用這些變量傳遞數據庫信息。
    (15)游標:游標是與某一查詢結果相聯系的符號名,用于把集合操作轉換成單記錄處理方式。
    (16)卷游標:為了克服游標在推進時不能返回的不便,SQL2提供了卷游標技術。 卷游標在推進時不但能沿查詢結果中元組順序從頭到尾一行行推進,也能一行行返回。

    3.2 對于教學數據庫的三個基本表
         學生 S(S#,SNAME,AGE,SEX)
         學習 SC(S#,C#,GRADE)
         課程 C(C#,CNAME,TEACHER)
        試用SQL的查詢語句表達下列查詢:


    (1)檢索LIU老師所授課程的課程號和課程名。
        SELECT C#,CNAME
        FROM C
        WHERE TEACHER=‘LIU’

    (2)檢索年齡大于23歲的男學生的學號和姓名。
        SELECT S#,SNAME
        FROM S
        WHERE (AGE>23) AND (SEX=‘M’)

    (3)檢索至少選修LIU老師所授課程中一門課程的女學生姓名。
        SELECT SNAME
        FROM S
        WHERE SEX=‘F’ AND S# IN
         (SELECT S#
         FROM SC
         WHERE C# IN
          (SELECT C#
          FROM C
          WHERE TEACHER=‘LIU’)


    NOTICE:有多種寫法,比如聯接查詢寫法:
        SELECT SNAME
        FROM S,SC,C
        WHERE SEX=‘F’ AND SC.S#=S.S#
        AND SC.C#=C.C#
        AND TEACHER='LIU'
    但上一種寫法更好一些。


    (4)檢索WANG同學不學的課程的課程號。
        SELECT C#
        FROM C
        WHERE C# NOT IN
         (SELECT C#
         FROM SC
         WHERE S# IN
          (SELECT S#
          FROM S
          WHERE SNAME='WANG'))

    (5)檢索至少選修兩門課程的學生學號。
        SELECT DISTINCT X.SNO
        FROM SC X,SC Y
        WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO
    Notice:對表SC進行自連接,X,Y是SC的兩個別名。

    (6)檢索全部學生都選修的課程的課程號與課程名。
        SELECT C#,CNAME
        FROM C
        WHERE NOT EXISTS
         (SELECT *
         FROM S
         WHERE S# NOT IN
          (SELECT *
          FROM SC
          WHERE? SC.C#=C.C#))

    要從語義上分解:(1)選擇課程的課程號與課程名,不存在不選這門課的同學。
    ?? 其中,“不選這門課的同學”可以表示為:

    SELECT *

    ?FROM? S

    ?WHERE? S# NOT IN

    ??(SELECT? *

    ??????FROM SC??

    ??????WHERE? SC.C#=C.C#)

     

    或者

    SELECT *

    ?FROM? S

    ?WHERE?? NOT EXISTS

    ??(SELECT? *

    ??????FROM SC??

    ????? WHERE S.S#=C.S# AND?

    SC.C#=C.C# )

     

    ??????


    (7)檢索選修課程包含LIU老師所授課的學生學號。    
         SELECT DISTINCT S#
         FROM SC
         WHERE C# IN
          (SELECT C#
          FROM C
          WHERE TEACHER='LIU'))   

    3.3 設有兩個基本表R(A,B,C)和S(D,E,F),試用SQL查詢語句表達下列關系代數表達式:
      (1)πA(R)  (2)σB='17'(R)   (3)R×S  (4))πA,FC=D(R×S))

    (1)SELECT A FROM R
    (2)SELECT * FROM R WHERE B='17'
    (3)SELECT A,B,C,D,E,F FROM R,S
    (4)SELECT A,F FROM R,S WHERE R.C=S.D

    3.4 3.4 設有兩個基本表R(A,B,C)和S(A,B,C)試用SQL查詢語句表達下列關系代數表達式:
      (1)R∪S  (2)R∩S  (3)R-S  (4)πA,B(R)πB,C(S)


        (1)SELECT A,B,C
          FROM R
          UNION
          SELECT A,B,C
          FROM S

        (2)SELECT A,B,C
          FROM R
          INTERSECT
          SELECT A,B,C
          FROM S

        (3)SELECT A,B,C
          FROM R
          WHERE NOT EXISTS
           (SELECT A,B,C
           FROM S
           WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)

        (4)SELECT R.A,R.B,S.C
          FROM R,S
          WHERE R.B=S.B

    3.5 試敘述SQL語言的關系代數特點和元組演算特點。
    (P61-62)

    3.6 試用SQL查詢語句表達下列對教學數據庫中三個基本表S、SC、C的查詢:

    (1)統計有學生選修的課程門數。
        SELECT COUNT(DISTINCT C#) FROM SC

    (2)求選修C4課程的學生的平均年齡。
        SELECT AVG(AGE)
        FROM S
        WHERE S# IN
         (SELECT S#
         FROM SC
         WHERE C#='C4')
    或者,
        SELECT AVG(AGE)
        FROM S,SC
        WHERE S.S#=SC.S# AND C#='004'

    (3)求LIU老師所授課程的每門課程的學生平均成績。
       SELECT CNAME,AVG(GRADE)
       FROM SC ,C
       WHERE SC.C#=C.C# AND TEACHER='LIU'
       GROUP BY C#   

    (4)統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數, 查詢結果按人數降序排列,若人數相同,按課程號升序排列。
        SELECT DISTINCT C#,COUNT(S#)
        FROM SC
        GROUP BY C#
        HAVING COUNT(S#)>10
        ORDER BY 2 DESC, C# ASC

    (5)檢索學號比WANG同學大,而年齡比他小的學生姓名。
        SELECT X.SNAME
        FROM S AS X, S AS Y
        WHERE Y.SNAME='WANG' AND X.S#>Y.S# AND X.AGE<Y.AGE


    (6)檢索姓名以WANG打頭的所有學生的姓名和年齡。
        SELECT SNAME,AGE
        FROM S
        WHERE SNAME LIKE 'WANG%'

    (7)在SC中檢索成績為空值的學生學號和課程號。
        SELECT S#,C#
        FROM SC
        WHERE GRADE IS NULL

    (8)求年齡大于女同學平均年齡的男學生姓名和年齡。
        SELECT SNAME,AGE
        FROM S AS X
        WHERE X.SEX='男' AND X.AGE>(SELECT AVG(AGE) FROM S AS Y WHERE Y.SEX='女')

    (9)求年齡大于所有女同學年齡的男學生姓名和年齡。
        SELECT SNAME,AGE
        FROM S AS X
        WHERE X.SEX='男' AND X.AGE>ALL (SELECT AGE FROM S AS Y WHERE Y.SEX='女')

    3.7 試用SQL更新語句表達對教學數據庫中三個基本表S、SC、C的各個更新操作:
    (1)往基本表S中插入一個學生元組(‘S9’,‘WU’,18)。
        INSERT INTO S(S#,SNAME,AGE) VALUES('59','WU',18)
    (2)在基本表S中檢索每一門課程成績都大于等于80分的學生學號、姓名和性別, 并把檢索到的值送往另一個已存在的基本表STUDENT(S#,SANME,SEX)。
        INSERT INTO STUDENT(S#,SNAME,SEX)
         SELECT S#,SNAME,SEX
         FROM S WHERE  NOT EXISTS
          (SELECT * FROM SC WHERE
           GRADE<80 AND S.S#=SC.S#)

    (3)在基本表SC中刪除尚無成績的選課元組。
        DELETE FROM SC
         WHERE GRADE IS NULL

    (4)把WANG同學的學習選課和成績全部刪去。
        DELETE FROM SC
         WHERE S# IN
          (SELECT S#
          FROM S
          WHERE SNAME='WANG')

    (5)把選修MATHS課不及格的成績全改為空值。
        UPDATE SC
        SET GRADE=NULL
        WHERE GRADE<60 AND C# IN
          (SELECT C#
          FROM C
          WHERE CNAME='MATHS')

    (6)把低于總平均成績的女同學成績提高5%。
        UPDATE SC
        SET GRADE=GRADE*1.05
        WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S# FROM S WHERE SEX='F')

    (7)在基本表SC中修改C4課程的成績,若成績小于等于75分時提高5%, 若成績大于75分時提高4%(用兩個UPDATE語句實現)。
        UPDATE SC
         SET GRADE=GRADE*1.05
         WHERE C#='C4' AND GRADE<=75
        UPDATE SC
         SET GRADE=GRADE*1.04
         WHERE C#='C4' AND GRADE>75

    3.8 在第1章例1.4中提到“倉庫管理”關系模型有五個關系模式:
         零件 PART(P#,PNAME,COLOR,WEIGHT)
         項目 PROJECT(J#,JNAME,DATE)
         供應商 SUPPLIER(S#,SNAME,SADDR)
         供應 P_P(J#,P#,TOTOAL)
         采購 P_S(P#,S#,QUANTITY)


    (1)試用SQL DDL語句定義上述五個基本表,并說明主鍵和外鍵。
        CREATE TABLE PART
        (P# CHAR(4) NOT NULL,PNAME CHAR(12) NOT NULL,
        COLOR CHAR(10),WEIGHT REAL,
        PRIMARY KEY(P#))
        
        CREATE TABLE PROJECT
        (J# CHAR(4) NOT NULL,JNAME CHAR(12) NOT NULL,
        DATE DATE,
        PRIMARY KEY(J#))
        
        CREATE TABLE SUPLIER
        (S# CHAR(4) NOT NULL,SNAME CHAR(12),SADDR VARCHAR(20),
        PRIMARY KEY(S#))
        
        CREATE TABLE P_P
        (J# CHAR(4),P# CHAR(4),TOTAL INTEGER,
        PRIMARY KEY(J#,P#),
        FOREIGN KEY(J#) REFERENCE PROJECT(J#),
        FOREIGN KEY(P#) REFERENCE PART(P#))
        
        CREATE TABLE P_S
        (P# CHAR(4),S# CHAR(4),QUANTITY INTEGER,
        PRIMARY KEY(P#,S#),
        FOREIGN KEY(P#) REFERENCE PART(P#),
        FOREIGN KEY(S#) REFERENCE SUPLIER(S#))
        

    (2)試將PROGECT、P_P、PART三個基本表的自然聯接定義為一個視圖VIEW1,PART、P_S、SUPPLIER 三個基本表的自然聯接定義為一個視圖VIEW2。
        CREATE VIEW VIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL)
              AS SELECT PROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTAL
              FROM PROJECT,PART,P_P
              WHERE PART.P#=P_P.P# AND P_P.J#=PROJECT.J# 
         
        CREATE VIEW VIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY)
              AS SELECT PART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITY
              FROM PART,P_S,SUPPLIER
              WHERE PART.P#=P_S.P# AND P_S.S#=SUPPLIER.S#

    (3)試在上述兩個視圖的基礎上進行數據查詢:

        1)檢索上海的供應商所供應的零件的編號和名字。
        SELECT P#,PNAME FROM VIEW2 WHERE SADDR='SHANGHAI'

        2)檢索項目J4所用零件的供應商編號和名字。
        SELECT S#,SNAME FROM VIEW2 WHERE P# IN(SELECT P# FROM VIEW1 WHERE J#='J4')

    3.9 對于教學數據庫中基本表SC,已建立下列視圖:
         CREATE VIEW S_GRADE(S#,C_NUM,AVG_GRADE)
          AS SELECT S#,COUNT(C#),AVG(GRADE)
           FROM SC
           GROUP BY S#
       試判斷下列查詢和更新是否允許執行。若允許,寫出轉換到基本表SC上的相應操作。

      (1) SELECT *
          FROM S_GRADE

          允許
       SELECT S#,COUNT(C#),AVG(GRADE) FROM SC GROUP BY S#

      (2) SELECT S#,C_NUM
           FROM S_GRADE
            WHERE AVG_GRADE>80

        允許
       SELECT S#,COUNT(C#) FROM SC WHERE AVG(GRADE)>80

      (3) SELECT S#,AVG_GRADE
            FROM S_GRADE
            WHERE C_NUM>(SELECT C_NUM
                    FROM S_GRADE
                    WHERE S#=‘S4’)

        允許
       SELECT S#,AVG(GRADE)
       FROM SC AS X
       WHERE COUNT(X.C#)>(SELECT COUNT(Y.C#) FROM SC AS Y WHERE Y.S#='S4')
       GROUP BY S#

      (4) UPDATE S_GRADE
            SET C_NUM=C_NUM+1
            WHERE S#=‘S4’

        不允許

      (5) DELETE FROM S_GRADE
            WHERE C_NUM>4

        不允許

    3.10 預處理方式對于嵌入式SQL的實現有什么重要意義?
    ??? 預處理方式是先用預處理程序對源程序進行掃描,識別出SQL語句,并處理成宿主語言的函數調用形式; 然后再用宿主語言的編譯程序把源程序編譯成目標程序。這樣,不用擴充宿主語言的編譯程序, 就能處理SQL語句。

    3.11 在宿主語言的程序中使用SQL語句有哪些規定?
    在宿主語言的程序中使用SLQ語句有以下規定:
    (1)在程序中要區分SQL語句與宿主語言語句
    (2)允許嵌入的SQL語句引用宿主語言的程序變量(稱為共享變量),但有兩條規定:
       1)引用時,這些變量前必須加“:”作為前綴標識,以示與數據庫中變量有區別。
       2)這些變量由宿主語言的程序定義,并用SQL的DECLARE語句說明。
    (3)SQL的集合處理方式與宿主語言單記錄處理方式之間要協調。 需要采用游標機制,把集合操作轉換成單記錄處理方式。

    3.12 SQL的集合處理方式與宿主語言單記錄處理方式之間如何協調?
    ??? 由于SQL語句處理的是記錄集合,而宿主語言語句一次只能處理一個記錄, 因此需要用游標(cousor)機制,把集合操作轉換成單記錄處理方式。

    2.13 嵌入式SQL語句何時不必涉及到游標?何時必須涉及到游標?
    ??? (1)INSERT、DELETE、UPDATE語句,查詢結果肯定是單元組時的SELECT語句, 都可直接嵌入在主程序中使用,不必涉及到游標。
    ??? (2)當SELECT語句查詢結果是多個元組時,此時宿主語言程序無法使用, 一定要用游標機制把多個元組一次一個地傳送給宿主語言處理。

    posted on 2006-11-17 20:18 Derek 閱讀(6383) 評論(5)  編輯  收藏

    評論

    # re: 數據庫原理之關系數據庫SQL語言課后習題及答案 2007-06-17 18:18 但是
    頂下 基礎知識蠻全面的 學習了  回復  更多評論
      

    # re: 數據庫原理之關系數據庫SQL語言課后習題及答案[未登錄] 2007-10-30 11:06 haohao
    為什么我要查看答案時進不了那頁面啊,是不是有問題啊,能不能看看啊,  回復  更多評論
      

    # re: 數據庫原理之關系數據庫SQL語言課后習題及答案 2009-01-21 13:56 afag
    按進貨時間由早到晚顯示各種服裝的信息,當進貨時間相同時先顯示女裝信息,再依次顯示男裝信息和兒童裝信息?  回復  更多評論
      

    # re: 數據庫原理之關系數據庫SQL語言課后習題及答案[未登錄] 2009-03-16 21:59 feng
    在表“學生”中增加數值類型的“德育分”、“專業分”與“總積分”屬性,總積分=德育分+專業分。
      回復  更多評論
      

    # re: 數據庫原理之關系數據庫SQL語言課后習題及答案 2009-12-12 09:02 wslovenide
    謝了,對我有很大的幫助  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    Google
    主站蜘蛛池模板: 小说区亚洲自拍另类| 男人天堂免费视频| 国产免费看插插插视频| 美女被免费网站在线视频免费| 国产免费卡一卡三卡乱码| 亚欧国产一级在线免费| 亚洲av日韩av无码黑人| 最近中文字幕完整版免费高清| 久久精品国产亚洲AV忘忧草18| 成年人免费视频观看| 国产亚洲美女精品久久| 伊人婷婷综合缴情亚洲五月| 久久精品无码专区免费东京热| 亚洲人成色777777精品| 久久精品国产亚洲Aⅴ香蕉| 久久午夜羞羞影院免费观看| 亚洲成_人网站图片| 浮力影院亚洲国产第一页| 91久久青青草原线免费| 综合一区自拍亚洲综合图区| 亚洲第一AAAAA片| 在线播放免费播放av片| 免费无码作爱视频| 国产亚洲中文日本不卡二区| 久久久久亚洲AV综合波多野结衣 | 亚洲av无码国产精品色在线看不卡 | 又大又硬又粗又黄的视频免费看| 亚洲AV无码国产精品色午友在线| 麻豆最新国产剧情AV原创免费 | 又粗又大又猛又爽免费视频| 麻豆精品成人免费国产片| 亚洲熟妇少妇任你躁在线观看| 亚洲无码视频在线| 日本免费网址大全在线观看| 久久高潮一级毛片免费| 亚洲天堂中文字幕在线观看| 国产国产人免费视频成69大陆| 午夜免费福利小电影| 美女被暴羞羞免费视频| 亚洲宅男永久在线| 亚洲日韩在线观看免费视频|