Microsoft SQL Server 2005習題彙總小結

先建student ,course,sc表:sql


CREATE TABLE Student (數據庫

Sno     char(7)   PRIMARY KEY,   /* 在列級完整性約束處定義主碼約束 */數據結構

Sname   char(10) NOT NULL,       /* 非空約束 */架構

Ssex    char(2), ide

Sage    tinyint,工具

Sdept   char(20) spa

)server


CREATE TABLE Course (對象

Cno      char(10)  NOT NULL,數學

Cname    char(20)  NOT NULL,

Credit  tinyint,

Semester tinyint,

PRIMARY  KEY(Cno)               /* 在表級完整性約束處定義主碼約束 */

)


CREATE TABLE SC (

Sno    char(7)   NOT NULL,

Cno    char(10)  NOT NULL,

Grade  smallint,

PRIMARY KEY(Sno, Cno),    

FOREIGN KEY(Sno) REFERENCES Student (Sno),

FOREIGN KEY(Cno) REFERENCES Course (Cno)

)  


insert into student values('9512101','李勇','',19,'計算機系')

(略)

--------------------------------------------------------------      

insert into course values('c01','計算機文化學',3,1)

()

------------------------------------------------

insert into sc values('9512101','c01',90)

(略)

創建起三個表(STUDENTCOURSESC

_ _  _  _ _  _  _ _  _  _ _  _  _ _  _  _ _  _  _ _  _  _ _  _

數據操做相關


第四章習題

1.查詢學生選課表的所有數據

select*from sc


3.查詢成績在70-80分之間的學生的學號、課程號和成績

select sno,cno,grade from SC

where gradebetween 70 and80


5.查詢課程號爲c01的課程的最高分數

selectmax(grade)as最高分

from sc where cno='c01'


7.統計每一個系的學生人數

select sdept,count(*)from student

groupby sdept

having sdeptin('計算機系','信息系','數學系')


9.統計每一個學生的選課門數和考試總成績,並按選課門數升序顯示結果

select sno as學號,count(*)as選課門數,sum(grade)as'考試總成績'

from sc

groupby sno

11.查詢選修了c02號課程的學生的姓名和所在系

select snameas姓名,sdept as所在系

fromstudent join sc onstudent.sno =sc.sno

where cno='c02'


14.查詢與VB在同一學期開設的課程的課程名和開課學期

SELECT C2.Cname AS課程名,C2.Semester AS開課學期

FROMCourse C1 join Course C2

ON C1.Semester=C2.Semester

WHERE C1.Cname='VB'AND C2.Cname!='VB'


15.查詢與李勇年齡相同的學生的姓名、所在系、年齡

SELECT S2.Sname AS姓名,S2.Sdept AS所在系,S2.Sage AS年齡

FROMStudent S1 join Student S2

ON S1.Sage=S2.Sage

WHERE S1.Sname='李勇'AND S2.Sname!='李勇'


16.用子查詢實現以下查詢

(1)查詢選修了c01號課程的學生姓名和所在系

SELECTSname as姓名,Sdept as所在系From Student JOINSC

onStudent.sno=SC.sno

WHERE cnoIN(

SELECT cno from SC where cno='C01')


(2)查詢數學系成績80分以上的學生的學號、姓名、課程號和成績

SELECT SC.Sno as學號,Sname as姓名,Cno as課程號,Grade as成績From Student JOINSC

onStudent.Sno=SC.Sno

WHERE Grade>80


(3)查詢計算機系考試成績最高的學生的姓名

SELECTSname as姓名,Sdept as所在系,Grade as最高成績FromStudent

join SC

ONStudent.Sno=SC.Sno

WHEREGrade=(SELECTMAX(Grade)From SC where SC.Sno in

(SELECT Sno from Student WHERESdept='計算機系'))


(4)查詢數據結構考試成績最高的學生的姓名、所在系、性別、成績

SELECTSname as姓名,Sdept as所在系,Ssex as性別,Cname as課程,Grade as最高成績

FromStudent

join SC ON Student.Sno=SC.Sno

joinCourse ON Course.Cno=SC.Cno

WHEREGrade=(SELECTMAX(Grade)From SC where SC.Cno=

(SELECT Cno from Course WHERECname='數據結構'))

(因爲報數據結構這門課的學生的成績都爲NULL,因此結果沒顯示)



與權限相關


第十一章習題:

1.T-SQL語句去建立sql server身份驗證模式登陸名:log1,log2,log3

CREATELOGIN log1 WITHPASSWORD='123'MUST_CHANGE;

CREATELOGIN log2 WITHPASSWORD='123'MUST_CHANGE;

CREATELOGIN log3 WITH PASSWORD='123' MUST_CHANGE;



6.授予log1具備對Course表的查詢權限,授予log2具備對Course表的插入權限

(先用SSMS設置了用戶映射這個語句才起做用)

GRANTSELECTON Course TO log1;

GRANTINSERTON Course TO log2;


14.

爲lixiyu數據庫創建用戶定義的角色:SelectRole

createROLESelectRole

並授予對Student,Course,SC表具備查詢權

GRANTSELECTON Student TO SelectRole;

GRANTSELECTON Course TO SelectRole;

GRANTSELECTON SC TO SelectRole;


創建登陸名:pub_user,並讓該登陸名成爲student數據庫的合法用戶

USElixiyu

CREATELOGIN pub_user

WITHPASSWORD='123';

CREATEUSER pub_user;

此時登陸pub_user創建新的數據查詢

select*from course 不能成功:拒絕了對對象'Course' (數據庫'master',架構'dbo')SELECT 權限。


pub_user用戶添加到SelectRole角色中

EXECsp_addrolemember'SelectRole','pub_user'

此時再新建查詢:select*fromcourse 能夠成功



與數據庫備份相關


第十二章習題

4.利用備份和恢復數據庫的T-SQL語句按順序完成下列操做

1)新建備份設備:back1back2

USEmaster;

GO

EXECsp_addumpdevice'disk','back1','D:\BACKUP\back1.bak';

EXECsp_addumpdevice'disk','back2','D:\BACKUP\back2.bak';

(2)對lixiyu數據庫進行一次完整備份,以覆蓋的方式備份到back1

BACKUPDATABASElixiyu TO back1 WITHINIT

(3)刪除sc

use lixiyu

DROPTABLE SC

(4)lixiyu 數據庫進行一次差別備份,以追加的方式備份到back1

BACKUPDATABASE lixiyu TOback1 WITH DIFFERENTIAL,NOINIT


(5)刪除lixiyu數據庫

DROPDATABASE lixiyu

(6)利用back1備份設備恢復lixiyu數據庫完整備份

RESTOREDATABASE lixiyu FROMback1


(7)SSMS工具能夠看到lixiyu數據庫,由於以前對數據在back1上有完整備份;

表節點也能看到SC表,由於對數據庫的完整備份時SC表仍在數據庫中還沒有刪除

8RESTOREDATABASE lixiyu FROMback1

WITHFILE=1,NORECOVERY;

RESTOREDATABASE lixiyu FROMback1

WITHFILE=2,RECOVERY;

RESTORELOG lixiyu FROMback2

(9)看不到SC表了,由於恢復了差別備份


10usemaster;

go

EXECsp_addumpdevice'disk','lixiyu','D:\BACKUP\lixiyu.bak'

BACKUPDATABASE lixiyu TOlixiyu WITH INIT

11

BACKUPLOG lixiyu TODISK='D:\BACKUP\back2.bak'withNOINIT

相關文章
相關標籤/搜索