【SQL实验】更新操作
完整代码在文章末尾【代码是自己的解答,并非标准答案,也有可能写错,文中可能会有不准确或待完善之处,恳请各位读者不吝批评指正,共同促进学习交流】
将素材“图书管理”文件下载到本地,并将其还原到SQL SERVER库中,完成以下操作。
个人因为版本问题还原不了,所以导入.xls文件
导入操作和之前一样
如果不太会,可以去重新看一下
【SQL实验】高级查询(三)含附加数据库操作-CSDN博客
1. 将财会系读者借书记录存入一个新表ckjy中,保存字段为借书证号、姓名、书名、借书日期。
查询会创建新表 ckjy
SELECT dz.借书证号,dz.姓名,ts.书名,jy.借书日期
INTO ckjy
FROM dz
JOIN jy ON dz.借书证号 = jy.借书证号
JOIN ts ON jy.总编号 = ts.总编号
WHERE dz.单位 = '财会系';
或者
SELECT dzjy.借书证号,姓名,书名,借书日期
INTO ckjy
from dz,jy,ts
where dz.借书证号= jy.借书证号
and jy.总编号= ts.总编号
and 单位= '财会系'
使用 CREATE TABLE
创建了一个名为 ckjy
的新表,包含字段 借书证号
, 姓名
, 书名
, 借书日期
。
通过 INSERT INTO
从三个表(dz
, jy
, ts
)中选择符合条件的数据,并插入到 ckjy
表中
CREATE TABLE ckjy (
借书证号 CHAR(8),
姓名 CHAR(8),
书名 CHAR(8),
借书日期 CHAR(8)
);
INSERT INTO ckjy (借书证号, 姓名, 书名, 借书日期)
SELECT dz.借书证号, dz.姓名, ts.书名, jy.借书日期
FROM dz
JOIN jy ON dz.借书证号 = jy.借书证号
JOIN ts ON jy.总编号 = ts.总编号
WHERE dz.单位 = '财会系';
2. 将记录('123','沈小霞','大学英语','2009-10-15'),('125','张自强','线性代数','2011-4-15')插入到ckjy表中。
INSERT INTO ckjy (借书证号, 姓名, 书名, 借书日期)
VALUES ('123', '沈小霞', '大学英语', '2009-10-15'),
('125', '张自强', '线性代数', '2011-4-15');
3. 根据ts表的结构用命令建立一个新表ts1。
直接建
只要空表的话
-- 1. 将 ts 表的数据插入到 ts1 表中
SELECT *
INTO ts1
FROM ts;
-- 2. 删除 ts 表中的所有数据
DELETE FROM ts;
创建一个空的新表 ts1
,你可以使用 CREATE TABLE
语句,并从 ts
表中选择表结构,而不复制数据
SELECT *
INTO ts1
FROM ts
WHERE 1 = 0;
4. 将数据库类的图书插入到表ts1中,数据库类图书包含书“数据库”和“Fox”两个关键字。
--4、
INSERT INTO ts1 (总编号, 书名, 作者, 出版单位, 分类号, 单价)
SELECT 总编号, 书名, 作者, 出版单位, 分类号, 单价
FROM ts
WHERE 书名 LIKE '%数据库%' AND 书名 LIKE '%Fox%';
%
是通配符,表示匹配任意字符。
5. 将dz表中的年龄字段利用出生日期字段计算出并填充到各个记录中。
--5
UPDATE dz
SET 年龄 = DATEDIFF(YEAR, 出生日期, GETDATE()) -
CASE WHEN MONTH(出生日期) > MONTH(GETDATE()) OR (MONTH(出生日期) = MONTH(GETDATE()) AND DAY(出生日期) > DAY(GETDATE())) THEN 1 ELSE 0 END;
6. 将ts表中所有科学出版社的图书的价格设置成原来价格的八折。
--6
UPDATE ts
SET 单价 = 单价 * 0.8
WHERE 出版单位 = '科学出版社';
7. 将所有的高级职称(包含“教授”两个字)、姓名为2个字的读者 插入到新表gjdz表中。
--7
CREATE TABLE gjdz (
借书证号 VARCHAR(20),
单位 VARCHAR(50),
姓名 VARCHAR(50),
性别 VARCHAR(10),
年龄 INT,
出生日期 DATE,
职称 VARCHAR(50),
地址 VARCHAR(100)
);
INSERT INTO gjdz (借书证号, 单位, 姓名, 性别, 年龄, 出生日期, 职称, 地址)
SELECT 借书证号, 单位, 姓名, 性别, 年龄, 出生日期, 职称, 地址
FROM dz
WHERE 职称 LIKE '%教授%' AND LEN(姓名) = 2;
8. 删除dz表中家住3楼或3楼以下的读者。
--8
DELETE FROM dz
WHERE 地址 LIKE '%3楼%' OR 地址 LIKE '%2层%'OR 地址 LIKE '%1层%';
9. 删除借阅表中关于计算机基础的借阅信息。
--9
DELETE FROM jy
WHERE 总编号 IN (
SELECT 总编号
FROM ts
WHERE 书名 LIKE '%计算机基础%'
);
10. 删除gjdz表。
--10
DROP TABLE gjdz;
完整代码:
SELECT dz.借书证号,dz.姓名,ts.书名,jy.借书日期
INTO ckjy
FROM dz
JOIN jy ON dz.借书证号 = jy.借书证号
JOIN ts ON jy.总编号 = ts.总编号
WHERE dz.单位 = '财会系';
--2
INSERT INTO ckjy (借书证号, 姓名, 书名, 借书日期)
VALUES ('123', '沈小霞', '大学英语', '2009-10-15'),
('125', '张自强', '线性代数', '2011-4-15');
--3
SELECT *
INTO ts1
FROM ts
WHERE 1 = 0;
--4、
INSERT INTO ts1 (总编号, 书名, 作者, 出版单位, 分类号, 单价)
SELECT 总编号, 书名, 作者, 出版单位, 分类号, 单价
FROM ts
WHERE 书名 LIKE '%数据库%' AND 书名 LIKE '%Fox%';
--5
UPDATE dz
SET 年龄 = DATEDIFF(YEAR, 出生日期, GETDATE()) -
CASE WHEN MONTH(出生日期) > MONTH(GETDATE()) OR (MONTH(出生日期) = MONTH(GETDATE()) AND DAY(出生日期) > DAY(GETDATE())) THEN 1 ELSE 0 END;
--6
UPDATE ts
SET 单价 = 单价 * 0.8
WHERE 出版单位 = '科学出版社';
--7
CREATE TABLE gjdz (
借书证号 VARCHAR(20),
单位 VARCHAR(50),
姓名 VARCHAR(50),
性别 VARCHAR(10),
年龄 INT,
出生日期 DATE,
职称 VARCHAR(50),
地址 VARCHAR(100)
);
INSERT INTO gjdz (借书证号, 单位, 姓名, 性别, 年龄, 出生日期, 职称, 地址)
SELECT 借书证号, 单位, 姓名, 性别, 年龄, 出生日期, 职称, 地址
FROM dz
WHERE 职称 LIKE '%教授%' AND LEN(姓名) = 2;
--8
--8
DELETE FROM dz
WHERE 地址 LIKE '%3楼%' OR 地址 LIKE '%2层%'OR 地址 LIKE '%1层%';
--9
DELETE FROM jy
WHERE 总编号 IN (
SELECT 总编号
FROM ts
WHERE 书名 LIKE '%计算机基础%'
);
--10
DROP TABLE gjdz;