连接查询:查询李明这个人的借阅记录,结果显示读者姓名、图书名称、借出和归还日期
时间: 2024-12-23 20:17:04 浏览: 20
连接查询(JOIN)是一种用于从两个或更多表中检索数据的技术,当需要基于某些关联条件获取特定信息时非常有用。如果你想要查询李明的借阅记录,包括读者姓名、图书名称以及借出和归还日期,假设我们有两个表格:`borrow_records`(包含读者ID、图书ID、借出日期)和`users`(包含读者姓名、读者ID),你可以使用以下SQL查询:
```sql
SELECT users_reader_name AS 读者姓名, borrow_records_book_title AS 图书名称, borrow_records_borrow_date AS 借出日期, borrow_records_return_date AS 归还日期
FROM borrow_records
INNER JOIN users ON borrow_records.reader_id = users.reader_id
WHERE users.reader_name = '李明';
```
这个查询通过`INNER JOIN`将`borrow_records`和`users`两张表连接起来,只保留读者名为“李明”的借阅记录。
相关问题
现有图书管理系统数据库 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);
```
设有如下三个基本表,表结构如下: BORROWER(借书证号,姓名,系名,班级) LOANS(借书证号,图书登记号,借书日期) BOOKS(索书号,书名,作者,图书登记号,出版社,价格) 用SQL语言实现以下要求: 查询出借书和李明同学所借图书中任意一本相同的学生的姓名、系名、书名和借书日期。
可以使用以下 SQL 语句来实现要求:
```
SELECT DISTINCT B1.姓名, B1.系名, B2.书名, L1.借书日期
FROM BORROWER B1, LOANS L1, LOANS L2, BOOKS B2
WHERE B1.借书证号 = L1.借书证号
AND L1.图书登记号 = B2.图书登记号
AND L2.图书登记号 = B2.图书登记号
AND L2.借书证号 <> L1.借书证号
AND L2.借书证号 = (SELECT 借书证号 FROM BORROWER WHERE 姓名 = '李明')
```
解释一下这个 SQL 语句的意思:
1. 首先从 BORROWER、LOANS 和 BOOKS 三个表中获取需要的数据。
2. 通过 WHERE 子句将这三个表联接起来,并且限制条件为:借书证号相同、图书登记号相同,并且除了李明之外的借书证号需要相同。
3. 最后使用 DISTINCT 关键字去重,以免出现重复的记录。
这样就可以查询出所有借书和李明同学所借图书中任意一本相同的学生的姓名、系名、书名和借书日期了。
阅读全文