考研復試數據庫(三)


第三部分 關系數據庫語言SQL

(一)、考核內容

(1)SQL功能特點、SQL基本操作

(2)SQL數據查詢

(3)SQL視圖操作、子查詢

(二)、考核要求

(1)了解SQL語言的概貌、發展、標准化、主要特點。

(2)掌握SQL表基本操作方法:定義、修改與撤消基本表。

(3)掌握SQL數據更新方法:INSERT、DELETE、UPDATE語句的格式和用法。

(4)掌握SQL數據查詢方法:SELECT語句的格式及各種用法。

(5)了解SQL的庫函數。

(6) 了解視圖的概念、作用;掌握視圖的定義與撤消。

(一)選擇

1.SQL語言是( )的語言,易學習。

    A.過程化    B.非過程化    C.格式化    D.導航式    

2.SQL語言是( )語言。

    A.層次數據庫    B.網絡數據庫    C.關系數據庫    D.非數據庫    

3.SQL語言具有( )的功能。

    A.關系規范化、數據操縱、數據控制    B.數據定義、數據操縱、數據控制

    C.數據定義、關系規范化、數據控制    D.數據定義、關系規范化、數據操縱    

4.SQL語言具有兩種使用方式,分別稱為交互式SQL和( )。

    A.提示式SQL    B.多用戶SQL    C.嵌入式SQL    D.解釋式SQL    

