1. 程式人生 > >經典的SQL面試題(六)

經典的SQL面試題(六)

1、在MS SQL Server中,用來顯示資料庫資訊的系統儲存過程是( )
A sp_ dbhelp
B sp_ db
C sp_ help
D sp_ helpdb

2、SQL語言中,刪除一個表的命令是( )
A DELETE
B DROP
C CLEAR
D REMORE

3、關係資料庫中,主鍵是(__)
A、為標識表中唯一的實體
B、建立唯一的索引,允許空值
C、只允許以表中第一欄位建立
D、允許有多個主鍵的

4、在Transact-SQL語法中,SELECT語句的完整語法較複雜,但至少包括的部分(1___),使用關鍵字(2___)可以把重複行遮蔽,將多個查詢結果返回一個結果集合的運算子是(3___),如果在SELECT語句中使用聚合函式時,一定在後面使用(4___)。
    ⑴ A、SELECT,INTO              B、SELECT,FROM
      C、SELECT,GROUP            D、僅SELECT
  ⑵ A、DISTINCT                          B、UNION
        C、ALL                                  C、TOP
  ⑶ A、JOIN                                B、UNION
        C、INTO                              C、LIKE
  ⑷ A、GROUP BY                      B、COMPUTE BY
        C、HAVING                          D、COMPUTE

5、語句DBCC SHRINKDATABASE (Sample, 25)中的25表示的意思是
A、25M
B、剩餘佔整個空間的25%
C、已用空間佔整個空間的25%
D、以上都不對

6、你是一個保險公司的資料庫開發人員,公司的保單資訊儲存在SQL Server 2000資料庫中,你使用以下指令碼建立了一個名為Policy的表:
CREATE TABLE Policy
(
PolicyNumber int NOT NULL DEFAULT (0),
InsuredLastName char (30) NOT NULL,
InsuredFirstName char (20) NOT NULL,
InsuredBirthDate datetime NOT NULL,
PolicyDate datetime NOT NULL,
FaceAmount money NOT NULL,
CONSTRAINT PK_Policy PRIMARY KEY (PolicyNumber)
)
每次公司銷售出一份保單,Policy表中就增加一條記錄,並賦予其一個新的保單號,你將怎麼做?

a.建立一個INSTEAD OF INSERT觸發器來產生一個新的保單號,並將這個保單號插入資料表中。
b.建立一個INSTEAD OF UPDATE觸發器來產生一個新的保單號,並將這個保單號插入資料表中。
c.建立一個AFTER UPDATE觸發器來產生一個新的保單號,並將這個保單號插入資料表中。
d.用AFTER UPDATE觸發器替代DEFAULT約束條件產生一個新的保單號,並將這個保單號插入資料表中。

7、在SQL語言中,如果要建立一個工資表包含職工號,姓名,職稱。工資等欄位。若要保證工資欄位的取值不低於800元,最合適的實現方法是:
A。在建立工資表時為”工資“欄位建立預設
B。在建立工資表時為”工資“欄位建立檢查約束
C。在工資表建立一個觸發器
D。為工資表資料輸入編寫一個程式進行控制

8、Select 語句中用來連線字串的符號是______.
A. “+” B. “&” C.“||” D.“|”

9、你是一個出版公司的資料庫開發人員,對特定的書名的每天的銷售情況建立了如下的儲存過程:
CREATE PROCEDURE get_sales_for_title
title varchar(80), @ytd_sales int OUTPUT
AS
SELECT @ytd_sales = ytd_sales
FROM titles
WHERE title = @title
IF @@ROWCOUNT = 0
RETURN(-1)
ELSE
RETURN(0)
另外建立了一個指令碼執行這個儲存過程,如果執行成功,將返回對應於書名的每天的銷售情況的報表,如果執行失敗,將返回“No Sales Found”,怎樣建立這個指令碼?

A. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’, @ytd
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO

B. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO

C. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’,@retval OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO

D. DECLARE @retval int
DECLARE @ytd int
EXEC @retval = get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO

10、You are a database developer for a container manufacturing company. The containers produced by your company are a number of different sizes and shapes. The tables that store the container information are shown in the Size, Container, and Shape Tables exhibit:
Size
SizeID
SizeName
Height
Container
ContainerID
ShapeID
SizeID
Shape
ShapeID
ShapeName
Measurements







A sample of the data stored in the tables is shown below:
Size Table
SizeID        SizeName        Height
1            Small          40
2            Medium          60
3            Large          80
4            Jumbo          100
Shape Table
ShapeID  ShapeName  Measurement
1        Triangle        10
2        Triangle        20
3        Triangle        30
4        Square          20
5        Square          30
6        Square          40
7        Circle          15
8        Circle          25
9        Circle          35
Periodically, the dimensions of the containers change. Frequently, the database users require the volume of a container. The volume of a container is calculated based on information in the shape and size tables.
You need to hide the details of the calculation so that the volume can be easily accessed in a SELECT query with the rest of the container information. What should you do?
A.    Create a user-defined function that requires ContainerID as an argument and returns the volume of the container.
B.    Create a stored procedure that requires ContainerID as an argument and returns the volume of the container.
C.    Add a column named volume to the container table. Create a trigger that calculates and stores volume in this column when a new container is inserted into the table.
D.    Add a computed column to the container table that calculates the volume of the container.

