任務9 P158 9.7.4獨立實踐

任務9 P147 9.6.2獨立實踐
–查詢教師的姓名、性別、住址、電話和學生的姓名、性別、家庭住址、電話。

select 教師.姓名,教師.性別,教師.住址,教師.手機號碼
from 教師
union
select 學生.姓名,學生.性別,學生.家庭地址,學生.手機號
from 學生

P158 9.7.4獨立實踐
2013-06-02-11:07



--1.使用Select和Top子句向表中添加數據
--(1)公司決定創建新數據庫替換原來的數據庫,但原數據庫中的一些數據庫還有用,需要導入到新數據庫中。爲此
--,要求創建新數據庫NDataBase,在該數據庫中,創建一個新的學生表Students,將原來數據庫中學生表的數據復
--制到新建的Students表中。

Create DataBase NDataBase
go
Use NDataBase
go
Create Table Students
(
學號 char(12) Constraint [column_學生(學號)_pk] Primary Key not null,
姓名 varchar(20) not null,
性別 bit check(性別=0 or 性別=1) null ,
手機號 varchar(20) null,
家庭電話 varchar(20) null,
家庭地址 varchar(50) null
/*班級編號 int not null
Constraint [Fk學生(班級編號)] Foreign Key
	References 班級(班級編號)
On Delete Cascade On Update Cascade*/
)
Go
Insert into Students
	Select 學號,姓名,性別,手機號,家庭電話,家庭地址 from JWGL_DB.dbo.學生
GO

--(2)將原來數據庫中“課程表”的信息複製到NDataBase數據庫中新建的Course表中。
Create Table Course
(
課程編號 int Constraint [column_課程(課程編號)_pk] Primary Key not null,
課程名稱 varchar(50) not null,
學分 tinyint Constraint ck_學分 Check(學分>=0 and 學分<=100),
開課學年 date Constraint ck_開課學年 null,
開課學期 tinyint Constraint ck_開課學期 Check(開課學期>0) null,
理論學時 tinyint Constraint ck_理論學時 Check(理論學時>0) null,
實踐學時 tinyint Constraint ck_實踐學時 Check(實踐學時>0) null,
備註 varchar(max) null,
課程類型 varchar(20) constraint ck_課程類型 check(課程類型 = '一體化' or 課程類型='純理論' or 課程類型='純實踐') null,
核心課程 bit constraint ck_核心課程 check(核心課程 = 0 or 核心課程=1)  null,
課程性質 varchar(20) constraint ck_課程性質 check(課程性質 = '必修課' or 課程性質='選修課') null,
考覈方式 varchar(20) constraint ck_考覈方式 check(考覈方式 = '考試' or 考覈方式='考查') null,
課程歸屬 varchar(20) constraint ck_課程歸屬 check(課程歸屬 = '基本素質與能力課' or 課程歸屬='職業能力課') null,
)
Go
Insert into Course
	Select 課程.* from JWGL_DB.dbo.課程
Go

--(3)將每個學生的信息和學生系的名稱、專業名稱、班級名稱的信息複製到一個新表Temp中。
Create Table Temp
(學號 char(12) not null,
姓名 varchar(20) not null,
性別 bit null,
手機號 varchar(20) null,
家庭電話 varchar(20) null,
家庭地址 varchar(50) null,
學院名稱 varchar(20) not null,
專業名稱 varchar(20) not null,
班級名稱 varchar(20) not null
)
insert into temp
	select 學號,姓名,性別,手機號 ,家庭電話,家庭地址,學院名稱,學院名稱,班級名稱
	from  JWGL_DB.dbo.學生 inner join JWGL_DB.dbo.班級
		  on 學生.班級編號 = 班級.班級編號
		  join JWGL_DB.dbo.專業
		  on 專業.專業編號 = 班級.專業編號
		  join JWGL_DB.dbo.學院
		  on 專業.學院編號 = 學院.學院編號

/*
--方式(2)
insert into temp
	select 學號,性別,手機號 ,家庭電話,家庭地址,學院名稱,學院名稱,班級名稱
	from JWGL_DB.dbo.學生,JWGL_DB.dbo.學院,JWGL_DB.dbo.班級
	where 學生.班級編號 = 班級.班級編號 and 學院.學院編號 in (select 學院編號 from JWGL_DB.dbo.專業 where 專業.專業編號 
	                                                      in (select 專業編號 from JWGL_DB.dbo.班級 where 班級編號 = 學生.班級編號))
--方式(3)
insert into temp
	select 學號,性別,手機號 ,家庭電話,家庭地址,學院名稱,學院名稱,班級名稱
	from  JWGL_DB.dbo.學生 inner join JWGL_DB.dbo.班級
		  on 學生.班級編號 = 班級.班級編號
		  join JWGL_DB.dbo.學院
		  on 學院.學院編號 in (select 學院編號 from JWGL_DB.dbo.專業 where 專業.專業編號 
	                       in (select 專業編號 from JWGL_DB.dbo.班級 where 班級編號 = 學生.班級編號))
*/
	                                                      
--(4)將“學生課程表”中學生課程的平均成績前10名的學生的學號、姓名、平均成績複製到新表SCTemp中。
Create Table SCTemp
(學號 char(12) not null,
姓名 varchar(20) not null,
平均成績 tinyint default(0)
)
go

Insert into SCTemp
Select 學號,姓名,平均成績
from(select top(10) st.學號,st.姓名,平均成績=(select avg(課程成績) 
									  from JWGL_DB.dbo.學生_課程 
									  inner join JWGL_DB.dbo.學生
									  on JWGL_DB.dbo.學生_課程.學號 = JWGL_DB.dbo.學生.學號
									  where st.學號 = JWGL_DB.dbo.學生_課程.學號
			    					  group by JWGL_DB.dbo.學生_課程.學號)
	  from JWGL_DB.dbo.學生 st
      order by 平均成績 desc
)As SCT


--(5)將"學生課程表"中學生課程成績前10的學生的學號、課程編號、成績複製到新表TempTable中。
Create Table TempTable
(
	學號 char(12) not null,
	課程編號 int not null,
	成績 tinyint default(0)
)
go

/*select * from sys.check_constraints
EXEC sp_rename 'TempTable.MRB_TYPE', '學號', 'COLUMN'*/


Insert into TempTable
Select 學號,課程編號,課程成績
from (select top(10) ss.學號,ss.課程編號,ss.課程成績
      from JWGL_DB.dbo.學生_課程 ss					--通過中間表獲取兩個表的信息
      order by ss.課程成績 desc
)As SCT

--2.使用Form和Top子句更改數據
--(1)刪除TempTable表中的2條記錄。
delete top(2) from NDataBase.dbo.TempTable

--(2)將TempTable表中的行按成績由小到大排序,刪除前2行的數據
delete Top(2)
from NDataBase.dbo.TempTable
where TempTable.學號 in (select TempTable.學號
 from NDataBase.dbo.TempTable 
 Order by NDataBase.dbo.TempTable.成績
)

--(3)刪除1993年前註冊的學生的成績。
alter table Students
add  註冊日期 datetime default(getdate()) null

delete from TempTable
from Students inner join TempTable
			  on Students.學號 = TempTable.學號
where Students.註冊日期 < '1993-01-01'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章