SQL Server 练习题(初学)

SQL Server 练习题(基础)

  • 一、前言
  • 二、准备
  • 三、练习
    • 1.创建练习题目的数据库(新建查询)
    • 2.练习题(新建查询时注意是在 ‘练习’ 数据库中)

一、前言

新开了一门《数据库原理及应用》,布置了一些基础题目,发出来互相学习,不排除所学有限,仍有最优解的情况。

二、准备

SQL Server 现有的版本应该是都可以用的
下载相关可以参考 SQL Server2019的下载与安装

三、练习

1.创建练习题目的数据库(新建查询)

下面关于日期的数据类型由 datetime 改为 date 更合适一些。

create database 练习
go
use 练习
go
create table 读者
(
账号 char(4) not null primary key,
姓名 varchar(6) not null,
性别 char(2) check (性别 in ('男','女')), 
等级 varchar(8) check (等级 in ('黄金','青铜','白银','最强王者')),
出生日期 datetime not null,
余额 money not null
)
go
insert into 读者(账号,姓名,性别,等级,出生日期,余额) values ('D001','陈诚瑞','男','黄金',1988-7-11,200)
insert into 读者(账号,姓名,性别,等级,出生日期,余额) values ('D002','郭彩霞','女','白银',1987-1-4,500)
insert into 读者(账号,姓名,性别,等级,出生日期,余额) values ('D003','王新英','女','青铜',1978-9-21,20)
insert into 读者(账号,姓名,性别,等级,出生日期,余额) values ('D004','范鼎毅','男','最强王者',1995-4-1,1000)
insert into 读者(账号,姓名,性别,等级,出生日期,余额) values ('D005','钟鸣','女','青铜',2000-4-21,100)
insert into 读者(账号,姓名,性别,等级,出生日期,余额) values ('D006','王协瑞','男','白银',1990-7-14,800)
go
create table 图书
(
条形码 varchar(7) not null primary key,
书名 varchar(20) not null,
作者 varchar(6) not null,
出版社 varchar(20),
出版日期 datetime,
售价 money not null
)
go
insert into 图书(条形码,书名,作者,出版社,出版日期,售价) values ('TP303.5','大学计算机基础','李凯','科学出版社',2018-10-7,50)
insert into 图书(条形码,书名,作者,出版社,出版日期,售价) values ('TP304.1','数据库技术及应用','郭栋阳','高教出版社',2017-6-16,42.6)
insert into 图书(条形码,书名,作者,出版社,出版日期,售价) values ('TP213.5','七彩课堂','朱五书','河北教育出版社',2019-11-8,31.8)
insert into 图书(条形码,书名,作者,出版社,出版日期,售价) values ('TP204.2','钩针编织基础','寿玉梅','科学出版社',2015-9-18,56)
insert into 图书(条形码,书名,作者,出版社,出版日期,售价) values ('TP305.5','C语言程序设计','谭森','高教出版社',2014-1-12,48.5)
insert into 图书(条形码,书名,作者,出版社,出版日期,售价) values ('TP305.6','VB程序设计','钟鸣','人民邮电出版社',2014-7-11,44.6)
go
create table 借阅
(
账号 char(4) not null,
条形码 varchar(7) not null,
借书日期 datetime not null,
还书日期 datetime not null
primary key(账号,条形码),
foreign key(账号)references 读者(账号),
foreign key(条形码)references 图书(条形码),
)
go
insert into 借阅(账号,条形码,借书日期,还书日期) values ('D001','TP303.5',2018-8-2,2018-10-7)
insert into 借阅(账号,条形码,借书日期,还书日期) values ('D001','TP304.1',2017-3-18,2017-6-16)
insert into 借阅(账号,条形码,借书日期,还书日期) values ('D005','TP303.5',2019-10-3,2019-11-8)
insert into 借阅(账号,条形码,借书日期,还书日期) values ('D002','TP204.2',2015-6-6,2015-9-18)
insert into 借阅(账号,条形码,借书日期,还书日期) values ('D002','TP305.5',2013-12-4,2014-1-12)
insert into 借阅(账号,条形码,借书日期,还书日期) values ('D003','TP305.6',2014-5-1,2014-7-11)
insert into 借阅(账号,条形码,借书日期,还书日期) values ('D003','TP304.1',2020-1-2,2020-3-11)