5.假定學生關系是S(S#,SNAME,SEX,AGE),課程關系是C(C#,CNAME,TEACHER),學生選課關系是SC(S#,C#,GRADE)。要查找選修“COMPUTER”課程的“女”學生姓名,將涉及到關系(  )。

    A.S      B.SC,C      C.S,SC      D.S,C,SC                              

6.若用如下的SQL語句創建一個student表:

    CREATE TABLE student(NO Char(4) NOT NULL,

    NAME Char(8) NOT NULL,

    SEX Char(2),

    AGE tinyint)

    可以插入到student表中的是                    

A.(‘1031’,‘曾華’,男,23)      B.(‘1031’,‘曾華’,NULL,NULL)

  C.(NULL,‘曾華’,‘男’,‘23’)  D.(‘1031’,NULL,‘男’,23)                                         

7. SL語言的數據操縱語句包括SELECT,INSQERT,UPDATE和DELETE等。其中最重要的,也是使用最頻繁的語句是()。

    A.SELECT    B.INSERT   C.UPDATE    D.DELETE

 

8到第10題基於這樣的三個表即學生表S、課程表C和學生選課表SC,它們的結構如下:

    S(S#,SN,SEX,AGE,DEPT)

    C(C#,CN)

    SC(S#,C#,GRADE)

其中:S#為學號,SN為姓名,SEX為性別,AGE為年齡,DEPT為系別,C#為課程號,CN為課程名,GRADE為成績。

8.檢索所有比“王華”年齡大的學生姓名、年齡和性別。正確的SELECT語句是( )

 A.SELECT SN,AGE,SEX   FROM S

       WHERE AGE>(SELECT AGE FROM S

                    WHERE SN=“王華”)

 B.SELECT SN,AGE,SEX

        FROM S

       WHERE SN=“王華”

 C.SELECT SN,AGE,SEX  FROM S

        WHERE AGE>(SELECT AGE

            WHERE SN=“王華”)

 D.SELECT SN,AGE,SEX  FROM S

          WHERE AGE>王華.AGE

9、檢索選修課程“C2”的學生中成績最高的學生的學號。正確的SELECT語句是          

  A.SELECT S# FORM SC    

      WHERE C#=“C2” AND GRAD>=(SELECT GRADE FORM SC

                WHERE C#=“C2”)

    B.SELECT S# FORM SC

            WHERE C#=“C2” AND GRADE IN

               (SELECT GRADE FORM SC

                 WHERE C#=“C2”)

    C.SELECT S# FORM SC

         WHERE C#=“C2” AND GRADE NOT IN

                (SELECT GRADE FORM SC

                 WHERE C#=“C2”)

    D.SELECT S# FORM SC

            WHERE C#=“C2” AND GRADE>=ALL

            (SELECT GRADE FORM SC

               WHERE C#=“C2”)

 

10、檢索學生姓名及其所選修課程的課程號和成績。正確的SELECT語句是            

ASELECT SSNSCC#SCGRADE

         FROM S

         WHERE SS#=SCS#

BSELECT SSNSCC#SCGRADE

         FROM SC

         WHERE SS#SCGRADE

 CSELECT SSNSCC#SCGRADE

         FROM SSC

         WHERE SS#=SCS#

 DSELECT SSNSCC#SCGRADE

         FROM SSC

 

11.視圖是一個“虛表”,視圖的構造基於(    )

A.基本表      B.視圖   

C.基本表或視圖       D.數據字典

 

12.關系代數中的π運算符對應SELECT語句中的以下哪個子句?(   )

A.SELECT B.FROM

C.WHERE D.GROUP BY

 

13.關系代數中的σ運算符對應SELECT語句中的以下哪個子句?(   )

A.SELECT B.FROM

C.WHERE D.GROUP BY

 

14.關系代數中的×(笛卡爾積)運算符對應SELECT語句中的以下哪個子句?(   )

A.SELECT B.FROM

C.WHERE D.GROUP BY

 

15.SQL的排序子句:ORDER BY 總分 DESC, 英語 DESC 表示(  )

A. 總分和英語分數都是最高的在前面

B. 總分和英語分數之和最高的在前面

C. 總分高的在前面,總分相同時英語分數高的在前面

D. 總分和英語分數之和最高的在前面,相同時英語分數高的在前面

 

16.使用查詢語句:

SELECT STUDENT.學號, STUDENT.姓名, SUM(分數) FROM STUDENT, GRADE

WHERE STUDENT.學號=GRADE.學號

GROUP BY STUDENT.學號, STUDENT.姓名

查詢結果是()

A.按學號分類的每個學生所有課程成績的總分

B.按學號分類的每個學生各課程成績

C.全體學生的各課程分類的成績總分

D.所有學生的所有課程成績總分

 

17.T-SQL語言中,用於刪除一個視圖的命令的關鍵字是()

A. DELETE    B. DROP   C. CLEAR  D. REMOVE

 

18. T-SQL語言的GRANTREMOVE語句主要是用來維護數據庫的()

A.完整性   B.可靠性    C.安全性    D.一致性

 

19.SQL語言中,實現數據檢索的語句是( )。

    A.SELECT      B.INSERT

C.UPDATE      D.DELETE

 

20.下列SQL語句中,修改表結構的是( )。

    A.ALTER       B.CREATE

    C.UPDATE      D.INSERT

 

21. 用於實現數據存取安全性的SQL語句是( )

A.CREATE TABLE B.COMMIT

C.GRANTREVOKE D.ROLLBACK

 

(二)概念、術語:

術語

聚合函數

分組查詢

視圖

 

簡述

(1)簡述數據定義語句、數據查詢語句、數據操縱語句和數據控制語句的功能用途是什么?

(2)簡述 SQL 的定義功能。

(3)簡述視圖的優點。

 

(三)應用題

1.以下面的數據庫關系模式為例,寫出完成以下查詢功能的SQL語句。(每小題2分)

關系模式如下:

l 學生(學號,學生姓名,出生年月,出生地,專業號,班級)

簡寫為:s(s#,sname,ssex,sbirthin,placeofb,scode#,class)

l 課程(課程號,課程名,學時)

簡寫為:c(c#,cname,classh)

l 學習關系(學號,課程號,分數)

簡寫為:sc(s#,c#,grade)

l 專業(專業代碼,專業名稱)

簡寫為:ss(scode#,ssname)

l 教師(教職工號,教師姓名,教師性別,教師出生年月,職稱,教研室,電話號碼)

簡寫為:t(t#,tname,tsex,tbirthin,titleof,tresction,tel)

l 講授關系(教職工號,課程號)

簡寫為:teach(t#,c#)

1)查詢201002班男生的信息。

2)查詢最低分大於70、最高分小於90的學生的姓名。 

3)查詢所有女生記錄信息,並以班級降序排列。

4)查詢選取修數據結構課程的學生姓名及所在專業代碼。

5)查詢至少有5名學生選修的並以3開頭的課程號的平均分。

 

2. 以下面的數據庫關系模式為例,寫出完成以下查詢功能的SQL語句。(每小題2分)

關系模式如下:

l 學生(學號,學生姓名,出生年月,出生地,專業號,班級)

簡寫為:s(s#,sname,ssex,sbirthin,placeofb,scode#,class)

l 課程(課程號,課程名,學時)

簡寫為:c(c#,cname,classh)

l 學習關系(學號,課程號,分數)

簡寫為:sc(s#,c#,grade)

l 專業(專業代碼,專業名稱)

簡寫為:ss(scode#,ssname)

l 教師(教職工號,教師姓名,教師性別,教師出生年月,職稱,教研室,電話號碼)

簡寫為:t(t#,tname,tsex,tbirthin,titleof,tresction,tel)

l 講授關系(教職工號,課程號)

簡寫為:teach(t#,c#)

1)查詢來自南京或上海的學生學號和姓名。

2)查詢選修課程號為C401001的學號和成績,並要求對查詢結果按成績降序排列,如果成績相同則按學號升序排列。

3查詢計算機科學或網絡工程專業姓張的學生的信息。

4查詢缺少了成績的學生的學號和課程號。

5)查詢每個專業的男、女生分別有多少人數。

 

3. 設有如下所示的三個關系A、B、AB。

其中各個屬性的含義如下:A#(商店代號)、ANAME(商店名)、WQTY(店員人數)、CITY(所在城市)、B#(商品號)、BNAME(商品名稱)、PRICE(價格)、QTY(商品數量)。

試用SQL語言寫出下列查詢,並給出執行結果:

 

 

 

 

(1).找出店員人數不超過100人或者在長沙市的所有商店的代號和商店名。

(2).找出供應書包的商店名。

(3).找出至少供應代號為256的商店所供應的全部商品的商店名和所在城市。

 

4. 己知三個關系R(A,B,C)、S(A,D,E)和T(D,F),其中,名稱相同的屬性為關聯屬性,C、E為數值型屬性。

    試用SQL語句實現如下操作:

 (1).將R、S和T三個關系按關聯屬性建立一個視圖R-S-T;

 (2).對視圖R-S-T按屬性A分組后,求屬性C和E的平均值。

 

5. 設有關系R(A,B)和S(A,C),A為相同屬性。    

試用SQL語句實現:

(1).查詢屬性C>50時,R中相關聯的屬性B之值。

(2).當屬性C=40時,將R中與之相關連的屬性B值修改為b4。

 

6. 已知學生表S和學生選課表SC。其關系模式如下:

    S(SNo,SN,SD,PROV)

    SC(SNO,CN,GR)

    其中,SNO為學號,SN為姓名,SD為系名,PROV為省區,CN為課程名,GR為分數。

    試用SQL語言實現下列操作:

(1).查詢“信息系”的學生來自哪些省區。

(2).按分數降序排序,輸出“英語系”學生選修了“計算機”課程的學生的姓名和分數。

 

7. 設有關系模式:

    SB(SN,SNAME,CITY)

    其中,S表示供應商,SN為供應商代號,SNAME為供應商名字,CITY為供應商所在城市,主關鍵字為SN。

    PB(PN,PNAME,COLOR,WEIGHT)

    其中P表示零件,PN為零件代號,PNAME為零件名字,COLOR為零件顏色,WEIGHT為零件重量,主關鍵字為PN。

    JB(JN,JNAME, CITY)

    其中,J表示工程,JN為工程編號,JNAME為工程名字,CITY為工程所在城市,主關鍵字為JN。

SPJB(SN,PN,JN,QTY)

    其中,SPJ表示供應關系,SN是為指定工程提供零件的供應商代號,PN為所提供的零件代號,JN為工程編號,QTY表示提供的零件數量,主關鍵字為(SN,PN,JN),外部關鍵字為SN,PN,JN。

寫出實現以下各題功能的SQL語句:

 

(1).取出所有工程的全部細節;

(2).取出所在城市為上海的所有工程的全部細節;

(3).取出重量最輕的零件代號;

(4).取出為工程J1提供零件的供應商代號;

(5).取出為工程J1提供零件P1的供應商代號;

(6).取出由供應商S1提供零件的工程名稱;

(7).取出供應商S1提供的零件的顏色;

(8).取出為工程J1或J2提供零件的供應商代號;

(9).取出為工程J1提供紅色零件的供應商代號;    

(10).取出為所在城市為上海的工程提供零件的供應商代號;

(11).取出為所在城市為上海或北京的工程提供紅色零件的供應商代號;

(12).取出供應商與工程所在城市相同的供應商提供的零件代號;

(13).取出上海的供應商提供給上海的任一工程的零件的代號;

(14).取出至少由一個和工程不在同一城市的供應商提供零件的工程代號;

(15).取出上海供應商不提供任何零件的工程的代號;

(16).取出這樣一些供應商代號,它們能夠提供至少一種由紅色零件的供應商提供的零件;

(17).取出由供應商S1提供零件的工程的代號;

8. 以下面的數據庫為例,用SQL完成以下檢索。關系模式如下:

倉庫(倉庫號,城市,面積)←→   WAREHOUSE(WMNO,CITY,SIZE)

職工(倉庫號,職工號,工資)←→   EMPLOYEE(WHNO,ENO,SALARY)

訂購單(職工號,供應商號,訂購單號,訂購日期)←→  ORDER(SNO,SNO,ONO,DATE)

供應商(供應商號,供應商名,地址)←→  SUPPLIER(SNO,SNAME,ADDR)

(1).檢索在北京的供應商的名稱。

(2).檢索發給供應商S6的訂購單號。

(3).檢索出職工E6發給供應商S6的訂購單號。

(4).檢索出向供應商S3發過訂購單的職工的職工號和倉庫號。

(5).檢索出目前與S3供應商沒有聯系的職工信息。

(6).檢索出目前沒有任何訂購單的供應商信息。

(7).檢索出和職工E1、E3都有聯系的北京的供應商信息。

(8).檢索出目前和華通電子公司有業務聯系的每個職工的工資。

(9).檢索出與工資在1220元以下的職工沒有聯系的供應商的名稱。

(10).檢索出向S4供應商發出訂購單的倉庫所在的城市。

(11).檢索出在上海工作並且向S6供應商發出了訂購單的職工號。

(12).檢索出在廣州工作並且只向S6供應商發出了訂購單的職工號。

(13).檢索出由工資多於1230元的職工向北京的供應商發出的訂購單號。

(14).檢索出倉庫的個數。

(15).檢索出有最大面積的倉庫信息。

(16).檢索出所有倉庫的平均面積。

(17).檢索出向S4供應商發出訂購單的那些倉庫的平均面積。

(18).檢索出每個城市的供應商個數。

(19).檢索出每個倉庫中工資多於1220元的職工個數。

(20).檢索出和面積最小的倉庫有聯系的供應商的個數。

(21).檢索出工資低於本倉庫平均工資的職工信息。

 

9. 以下面的數據庫為例,用SQL完成以下更新操作。關系模式如下:

倉庫(倉庫號,城市,面積)←→   WAREHOUSE(WMNO,CITY,SIZE)

職工(倉庫號,職工號,工資)←→   EMPLOYEE(WHNO,ENO,SALARY)

訂購單(職工號,供應商號,訂購單號,訂購日期)←→ ORDER(SNO,SNO,ONO,DATE)

供應商(供應商號,供應商名,地址)←→  SUPPLIER(SNO,SNAME,ADDR)

(1).插入一個新的供應商元組(S9,智通公司,沈陽)。

(2).刪除目前沒有任何訂購單的供應商。

(3).刪除由在上海倉庫工作的職工發出的所有訂購單。

(4).北京的所有倉庫增加100m2的面積。

(5).給低於所有職工平均工資的職工提高5%的工資。

 

10.現有關系數據庫如下:

                  學生(學號,姓名,性別,專業)

                  課程(課程號,課程名,學分)

                  學習(學號,課程號,分數)

分別用關系代數表達式和SQL語句實現下列1—5小題(注意:每小題都要分別寫出關系代數表達式和SQL語句):

(1)檢索所有選修了課程號為“C112”的課程的學生的學號和分數;                

(2)檢索“英語”專業學生所學課程的信息,包括學號、姓名、課程名和分數;

(3)檢索“數據庫原理”課程成績高於90分的所有學生的學號、姓名、專業和分數;

(4)檢索沒學課程號為“C135”課程的學生信息,包括學號,姓名和專業;

(5)檢索至少學過課程號為“C135”和“C219”的課程的學生的信息,包括學號、姓名和專業。

 

11.關系模式如下: 

學生S(SNO, SN, SEX, AGE)

課程C(CNO, CN, PCNO)  PCNO為直接先行課

選課SC(SNO,CNO,G)  G為課程考試成績

(1)用關系代數及SQL語言寫出查詢語句,查詢所有學生都選修的課程名CN

(2)用關系代數及SQL語言寫出查詢語句,查詢“DB”課成績在90分以上的學生的姓名。

(3)將選修課程“DB”的學生學號,姓名建立視圖SDB

(4)在學生選課關系SC中,把英語課的成績提高10%

 

12. 在教學管理數據庫中有學生、課程和選課三個表,它們的定義分別為為:

Student(Sno Char(5),Sname Char(6),Ssex Char(2),

          Sage Int,Sdept Char(2))

Course(Cno Char(1), Cname Char (10), Cpno Char(1),

        Ccredit Int)

SC(Sno Char(5), Cno Char(1), Grade int)

根據下面的要求,寫出SQL語句。

① SQL語句建立數據表SC,以(Sno, Cno)作為主鍵;

② 向Student表插入一條記錄(95011, 張三, , 19CS);

③ 檢索計算機系(CS)所有女同學的姓名和年齡;

④ 檢索選修了2號課程學生的學號、姓名、成績,並按成績降序排序;

⑤ 建立一個信息系(IS)所有不及格(Grade<60)學生的視圖。

 

 

第三部分 關系數據庫語言SQL

 (一)選擇

1. B 2. C 3. B 4. C 5. D  

6. B   7. A.    8. A 9. D 10. C

11. C 12 . A 13. C  14. B 15. C

16. A 17. B  18. C 19. A 20. A

21. C

(二)概念、術語

術語

聚合函數:能夠根據查詢結果的記錄集或根據查詢結果的記錄集中某列值的特點返回一個匯總信息的函數。

分組查詢:SQL語言中,把元組按某個或某些列上相同的值分組,然后再對各組進行相應操作的查詢方式稱為分組查詢。

視圖:也稱用戶視圖或外模式,反映了數據庫的局部邏輯結構,是數據庫應用系統中各不同用戶看到和使用的數據庫。

 

簡述

(1)簡述數據定義語句、數據查詢語句、數據操縱語句和數據控制語句的功能用途是什么?

答:數據定義語句用於定義數據庫的邏輯結構,包括定義基本表、定義視圖和定義索引。

    數據查詢語句按不同查詢條件實現對數據庫中數據的檢索查詢。

    數據操縱語句用於更改和操作表中的數據,包括數據插入、數據修改和數據刪除。

    數據控制語句法實現用戶授權、基本表和視圖授權、事務控制、完整性和安全性控制等。

(2)簡述 SQL 的定義功能。

答:SQL 的數據定義功能包括定義表、定義視圖和定義索引。 SQL 語言使用 cREATE TABLE 語句建立基本表, ALTER TABLE 語句修改基本表定義, DROP TABLE 語句刪除基本表;使用 CREATE INDEX 語句建立索引, DROP INDEX 語句刪除索引;使用 CREATE VIEW 語句建立視圖, DROP VIEW 語句刪除視圖。

(3)簡述視圖的優點。

答:

( l )視圖能夠簡化用戶的操作; ( 2 )視圖使用戶能以多種角度看待同一數據; ( 3 )視圖對重構數據庫提供了一定程度的邏輯獨立性; ( 4 )視圖能夠對機密數據提供安全保護。

(三)應用題

1. 

參考答案:

1)查詢201002班男生的信息。

select * from s where class=‘201002’ and ssex=‘男’

 

2)查詢最低分大於70、最高分小於90的學生的姓名。 

select s#  from sc  group s#

having min(grade)>70 and max(grade)<90

 

3)查詢所有女生記錄信息,並以班級降序排列。

select *  from s  where ssex=‘女’  order by class desc

 

4)查詢選取修數據結構課程的學生姓名及所在專業代碼。

select sname,scode#  from s,sc,c  where s.s#=sc.s# and sc.c#=c.c#  and cname=‘數據結構’;

5)查詢至少有5名學生選修的並以3開頭的課程號的平均分。

select c#,avg(grade) from sc  where c# like ‘3%’  group by c#  having count(*)>=5

 

2. 

參考答案:

1查詢來自南京或上海的學生學號和姓名。

select s#,sname from s where placeofb='上海' or placeofb='南京'

2查詢選修課程號為C401001的學號和成績,並要求對查詢結果按成績降序排列,如果成績相同則按學號升序排列。

select s#,grade from sc where c#='C401001' order by grade desc,s# asc

3查詢計算機科學或網絡工程專業姓張的學生的信息。

select * from s  where scode# in (select scode# from ss where ssname=’計算機科學’or ssname=’網絡工程’) and sname like '%'

4查詢缺少了成績的學生的學號和課程號。

select s#,c# from sc where grade is null

5)查詢每個專業的男、女生分別有多少人數。

select scode#,ssex,count(*)  from s group by scode#,ssex

 

3. 參考答案:

(1).找出店員人數不超過100人或者在長沙市的所有商店的代號和商店名。

SELECT A#,ANAME

FROM A;

WHERE WQTY<=100 OR CITY=“長沙”

 (2).找出供應書包的商店名。

SELECT A.ANAME

FROM A,B,AB;

    WHERE A.A#=AB.A# AND B.B#=AB.B# AND B.BNAME=“書包”

 (3).找出至少供應代號為256的商店所供應的全部商品的商店名和所在城市。

SELECT A.ANAME,A.CITY

FROM  A,B;

WHERE A.A#=AB.A# AND AB.B# IN

(SELECT AB.B#;

 FROM AB

WHERE A#=“256”)

 

4. 參考答案:

(1).CREATE  VIEW R-S-T

    AS SELECT R.A,B,C,S.D,E,F

       FROM R,S,T

       WHERE R.A=S.A AND S.D=T.D

(2).SELECT AVG(C),AVG(E)

    FROM R-S-T

    GROUP BY A

 

5. 參考答案:

(1).SELECT B

    FROM R,S

    WHERE R.A=S.A AND C>50

(2).UPDATE R

    SET B=‘b4’

    WHERE A IN

      (SELECT A

       FROM S

       WHERE C=40)

 

6. 參考答案:

(1).SELECT DISTINCT PROV

    FROM S

    WHERE SD=“信息系”

(2).SELECT SN,GR

    FROM S,SC

    WHERE SD=“英語系”AND CN=“計算機”AND S.SNO=SC.SNO

    ORDER BY GR DESC;

7. 參考答案:

(1).取出所有工程的全部細節;

SELECT *

FROM JB

(2).取出所在城市為上海的所有工程的全部細節;

SELECT *

FROM JB

WHERE CITY=“上海”

(3).取出重量最輕的零件代號;

SELECT PN

FROM PB

    WHERE WEIGHT=

(SELECT MIN(WEIGHT) FROM PB)

(4).取出為工程J1提供零件的供應商代號;

SELECT SN

FROM SPJB

WHERE JN=“J1”

(5).取出為工程J1提供零件P1的供應商代號;

SELECT SN

FROM SPJB;

    WHERE JN=‘Jl’AND PN=‘Pl’

(6).取出由供應商S1提供零件的工程名稱;

SELECT JB.JNAME

FROM JB,SPJB

    WHERE JB.JN=SPJB.JN AND SPJB.SN=‘S1’

(7).取出供應商S1提供的零件的顏色;

SELECT DISTINCT PB.COLOR

FROM PB,SPJB

WHERE PB.PN=SPJB.PN AND SPJB.SN=‘S1’

(8).取出為工程J1或J2提供零件的供應商代號;

SELECT DISTINCT SN

FROM SPJB

WHERE JN=‘J1’OR JN=‘J2’

(9).取出為工程J1提供紅色零件的供應商代號;

SELECT DISTINCT SPJB.SN

FROM SPJB,PB

    WHERE PB.PN=SPJB.PN AND SPJB.JN=‘J1’AND PB.COLOR=‘紅’

    

(10).取出為所在城市為上海的工程提供零件的供應商代號;

SELECT DISTINCT SPJB.SN

FROM SPJB, JB

    WHERE SPJB.JN=JB.JN AND JB.CITY‘上海’

(11).取出為所在城市為上海或北京的工程提供紅色零件的供應商代號;

SELECT SPJB.SN

FROM PB,JB SPJB

    WHERE SPJB.PN=PB.PN AND JB.JN=SPJB.JN AND PB.COLOR=’紅’ AND JB.CITY=’上海’

(12).取出供應商與工程所在城市相同的供應商提供的零件代號;

SELECT DISTINCT SPJB.PN

FROM SB,JB,SPJB

    WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY=JB.CITY

(13).取出上海的供應商提供給上海的任一工程的零件的代號;

SELECT SPJB.PN

FROM SB,JB,SPJB

    WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY=’上海’

(14).取出至少由一個和工程不在同一城市的供應商提供零件的工程代號;

SELECT DISTINCT SPJB.JN

FROM SB,JB,SPJB

WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY<>JB.CITY

(15).取出上海供應商不提供任何零件的工程的代號;

SELECT DISTINCT JN

FROM SPJB

    WHERE JN NOT IN

     (SELECT DISTINCT SPJB.JN

FROM SB,SPJB

       WHERE SB.SN=SPJB.SN AND SB.CITY=’上海’)

(16).取出這樣一些供應商代號,它們能夠提供至少一種由紅色零件的供應商提供的零件;

SELECT DISTINCT SPJB.SN

FROM PB,SPJB

    WHERE SPJB.PN IN

     (SELECT SPJB.PN

FROM SPJB,SB,PB

     WHERE SB.SN=SPJB.SN AND PB.PN=SPJB.PN AND PB.COLOR=’紅’)

(17).取出由供應商S1提供零件的工程的代號;

SELECT DISTINCT SPJB.JN

FROM SB,PB,SPJB

    WHERE SB.SN=SPJB.SN AND PB.PN=SPJB.PN AND SB.SN=’S1’

 

 

8. 參考答案:

(1).檢索在北京的供應商的名稱。

SELECT  SNAME  

FROM  SUPPLIER  

WHERE  ADDR=“北京”;

(2).檢索發給供應商S6的訂購單號。

SELECT  ONO  

FROM  ORDER  

WHERE  SNO=“S6”;

(3).檢索出職工E6發給供應商S6的訂購單號。

SELECT  ONO  

FROM  ORDER  

WHERE  SNO=“S6”  AND ENO=“E6”;

(4).檢索出向供應商S3發過訂購單的職工的職工號和倉庫號。

SELECT  ENO,WHNO  

FROM  EMPLOYEE  

WHERE  ENO  IN  

SELECT  ENO  

FROM  ORDER  

WHERE  SNO=“S3”);

或:SELECT  ENO,WHNO  

FROM EMPLOYEE,ORDER

WHERE  EMPLOYEE.ENO=ORDER.ENO  AND  ORDER.SNO=“S3”;

(5).檢索出目前與S3供應商沒有聯系的職工信息。

SELECT  ENO,WHNO    

FROM  EMPLOYEE

WHERE  ENO  NOT  IN  

SELECT  ENO  

FROM  ORDER  WHERE  SNO=“S3”);

(6).檢索出目前沒有任何訂購單的供應商信息。

SELECT  *    

FROM  SUPPLIER  

WHERE  SNO  NOT  IN  

SELECT  SNO   FROM  ORDER);

(7).檢索出和職工E1、E3都有聯系的北京的供應商信息。

SELECT  *  

FROM  SUPPLIER  

WHERE  ADDR=“北京” AND  

(EXISTS (SELECT * FROM  ORDER  WHERE   SNO=SUPPIER.SNO AND ENO=“E3”))

AND  

(EXISTS (SELECT  *  FROM  ORDER WHERE  SNO=SUPPIER.SNO  AND  ENO=“E6”));

(8).檢索出目前和華通電子公司有業務聯系的每個職工的工資。

SELECT  ENO,SALARY  

FROM  EMPLOYEE  

WHERE  ENO  IN  

SELECT  ENO  FROM  ORDER  WHERE  SNO  IN  

SELECT  SNO  FROM   SUPPLIER  WHERE   ADDR=“華通電子公司”));

或:SELECT  ENO,SALARY

FROM  EMPLOYEE,ORDER,SUPPLIER

WHERE EMPLOYEE.ENO=ORDER.ENO  AND  ORDER.SNO=SUPPLIER.SNO

  AND  SUPPLIER.ADDR=“華通電子公司”;

(9).檢索出與工資在1220元以下的職工沒有聯系的供應商的名稱。

SELECT  SNAME  

FROM  SUPPLIER  

WHERE  SNO  NOT IN  

SELECT  SNO  FROM  ORDER  WHERE  ENO  IN  

SELECT  ENO  FROM  EMPLOYEE  WHERE  SALARY<1220));

