1. 程式人生 > >SQL Server 2008 資料庫_實驗二_SQL DDL 操作

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表:
S表:
C表:
C表:
SC表:
SC表:
T表:
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

關鍵語法說明

  1. 使用T-SQL插入語句
    語法:insert [ into] 表名 [列名] values (值列表)

  2. 表的複製
    (1)複製表結構及資料到新表
      create table 新表 select * from 舊錶
    (2)只複製表結構到新表
      create table 新表 select * from 舊錶 where 1=2 (即:讓where條件不成立)

  3. 查詢記錄插入到新表
    (1)如果是插入到一個新表中:
      select 目標列 into 新表 from 表名 where <條件>
    (2)如果是插入到一個已存在的表中:
      insert into 插入的表名<列名> select 目標列 from 表名 where <條件>

  4. 按條件刪除目標元組
      delete from 表名 where 條件表示式

  5. 元組更新
      update 表名 set 列名1 = 表示式1 或 (子查詢1), 表示式2 或 (子查詢2)……
      where 條件表示式

關鍵知識點

使用T-SQL插入語句是需要注意

  • 每次插入一行資料,不能直插入半行或者幾列資料
  • 每個資料值的資料型別,精度和小數位數必須與相應的列匹配
  • 不能為標識列指定值
  • 如果在設計表的時候就制定了某列不允許為空,則必須插入資料
  • 插入的資料項,要求符合檢查約束的要求
  • 具有預設值的列,可以使用default(預設)關鍵字來代替插入的值

如有錯誤,歡迎指正!