数据库,SQL查询题目

现有图书馆数据库的三个表,建表的语句为:

CREATE TABLE [dbo].[图书](

[图书编号] [int] IDENTITY(10000,1) NOT NULL,

[分类号] [int] NULL,

[书名] [nvarchar](50) NULL,

[作者] [nvarchar](20) NULL,

[出版单位] [nvarchar](20) NULL,

[单价] [tinyint] NULL

) ON [PRIMARY]

GO

CREATE TABLE [dbo].[读者](

[借书证号] [int] NULL,

[单位] [nvarchar](20) NULL,

[姓名] [nvarchar](20) NULL,

[性别] [nvarchar](1) NULL,

[年龄] [int] NULL,

[地址] [nvarchar](20) NULL

) ON [PRIMARY]

GO

CREATE TABLE [dbo].[借阅](

[借书证号] [int] IDENTITY(20140001,1) NOT NULL,

[图书编号] [int] NULL,

[借书日期] [smalldatetime] NULL

) ON [PRIMARY]

请依据上述三个表,写出以下查询语句

基础题
1.查询读者最喜爱的3种图书分类号,即借阅表中出现最多的3类图书分类号

附加题
1.查询小于20岁的读者最喜欢的3类图书
2.查询至少借阅了 宁静 所借图书(书名相同)的人的姓名
3.查询借阅了多于3本书且每本书价均高于60的读者的借书证号
4.假定读者表中所有人姓名均不多于4个汉字,请建立一个查询语句,要求根据名字中任意1个或两个或3个或4个汉字,即可找到该读者的详细信息(即完全模糊查询)。

--基础题
--1.查询读者最喜爱的3种图书分类号,即借阅表中出现最多的3类图书分类号
SELECT TOP 3 [分类号] FROM [图书] JOIN [借阅] ON [图书].[图书编号]=[借阅].[图书编号]
GROUP BY [分类号] ORDER BY COUNT(*) DESC

--附加题
--1.查询小于20岁的读者最喜欢的3类图书
SELECT TOP 3 [书名] FROM [读者] JOIN [借阅] ON [读者].[借书证号]=[借阅].[借书证号]
JOIN [图书] ON [图书].[图书编号]=[借阅].[图书编号]
WHERE [年龄]<20 GROUP BY [书名] ORDER BY COUNT(*) DESC

--2.查询至少借阅了 宁静 所借图书(书名相同)的人的姓名
SELECT [姓名] FROM [读者] WHERE [姓名]<>'宁静' AND [借书证号] IN(SELECT [借书证号] FROM [借阅]
WHERE [图书编号] IN(SELECT [图书编号] FROM [读者] JOIN [借阅] ON [读者].[借书证号]=[借阅].[借书证号] WHERE [姓名]='宁静'))

--3.查询借阅了多于3本书且每本书价均高于60的读者的借书证号
SELECT [借书证号]
FROM [借阅] JOIN [图书] ON [图书].[图书编号]=[借阅].[图书编号]
WHERE [单价]>60 GROUP BY [借书证号] HAVING COUNT(*)>3
GO

--4.假定读者表中所有人姓名均不多于4个汉字,请建立一个查询语句,要求根据名字中任意1个或两个或3个或4个汉字,即可找到该读者的详细信息(即完全模糊查询)
CREATE PROCEDURE CX
@XM VARCHAR(8) AS
IF LEN(@XM)=1 SELECT * FROM [读者] WHERE @XM LIKE '['+RTRIM([姓名])+']'
ELSE IF LEN(@XM)=2 SELECT * FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'
ELSE IF LEN(@XM)=3 SELECT * FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,2,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'
ELSE IF LEN(@XM)=4 SELECT * FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,2,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,3,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'
GO
温馨提示:答案为网友推荐,仅供参考
相似回答