(10).檢索出向S4供應商發出訂購單的倉庫所在的城市。

SELECT  CITY  

FROM  WAREHOUSE

WHERE  WHNO  IN (SELECT  WHNO  FROM  EMPLOYEE  

                  WHERE  ENO  IN  (SELECT  ENO  FROM  ORDER  WHERE  SNO=“S4”));

或:SELECT  CITY  

FROM  WAREHOUSE,EMPLOYEE,ORDER

WHERE WAREHOUSE.WHNO=EMPLOYEE.WHNO

AND EMPLOYEE.ENO=ORDER.ENO  AND  ORDER.SNO=“S4”;

(11).檢索出在上海工作並且向S6供應商發出了訂購單的職工號。

SELECT  ENO  

FROM   EMPLOYEE  

WHERE  WHNO  IN  

(SELECT  WHNO  FROM  WAREHOUSE   WHERE  CITY=“上海”)

AND  (ENO  IN  SELECT ENO  FROM  ORDER  WHERE  SNO=“S6”);

或:SELECT  ENO  

FROM   EMPLOYEE,WAREHOUSE,ORDER

WHERE   EMPLOYEE.WHNO=WREHOUSE.WHNO

AND  WREHOUSE.CITY=“上海”

AND  EMPLOYEE.ENO=ORDER.ENO  AND  ORDER.SNO=“S6”;

