SQL Server 2008 資料庫_實驗二_SQL DDL 操作
SQL DDL 操作
什麼是SQL DDL 操作?
DDL是SQL定義語言,它主要包括三個關鍵字:create ,alter , drop(資料庫關鍵字不分大小寫 ),主要操作物件 有資料庫、表、索引、檢視等。
語句說明:
建立資料庫 create database
修改資料庫 alter database
刪除資料庫 drop database
建立表 create table
修改表 alter table
刪除表 drop table
建立索引 create index
刪除索引 drop index
實驗的目的
- 掌握資料的插入、刪除和更新方法。
- 掌握檢視的建立與更新。
實驗內容與要求
利用實驗1建立的資料庫Lesson,分別在各表中插入以下記錄,要求至少有一個表為單元組、至少有一個表為多元組的方式插入:
S表:
C表:
SC表:
T表:
提示:在存在外來鍵時,插入記錄需注意插入的表的順序,否則會破壞完整性約束。
1、通過select into語句將SC表的表結構複製為SC_TEMP表,然後查詢所有性別非空的學生的選課記錄並將之插入到SC_TEMP表。
2、刪除SC_TEMP表中無成績的元組。
3、將SC_TEMP表中S3的低於S3平均成績的成績提高10%
4、刪除SC_TEMP表中S3的小於該生平均成績的成績元組。
5、將S表中性別為空的學生的性別修改為女,並將年齡修改為25歲
6、建立檢視V_M_STUDENT, 要求顯示男學生的學號、姓名、課程名、教師名、成績等列
實驗主要步驟
向T表插入資料(注意選中執行):
向C表插入資料:
向S表插入資料時出現如下錯,是由於當初建表的時候,將列值設為不允許為空了!
解決辦法:
上述操作完成以後,問題解決:
向SC表插入資料:
上述操作原始碼:
Use Lesson --指向需要所操作的資料庫Lesson ----------------------------插入記錄---------------------------------------------------- --新增順序T C S SC(注意:必須先新增C表和S表) --向T表插入資料 insert into T values('t1','LIU','教授') insert into T values('t2','ZHANG','副教授') insert into T values('t3','LI','教授') insert into T values('t4','ZHAO','講師') select * from T --向C表插入資料 insert into C values('c1','OS','t2') insert into C values('c2','java','t1') insert into C values('c3','C++','t1') insert into C values('c4','C','t3') select * from C --向S表插入資料 insert into S values ('s1','WANG','20','男'), ('s2','LIU','17','女'), ('s3','HU','18','男'), ('s4','XIA','19',null), ('s5','SUN','20','男'), ('s6','ZHAO',null,'男'), ('s7','DENG',null,'女') select * from S --向SC表插入資料 insert into SC values ('s1','c1','80'), ('s1','c2','53'), ('s1','c3',null), ('s1','c4','68'), ('s2','c1','85'), ('s3','c1','85'), ('s3','c3','83'), ('s3','c4','75'), ('s4','c1','79'), ('s4','c2','92'), ('s5','c1',null), ('s5','c2','45') select * from SC ----------------------------------------------------------------------------------------
通過select into語句將SC表的表結構複製為SC_TEMP表,然後查詢所有性別非空的學生的選課記錄並將之插入到SC_TEMP表。
複製表的結構:
查詢所有性別非空的學生的選課記錄並將之插入到SC_TEMP表:
原始碼:
----------------------------------複製表結構---------------------------------------------------
--複製SC表的結構到SC_TEMP
select * into SC_TEMP from SC where 1=2
select * from SC_TEMP
--------------------------查詢性別非空的學生並插入SC_TEMP--------------------------------------
--查詢性別非空的學生並插入SC_TEMP
insert into SC_TEMP(S#,C#,SCORE)
select SC.S#,C#,SCORE from S,SC
where SC.S#=S.S# and S.SEX != 'NULL'
select * from SC_TEMP
刪除SC_TEMP表中無成績的元組
原始碼:
-------------------------刪除SC_TEMP表中無成績的元組--------------------------------------
--刪除SC_TEMP表中無成績的元組
delete from SC_TEMP where SCORE is NULL
select * from SC_TEMP
將SC_TEMP表中S3的低於S3平均成績的成績提高10%
出現如下錯誤是由於設計表的時候,將數字型別也設為了varchar
解決辦法:
上述操作完成,問題解決:
原始碼:
--------------------------將SC_TEMP表中S3的低於S3平均成績的成績提高10% --------------------
--將SC_TEMP表中S3的低於S3平均成績的成績提高10%
select * from SC_TEMP where S#='s3'
update SC_TEMP set SCORE = 1.1*SCORE
where S#='s3' and SCORE < (select AVG(SCORE)from SC_TEMP where S#='s3')
select * from SC_TEMP
刪除SC_TEMP表中S3的小於該生平均成績的成績元組
82被刪除:
原始碼:
--------------------------刪除SC_TEMP表中S3的小於該生平均成績的成績元組-------------------
--刪除SC_TEMP表中S3的小於該生平均成績的成績元組
delete from SC_TEMP
where S#='s3' and SCORE<(select AVG(SCORE) from SC_TEMP where S#='s3');
select * from SC_TEMP
將S表中性別為空的學生的性別修改為女,並將年齡修改為25歲
選出來,再修改:
原始碼:
-----------------------將S表中性別為空的學生的性別修改為女,並將年齡修改為25歲-------------
--將S表中性別為空的學生的性別修改為女,並將年齡修改為25
select * from S where SEX is NULL update S set SEX='女',AGE=25 where SEX is NULL;
select * from S
建立檢視V_M_STUDENT, 要求顯示男學生的學號、姓名、課程名、教師名、成績等列
原始碼:
--建立檢視V_M_STUDENT, 要求顯示男學生的學號、姓名、課程名、教師名、成績等列
go
create view V_M_STUDENT(S#,SNAME,CNAME,TNAME,SCORE)
as select S.S#,SNAME,CNAME,TNAME,SCORE
from S,SC,C,T
where S.S# = SC.S# and SC.C# =C.C# and C.T# = T.T# and SEX='男'
go
select * from V_M_STUDEN
關鍵語法說明
-
使用T-SQL插入語句
語法:insert [ into] 表名 [列名] values (值列表) -
表的複製
(1)複製表結構及資料到新表
create table 新表 select * from 舊錶
(2)只複製表結構到新表
create table 新表 select * from 舊錶 where 1=2 (即:讓where條件不成立) -
查詢記錄插入到新表
(1)如果是插入到一個新表中:
select 目標列 into 新表 from 表名 where <條件>
(2)如果是插入到一個已存在的表中:
insert into 插入的表名<列名> select 目標列 from 表名 where <條件> -
按條件刪除目標元組
delete from 表名 where 條件表示式 -
元組更新
update 表名 set 列名1 = 表示式1 或 (子查詢1), 表示式2 或 (子查詢2)……
where 條件表示式
關鍵知識點
使用T-SQL插入語句是需要注意
- 每次插入一行資料,不能直插入半行或者幾列資料
- 每個資料值的資料型別,精度和小數位數必須與相應的列匹配
- 不能為標識列指定值
- 如果在設計表的時候就制定了某列不允許為空,則必須插入資料
- 插入的資料項,要求符合檢查約束的要求
- 具有預設值的列,可以使用default(預設)關鍵字來代替插入的值
如有錯誤,歡迎指正!