填空題(1空1分共20分)
1、 如果設計的表不符合第二正規化,可能會導致_______,________,_______。
2、 SQL是由_______語言,________語言,_______語言組成。
3、 SQL Server在兩個安全級上驗證使用者,分別是______________,_____________________。
4、 自定義函式由___________函式,_______________函式,___________________函式組成。
5、 備份策略的三種類型是__________備份,_______________備份,___________________備份組成。
6、 啟動一個顯式事務的語句為__________,提交事務的語句為__________,回滾事務的語句為__________
7、 表的每一行在表中是惟一的實體屬於__________完整性,使列的輸入有效屬於__________完整性,兩個表的主關鍵字和外關鍵字的資料應該對應一致屬於__________完整性。
簡答題(共20分)
1、 在幫助中[ ,...n ] 意思是什麼?(4分)
2、 請簡述一下第二正規化(4分)
3、 現有1銷售表,它們結構如下:(4分)
id int                      (標識號)
codno char(7)              (商品編碼)
codname varchar(30)        (商品名稱)
spec varchar(20)                        (商品規格)
price numeric(10,2)            (價格)
sellnum int                          (銷售數量)
deptno char(3)                    (售出分店編碼)
selldate datetime                    (銷售時間)
要求:寫出查詢銷售時間段在2002-2-15日到2002-4-29之間,分店編碼是01的所有記錄。
4、寫一個儲存過程,要求傳入一個表名,返回該表的記錄數(假設傳入的表在資料庫中都存在)(4分)
5、請簡述UPDATE 觸發器如何工作原理。(4分)
 
簡答題:(共40分)
1、(5分)使用一條SQL語句找到重複的值及重複的次數:有一資料表ZD_ks,其中有欄位BM,MC,。。。,請查詢出在ZD_ks中BM有重複的值及重複的次數,沒有的不要列出。如下表:
BM  DUPCOUNT
001   3
002   2

2、描述(5分)
表1 student 學生資訊表
ID    int      學生編號
Name  varchar  學生姓名
Sex    bit      性別(男0女1)
Class int      班級編號

表2 schedule 課程資訊表
ID    int      課程編號
Name  varchar  課程名稱

表3 Grade  成績資訊表
ID    int      自動編號
UID    int      學生編號
SID    int      課程編號
Num    int      考試成績

(a)求各班的總人數(1分)
(b)求1班女生和男生的平均成績(2分)
(c)各班"資料結構"(課程名稱)不及格的人數(2分)

3、問題描述:(30分)
本題用到下面三個關係表:
CARD    借書卡。  CNO 卡號,NAME 姓名,CLASS 班級
BOOKS    圖書。    BNO 書號,BNAME 書名,AUTHOR 作者,PRICE 單價,QUANTITY 庫存冊數
BORROW  借書記錄。 CNO 借書卡號,BNO 書號,RDATE 還書日期
備註:限定每人每種書只能借一本;庫存冊數隨借書、還書而改變。
要求實現如下15個處理:
  1.找出借書超過5本的讀者,輸出借書卡號及所借圖書冊數。(2分)
2.查詢借閱了"水滸"一書的讀者,輸出姓名及班級。(3分)
3.查詢過期未還圖書,輸出借閱者(卡號)、書號及還書日期。(3分)
4.查詢書名包括"網路"關鍵詞的圖書,輸出書號、書名、作者。(2分)
5.查詢現有圖書中價格最高的圖書,輸出書名及作者。(2分)
6.查詢當前借了"計算方法"但沒有借"計算方法習題集"的讀者,輸出其借書卡號,並按卡號降序排序輸出。(4分)
7.將"C01"班同學所借圖書的還期都延長一週。(2分)
8.從BOOKS表中刪除當前無人借閱的圖書記錄。(2分)
9.在BORROW表上建立一個觸發器,完成如下功能:如果讀者借閱的書名是"資料庫技術及應用",就將該讀者的借閱記錄儲存在BORROW_SAVE表中(注ORROW_SAVE表結構同BORROW表)。(4分)
10.建立一個檢視,顯示"力01"班學生的借書資訊(只要求顯示姓名和書名)。(3分)
11.查詢當前同時借有"計算方法"和"組合數學"兩本書的讀者,輸出其借書卡號,並按卡號升序排序輸出。(3分)
第二套
1、問題描述:
已知關係模式:
S (SNO,SNAME)                      學生關係。SNO 為學號,SNAME 為姓名
C (CNO,CNAME,CTEACHER)  課程關係。CNO 為課程號,CNAME 為課程名,CTEACHER 為任課教師
SC(SNO,CNO,SCGRADE)        選課關係。SCGRADE 為成績
要求實現如下5個處理:
  1. 找出沒有選修過“李明”老師講授課程的所有學生姓名
  2. 列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績
  3. 列出既學過“1”號課程,又學過“2”號課程的所有學生姓名
  4. 列出“1”號課成績比“2”號同學該門課成績高的所有學生的學號
  5. 列出“1”號課成績比“2”號課成績高的所有學生的學號及其“1”號課和“2”號課的成績

2、問題描述:
為管理崗位業務培訓資訊,建立3個表:
S (S#,SN,SD,SA)  S#,SN,SD,SA 分別代表學號、學員姓名、所屬單位、學員年齡
C (C#,CN )        C#,CN      分別代表課程編號、課程名稱
SC ( S#,C#,G )    S#,C#,G    分別代表學號、所選修的課程編號、學習成績

要求實現如下5個處理:
  1. 使用標準SQL巢狀語句查詢選修課程名稱為’稅收基礎’的學員學號和姓名
  2. 使用標準SQL巢狀語句查詢選修課程編號為’C2’的學員姓名和所屬單位
  3. 使用標準SQL巢狀語句查詢不選修課程編號為’C5’的學員姓名和所屬單位
  4. 使用標準SQL巢狀語句查詢選修全部課程的學員姓名和所屬單位
  5. 查詢選修了課程的學員人數
  6. 查詢選修課程超過5門的學員學號和所屬單位