(12).檢索出在廣州工作並且只向S6供應商發出了訂購單的職工號。

SELECT  ENO  

FROM   EMPLOYEE

WHERE  (WHNO  IN  SELECT  WHNO  FROM  WAREHOUSE  WHERE  CITY=“廣州”)

AND  (ENO  IN  SELECT ENO  FROM  ORDER  WHERE   SNO=“S6”)

AND  (NOT EXISTS  (SELECT *  FROM  ORDER  

WHERE SNO<>“S6” AND ENO=EMPLOYEE.ENO));

(13).檢索出由工資多於1230元的職工向北京的供應商發出的訂購單號。

SELECT  ONO  

FROM  ORDER  

WHERE  (ENO  IN  SELECT  ENO  FROM  EMPLOYEE  WHERE  SALARY>1230)

    AND  (SNO  IN  SELECT  SNO  FROM  SUPPLIER  WHERE   ADDR=“北京” );

或:SELECT  ONO  

FROM  ORDER,EMPLOYEE,SUPPLIER

WHERE  ORDER.ENO= EMPLOYEE.ENO  AND  EMPLOYEE.SALARY>1230

AND  ORDER.SNO= SUPPLIER.SNO  AND  SUPPLIER. ADDR=“北京”;

(14).檢索出倉庫的個數。

