第一篇:數(shù)據(jù)庫(kù) sql 習(xí)題及答案
/*
Question 1:Find the titles of all movies directed by Steven Spielberg.select title from movie where director='Steven Spielberg'
Question 2:Find all years that have a movie that received a rating of 4 or 5, and sort them in increasing order.select distinct year from movie,rating where movie.mid=rating.mid and stars in(4,5)order by year
Question 3:Find the titles of all movies that have no ratings
select title from movie where mID in
(select mid from Movie except
select mid from rating)
select title from movie except
select title from movie,rating where movie.mid=rating.mid
Question 4:Some reviewers didn't provide a date with their rating.Find the names of all reviewers who have ratings with a NULL value for the date.select name from reviewer,rating where reviewer.rid=rating.rid and ratingdate is null
Question 5:Write a query to return the ratings data in a more readable format: reviewer name, movie title, stars, and ratingDate.Also, sort the data, first by reviewer name, then by movie title, and lastly by number of stars.select name,title,stars,ratingdate from movie,rating,reviewer where movie.mid=rating.mid and reviewer.rid=rating.rid order by name,title,stars
Question 6:For all cases where the same reviewer rated the same movie twice and gave it a higher rating the second time, return the reviewer's name and the title of the movie.select name,title
from rating as F,Rating as S,Movie,Reviewer where F.rID=S.rID and F.mID=S.mID and F.stars and F.ratingDate select name,title from movie,reviewer,(select r1.rid,r1.mid from rating as r1,rating as r2 where r1.rid=r2.rid and r1.mid=r2.mid and r1.ratingdate>r2.ratingdate and r1.stars>r2.stars)as r where movie.mid=r.mid and reviewer.rid=r.rid Question 7:For each movie, find the highest number of stars that movie received as a rating.Return the movie title and number of stars.Sort by movie title.select title,MAX(stars)as max_star from rating,Movie where Rating.mID=Movie.mID group by title order by title select title,maxrating from movie,(select mid,max(stars)as maxrating from rating group by mid)as r where movie.mid=r.mid order by title Question 8:For each movie, return the title and the ‘rating spread(范圍)', that is, the difference between highest and lowest ratings given to that movie.Sort by rating spread from highest to lowest, then by movie title.select title,MAX(stars)-MIN(stars)as rating_spread from rating,Movie where Rating.mID=Movie.mID group by title order by rating_spread desc,title select title,spread as “rating spread” from movie,(select mid,max(stars)-min(stars)as spread from rating group by mid)as r where movie.mid=r.mid order by spread desc,title Question 9:Find the difference between the average rating of movies released before 1980 and the average rating of movies released after 1980.(Make sure to calculate the average rating for each movie, then the average of those averages for movies before 1980 and movies after.Don't just calculate the overall average rating before and after 1980.) select F.avg_star-S.avg_star from,(select AVG(avg_star)as avg_star from(select Rating.mID,AVG(stars)as avg_star from Rating left join Movie on Rating.mID=Movie.mID where year>=1980 group by Rating.mID)as S(select AVG(avg_star)as avg_star from(select Rating.mID,AVG(stars)as avg_star from Rating left join Movie on Rating.mID=Movie.mID where year<1980 group by Rating.mID)as F)as F)as S select r1979.avgm-r1980.avgm from ,Question 10:Add the reviewer Roger Ebert to your database, with an rID of 209.insert into Reviewer values(209,'Roger Ebert') Question 11: Insert 5-star ratings by James Cameron for all movies in the database.Leave the review date as NULL.insert into Rating(rID,mID,stars)select rid,mID,5 as stras from movie,(select rid from Reviewer where name='James Cameron')as T insert into rating(rid,mid,stars)select rid,mid,5 from reviewer,movie where name='James Cameron' Question 12:For all movies that have an average rating of 4 stars or higher, add 25 to the release year.(Update the existing tuples;don't insert new tuples.) update Movie set year=year+25(select sum(avgrating)/count(*)as avgM from (select avg(stars)as avgrating from rating,movie where movie.mid=rating.mid and year>=1980 group by movie.mid)(select sum(avgrating)/count(*)as avgM from (select avg(stars)as avgrating from rating,movie where movie.mid=rating.mid and year<1980 group by movie.mid) as r) as r1979 as r) as r1980 where mID in (select mID from Rating group by mID having AVG(stars)>=4) */ 1、在數(shù)據(jù)庫(kù)技術(shù)中,獨(dú)立于計(jì)算機(jī)系統(tǒng)的模型是_C__。A、面向?qū)ο蟮哪P虰、關(guān)系模型C、E-R模型D、層次模型 2、數(shù)據(jù)庫(kù)系統(tǒng)的控制中樞是__B_。A、數(shù)據(jù)庫(kù)、b、數(shù)據(jù)庫(kù)管理系統(tǒng)C、數(shù)據(jù)庫(kù)管理員D、數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng) 3、使用SQL命令將學(xué)生表STUDENT中的學(xué)生年齡AGE字段的值增加1歲,應(yīng)該使用的命令是__C_。 A、UPDATE SET AGE WITH AGE+1 B、REPLACE AGE WITH AGE+1 C、UPDATE STUDENT SET AGE=AGE+1 D、UPDATE STUDENT AGE WITH AGE+1 4、在關(guān)系數(shù)據(jù)庫(kù)中,建立數(shù)據(jù)庫(kù)表時(shí),將年齡字段值限制在12~40歲之間的這種約束屬于__B__。 A、視圖完整性約束B、域完整性約束C、參照完整性約束D、實(shí)體完整性約束 5、在 SQL 語句中,與 X BETWEEN 20 AND 30 等價(jià)的表達(dá)式是__D_。A、X>=20 AND X<30 B、X>20 AND X<30 C、X>20 AND X<=30 D、X>=20 AND X<=30 6、在數(shù)據(jù)庫(kù)中,概念模型是_D__。A、用于現(xiàn)實(shí)的建模,與具體的DBMS有關(guān)B、用于信息世界的建模,與具體的DBMS有關(guān) C、用于現(xiàn)實(shí)的建模,與具體的DBMS無關(guān)D、用于信息世界的建模,與具體的DBMS無關(guān) 7、數(shù)據(jù)庫(kù)的并發(fā)操作可能帶來的問題包括__B_。A非法用戶的使用B丟失更新C數(shù)據(jù)獨(dú)立性會(huì)提高D增加數(shù)據(jù)冗余度 8、在關(guān)系數(shù)據(jù)庫(kù)中,模式對(duì)應(yīng)的是__A___。A、視圖和所有基本表 B、視圖和部分基本表 C、基本表 D、索引 9、能實(shí)現(xiàn)絕對(duì)的與平臺(tái)無關(guān)性的Web數(shù)據(jù)庫(kù)訪問技術(shù)是_D_。A、ADO B、ActiveX C、WebbaseAPI D、JDBC 10、在下列描述中,正確的描述是__B___。 A、SQL 是一種過程化語言B、SQL 采用集合操作方式 C、SQL 不能嵌入到高級(jí)語言程序中 D、SQL 是一種 DBMS 11、數(shù)據(jù)庫(kù)系統(tǒng)是由__A__組成的。A、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)和用戶 B、數(shù)據(jù)文件、命令文件和報(bào)表 C、數(shù)據(jù)庫(kù)文件結(jié)構(gòu)和數(shù)據(jù) D、常量、變量和函數(shù) 12、在SQL查詢時(shí),使用WHERE子句指出的是__B__。A、查詢目標(biāo)B、查詢條件C、查詢視圖D、查詢結(jié)果 13、在下列 RDMBS 產(chǎn)品中,屬于小型數(shù)據(jù)庫(kù)系統(tǒng)的是_A_。A、Access B、Oracle C、Sybase D、Informix 14、數(shù)據(jù)庫(kù)類型是按照_A_來劃分的。 A、數(shù)據(jù)模型B、記錄形式C、數(shù)據(jù)存取方法D、文件形式 15、作為Microsoft Office家族成員之一的_A_數(shù)據(jù)庫(kù),能夠與其他Office組件進(jìn)行數(shù)據(jù)交換共享數(shù)據(jù)資源,易于生成集文字處理、圖表生成和數(shù)據(jù)管理于一體的辦公自動(dòng)化系統(tǒng)。A、Access B、Oracle C、Sybase D、Informix 16、數(shù)據(jù)庫(kù)管理系統(tǒng)更適合于_D_方面的應(yīng)用。A、CAD B、過程控制C、科學(xué)計(jì)算D、數(shù)據(jù)處理 17、下列四組SQL命令,全部屬于數(shù)據(jù)定義語句的命令是_C__。A、CREATE,DROP,ALTER B、CREATE,DROP,UPDATE C、CREATE,DROP,GRANT D、CREATE,DROP,SELECT 18、通過Internet及瀏覽器處理的數(shù)據(jù)庫(kù),應(yīng)該是_C__處理。A、集中式 B、分布式 C、主從結(jié)構(gòu)式D、以上3種模式 19、數(shù)據(jù)的邏輯獨(dú)立性是指__D_。A、數(shù)據(jù)與存儲(chǔ)結(jié)構(gòu)的邏輯獨(dú)立性 B、數(shù)據(jù)元素之間的邏輯獨(dú)立性 C、存儲(chǔ)結(jié)構(gòu)與物理結(jié)構(gòu)的邏輯獨(dú)立性 D、數(shù)據(jù)與程序的邏輯獨(dú)立性 20、在數(shù)據(jù)庫(kù)技術(shù)中,獨(dú)立于計(jì)算機(jī)系統(tǒng)的模型是_C__。A面向?qū)ο蟮哪P?/p> B關(guān)系模型 C、E-R模型 D、層次模型 21、關(guān)系代數(shù)的3個(gè)基本運(yùn)算是–D--、投影、連接。A、關(guān)系與B、蘊(yùn)含C、關(guān)系或D、選擇 22、下面命題不正確的是:A、若冗余數(shù)據(jù)可以控制,則數(shù)據(jù)更新的一致性得以保證 B、數(shù)據(jù)庫(kù)減少了不必要的數(shù)據(jù)冗余C、數(shù)據(jù)庫(kù)的數(shù)據(jù)可以共享D、數(shù)據(jù)庫(kù)中不存在數(shù)據(jù)冗余 23、在基本SQL中不可以實(shí)現(xiàn): A、定義視圖B、并發(fā)控制C、定義基表D、查詢視圖和基表 24、用二維表來表示實(shí)體及實(shí)體之間聯(lián)系的數(shù)據(jù)模型稱為_C___。 A、實(shí)體-聯(lián)系模型B、層次模型C、關(guān)系模型D、網(wǎng)狀模型 25、查找工資在600元以上并且職稱為工程師的紀(jì)錄,邏輯表達(dá)式為_D___。 A、“工資”>600.OR.職稱=“工程師” B、工資>600.AND.職稱=工程師 C、“工資”>600.AND.“職稱”=“工程師” D、工資>600.AND.職稱=“工程師” 26、數(shù)據(jù)庫(kù)鏡像可以用于__C_。(1分) A、實(shí)現(xiàn)數(shù)據(jù)庫(kù)的安全性 B、實(shí)現(xiàn)數(shù)據(jù)共享C、進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)或并發(fā)操作D、保證數(shù)據(jù)庫(kù)的完整性 27、在下列類型的數(shù)據(jù)庫(kù)系統(tǒng)中,應(yīng)用最廣泛的是__C___。(1分) A、分布型數(shù)據(jù)庫(kù)系統(tǒng)B、邏輯型數(shù)據(jù)庫(kù)系統(tǒng)C、關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)D、層次型數(shù)據(jù)庫(kù)系統(tǒng) 28、在下列描述中,正確的描述是__B__。(1分)A、SQL 是一種過程化語言B、SQL 采用集合操作方式 C、SQL 不能嵌入到高級(jí)語言程序中 D、SQL 是一種 DBMS 數(shù)據(jù)庫(kù)原理之關(guān)系數(shù)據(jù)庫(kù)SQL語言課后習(xí)題及答案 http://www.tmdps.cnAME,TEACHER) 試用SQL的查詢語句表達(dá)下列查詢: (1)檢索LIU老師所授課程的課程號(hào)和課程名。 SELECT C#,CNAME FROM C WHERE TEACHER=?LIU? (2)檢索年齡大于23歲的男學(xué)生的學(xué)號(hào)和姓名。 SELECT S#,SNAME FROM S WHERE(AGE>23)AND(SEX=?M?) (3)檢索至少選修LIU老師所授課程中一門課程的女學(xué)生姓名。 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:有多種寫法,比如聯(lián)接查詢寫法: SELECT SNAME FROM S,SC,C WHERE SEX=?F? AND SC.S#=S.S# AND SC.C#=C.C# AND TEACHER='LIU' 但上一種寫法更好一些。 (4)檢索WANG同學(xué)不學(xué)的課程的課程號(hào)。 SELECT C# FROM C WHERE C# NOT IN (SELECT C# FROM SC WHERE S# IN (SELECT S# FROM S WHERE SNAME='WANG')) (5)檢索至少選修兩門課程的學(xué)生學(xué)號(hào)。 SELECT DISTINCT X.SNO FROM SC X,SC Y WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO Notice:對(duì)表SC進(jìn)行自連接,X,Y是SC的兩個(gè)別名。 (6)檢索全部學(xué)生都選修的課程的課程號(hào)與課程名。 SELECT C#,CNAME FROM C WHERE NOT EXISTS (SELECT * FROM S WHERE S# NOT IN (SELECT * FROM SC WHERE SC.C#=C.C#)) 要從語義上分解:(1)選擇課程的課程號(hào)與課程名,不存在不選這門課的同學(xué)。 其中,“不選這門課的同學(xué)”可以表示為: 或者 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老師所授課的學(xué)生學(xué)號(hào)。 SELECT DISTINCT S# FROM SC WHERE C# IN (SELECT C# FROM C WHERE TEACHER='LIU')) 3.3 設(shè)有兩個(gè)基本表R(A,B,C)和S(D,E,F(xiàn)),試用SQL查詢語句表達(dá)下列關(guān)系代數(shù)表達(dá)式: (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 設(shè)有兩個(gè)基本表R(A,B,C)和S(A,B,C)試用SQL查詢語句表達(dá)下列關(guān)系代數(shù)表達(dá)式: (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語言的關(guān)系代數(shù)特點(diǎn)和元組演算特點(diǎn)。 (P61-62) 3.6 試用SQL查詢語句表達(dá)下列對(duì)教學(xué)數(shù)據(jù)庫(kù)中三個(gè)基本表S、SC、C的查詢: (1)統(tǒng)計(jì)有學(xué)生選修的課程門數(shù)。 SELECT COUNT(DISTINCT C#)FROM SC (2)求選修C4課程的學(xué)生的平均年齡。 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老師所授課程的每門課程的學(xué)生平均成績(jī)。 SELECT CNAME,AVG(GRADE) FROM SC ,C WHERE SC.C#=C.C# AND TEACHER='LIU' GROUP BY C# (4)統(tǒng)計(jì)每門課程的學(xué)生選修人數(shù)(超過10人的課程才統(tǒng)計(jì))。要求輸出課程號(hào)和選修人數(shù),查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按課程號(hào)升序排列。 SELECT DISTINCT C#,COUNT(S#) FROM SC GROUP BY C# HAVING COUNT(S#)>10 ORDER BY 2 DESC, C# ASC (5)檢索學(xué)號(hào)比WANG同學(xué)大,而年齡比他小的學(xué)生姓名。 SELECT X.SNAME FROM S AS X, S AS Y WHERE Y.SNAME='WANG' AND X.S#>Y.S# AND X.AGE (6)檢索姓名以WANG打頭的所有學(xué)生的姓名和年齡。 SELECT SNAME,AGE FROM S WHERE SNAME LIKE 'WANG%' (7)在SC中檢索成績(jī)?yōu)榭罩档膶W(xué)生學(xué)號(hào)和課程號(hào)。 SELECT S#,C# FROM SC WHERE GRADE IS NULL (8)求年齡大于女同學(xué)平均年齡的男學(xué)生姓名和年齡。 SELECT SNAME,AGE FROM S AS X WHERE X.SEX='男' AND X.AGE>(SELECT AVG(AGE)FROM S AS Y WHERE Y.SEX='女') (9)求年齡大于所有女同學(xué)年齡的男學(xué)生姓名和年齡。 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更新語句表達(dá)對(duì)教學(xué)數(shù)據(jù)庫(kù)中三個(gè)基本表S、SC、C的各個(gè)更新操作: (1)往基本表S中插入一個(gè)學(xué)生元組(?S9?,?WU?,18)。 INSERT INTO S(S#,SNAME,AGE)VALUES('59','WU',18) (2)在基本表S中檢索每一門課程成績(jī)都大于等于80分的學(xué)生學(xué)號(hào)、姓名和性別,并把檢索到的值送往另一個(gè)已存在的基本表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中刪除尚無成績(jī)的選課元組。 DELETE FROM SC WHERE GRADE IS NULL (4)把WANG同學(xué)的學(xué)習(xí)選課和成績(jī)?nèi)縿h去。 DELETE FROM SC WHERE S# IN (SELECT S# FROM S WHERE SNAME='WANG') (5)把選修MATHS課不及格的成績(jī)?nèi)臑榭罩怠?/p> UPDATE SC SET GRADE=NULL WHERE GRADE<60 AND C# IN (SELECT C# FROM C WHERE CNAME='MATHS')(6)把低于總平均成績(jī)的女同學(xué)成績(jī)提高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課程的成績(jī),若成績(jī)小于等于75分時(shí)提高5%,若成績(jī)大于75分時(shí)提高4%(用兩個(gè)UPDATE語句實(shí)現(xiàn))。 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中提到“倉(cāng)庫(kù)管理”關(guān)系模型有五個(gè)關(guān)系模式: 零件 PART(P#,PNAME,COLOR,WEIGHT) 項(xiàng)目 PROJECT(J#,JNAME,DATE) 供應(yīng)商 SUPPLIER(S#,SNAME,SADDR) 供應(yīng) P_P(J#,P#,TOTOAL) 采購(gòu) P_S(P#,S#,QUANTITY) (1)試用SQL DDL語句定義上述五個(gè)基本表,并說明主鍵和外鍵。 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#),F(xiàn)OREIGN KEY(J#)REFERENCE PROJECT(J#),F(xiàn)OREIGN KEY(P#)REFERENCE PART(P#)) CREATE TABLE P_S (P# CHAR(4),S# CHAR(4),QUANTITY INTEGER,PRIMARY KEY(P#,S#),F(xiàn)OREIGN KEY(P#)REFERENCE PART(P#),F(xiàn)OREIGN KEY(S#)REFERENCE SUPLIER(S#)) (2)試將PROGECT、P_P、PART三個(gè)基本表的自然聯(lián)接定義為一個(gè)視圖VIEW1,PART、P_S、SUPPLIER 三個(gè)基本表的自然聯(lián)接定義為一個(gè)視圖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)試在上述兩個(gè)視圖的基礎(chǔ)上進(jìn)行數(shù)據(jù)查詢: 1)檢索上海的供應(yīng)商所供應(yīng)的零件的編號(hào)和名字。 SELECT P#,PNAME FROM VIEW2 WHERE SADDR='SHANGHAI' 2)檢索項(xiàng)目J4所用零件的供應(yīng)商編號(hào)和名字。 SELECT S#,SNAME FROM VIEW2 WHERE P# IN(SELECT P# FROM VIEW1 WHERE J#='J4') 3.9 對(duì)于教學(xué)數(shù)據(jù)庫(kù)中基本表SC,已建立下列視圖: CREATE VIEW S_GRADE(S#,C_NUM,AVG_GRADE) AS SELECT S#,COUNT(C#),AVG(GRADE) FROM SC GROUP BY S# 試判斷下列查詢和更新是否允許執(zhí)行。若允許,寫出轉(zhuǎn)換到基本表SC上的相應(yīng)操作。 (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 預(yù)處理方式對(duì)于嵌入式SQL的實(shí)現(xiàn)有什么重要意義? 預(yù)處理方式是先用預(yù)處理程序?qū)υ闯绦蜻M(jìn)行掃描,識(shí)別出SQL語句,并處理成宿主語言的函數(shù)調(diào)用形式; 然后再用宿主語言的編譯程序把源程序編譯成目標(biāo)程序。這樣,不用擴(kuò)充宿主語言的編譯程序,就能處理SQL語句。 3.11 在宿主語言的程序中使用SQL語句有哪些規(guī)定? 在宿主語言的程序中使用SLQ語句有以下規(guī)定: (1)在程序中要區(qū)分SQL語句與宿主語言語句 (2)允許嵌入的SQL語句引用宿主語言的程序變量(稱為共享變量),但有兩條規(guī)定: 1)引用時(shí),這些變量前必須加“:”作為前綴標(biāo)識(shí),以示與數(shù)據(jù)庫(kù)中變量有區(qū)別。 2)這些變量由宿主語言的程序定義,并用SQL的DECLARE語句說明。 (3)SQL的集合處理方式與宿主語言單記錄處理方式之間要協(xié)調(diào)。需要采用游標(biāo)機(jī)制,把集合操作轉(zhuǎn)換成單記錄處理方式。 3.12 SQL的集合處理方式與宿主語言單記錄處理方式之間如何協(xié)調(diào)? 由于SQL語句處理的是記錄集合,而宿主語言語句一次只能處理一個(gè)記錄,因此需要用游標(biāo)(cousor)機(jī)制,把集合操作轉(zhuǎn)換成單記錄處理方式。 2.13 嵌入式SQL語句何時(shí)不必涉及到游標(biāo)?何時(shí)必須涉及到游標(biāo)? (1)INSERT、DELETE、UPDATE語句,查詢結(jié)果肯定是單元組時(shí)的SELECT語句,都可直接嵌入在主程序中使用,不必涉及到游標(biāo)。 (2)當(dāng)SELECT語句查詢結(jié)果是多個(gè)元組時(shí),此時(shí)宿主語言程序無法使用,一定要用游標(biāo)機(jī)制把多個(gè)元組一次一個(gè)地傳送給宿主語言處理。 實(shí)訓(xùn)11用戶自定義函數(shù)及存儲(chǔ)過程 -- 1、創(chuàng)建一個(gè)存儲(chǔ)過程,查看student表里的所有記錄,并運(yùn)行該存儲(chǔ)過程。其代碼如下: CREATE PROC pr_studentCodes AS SELECT * FROM student GO EXEC pr_studentCodes -- 2、修改pr_studentcodes存儲(chǔ)過程,使其按照學(xué)號(hào)排序 ALTER PROC pr_studentCodes AS SELECT * FROM student ORDER BY Studentid EXEC pr_studentCodes -- 3、刪除存儲(chǔ)過程Pr_studentCodes drop procedure pr_studentCodes -- 4、創(chuàng)建向Class表中插入一條記錄(‘’,‘電子UI班’,null,)的存儲(chǔ)過程pr_InsertClass create procedure pr_InsertClass as insert into Class values('10901','電子UI班',null,1)go exec pr_InsertClass--5 創(chuàng)建存儲(chǔ)過程up_Add,要求該存儲(chǔ)過程能夠?qū)崿F(xiàn)對(duì)輸入的兩個(gè)數(shù)相加,并將結(jié)果輸出 create proc up_Add @num1 int,@num2 int,@sum int output as begin select @sum=@num1+@num2 end --6 執(zhí)行存儲(chǔ)過程up_Add,計(jì)算加上的和。declare @he int exec up_Add @num1=78,@num2=82,@sum=@he output print '結(jié)果是:'+convert(char,@he) -- 三、閱讀代碼寫結(jié)果--1 create proc pr_grade(@sno char(9), @cname char(8), @grade int output)as select @grade=score from score,course where score.courseid=course.courseid and studentid=@sno and coursename=@cname--2 declare @score int exec pr_grade '10701001','高等數(shù)學(xué)',@score output select @score --3 create proc pr_count(@classid varchar(8), @num int output)as select @num=count(*)from student where Classid=@classid--4 declare @peop int exec pr_count @classid='10701',@num=@peop output select @peop drop procedure pr_count 黃淮學(xué)院 2015---2016學(xué)年第 一 學(xué)期 《C#數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)技術(shù)與案例教程》課程 題目: 學(xué)習(xí)報(bào)告 院 系:數(shù)學(xué)科學(xué)系 專 業(yè):數(shù)學(xué)與應(yīng)用數(shù)學(xué) 年 級(jí):1301B 姓 名:曹占營(yíng) 學(xué) 號(hào):1331110101 任課教師:楊鋒英 2015年 12 月 30日 C#數(shù)據(jù)庫(kù)學(xué)習(xí)報(bào)告 在日常生活中,我們和朋友、親戚聯(lián)系,會(huì)廣泛用到通訊錄,因此這門課程以通訊錄開發(fā)為案例,教我們學(xué)習(xí)軟件開發(fā)。 軟件開發(fā)是一項(xiàng)非常注重實(shí)踐工作,不可能只憑看書、看視頻就學(xué)會(huì)軟件開發(fā),必須扎扎實(shí)實(shí)、一行一行的編寫代碼,不斷積累項(xiàng)目經(jīng)驗(yàn),才能真正掌握編程技術(shù),所以我們要親自上級(jí)編寫程序,才能真正掌握軟件開發(fā)技術(shù)。 本書分為基礎(chǔ)篇、進(jìn)階篇、高級(jí)篇,由淺入深地介紹了基于C#的數(shù)據(jù)庫(kù)編程技術(shù),所用的開發(fā)工具為Visual Studio 2008、SQL Server 2005以及Access 2007。 學(xué)習(xí)數(shù)據(jù)庫(kù)的內(nèi)容是從數(shù)據(jù)庫(kù)、數(shù)據(jù)表的創(chuàng)建和修改開始的,表是建立關(guān)系數(shù)據(jù)庫(kù)的基本結(jié)構(gòu),用來存儲(chǔ)數(shù)據(jù)具有已定義的屬性,在表的操作過程中,有查看表信息、查看表屬性、修改表中的數(shù)據(jù)、刪除表中的數(shù)據(jù)及修改表和刪除表的操作。從課程中讓我更明白一些知識(shí),查詢可以通過SQL語言進(jìn)行完成,這樣加深了查詢語句的基本結(jié)構(gòu),讓我們能更好的掌握其中語句,方便于我們后面的學(xué)習(xí)和應(yīng)用。表是數(shù)據(jù)最重要的一個(gè)數(shù)據(jù)對(duì)象,表的創(chuàng)建好壞直接關(guān)系到數(shù)數(shù)據(jù)庫(kù)的成敗,表的內(nèi)容是越具體越好,但是也不能太繁瑣,以后在實(shí)際應(yīng)用中多使用表,對(duì)表的規(guī)劃和理解就會(huì)越深刻。在編程方面是需要我們對(duì)于編程有邏輯思維能力及一定的編程技巧。在數(shù)據(jù)庫(kù)中插入表、表中的信息等都需要注意,不然很容易出錯(cuò)。 在基礎(chǔ)篇中,詳細(xì)講解了通訊錄系統(tǒng)的設(shè)計(jì)、開發(fā)和安裝部署這樣一個(gè)完整過程,對(duì)各個(gè)任務(wù)進(jìn)行詳細(xì)講解。基礎(chǔ)篇學(xué)習(xí)分為9個(gè)任務(wù),分別為系統(tǒng)分析與設(shè)計(jì)、用戶登錄、主窗體設(shè)計(jì)、聯(lián)系人分組管理、聯(lián)系人管理、用戶密碼修改、數(shù)據(jù)庫(kù)備份與恢復(fù)、設(shè)計(jì)“關(guān)于”窗體、系統(tǒng)安裝與部署。學(xué)完基礎(chǔ)篇,即可開發(fā)出一個(gè)功能較為完備的通訊錄系統(tǒng)。在聯(lián)系人管理任務(wù)學(xué)習(xí)中,由于在Contact表中保存的是分組編號(hào),而窗體上要顯示的是分組名稱,所以在查詢語句中需要級(jí)聯(lián)查詢,即SQL語句為”select Contact.Id, Name, Phone, Email, QQ, GroupName from Contact, ContactGroup where Contact.GroupId = ContactGroup.Id”。為了實(shí)現(xiàn)代碼復(fù)用,可以提供查詢功能,根據(jù)用戶選擇的擦尋天劍,拼接產(chǎn)生SQL語句。同時(shí)為了支持模糊查詢,還在SQL語句中用了like語句。通過SqlDataAdapter的Fill方法填充數(shù)據(jù)集,獲取數(shù)據(jù)。數(shù)據(jù)集中有了數(shù)據(jù)以后,我們只需設(shè)置DataGridView控件的DataSource屬性,就可以顯示數(shù)據(jù)了。 在進(jìn)階篇中,介紹了企業(yè)項(xiàng)目開發(fā)中廣發(fā)用到的參數(shù)化SQL語句、存儲(chǔ)過程使用及定義數(shù)據(jù)庫(kù)操作類,分為3個(gè)任務(wù)學(xué)習(xí),分別為使用參數(shù)化SQL語句、使用存儲(chǔ)過程、使用自定義數(shù)據(jù)庫(kù)操作類,進(jìn)一步提高我們的數(shù)據(jù)庫(kù)編程能力。在使用存儲(chǔ)過程任務(wù)學(xué)習(xí)中,了解到存儲(chǔ)過程是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來執(zhí)行它。在性能方面,存儲(chǔ)過程有如下的優(yōu)點(diǎn)。(1)與編譯,存儲(chǔ)過程預(yù)先編譯好放在數(shù)據(jù)庫(kù)內(nèi),減少編譯語句所花的時(shí)間。(2)緩存,編譯好的存儲(chǔ)過程會(huì)進(jìn)入緩存,所以對(duì)于經(jīng)常執(zhí)行的存儲(chǔ)過程,除了第一次執(zhí)行外,其他次執(zhí)行的書都會(huì)有明顯提高。(3)減少網(wǎng)絡(luò)傳輸,特別對(duì)于處理一些數(shù)據(jù)的存儲(chǔ)過程,不必像直接用SQL語句實(shí)現(xiàn)那樣多次傳送數(shù)據(jù)到客戶端。通過前面的學(xué)習(xí),細(xì)細(xì)體會(huì)對(duì)數(shù)據(jù)庫(kù)的操作,可以發(fā)現(xiàn),這么多操作其實(shí)可以分為4種。(1)對(duì)數(shù)據(jù)庫(kù)進(jìn)行非連接式查詢操作,返回多條記錄。這種操作可以通過SqlDataAdapter對(duì)象的Fill方法來完成,即把查詢得到的結(jié)果填充到DataTable(或DataSet)對(duì)象中。(2)對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接式查詢操作,返回多條查詢記錄。這種操作可以通過SqlCommand對(duì)象的ExecuteReader方法來完成,返回SqlDataReader對(duì)象。(3)從數(shù)據(jù)庫(kù)中檢索單值。這種操作可以通過SqlCommand對(duì)象的ExecuteNonQuery方法來完成。ExecuteScalar方法返回的是Object類型,需要根據(jù)實(shí)際情況進(jìn)行類型轉(zhuǎn)換。(4)對(duì)數(shù)據(jù)庫(kù)執(zhí)行增、刪、改操作。這種操作可以通過SqlCommand對(duì)象的ExecuteNonQuery方法來完成,返回增、刪、改操作后數(shù)據(jù)庫(kù)中受影響的行數(shù)。 在高級(jí)篇中,分為4個(gè)任務(wù)學(xué)習(xí),分別為開發(fā)基于三層構(gòu)架的通訊錄程序、開發(fā)基于Access的通訊錄程序、實(shí)現(xiàn)基于抽象工廠模式的三層架構(gòu)、使用MD5加密用戶密碼。首先詳細(xì)講解了基于三層構(gòu)架的通訊錄程序開發(fā)過程以及如何開發(fā)一個(gè)基于Access的通訊錄系統(tǒng)。最后,介紹了如何采用MD5加密技術(shù)對(duì)用戶密碼加密。MD5加密技術(shù)也是實(shí)際項(xiàng)目開發(fā)中廣泛用到的,通過MD5加密用戶密碼,可以提高程序的安全性。“三層架構(gòu)”一詞中的“三層”是指:“表示層”、“業(yè)務(wù)邏輯層”、“數(shù)據(jù)訪問層”。表示層:位于最外層,離用戶最近。用于顯示和接收用戶輸入的數(shù)據(jù),為用戶提供一種交互式操作界面。表示層的常見形式為WinFrom和WebForm。業(yè)務(wù)邏輯層:負(fù)責(zé)處理用戶輸入的信息,或者是將這些信息發(fā)送給數(shù)據(jù)訪問層進(jìn)行保存,或者是調(diào)用數(shù)據(jù)訪問層中的函數(shù)再次讀出這些數(shù)據(jù)。業(yè)務(wù)邏輯層也可以包括一些對(duì)“商業(yè)邏輯”描述代碼在里面。數(shù)據(jù)訪問層:僅實(shí)現(xiàn)對(duì)數(shù)據(jù)的保存和讀取操作。可以訪問數(shù)據(jù)庫(kù)系統(tǒng)、二進(jìn)制文件、文本文檔或是XML文檔。 在這一學(xué)期有限的幾次實(shí)驗(yàn)課后,我雖然沒有學(xué)會(huì)很多,但也學(xué)會(huì)了一些簡(jiǎn)單的操作,我學(xué)會(huì)了一些簡(jiǎn)單的數(shù)據(jù)運(yùn)算,會(huì)建立一些簡(jiǎn)單的表。有時(shí)候在做實(shí)驗(yàn)時(shí),對(duì)于實(shí)驗(yàn)中的一些東西我不怎么了解,但我還會(huì)去做,因?yàn)槲蚁胫挥卸嗑毩?xí)才能熟練,也才能理解掌握知識(shí)。我不知道這一門課對(duì)其他同學(xué)來說怎么樣,但對(duì)我來說卻有些難,但我會(huì)努力。因?yàn)槲艺J(rèn)為它對(duì)我以后考計(jì)算機(jī)二級(jí)有很大的幫助。 很快這一學(xué)期馬上就要結(jié)束了,數(shù)據(jù)庫(kù)這一門課也很快就要結(jié)束了,但這一學(xué)期的學(xué)習(xí)讓我知道了很多,也告訴了我在以后的人生中如何去做事,如何去做人。尤其是老師的耐心,老師的敬業(yè)精神感動(dòng)了我,再做任何事時(shí)都應(yīng)該認(rèn)真負(fù)責(zé),任何一個(gè)人都應(yīng)該被尊重。第二篇:SQL數(shù)據(jù)庫(kù)選擇題及答案
第三篇:SQL語言習(xí)題及答案
第四篇:SQL數(shù)據(jù)庫(kù)題庫(kù)及答案 (6)
第五篇:SQL數(shù)據(jù)庫(kù)心得