任务6.1 添加数据(用T-SQL插入数据行)
1.NSERT [INTO] 表名|视图名 [(列名表)] VALUES(常量表)
语法:INSERT [INTO] 表名|视图名 [(列名表)] VALUES(常量表)
说明:
列名表用于指定该数据表的一列或多列(逗号分隔),顺序可以与表的列顺序不同。在数据表中未被指定的列必须支持空值或者默认值,如果默认值存在,该列使用默认值,否则SQL Server会尝试为该列补上一个空值。
常量表提供向表中插入的数据,如果提供的数据是多个,也必须用逗号分隔。
常量表中提供的数据与列名表指定的列名个数、数据类型和顺序必须一致。
当常量表中提供的数据与表定义的列在个数和顺序上完全一致时,列名表可以省略。
--添加数据数据库[Teaching]的教师表[T]
/* 格式: INSERT INTO [dbo].[T]([TNO] ,[TNAME] ,[TSEX] ,[TITLE]) VALUES
(<TNO, char(6),> ,<TNAME, varchar(8),> ,<TSEX, char(2),> ,<TITLE, varchar(10),>)
*/
USE [Teaching]
GO
INSERT T VALUES('T11','李大力','男','教授')
INSERT T VALUES('T12','王小平','女','讲师')
INSERT T VALUES('T13','刘伟伟','男','讲师')
INSERT T VALUES('T14','张小雪','女','教授')
INSERT T VALUES('T15','张瑶兰','女','副教授')
INSERT T VALUES('T16','王红一','男','助教')
INSERT T VALUES('T17','李伟明','男','助教')
GO
--添加数据数据库[Teaching]的学生表[S]
/* 格式:INSERT INTO [dbo].[S]([SNO] ,[SNAME] ,[SSEX] ,[SDEPT] ,[SBIRTHDAY])
VALUES (<SNO, char(6),> ,<SNAME, varchar(8),> ,<SSEX, char(2),>
,<SDEPT, varchar(10),> ,<SBIRTHDAY, datetime,>)
*/
INSERT S VALUES('19001','李小勇','男','软件','1998-03-05')
INSERT S VALUES('19002','刘小晨','女','信息','1999-10-03')
INSERT S VALUES('19003','王小敏','女','软件','1999-05-10')
INSERT S VALUES('19004','张小立','男','信息','1998-04-07')
INSERT S VALUES('19005','欧大锋','男','信息','1999-07-30')
INSERT S VALUES('19006','欧大华','男','软件','1998-06-09')
INSERT S VALUES('19007','刘小明','女',网络','1999-08-10')
INSERT S VALUES('19008','李水岩','女',动漫','1998-05-23')
GO
--添加数据数据库[Teaching]的课程表[C]
/* 格式: INSERT INTO [dbo].[C] ([CNO] ,[CNAME] ,[CT] ,[TNO])
VALUES (<CNO, char(6),> ,<CNAME, varchar(20),> ,<CT, smallint,> ,<TNO, char(6),>)
*/
USE [Teaching]
INSERT C VALUES('C11','数据库技术',50,'T11')
INSERT C VALUES('C12','高等数学',80,'T15')
INSERT C VALUES('C13','信息系统安全',30,'T13')
INSERT C VALUES('C14','操作系统原理',60,'T12')
INSERT C VALUES('C15','数据结构及应用,80,'T16')
INSERT C VALUES('C16','计算机网络基础',50,'T13')
INSERT C VALUES('C17','C语言程序设计',60,'T14')
INSERT C VALUES('C18','数据库开发技术',50,'T17')
(2)INSERT INTO [dbo].[学生表]
([学号],[姓名],[性别],[民族],[出生日期],[专业班级] )
VALUES ('201906601','李小芳','女','汉','2000-05-23','19软件6班')
(3) INSERT [学生表] ([学号],[姓名],[性别],[民族],[出生日期],[专业班级] )
VALUES ('201906301','卢小明','男','回','2001-06-23','19软件3班')
--例:将数据插入[教务数据库]的[课程表]
(1)INSERT INTO [教务数据库].[dbo].[课程表]
([课程号],[课程名],[学时],[学分],[类别])
VALUES (‘206001',‘MYSQL数据库技术',64,4,'必修课')
(2)INSERT INTO [dbo].[课程表]
([课程号],[课程名],[学时],[学分],[类别])
VALUES (‘206002’,‘高级JAVA程序设计',90,5,'必修课')
(3)INSERT 课程表
VALUES (‘206003’,‘网站设计',78,4.5,'必修课')
--将数据插入[教务数据库]的[教师表]
(1)INSERT INTO [教务数据库].[dbo].[教师表]
([教师号],[姓名],[性别],[专业],[职称],[出生日期],[院系号])
VALUES ('703010','李小冬','男','人工智能','副教授','1963-09-05',7)
(2)INSERT INTO [教务数据库].[dbo].[教师表]
([教师号],[姓名],[性别],[专业],[职称],[出生日期])
VALUES ('703011','刘小芳','女','大数据技术','讲师','1983-11-15')
(3)INSERT INTO [教务数据库].[dbo].[教师表]
([教师号],[姓名],[性别],[专业],[职称])
VALUES ('703012','谢红','男','电子商务技术','讲师')
--例:将数据插入[教务数据库]的[成绩表] 注意:主键(学号,课程号),外键的值必须存在!
(1)INSERT INTO [教务数据库].[dbo].[成绩表]
([学号],[课程号],[成绩],[任课教师号])
VALUES ('202006551','206001',86,'703010')
(2)INSERT INTO [教务数据库].[dbo].[成绩表]
([学号],[课程号],[成绩],[任课教师号])
VALUES ('202006551','206002',75,'703011')
(3)INSERT INTO [教务数据库].[dbo].[成绩表]
([学号],[课程号],[成绩],[任课教师号])
VALUES ('202006551','206003',90,'703012')
语法:INSERT 表名 SELECT子查询
SELECT查询子句用于指定源表及其数据,
USE Teaching
GO
--新创建一个 [奖学金表]
CREATE TABLE 奖学金表
(学号 char(6) ,
姓名 varchar(8) ,
性别 char(2) ,
奖金等级 varchar(12) ,
奖学金 REAL ,
备注 varchar(100))
GO
[奖学金表] ([学号],[姓名] ,[性别] ) */
USE [Teaching]
GO
INSERT INTO [dbo].[奖学金表]
([学号],[姓名] ,[性别] )
SELECT [SNO],[SNAME],[SSEX] FROM [dbo].[S]
查阅是否已导入: SELECT * FROM [奖学金表]
--例: 将一表中的数据插入到另一表(注:这一表必须是已存在的表)
USE db_2012
insert into books2
select * from books where 出版社 ='人邮'
--查询数据表
select * from books2 WHERE 出版社 LIKE ‘%人%’
USE BOOKDATA
select * from 书目信息 WHERE 出版社 LIKE '%7-1%‘
USE db_2012
insert into books2
select * from BOOKDATA.dbo.书目信息 where 出版社 = '%7-1%‘
(出错! 分析为什么? 表 [books2]与[书目信息] 结构是否相同? )
例: 将一个数据库表的数据导入另一个数据库表内.
insert into db_2012.dbo.books([书号] ,[书名] ,[作者] ,[图书出版社] ,[单价] ,[简介])
select [书目编号],[名称] ,[作者],[出版社],[价格] ,[简介]
from BOOKDATA.dbo.书目信息
Where [作者] LIKE '%陈%'
思考: 解释上面命令的功能作用