SELECT  COUNT(*)  FROM  WAREHOUSE;

(15).檢索出有最大面積的倉庫信息。

SELECT  *  

FROM  WAREHOUSE  OUTER

WHERE OUTER.SIZE=(SELECT  MAX(SIZE) FROM  WAREHOUSE INNER);

(16).檢索出所有倉庫的平均面積。

SELECT  AVG(SIZE)  FROM  WAREHOUSE;

(17).檢索出向S4供應商發出訂購單的那些倉庫的平均面積。

SELECT  AVG(SIZE)  

FROM  WAREHOUSE

WHERE  WHNO  IN  (SELECT  WHNO  FROM  EMPLOYEE

WHERE  ENO  IN  (SELECT  ENO  FROM  ORDER  WHERE  SNO=“S4”));

(18).檢索出每個城市的供應商個數。

SELECT  CITY,COUNT(SNO)  

FROM  SUPPLIER  

GROUP  BY  CITY;

(19).檢索出每個倉庫中工資多於1220元的職工個數。

SELECT  WHNO,COUNT(ENO)  

FROM  EMPLOYEE  

WHERE  SALARY>1220  

GROUP  BY  WHNO;

或:SELECT  WHNO,COUNT(ENO)  

FROM  EMPLOYEE

GROUP  BY  WHNO  

