先建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)
(略)
創建起三個表(STUDENT、COURSE、SC)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
數據操做相關
第四章習題
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)新建備份設備:back1和back2
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表仍在數據庫中還沒有刪除
(8)RESTOREDATABASE lixiyu FROMback1
WITHFILE=1,NORECOVERY;
RESTOREDATABASE lixiyu FROMback1
WITHFILE=2,RECOVERY;
RESTORELOG lixiyu FROMback2
(9)看不到SC表了,由於恢復了差別備份
(10)usemaster;
go
EXECsp_addumpdevice'disk','lixiyu','D:\BACKUP\lixiyu.bak'
BACKUPDATABASE lixiyu TOlixiyu WITH INIT
(11)
BACKUPLOG lixiyu TODISK='D:\BACKUP\back2.bak'withNOINIT