建好的表如下:

  • 图书表
  • 借阅表
  • 读者表

2.练习题(新建查询时注意是在 ‘练习’ 数据库中)

  • 1.查询图书表中售价介于50元到70元之间的图书的全部信息
SELECT *
FROM 图书
WHERE 售价 BETWEEN 50 AND 70

  • 2.查询图书表中全部图书的最高售价、最低售价和平均售价。
SELECT MAX(售价) 最高售价,MIN(售价) 最低售价,AVG(售价) 平均售价
FROM 图书

  • 3.查询图书的条形码,书名,出版社和出版日期,要求结果按出版社升序排列,出版社相同的数据按出版日期降序排列
SELECT 条形码,书名,出版社,出版日期
FROM 图书
ORDER BY 出版社,出版日期 DESC

  • 4.在图书表中插入一条记录,内容是:条形码“TP211.3”,书名“狼图腾”,作者“姜戎”,售价 44.5元
INSERT INTO 图书(条形码,书名,作者,售价)
VALUES ('TP211.3','狼图腾','姜戎',44.5)

  • 5.通过图书表,读者表和借阅表,查询读者的借阅情况,要求结果中包含以下字段:账号,姓名,条形码,书名,借书日期和还书日期。
SELECT 借阅.账号,姓名,图书.条形码,书名,借书日期,还书日期
FROM 图书 INNER JOIN(借阅 INNER JOIN 读者 ON 借阅.账号 = 读者.账号)
ON 图书.条形码 = 借阅.条形码

  • 6.在读者表中查询所有等级为“白银”的读者的余额之和。
SELECT SUM(余额) 白银读者余额之和
FROM 读者
WHERE 等级 = '白银'

  • 7.通过读者和借阅表,查询读者信息,包括以下字段:账号,姓名,性别,条形码,借书日期和还书日期
select 读者.账号,姓名,性别,条形码,借书日期,还书日期
from 读者 inner join 借阅
on 读者.账号 = 借阅.账号

  • 8.查询图书表中有哪些出版社,要求结果没有重复值
SELECT DISTINCT 出版社
FROM 图书

  • 9.将图书表中条形码为TP204.2的图书信息删除
delete 
from 图书
where 条形码 = 'TP204.2'
  • 10.在读者表中,查询男女性读者各多少人。
select 性别,count(性别) 人数
from 读者
group by 性别

  • 11.在读者表中查询不同等级各自的人数,结果按人数降序排列。
select 等级,count(*)as 人数
from 读者
group by 等级
order by 人数 desc

  • 12.查询图书表中条形码左边开始三个字符是“TP3”的图书的全部信息
select *
from 图书
where 条形码 like 'TP3%'

  • 13.将图书表中科学出版社出版的图书价格上涨5%。
UPDATE 图书
SET 售价 = 售价 * 1.05
WHERE 出版社 = '科学出版社'

  • 14.查询图书表中科学出版社出版的价格在50元以上的图书的信息,要求结果中包括书名,作者,出版社和售价4列。(不包括50元)
SELECT 书名,作者,出版社,售价
FROM 图书
WHERE 图书.售价 > 50 and 出版社 = '科学出版社'

  • 15.使用IN子句查询所有‘科学出版社’和‘高教出版社’的书名,作者,售价。
SELECT 书名,作者,售价
FROM 图书
WHERE 出版社 in ( '科学出版社','高教出版社')

  • 16.在读者表中查询余额最高的读者的全部信息。
    提示:请使用嵌套查询作答,不能用top
select * 
from 读者
where 余额 >=all(select max(余额)from 读者)

  • 17.根据读者表和借阅表,查询没有借书记录的读者的账号和姓名。提示:使用“带有NOT IN的嵌套查询”
select 账号,姓名 
from 读者 
where 账号 not in (select 账号 from 借阅 where 借阅.账号=读者.账号)

  • 18.通过图书表和借阅表,查询哪本书没有被借阅过,显示它的条形码,书名和作者信息 提示:使用“带IN的嵌套查询”
select 条形码,书名,作者
from 图书
where 条形码 not in (select 条形码 from 借阅 where 借阅.条形码=图书.条形码)

本文地址:https://blog.csdn.net/m0_51086313/article/details/110582782

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