HAVING  SALARY>1220;

(20).檢索出和面積最小的倉庫有聯系的供應商的個數。

SELECT  COUNT(DISTINCT SNO)  

FROM  ORDER

WHERE  ENO  IN  

SELECT  ENO  FROM  EMPLOYEE

          WHERE  WHNO IN  

SELECT  WHNO  FROM  WAREHOUSE  OUTER

WHERE OUTER.SIZE=SELECT MIN(SIZE)

FROM  WAREHOUSE  INNER;

(21).檢索出工資低於本倉庫平均工資的職工信息。

SELECT  *  FROM  EMPLOYEE  OUTER

WHERE  OUTER.SALARY<(SELECT  AVG(SALARY)  FROM  EMPLOYEE  INNER

WHERE INNER.WHNO=OUTER.WHNO  GROUP  BY  WHNO);

 

9. 參考答案:

(1).插入一個新的供應商元組(S9,智通公司,沈陽)。

INSERT INTO  SUPPLIER  VALUES(S9,智通公司,沈陽);

(2).刪除目前沒有任何訂購單的供應商。

DELETE  FROM  SUPPLIER

WHERE  NOT EXISTS  (SELECT  * FROM  ORDER  WHERE  ORDER.SNO=SUPPLIER.SNO);

或:DELETE  FROM  SUPPLIER  

