题目
初答(有误)
(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
验证结果,查询王丽借阅的所有书籍: