SQL Server 练习题(初学)

一、前言

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

二、准备

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

三、练习

SQL Server 实例二(更进一步,包括多表连接查询,嵌套查询(子查询),集合查询以及数据更新的简单例子)

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.新建查询时注意是在 ‘练习’ 数据库中,可以直接在框里选中需要的数据库,也可以在最前面插一条
use 练习 go
2.我们在敲完之后可以自我检验看语法是否通过
3.在执行语句后,如果不确定答案,在符合现实的情况下,可以看看基表,自己比对比对,人工找一下符合条件的结果。如果要查看表的内容,选中要看的表,右键编辑前200行即可。
4.可能数据库跟不上你的速度,刷新即可,有时候已经打开了一个表,当更新了数据后,刷新后也没变化,叉掉打开的表,重新打开这张表就好。
5.对于一些数据更新的题目,建议单独搞一个表练手,对新表进行操作。

  • 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.在读者表中查询不同等级各自的人数,结果按人数降序排列。(降序的关键字是desc)
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 借阅.条形码=图书.条形码)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_51086313/article/details/110582782