一份基本的SQL測試題

 

數據庫基礎測試題

 

姓名:          工號:   

 

一、單項選擇題,把合適的選項編號填寫在括號內。(每小題1,10)

 

1在數據庫技術中,實體-聯繫模型是一種( A )

A.概念數據模型   B.結構數據模型  C.物理數據模型   D.邏輯數據模型

 

2關係數據模型通常由3部分組成,它們是( B )

A.數據結構,數據通信,關係操作

B.數據結構,數據操作,數據完整性約束

C.數據通信,數據操作,數據完整性約束

D.數據結構,數據通信,數據完整性約束

 

3SQL語言中,刪除一個表的命令是( B )

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

 

4.在SQL的查詢語句中,order by選項實現對結果表的(D)功能

A. 分組統計        B. 求和        C. 查找        D. 排序

 

5. SQL Server觸發器主要針對下列語句創建( B )

A. SELECTINSERTDELETE
B. INSERT
UPDATEDELETE
C. SELECT
UPDATEINSERT
D. INSERT
UPDATECREATE

 

6. 下列哪個不是sql 數據庫文件的後綴。 C

A.mdf         B.ldf       C.tif     D.ndf

 

7. SQL中,建立表用的命令是 (  A    )

A.CREATE TABLE                B.CREATE RULE

C.CREATE VIEW                 D.CREATE INDEX

 

8. SQL語言中,條件“年齡BETWEEN 40 AND 50表示年齡在4050之間,且(    A  )

A.包括40歲和50             B.不包括40歲和50

C.包括40歲但不包括50       D.包括50歲但不包括40

 

9. 模式查找like '_a%',下面哪個結果是可能的B

A.aili                        B. bai

C.bba                         D.cca

 

10. 若某表滿足1NF,且其所有屬性合起來組成主健,則一定還滿足範式 ( C )

A、只有2NF                     B、只有3NF

C2NF3NF                    D、沒有

 

 

二、填空題,把合適內容填在橫線上。(每空1,19)

 

1.DBMS是指_______數據庫管理系統_________

 

2視圖是由一個或多個______或視圖導出的__虛表____或查詢表

 

3觸發器主要有2種類型,即_____DML_____DDL_______

 

4數據完整性的類型有____引用____完整性、____實體___完整性、__ _____完整性和用戶自定義完整性。

 

5.要用SQL Server驗證方式訪問SQL Server數據庫服務器,用戶必須提供正確的_____用戶名________密碼______

 

6.在基本表的某個列上建立索引,可以使基本表中的所有記錄按該列值的__升序__ _____降序_____排列。

 

7CHECK約束被稱爲___用戶自定義_____約束,UNIQUE約束被稱爲__唯一________約束。

 

8______存儲過程_是已經存儲在SQL Server服務器中的一組預編譯過的Transact-SQL語句。

 

9事務的ACID屬性是指____原子性____性、__一致______性、_隔離______性和__持久_____性。

 

三、根據下面所給的商品庫、教學庫,寫出下列每條SQL查詢語句的執行結果,或者寫出下列每條語句或程序段的功能。(每題3分,15分)

商品庫的數據庫兩張表包括

商品表1(商品代號char(8),分類名char(8)單價float數量int)

商品表2(商品代號char(8),產地char(8)品牌char(8)

 

教學的數據庫三張表,包括:

學生(學生號 char(7),姓名 char(6),性別 char(2),出生日期 datetime,專業 char(10),年級 int)

課程(課程號 char(4),課程名 char(10),課程學分 int)

選課(學生號 char(7),課程號 char(4),成績 int)

 

1select x.商品代號,分類名,數量,品牌  

         from 商品表1 x,商品表2 y

      where x.商品代號=y.商品代號

 

2select count(distinct 產地) as 產地數

         from商品表2 

 

3select 課程.課程號,課程.課程名,count(*)as選課人數

      from 課程,選課

      where課程.課程號=選課.課程號

      group by 課程.課程號,課程.課程名

 

4 select x.學生號y.學生號y.課程號

      from 學生x,選課y

      where x.學號=@s1 and y.學號=@s2

          and x.課程號=y.課程號

 

5. select *

      from 課程

      where exists (select *

      from 選課,課程

where課程.課程號=選課.課程號

 

四、根據第三題所給的商品庫和教學庫,按照下列給的每種功能寫出相應的查詢語句。(每題4分,32分)

 

1.從商品庫中查詢出數量大於10的商品種數

select count(商品代號)

  from 商品表1

where 數量>10

 

 

2.從商品庫中查詢出每類(即分類名相同)商品的最高單價

select max(價格)

from 商品表1

group by 分類名

 

 

3.商品庫中查詢出比所有商品單價的平均值要高的全部商品。

select *

 from  商品表1

 where 單價>(select Avg(單價) from 商品表1 )

 

4.從商品庫中查詢出同一類商品多於一種的所有分類名。

Select 分類名

from (select 分類名, count(分類名) as 類型商品數

           from 商品表1

           group by 分類名

          )

where 類型商品數>1

 

 

5.從教學庫中查詢出被24名學生選修的所有課程

select a.課程號,b.課程名 ,count(學生號) as num from 課程 a,選課 b

where  a.課程號=b.課程號

group by a.課程號,b.課程名

having num between 2 and 4

 

 

 

6. 寫一個課程表的觸發器,當要刪除的課程還沒有學生選修,允許刪除,否則不允許刪除

Create trigger tri課程表

         On 課程

         For delete

         As

         If(exists(select * from 選課,deleted where 選課號 =deleted.選課號))

         Print ‘不允許刪除’

         Else

         Print ‘允許刪除’

Rollback  transaction

 

 

7. 查詢選修課程超過5門的學生姓名和所選修課程的數目?

Select 姓名,num from 學生表 a,(

select 學生號,count(選課.學生號) num

From 選課

Group by 學生號

Having num>5) b where a.學生號 = b.學生號

 

8. 寫一個存儲過程,輸入選修課程名,得到選修該課程的所有學生的學號和姓名

Create  procedure  mypro

@in char(10)

As  select  學生.學生號,學生.姓名 

from 課程 inner join選課 on課程. 課程號=選課. 課程號 inner join學生 on 學生. 學生號=選課. 學生號 where 課程. 課程名=@in

 

五、問答題。(10)

1.  使用保存點是否可以保存事務的一部分?爲什麼?

可以

 

 

 

 

2.  什麼是存儲過程?存儲過程有哪些優點?用什麼來調用?

   存儲過程(Stored Procedure)是一組編譯好存儲在服務器上的完成特定功能T-SQL代碼,是某數據庫的對象。客戶端應用程序可以通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行存儲過程。

 優點:

   (1)允許標準組件式編程,增強重用性和共享性,無須重寫sql

   (2)能夠實現較快的執行速度

   (3)能夠減少網絡流量

   (4)可被作爲一種安全機制來充分利用

  exec 存儲過程名 來調用

 

六、綜合題。(14)

1. 查詢A(ID,Name)表中第3140條記錄,ID作爲主鍵可能是不是連續增長的列

法一 Select top 10 * From A Where ID not in (select top 30 * from A)

法二 go

       Select IDENTITY(INT,1,1) AS ID,NAME

       Into B

       From A

       go

       Select * from B where ID between 31 and 40

       go

 

 

2.  查詢表A中存在ID重複三次以上的記錄

Select *

From A

Where id in(select ID from A group by id having count(id)>3)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章