WHERE  SNO  NOT IN  (SELECT SNO  FROM  ORDER);

(3).刪除由在上海倉庫工作的職工發出的所有訂購單。

DELETE FROM ORDER  

WHERE  ENO IN  (SELECT  ENO   FROM  EMPLOYEE

WHERE  WHNO  IN  {SELECT  WHNO FROM  WAREHOUSE  WHERE  CITY=“上海”}};

(4).北京的所有倉庫增加100m2的面積。

UPDATE   WAREHOUSE  

SET  SIZE=SIZE+100  WHERE  CITY=“北京”;

(5).給低於所有職工平均工資的職工提高5%的工資。

UPDATE  EMPLOYEE OUTER

SET  OUTER.SALARY=OUTER.SALARY*1.05

WHERE  OUTER.SALARY<SELECT  AVG(SALARY) FROM  EMPLOYEE  INNER

 

10. 參考答案:

(1). 檢索所有選修了課程號為“C112”的課程的學生的學號和分數;

  SQL語句:

SELECT 學號,分數 FROM 學習 WHERE 課程號=’C112’

(SELECT 學號,分數 FROM 學習1分,WHERE 課程號=’C112’1分)

 

關系代數:

π學號,分數(課程號=’C112’(學習))

  (π學號,分數1分,課程號=’C112’(學習)1分。

               

(2). 檢索“英語”專業學生所學課程的信息,包括學號、姓名、課程名和分數;

 SQL語句:

SELECT 學生.學號,姓名,課程名,分數

FROM 學生,學習,課程       

WHERE 學習.學號=學生.學號 AND 學習.課程號=課程.課程號 AND 專業=’英語’   

       關系代數:

π學號,姓名,課程名,分數學號,姓名(專業=’英語(學生))學習π課程號,課程名(課程))

   

 

