什么是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表中无成绩的元组
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的小于该生平均成绩的成绩元组
--------------------------删除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插入语句是需要注意
如有错误,欢迎指正!