第一篇:第6章結構化查詢語言-SQL_習題答案(范文)
第6章結構化查詢語言-SQL
習題參考答案
一、選擇題
1.A
2.A
3.B
4.A
5.D
6.C
7.A
8.A
9.C
10.D
二、填空題
1.PRIMARY KEY
2.WHERE,GROUP BY,ORDER BY
3.DISTINCT
4.BETWEEN … AND …,IN
5.UPDATE,ALTER TABLE
三、問答題
1.答:通過SQL語言可實現數據庫的全面管理,包括數據查詢、數據操縱、數據定義和數據控制4個方面,它是一種通用的關系數據庫語言。
2.答:
(1)CREATE TABLE 圖書(書號 C(5)PRIMARY KEY,書名 C(10),定價 D(8,2))
(2)INSERT INTO 圖書 VALUES(“B1001”,“Access數據庫基礎與應用”, 32)
(3)SELECT 圖書.書名, 圖書.定價 FROM 圖書 WHERE定價=
(SELECT MAX(定價)FROM 圖書, 圖書發行 WHERE 圖書.書號=圖書發行.書號)UNION
SELECT 圖書.書名, 圖書.定價 FROM 圖書 WHERE定價=
(SELECT MIN(定價)FROM 圖書, 圖書發行 WHERE圖書.書號=圖書發行.書號)
(4)SELECT 書號, 數量 FROM 圖書發行 WHERE 書號 IN
(SELECT 書號 FROM 圖書 WHERE 書名 LIKE '*數據庫*'))
(5)查詢藏有已發行的“Visual FoxPro程序設計基礎教程”一書的圖書館館名。
第二篇:SQL 結構化查詢語言速學寶典
第二章
create database db_sqlserver2--創建db_sqlserver2數據庫on
(name= db_sqlserver2_data,--文件的邏輯名稱
filename='e:mydatadb_sqlserver2_data.mdf',--數據庫文件要保存路徑及文件名
size=4,--文件的大小
maxsize=10,--文件可增大到的最大大小filegrowth=10%--文件的自動增量)
log on
(name= db_sqlserver2_log,filename='e:mydatadb_sqlserver12_log.ldf',size=1,maxsize=6,filegrowth=1)
create database db_sqlserver3
on
(name=db_sqlserver3_data,--第一個數據文件的邏輯名稱filename='e:mydatadb_sqlserver31_data.mdf',size=4,maxsize=10,filegrowth=10%),(name=Mydatabase22_data,--第二個數據文件的邏輯名稱filename='e:mydatadb_sqlserver32_data.mdf',size=3,maxsize=10,filegrowth=1)
log on
(name=Mydatabase21_log,--第一個日志文件的邏輯名稱filename='e:mydatadb_sqlserver31_log.ldf',size=1,maxsize=6,filegrowth=1),(name=Mydatabase22_log,--第二個日志文件的邏輯名稱filename='e:mydatadb_sqlserver32_log.ldf',size=1,maxsize=6,filegrowth=10%)
第三篇:SQL語言習題及答案
數據庫原理之關系數據庫SQL語言課后習題及答案
http://www.tmdps.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 NOT EXISTS
(SELECT *
FROM SC
WHERE S.S#=C.S#
AND SC.C#=C.C#)
SELECT *
FROM S
WHERE S# NOT IN
(SELECT *
FROM SC
WHERE 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,F(σC=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 (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語句查詢結果是多個元組時,此時宿主語言程序無法使用,一定要用游標機制把多個元組一次一個地傳送給宿主語言處理。 SQL結構化查詢語句 一、數據定義功能 創建表:Createtable 表名(字段名……)修改表:Altertable表名 刪除表:Droptable表名 二、數據操縱功能 數據插入:Insertinto 表名values(…,…,)數據更新:Update表名Set表達式 Where 條件 數據刪除:DeleteFrom 表名Where 條件 三、查詢功能 SELECT*FROM表名 WHERE條件 ORDERBY 字段排序 GROUPBY 字段分組 函數:SUM()AVG()COUNT()MAX()MIN()去向: INTOTABLE表 INTOCURSOR臨時表 INTOARRAY數組 閱讀下面的語段,完成后面的練習,大自然的語言習題精選。 立春過后,大地漸漸地沉睡中_______(A.清醒B.蘇醒;C.醒悟;D.復蘇)過來。冰雪融化,草木萌發,各種花_________(A.次第;B.連續;C.陸續;D.全部)開放。再過兩個月,燕子翩然歸來。不久,布谷鳥也來了。于是轉入炎熱的夏季,這是植物孕育果實的時期。到了秋天,果實成熟,植物的葉子漸漸變黃,在秋風中_________(A.紛紛;B.刷刷;C.簌簌)的落下來。北雁南飛,活躍在田間草際的昆蟲也都銷聲匿跡。到處呈現一片衰草連天的景象,準備迎接風雪載途寒冬。在地球上溫帶和亞熱帶區域里,年年如是,周而復始。 幾千年來,勞動人民注意了草木榮枯、候鳥去來等自然現象同氣候的關系,據以安排農事,語文試題《大自然的語言習題精選》。杏花開了,就好像大自然在傳語要趕快耕地;桃花開了,又好像在暗示要趕快種谷子。布谷鳥開始唱歌,勞動人民懂得它在唱什么:“阿公阿婆,割去播禾。”這#者來,花香鳥語,草長鶯飛,都是大自然的語言。 1.在語段中橫線上填上恰當的詞語。 2.解釋詞語:銷聲匿跡翩然 3.這兩段文字的說明對象是() A.物候現象;B.氣候變化;C.物候規律;D.四季景色變化。 4.這兩段文字的說明順序是:____________________________,主要的說明方法是:_____________________________ 5.去掉“溫帶和亞熱帶區域里”這幾個詞語行不行,為什么? 參考答案: 1.B A C 2.銷聲匿跡:這里指消失了鳴叫聲,藏起了形跡。翩然:動作輕快的樣子。 3.A 4.時間順序;舉例子 5.不行。以上情況只限于“地球上溫帶和亞熱帶區域里”。第四篇:SQL結構化查詢語句
第五篇:大自然的語言習題及答案