(3). 檢索“數據庫原理”課程成績高於90分的所有學生的學號、姓名、專業和分數;

SQL語句:

SELECT 學生.學號,姓名,專業,分數 

FROM 學生,學習,課程      

WHERE 學生.學號=學習.學號 AND 學習.課程號=課程.課程號 AND分數>90 AND 課程名=‘數據庫原理’

關系代數:

π學號,姓名,專業,分數學號,姓名,專業(學生)(分數>90(學習))π課程號,課程名課程名=’數據庫原理(課程)))

  

 

(4). 檢索沒學課程號為“C135”課程的學生信息,包括學號,姓名和專業;

SQL語句:

SELECT 學號,姓名,專業 

FROM 學生

        WHERE 學號 NOT IN      

(SELECT 學號 FROM 學習 WHERE 課程號=‘C135’) 

 

關系代數:

學號(學生)-π學號(課程號=‘C135’ (學習)))(π學號,姓名,專業(學生)

 

(5). 檢索至少學過課程號為“C135”和“C219”的課程的學生的信息,包括學號、姓名和專業。

 

SQL語句:

SELECT 學號,姓名,專業 FROM 學生 WHERE 學號 IN      

(SELECT X1.學號 FROM  學習 X1,學習 X2  WHERE X1.學號=X2.學號 AND X1.課程號=‘C135’AND X2.課程號=‘C219’)

關系代數:

 

學號,課程號(學習)÷π課程號(課程號=‘C135’課程號=‘C219’ (課程)))π學號,姓名,專業(學生)

 

11. 參考答案:

(1)ЛCN (ЛCNO,SNO(SC)÷ЛSNO(S)    ЛCNO,CN(C))  

SELECT CN

FROM C

WHERE NOT EXISTS (SELECT *  FROM S WHERE NOT EXISTS

                                    (SELECT * FROM SC

                                    WHERE SNO=S.SNO AND CNO=C.CNO));3分)

(2)ЛSN(SσG>90(SC) σCN=DB(C) )

  SELECT SN

  FROM S, SC, C

WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND CN=DBAND G>90;

 (3)CTEATE VIEW SDB

 AS

  SELECT SNO, SN

  FROM S, SC, C

  WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO AND C.CN=DB;

 

(4)UPDATE SC

  SET G=1.1*G

WHERE CNO IN

              (SELECT CNO

               FROM C

               WHERE CN=’英語’)

 

12. 參考答案:

SQL語句建立數據表SC,以(Sno, Cno)作為主鍵

CREATE TABLE SC (

  Sno CHAR(5),

  Cno CHAR(1),

  Grade INT,

  PRIMARY KEY (Sno,Cno)

);

② 向Student表插入一條記錄(95011, 張三, , 19CS

INSERT INTO Student VALUES('95011', '張三', '', 19, 'CS');

③ 檢索計算機系(CS)所有女同學的姓名和年齡;

SELECT Sname, Sage FROM Student

  WHERE Sdept='CS' AND Ssex='';

④ 檢索選修了2號課程學生的學號、姓名、成績,並按成績降序排序;

SELECT Student.Sno, Sname, Grade

  FROM Student INNER JOIN SC ON Student.Sno=SC.Sno

  WHERE SC.Cno='2'

  ORDER BY Grade DESC

⑤ 建立一個信息系(IS)所有不及格(Grade<60)學生的視圖vwStudent

CREATE VIEW vwStudent AS (

   SELECT Student.*

   FROM Student INNER JOIN SC ON Student.Sno=SC.Sno

   WHERE Sdept='IS' AND Grade < 60

)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM