三个表:图书信息表、读者信息表、借阅表 图书信息(书号、书名、作者、出版日期、出版社、数量) 读者信息表(图书证号、姓名、班级) 借阅表(书号、图书证号、借出日期、应还日期、归还日期) 数据库表结构如下: sql_book(book_no, book_name, author, pub_date, pub_company, number) sql_reader(reader_no, reader_name, class) sql_borrow(book_no, reader_no, bda, rda, tda) 题目:查没有借过书的读者信息
时间: 2024-03-21 17:41:31 浏览: 181
可以使用以下 SQL 查询语句实现该功能:
```
SELECT sql_reader.reader_no, sql_reader.reader_name
FROM sql_reader
WHERE sql_reader.reader_no NOT IN (
SELECT DISTINCT sql_borrow.reader_no
FROM sql_borrow
);
```
解释一下每个部分的功能:
- `SELECT sql_reader.reader_no, sql_reader.reader_name`:选择读者信息表中的读者证号和读者姓名列作为查询结果的一部分。
- `FROM sql_reader`:指定从读者信息表中查询数据。
- `WHERE sql_reader.reader_no NOT IN (...)`:使用子查询的方式检索没有借过书的读者信息。子查询中使用 DISTINCT 关键字去重,确保每个读者只出现一次,并选择借阅表中的读者证号列作为查询结果的一部分。最外层查询使用 NOT IN 子句排除拥有借阅记录的读者。
执行该查询语句后,即可得到没有借过书的读者信息。
相关问题
现有图书管理系统数据库 Book,数据库中有如下三个表: CARD ( CNO 卡号,NAME 姓名,CLASS 班级) BOOK( BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数, PUBLISH 出版社) BORROW(CNO 卡号,BNO 书号,BDATE 借书日期 ,RDATE 还书日期) 要求:写出实现下列功能的SQL语句 1. 创建数据库名称为:Book_本人学号,如:BOOK_J2200501。(2分) 2. 创建表: BOOK (BNO CHAR(10),BNAME VARCHAR(30),AUTHOR VARCHAR(20),PRICE DECIMAL(6,1) , PUBLISH VARCHAR(20)) 要求:BNO是主键, BNAME不能为空, PUBLISH 默认值是清华大学出版社。(5分) 3. 创建表: BORROW(CNO CHAR(8) ,BNO CHAR(10),BDATE DATE,RDATE DATE ) (5分) 要求: CNO,BNO是复合主键; CNO外键,引用CARD表中的CNO; BNO外键,引用BOOK表中的BNO. 4.向CARD表中输入如下信息:(2分) CNO NAME CLASS 2001 李明 10702 2002 张华 10702 5. 查询作者谭浩强出版的图书信息。(3分) 6. 查询定价在30~50之间的图书信息,显示书号、书名、价格、出版社。(3分) 7. 查询‘李明’的借阅记录,显示书号、书名和借书日期。(4分) 8. 查询各出版社出版的图书数量。(3分) 9. 查询高于平均价格的图书信息 。(3分
1. 创建数据库:
```
CREATE DATABASE BOOK_J2200501;
```
2. 创建表 BOOK:
```
USE BOOK_J2200501;
CREATE TABLE BOOK (
BNO CHAR(10) PRIMARY KEY,
BNAME VARCHAR(30) NOT NULL,
AUTHOR VARCHAR(20),
PRICE DECIMAL(6,1),
PUBLISH VARCHAR(20) DEFAULT '清华大学出版社'
);
```
3. 创建表 BORROW:
```
CREATE TABLE BORROW (
CNO CHAR(8),
BNO CHAR(10),
BDATE DATE,
RDATE DATE,
PRIMARY KEY (CNO, BNO),
FOREIGN KEY (CNO) REFERENCES CARD(CNO),
FOREIGN KEY (BNO) REFERENCES BOOK(BNO)
);
```
4. 插入 CARD 表数据:
```
INSERT INTO CARD (CNO, NAME, CLASS) VALUES
('2001', '李明', '10702'),
('2002', '张华', '10702');
```
5. 查询作者谭浩强出版的图书信息:
```
SELECT * FROM BOOK WHERE AUTHOR = '谭浩强';
```
6. 查询定价在30~50之间的图书信息,显示书号、书名、价格、出版社:
```
SELECT BNO, BNAME, PRICE, PUBLISH FROM BOOK WHERE PRICE BETWEEN 30 AND 50;
```
7. 查询‘李明’的借阅记录,显示书号、书名和借书日期:
```
SELECT B.BNO, B.BNAME, BR.BDATE FROM BOOK B, BORROW BR WHERE B.BNO = BR.BNO AND BR.CNO = '2001' AND EXISTS (SELECT * FROM CARD C WHERE C.CNO = BR.CNO AND C.NAME = '李明');
```
8. 查询各出版社出版的图书数量:
```
SELECT PUBLISH, COUNT(*) FROM BOOK GROUP BY PUBLISH;
```
9. 查询高于平均价格的图书信息:
```
SELECT * FROM BOOK WHERE PRICE > (SELECT AVG(PRICE) FROM BOOK);
```
python用字典实现图书管理系统 图书馆所藏图书如表1所示: 书号 书名 出版社 作者 价格 库存 1001 计算机科学导论 高等教育出版社 董荣胜 39 5 1002 Python程序设计 电子工业出版社 胡凤国 68 8 1003 算法导论 机械工业出版社 Thomas 128 表1 借阅信息如表2所示: 学号 书号 借阅日期 还书日期 10001 1001 20230319 20230420 10002 1003 20230201 表2 学生信息如表3所示: 学号 姓名 性别 班级 10001 张强 男 自动化2101 10002 李琳 女 临床2202 .. 要求实现以下功能: (1)能分别输入表1和表3的信息,并将其分别保存到两个文件(2)分别从文件中读出图书信息和学生信息 (3)实现借阅功能:输入学号和书号,如果借阅成功(学号所对应的学生在表3中并且书号所对应的图书在表1中且库存大于等于1,每个学生最多借阅5本书),修改表1和表2,并将修改后的数据分别保存到文件1和文件2 (4)实现还书功能:从表2中该学生的借阅信息中修改还书日期,修改表1的库存信息。并保存到对应的文件 (5)输入某学生姓名,可以查询该生的借阅图书信息(6)输入某书号,可以查询借阅该书的学生信息 (7)输入出版社的名称,可以统计图书馆中该出版社的图书藏书量
好的,我们可以用 Python 字典实现这个图书管理系统。首先,我们需要定义三个字典,分别存储图书信息、借阅信息和学生信息。代码如下:
```
books = {
'1001': {'书名': '计算机科学导论', '出版社': '高等教育出版社', '作者': '董荣胜', '价格': 39, '库存': 5},
'1002': {'书名': 'Python程序设计', '出版社': '电子工业出版社', '作者': '胡凤国', '价格': 68, '库存': 8},
'1003': {'书名': '算法导论', '出版社': '机械工业出版社', '作者': 'Thomas', '价格': 128, '库存': 1}
}
borrow = {
'10001': {'1001': {'借阅日期': '20230319', '还书日期': '20230420'}},
'10002': {'1003': {'借阅日期': '20230201', '还书日期': ''}}
}
students = {
'10001': {'姓名': '张强', '性别': '男', '班级': '自动化2101'},
'10002': {'姓名': '李琳', '性别': '女', '班级': '临床2202'}
}
```
接下来,我们需要实现各个功能。第一步是将表1和表3的信息分别保存到文件。代码如下:
```
import json
# 将books保存到文件1中
with open('books.json', 'w') as f:
json.dump(books, f)
# 将students保存到文件2中
with open('students.json', 'w') as f:
json.dump(students, f)
```
第二步是从文件中读出图书信息和学生信息。代码如下:
```
# 从文件1中读出books
with open('books.json', 'r') as f:
books = json.load(f)
# 从文件2中读出students
with open('students.json', 'r') as f:
students = json.load(f)
```
第三步是实现借阅功能。代码如下:
```
def borrow_book(student_id, book_id):
if student_id in borrow and len(borrow[student_id]) >= 5:
return '借阅失败,每个学生最多借阅5本书'
if book_id not in books or books[book_id]['库存'] < 1:
return '借阅失败,该书已被借完'
borrow_date = input('请输入借阅日期(格式为YYYYMMDD):')
borrow[student_id][book_id] = {'借阅日期': borrow_date, '还书日期': ''}
books[book_id]['库存'] -= 1
with open('borrow.json', 'w') as f:
json.dump(borrow, f)
with open('books.json', 'w') as f:
json.dump(books, f)
return '借阅成功'
```
第四步是实现还书功能。代码如下:
```
def return_book(student_id, book_id):
if student_id not in borrow or book_id not in borrow[student_id]:
return '还书失败,该学生没有借阅该书'
return_date = input('请输入还书日期(格式为YYYYMMDD):')
borrow[student_id][book_id]['还书日期'] = return_date
books[book_id]['库存'] += 1
with open('borrow.json', 'w') as f:
json.dump(borrow, f)
with open('books.json', 'w') as f:
json.dump(books, f)
return '还书成功'
```
第五步是输入某学生姓名,可以查询该生的借阅图书信息。代码如下:
```
def search_borrow(student_name):
student_id = ''
for id, info in students.items():
if info['姓名'] == student_name:
student_id = id
break
if not student_id:
return '查询失败,该学生不存在'
if student_id not in borrow:
return '该学生没有借阅任何书籍'
result = []
for book_id, info in borrow[student_id].items():
book_info = books[book_id].copy()
book_info.update(info)
result.append(book_info)
return result
```
第六步是输入某书号,可以查询借阅该书的学生信息。代码如下:
```
def search_student(book_id):
if book_id not in borrow:
return '该书没有被借阅'
result = []
for student_id, info in borrow.items():
if book_id in info:
student_info = students[student_id].copy()
student_info.update(info[book_id])
result.append(student_info)
return result
```
第七步是输入出版社的名称,可以统计图书馆中该出版社的图书藏书量。代码如下:
```
def count_publisher(publisher_name):
count = 0
for book_id, info in books.items():
if info['出版社'] == publisher_name:
count += info['库存']
return count
```
以上就是用 Python 字典实现图书管理系统的全部代码。
阅读全文