第一篇:數(shù)據(jù)庫 sql 習題及答案
/*
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ù)庫技術(shù)中,獨立于計算機系統(tǒng)的模型是_C__。A、面向?qū)ο蟮哪P虰、關(guān)系模型C、E-R模型D、層次模型 2、數(shù)據(jù)庫系統(tǒng)的控制中樞是__B_。A、數(shù)據(jù)庫、b、數(shù)據(jù)庫管理系統(tǒng)C、數(shù)據(jù)庫管理員D、數(shù)據(jù)庫應用系統(tǒng) 3、使用SQL命令將學生表STUDENT中的學生年齡AGE字段的值增加1歲,應該使用的命令是__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ù)庫中,建立數(shù)據(jù)庫表時,將年齡字段值限制在12~40歲之間的這種約束屬于__B__。 A、視圖完整性約束B、域完整性約束C、參照完整性約束D、實體完整性約束 5、在 SQL 語句中,與 X BETWEEN 20 AND 30 等價的表達式是__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ù)庫中,概念模型是_D__。A、用于現(xiàn)實的建模,與具體的DBMS有關(guān)B、用于信息世界的建模,與具體的DBMS有關(guān) C、用于現(xiàn)實的建模,與具體的DBMS無關(guān)D、用于信息世界的建模,與具體的DBMS無關(guān) 7、數(shù)據(jù)庫的并發(fā)操作可能帶來的問題包括__B_。A非法用戶的使用B丟失更新C數(shù)據(jù)獨立性會提高D增加數(shù)據(jù)冗余度 8、在關(guān)系數(shù)據(jù)庫中,模式對應的是__A___。A、視圖和所有基本表 B、視圖和部分基本表 C、基本表 D、索引 9、能實現(xiàn)絕對的與平臺無關(guān)性的Web數(shù)據(jù)庫訪問技術(shù)是_D_。A、ADO B、ActiveX C、WebbaseAPI D、JDBC 10、在下列描述中,正確的描述是__B___。 A、SQL 是一種過程化語言B、SQL 采用集合操作方式 C、SQL 不能嵌入到高級語言程序中 D、SQL 是一種 DBMS 11、數(shù)據(jù)庫系統(tǒng)是由__A__組成的。A、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)和用戶 B、數(shù)據(jù)文件、命令文件和報表 C、數(shù)據(jù)庫文件結(jié)構(gòu)和數(shù)據(jù) D、常量、變量和函數(shù) 12、在SQL查詢時,使用WHERE子句指出的是__B__。A、查詢目標B、查詢條件C、查詢視圖D、查詢結(jié)果 13、在下列 RDMBS 產(chǎn)品中,屬于小型數(shù)據(jù)庫系統(tǒng)的是_A_。A、Access B、Oracle C、Sybase D、Informix 14、數(shù)據(jù)庫類型是按照_A_來劃分的。 A、數(shù)據(jù)模型B、記錄形式C、數(shù)據(jù)存取方法D、文件形式 15、作為Microsoft Office家族成員之一的_A_數(shù)據(jù)庫,能夠與其他Office組件進行數(shù)據(jù)交換共享數(shù)據(jù)資源,易于生成集文字處理、圖表生成和數(shù)據(jù)管理于一體的辦公自動化系統(tǒng)。A、Access B、Oracle C、Sybase D、Informix 16、數(shù)據(jù)庫管理系統(tǒng)更適合于_D_方面的應用。A、CAD B、過程控制C、科學計算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ù)庫,應該是_C__處理。A、集中式 B、分布式 C、主從結(jié)構(gòu)式D、以上3種模式 19、數(shù)據(jù)的邏輯獨立性是指__D_。A、數(shù)據(jù)與存儲結(jié)構(gòu)的邏輯獨立性 B、數(shù)據(jù)元素之間的邏輯獨立性 C、存儲結(jié)構(gòu)與物理結(jié)構(gòu)的邏輯獨立性 D、數(shù)據(jù)與程序的邏輯獨立性 20、在數(shù)據(jù)庫技術(shù)中,獨立于計算機系統(tǒng)的模型是_C__。A面向?qū)ο蟮哪P?/p> B關(guān)系模型 C、E-R模型 D、層次模型 21、關(guān)系代數(shù)的3個基本運算是–D--、投影、連接。A、關(guān)系與B、蘊含C、關(guān)系或D、選擇 22、下面命題不正確的是:A、若冗余數(shù)據(jù)可以控制,則數(shù)據(jù)更新的一致性得以保證 B、數(shù)據(jù)庫減少了不必要的數(shù)據(jù)冗余C、數(shù)據(jù)庫的數(shù)據(jù)可以共享D、數(shù)據(jù)庫中不存在數(shù)據(jù)冗余 23、在基本SQL中不可以實現(xiàn): A、定義視圖B、并發(fā)控制C、定義基表D、查詢視圖和基表 24、用二維表來表示實體及實體之間聯(lián)系的數(shù)據(jù)模型稱為_C___。 A、實體-聯(lián)系模型B、層次模型C、關(guān)系模型D、網(wǎng)狀模型 25、查找工資在600元以上并且職稱為工程師的紀錄,邏輯表達式為_D___。 A、“工資”>600.OR.職稱=“工程師” B、工資>600.AND.職稱=工程師 C、“工資”>600.AND.“職稱”=“工程師” D、工資>600.AND.職稱=“工程師” 26、數(shù)據(jù)庫鏡像可以用于__C_。(1分) A、實現(xiàn)數(shù)據(jù)庫的安全性 B、實現(xiàn)數(shù)據(jù)共享C、進行數(shù)據(jù)庫恢復或并發(fā)操作D、保證數(shù)據(jù)庫的完整性 27、在下列類型的數(shù)據(jù)庫系統(tǒng)中,應用最廣泛的是__C___。(1分) A、分布型數(shù)據(jù)庫系統(tǒng)B、邏輯型數(shù)據(jù)庫系統(tǒng)C、關(guān)系型數(shù)據(jù)庫系統(tǒng)D、層次型數(shù)據(jù)庫系統(tǒng) 28、在下列描述中,正確的描述是__B__。(1分)A、SQL 是一種過程化語言B、SQL 采用集合操作方式 C、SQL 不能嵌入到高級語言程序中 D、SQL 是一種 DBMS 數(shù)據(jù)庫原理之關(guān)系數(shù)據(jù)庫SQL語言課后習題及答案 http://004km.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:有多種寫法,比如聯(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同學不學的課程的課程號。 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 設(shè)有兩個基本表R(A,B,C)和S(D,E,F(xiàn)),試用SQL查詢語句表達下列關(guān)系代數(shù)表達式: (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è)有兩個基本表R(A,B,C)和S(A,B,C)試用SQL查詢語句表達下列關(guān)系代數(shù)表達式: (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ù)特點和元組演算特點。 (P61-62) 3.6 試用SQL查詢語句表達下列對教學數(shù)據(jù)庫中三個基本表S、SC、C的查詢: (1)統(tǒng)計有學生選修的課程門數(shù)。 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)統(tǒng)計每門課程的學生選修人數(shù)(超過10人的課程才統(tǒng)計)。要求輸出課程號和選修人數(shù),查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按課程號升序排列。 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中檢索成績?yōu)榭罩档膶W生學號和課程號。 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更新語句表達對教學數(shù)據(jù)庫中三個基本表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同學的學習選課和成績?nèi)縿h去。 DELETE FROM SC WHERE S# IN (SELECT S# FROM S WHERE SNAME='WANG') (5)把選修MATHS課不及格的成績?nèi)臑榭罩怠?/p> 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語句實現(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中提到“倉庫管理”關(guān)系模型有五個關(guān)系模式: 零件 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#),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三個基本表的自然聯(lián)接定義為一個視圖VIEW1,PART、P_S、SUPPLIER 三個基本表的自然聯(lián)接定義為一個視圖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)試在上述兩個視圖的基礎(chǔ)上進行數(shù)據(jù)查詢: 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 對于教學數(shù)據(jù)庫中基本表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上的相應操作。 (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的實現(xiàn)有什么重要意義? 預處理方式是先用預處理程序?qū)υ闯绦蜻M行掃描,識別出SQL語句,并處理成宿主語言的函數(shù)調(diào)用形式; 然后再用宿主語言的編譯程序把源程序編譯成目標程序。這樣,不用擴充宿主語言的編譯程序,就能處理SQL語句。 3.11 在宿主語言的程序中使用SQL語句有哪些規(guī)定? 在宿主語言的程序中使用SLQ語句有以下規(guī)定: (1)在程序中要區(qū)分SQL語句與宿主語言語句 (2)允許嵌入的SQL語句引用宿主語言的程序變量(稱為共享變量),但有兩條規(guī)定: 1)引用時,這些變量前必須加“:”作為前綴標識,以示與數(shù)據(jù)庫中變量有區(qū)別。 2)這些變量由宿主語言的程序定義,并用SQL的DECLARE語句說明。 (3)SQL的集合處理方式與宿主語言單記錄處理方式之間要協(xié)調(diào)。需要采用游標機制,把集合操作轉(zhuǎn)換成單記錄處理方式。 3.12 SQL的集合處理方式與宿主語言單記錄處理方式之間如何協(xié)調(diào)? 由于SQL語句處理的是記錄集合,而宿主語言語句一次只能處理一個記錄,因此需要用游標(cousor)機制,把集合操作轉(zhuǎn)換成單記錄處理方式。 2.13 嵌入式SQL語句何時不必涉及到游標?何時必須涉及到游標? (1)INSERT、DELETE、UPDATE語句,查詢結(jié)果肯定是單元組時的SELECT語句,都可直接嵌入在主程序中使用,不必涉及到游標。 (2)當SELECT語句查詢結(jié)果是多個元組時,此時宿主語言程序無法使用,一定要用游標機制把多個元組一次一個地傳送給宿主語言處理。 實訓11用戶自定義函數(shù)及存儲過程 -- 1、創(chuàng)建一個存儲過程,查看student表里的所有記錄,并運行該存儲過程。其代碼如下: CREATE PROC pr_studentCodes AS SELECT * FROM student GO EXEC pr_studentCodes -- 2、修改pr_studentcodes存儲過程,使其按照學號排序 ALTER PROC pr_studentCodes AS SELECT * FROM student ORDER BY Studentid EXEC pr_studentCodes -- 3、刪除存儲過程Pr_studentCodes drop procedure pr_studentCodes -- 4、創(chuàng)建向Class表中插入一條記錄(‘’,‘電子UI班’,null,)的存儲過程pr_InsertClass create procedure pr_InsertClass as insert into Class values('10901','電子UI班',null,1)go exec pr_InsertClass--5 創(chuàng)建存儲過程up_Add,要求該存儲過程能夠?qū)崿F(xiàn)對輸入的兩個數(shù)相加,并將結(jié)果輸出 create proc up_Add @num1 int,@num2 int,@sum int output as begin select @sum=@num1+@num2 end --6 執(zhí)行存儲過程up_Add,計算加上的和。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ù)學',@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 黃淮學院 2015---2016學年第 一 學期 《C#數(shù)據(jù)庫應用程序開發(fā)技術(shù)與案例教程》課程 題目: 學習報告 院 系:數(shù)學科學系 專 業(yè):數(shù)學與應用數(shù)學 年 級:1301B 姓 名:曹占營 學 號:1331110101 任課教師:楊鋒英 2015年 12 月 30日 C#數(shù)據(jù)庫學習報告 在日常生活中,我們和朋友、親戚聯(lián)系,會廣泛用到通訊錄,因此這門課程以通訊錄開發(fā)為案例,教我們學習軟件開發(fā)。 軟件開發(fā)是一項非常注重實踐工作,不可能只憑看書、看視頻就學會軟件開發(fā),必須扎扎實實、一行一行的編寫代碼,不斷積累項目經(jīng)驗,才能真正掌握編程技術(shù),所以我們要親自上級編寫程序,才能真正掌握軟件開發(fā)技術(shù)。 本書分為基礎(chǔ)篇、進階篇、高級篇,由淺入深地介紹了基于C#的數(shù)據(jù)庫編程技術(shù),所用的開發(fā)工具為Visual Studio 2008、SQL Server 2005以及Access 2007。 學習數(shù)據(jù)庫的內(nèi)容是從數(shù)據(jù)庫、數(shù)據(jù)表的創(chuàng)建和修改開始的,表是建立關(guān)系數(shù)據(jù)庫的基本結(jié)構(gòu),用來存儲數(shù)據(jù)具有已定義的屬性,在表的操作過程中,有查看表信息、查看表屬性、修改表中的數(shù)據(jù)、刪除表中的數(shù)據(jù)及修改表和刪除表的操作。從課程中讓我更明白一些知識,查詢可以通過SQL語言進行完成,這樣加深了查詢語句的基本結(jié)構(gòu),讓我們能更好的掌握其中語句,方便于我們后面的學習和應用。表是數(shù)據(jù)最重要的一個數(shù)據(jù)對象,表的創(chuàng)建好壞直接關(guān)系到數(shù)數(shù)據(jù)庫的成敗,表的內(nèi)容是越具體越好,但是也不能太繁瑣,以后在實際應用中多使用表,對表的規(guī)劃和理解就會越深刻。在編程方面是需要我們對于編程有邏輯思維能力及一定的編程技巧。在數(shù)據(jù)庫中插入表、表中的信息等都需要注意,不然很容易出錯。 在基礎(chǔ)篇中,詳細講解了通訊錄系統(tǒng)的設(shè)計、開發(fā)和安裝部署這樣一個完整過程,對各個任務進行詳細講解?;A(chǔ)篇學習分為9個任務,分別為系統(tǒng)分析與設(shè)計、用戶登錄、主窗體設(shè)計、聯(lián)系人分組管理、聯(lián)系人管理、用戶密碼修改、數(shù)據(jù)庫備份與恢復、設(shè)計“關(guān)于”窗體、系統(tǒng)安裝與部署。學完基礎(chǔ)篇,即可開發(fā)出一個功能較為完備的通訊錄系統(tǒng)。在聯(lián)系人管理任務學習中,由于在Contact表中保存的是分組編號,而窗體上要顯示的是分組名稱,所以在查詢語句中需要級聯(lián)查詢,即SQL語句為”select Contact.Id, Name, Phone, Email, QQ, GroupName from Contact, ContactGroup where Contact.GroupId = ContactGroup.Id”。為了實現(xiàn)代碼復用,可以提供查詢功能,根據(jù)用戶選擇的擦尋天劍,拼接產(chǎn)生SQL語句。同時為了支持模糊查詢,還在SQL語句中用了like語句。通過SqlDataAdapter的Fill方法填充數(shù)據(jù)集,獲取數(shù)據(jù)。數(shù)據(jù)集中有了數(shù)據(jù)以后,我們只需設(shè)置DataGridView控件的DataSource屬性,就可以顯示數(shù)據(jù)了。 在進階篇中,介紹了企業(yè)項目開發(fā)中廣發(fā)用到的參數(shù)化SQL語句、存儲過程使用及定義數(shù)據(jù)庫操作類,分為3個任務學習,分別為使用參數(shù)化SQL語句、使用存儲過程、使用自定義數(shù)據(jù)庫操作類,進一步提高我們的數(shù)據(jù)庫編程能力。在使用存儲過程任務學習中,了解到存儲過程是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。在性能方面,存儲過程有如下的優(yōu)點。(1)與編譯,存儲過程預先編譯好放在數(shù)據(jù)庫內(nèi),減少編譯語句所花的時間。(2)緩存,編譯好的存儲過程會進入緩存,所以對于經(jīng)常執(zhí)行的存儲過程,除了第一次執(zhí)行外,其他次執(zhí)行的書都會有明顯提高。(3)減少網(wǎng)絡傳輸,特別對于處理一些數(shù)據(jù)的存儲過程,不必像直接用SQL語句實現(xiàn)那樣多次傳送數(shù)據(jù)到客戶端。通過前面的學習,細細體會對數(shù)據(jù)庫的操作,可以發(fā)現(xiàn),這么多操作其實可以分為4種。(1)對數(shù)據(jù)庫進行非連接式查詢操作,返回多條記錄。這種操作可以通過SqlDataAdapter對象的Fill方法來完成,即把查詢得到的結(jié)果填充到DataTable(或DataSet)對象中。(2)對數(shù)據(jù)庫進行連接式查詢操作,返回多條查詢記錄。這種操作可以通過SqlCommand對象的ExecuteReader方法來完成,返回SqlDataReader對象。(3)從數(shù)據(jù)庫中檢索單值。這種操作可以通過SqlCommand對象的ExecuteNonQuery方法來完成。ExecuteScalar方法返回的是Object類型,需要根據(jù)實際情況進行類型轉(zhuǎn)換。(4)對數(shù)據(jù)庫執(zhí)行增、刪、改操作。這種操作可以通過SqlCommand對象的ExecuteNonQuery方法來完成,返回增、刪、改操作后數(shù)據(jù)庫中受影響的行數(shù)。 在高級篇中,分為4個任務學習,分別為開發(fā)基于三層構(gòu)架的通訊錄程序、開發(fā)基于Access的通訊錄程序、實現(xiàn)基于抽象工廠模式的三層架構(gòu)、使用MD5加密用戶密碼。首先詳細講解了基于三層構(gòu)架的通訊錄程序開發(fā)過程以及如何開發(fā)一個基于Access的通訊錄系統(tǒng)。最后,介紹了如何采用MD5加密技術(shù)對用戶密碼加密。MD5加密技術(shù)也是實際項目開發(fā)中廣泛用到的,通過MD5加密用戶密碼,可以提高程序的安全性?!叭龑蛹軜?gòu)”一詞中的“三層”是指:“表示層”、“業(yè)務邏輯層”、“數(shù)據(jù)訪問層”。表示層:位于最外層,離用戶最近。用于顯示和接收用戶輸入的數(shù)據(jù),為用戶提供一種交互式操作界面。表示層的常見形式為WinFrom和WebForm。業(yè)務邏輯層:負責處理用戶輸入的信息,或者是將這些信息發(fā)送給數(shù)據(jù)訪問層進行保存,或者是調(diào)用數(shù)據(jù)訪問層中的函數(shù)再次讀出這些數(shù)據(jù)。業(yè)務邏輯層也可以包括一些對“商業(yè)邏輯”描述代碼在里面。數(shù)據(jù)訪問層:僅實現(xiàn)對數(shù)據(jù)的保存和讀取操作??梢栽L問數(shù)據(jù)庫系統(tǒng)、二進制文件、文本文檔或是XML文檔。 在這一學期有限的幾次實驗課后,我雖然沒有學會很多,但也學會了一些簡單的操作,我學會了一些簡單的數(shù)據(jù)運算,會建立一些簡單的表。有時候在做實驗時,對于實驗中的一些東西我不怎么了解,但我還會去做,因為我想只有多練習才能熟練,也才能理解掌握知識。我不知道這一門課對其他同學來說怎么樣,但對我來說卻有些難,但我會努力。因為我認為它對我以后考計算機二級有很大的幫助。 很快這一學期馬上就要結(jié)束了,數(shù)據(jù)庫這一門課也很快就要結(jié)束了,但這一學期的學習讓我知道了很多,也告訴了我在以后的人生中如何去做事,如何去做人。尤其是老師的耐心,老師的敬業(yè)精神感動了我,再做任何事時都應該認真負責,任何一個人都應該被尊重。第二篇:SQL數(shù)據(jù)庫選擇題及答案
第三篇:SQL語言習題及答案
第四篇:SQL數(shù)據(jù)庫題庫及答案 (6)
第五篇:SQL數(shù)據(jù)庫心得