SQL Server 2008 数据库_实验二_SQL DDL 操作

版权声明:如需转载,请注明出处 https://blog.csdn.net/qq_36260974/article/details/85353224

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(缺省)关键字来代替插入的值

如有错误,欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/85353224