数据库每日一题(2)查询

题目

题目
题目

初答(有误)

(1)

SELECT B.借书证号 AS 借书证号, 姓名, 系名, COUNT(*) AS 借书数量
FROM BORROWER B JOIN LOANS L
ON B.借书证号 = L.借书证号
WHERE 借书数量>=5
GROUP BY B.借书证号

错误提示
此时,借书数量尚未生成。

(2)

DECLARE @WangLiID varchar(8) --王丽同学借书证号

SELECT 学生姓名, 系名, 书名, 借书日期
FROM BORROWER, LOANS, BOOKS
WHERE BORROWER.借书证号 = LOANS.借书证号
	AND LOANS.图书馆登记号 = BOOKS.图书馆登记号
	AND LOANS.图书馆登记号 IN
			 (SELECT 图书馆登记号
			  FROM LOANS
			  WHERE 借书证号 = @WangLiID)
	AND BORROWER.借书证号 != @WangLiID
		

参考解答(有误)

在这里插入图片描述

实操(正确)

建表

IF NOT EXISTS (SELECT name FROM SYS.DATABASES WHERE name = 'LIBRARY')
CREATE DATABASE LIBRARY
GO

USE LIBRARY

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'BORROWER')
DROP TABLE BORROER

CREATE TABLE BORROWER
(
	借书证号 varchar(10) PRIMARY KEY,
	姓名 varchar(10),
	系名 varchar(10),
	班级 varchar(5)
)
GO


IF EXISTS (SELECT name FROM sysobjects WHERE name = 'BOOKS')
DROP TABLE BOOKS

CREATE TABLE BOOKS
(
	索书号 varchar(10),
	书名 varchar(10),
	作者 varchar(10),
	图书登记号 varchar(10)  PRIMARY KEY,
	出版社 varchar(10),
	价格 float
)
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'LOANS')
DROP TABLE LOANS

CREATE TABLE LOANS
(
	借书证号 varchar(10) FOREIGN KEY REFERENCES BORROWER(借书证号),
	图书馆登记号 varchar(10) FOREIGN KEY REFERENCES BOOKS(图书登记号),
	借书日期 date,
)
GO

插入数据

数据

查询(答案)

(1)

复现解答结果错误:
错误
解答参考文章:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

将没有包含在聚合函数或 GROUP BY 子句中的列采用聚合函数min()
如下:

SELECT L.借书证号,min(姓名), min(系名), COUNT(*) AS 借书数量
FROM BORROWER B ,LOANS L
WHERE B.借书证号 = L.借书证号
GROUP BY L.借书证号
HAVING  COUNT(*) >=5

答案正确
在这里插入图片描述

(2)

学习变量赋值语句:

DECLARE @Variable [type]
SET @Variable = [value]

正确答案

DECLARE @WangLiID varchar(8) --王丽同学借书证号
SET @WangLiID = '12011107'

SELECT 姓名, 系名, 书名, 借书日期
FROM BORROWER, LOANS, BOOKS
WHERE BORROWER.借书证号 = LOANS.借书证号
	AND LOANS.图书馆登记号 = BOOKS.图书登记号
	AND LOANS.图书馆登记号 IN
			 (SELECT 图书馆登记号
			  FROM LOANS
			  WHERE 借书证号 = @WangLiID)
	AND BORROWER.借书证号 != @WangLiID

结果正确
验证结果,查询王丽借阅的所有书籍:
在这里插入图片描述

源码地址

GitHub仓库

发布了39 篇原创文章 · 获赞 3 · 访问量 4633

猜你喜欢

转载自blog.csdn.net/cascara/article/details/104293561