使用SQL语句完成下列题目

本文详细介绍了一系列针对图书管理系统的SQL查询语句,包括基础查询、条件筛选、数据汇总、联表查询等高级技巧,旨在帮助数据库管理员和开发人员更高效地管理和分析图书数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、查询图书馆中所有图书的详细信息。(BookInfo表)

1

select from bookinfo;

  

2、查询所有图书的图书编号、图书名称和图书价格。

1

select b_id 编号,b_name 名称,b_price 价格 from bookinfo

  

3、 查询所有图书的图书编号、图书名称和图书总额。

1

select b_id 编号,b_name 名称,b_price*b_quantity 价格 from bookinfo

  

4、查询所有图书的图书编号、图书名称和总价值,但希望以汉字标题图书编号、图书名称和总价值表示b_IDb_Nameb_Price*b_Quantity

1

select b_id 编号,b_name 名称,b_price*b_quantity 价格 from bookinfo

  

5、查询所有图书中的“刘志成”编写的图书的所有信息。

1

select from bookinfo where b_author like '%刘志成%'

6、 查询图书类别编号为“17”,图书价格在25~30元之间的图书信息,要求以汉字标题显示图书编号、图书名称、图书类别编号和图书价格。

1

select b_id 图书编号,b_name 图书名称,bt_id 图书类别编号,b_price 图书价格 <br>from bookinfo where bt_id = 17 and b_price between 25 and 30;

7、 查询所有入库在5年以上并且图书价格在10~20之间的图书的名称、图书作者、图书价格和入库时间(用“入库时长”表示,该列不是基本表中的字段,是计算出来的列)。

1

2

3

4

5

6

7

select b_name 图书名称,b_author 图书作者,b_price 图书价格, b_date 入库时间

 

from bookinfo

 

where ROUND(TO_NUMBER(SYSDATE - b_date))>=5

 

and b_price between 10 and 20;

  

8、 查询所有入库在5年以上并且图书价格不在10~20之间的图书的名称、图书作者、图书价格和入库时间

1

2

3

4

5

6

7

select b_name 图书名称,b_author 图书作者,b_price 图书价格, b_date 入库时间

 

from bookinfo

 

where ROUND(TO_NUMBER(SYSDATE - b_date))>=5

 

and b_price not between 10 and 20;

  

9、查询出版社编号为“001”和“003”的图书详细信息

1

select from bookinfo where p_id in (001,003)

  

10、查询图书名称中包含“数据库”字样的图书的详细信息。

1

select from bookinfo where b_name like '%数据库%'

  

11、查询姓“王”且名字中有3个汉字的读者的编号、读者的姓名及可借书数量。

1

2

3

select r_id,r_name,r_quantity from readerinfo

 

where r_name like '王__';

  

12、查询暂时没有图书封面图片的图书信息。

1

select from bookinfo where b_pricture is null;

  

13、       通过图书管理系统查询借阅图书的读者编号,如果一个读者借阅了多本图书,只需要显示一次读者编号。

1

select distinct r_id from borrowreturn;

  

14、查询前5行图书的详情信息

1

select from bookinfo where rownum <6;

  

15、查询前20%行图书的详情信息。

1

2

3

4

5

select *

 

from bookinfo

 

where rownum <to_number(0.2*(select count(*)from bookinfo)+1);

  

 

16、查询图书出版社编号为“001”的图书的图书编号、图书名称、图书价格和出版社编号,并要求根据图书价格进行降序排列。

1

2

3

4

5

select b_id 图书编号,b_name 图书名称,b_price 图书价格,p_id 图书出版社编号

 

from (select from bookinfo order by b_price desc)

 

where p_id = 001;

  

17、查询价格在20元以上的图书的图书编号、图书名称、图书价格和出版社编号的信息,并要求按出版社编号升序排列;如果是同一出版社的图书,则按价格降序排列。

1

2

3

select b_id 图书编号,b_name 图书名称,b_price 图书价格,p_id 图书出版社编号

 

from bookinfo order by p_id asc,b_price desc;

  

18、查询图书馆中每一个出版社的图书种类数。

1

2

3

4

5

6

7

select p_id 出版社编号,count(p_id) 图书种类

 

from bookinfo

 

group by p_id

 

order by p_id;

  

19、查询图书馆中每一个出版社的图书种类数及图书总数。

1

2

3

4

5

6

7

select p_id 出版社编号,count(p_id) 图书种类,sum(b_quantity) 图书总数

 

from bookinfo

 

group by p_id

 

order by p_id;

  

20、分组后的数据按图书总数进行降序排列。

1

2

3

4

5

6

7

select p_id 出版社编号,count(p_id) 图书种类,sum(b_quantity) 图书总数

 

from bookinfo

 

group by p_id

 

order by sum(b_quantity) desc;

  

21、对分组后的数据进行筛选,要求显示图书总量大于15的出版社编号、图书种类和图书总数,筛选后的结果按“图书总数”升序排列。

1

2

3

4

5

6

7

8

9

select p_id 出版社编号,count(p_id) 图书种类,sum(b_quantity) 图书总数

 

from bookinfo

 

group by p_id

 

having sum(b_quantity)>15

 

order by sum(b_quantity) asc;

  

22、查询每种图书的图书编号、图书名称和图书类型名称(不是图书类别编号)。

1

2

3

4

5

select b_id 图书编号, b_name 图书名称,bt_name 图书类型名称

 

from bookinfo,booktype

 

where bookinfo.bt_id = booktype.bt_id

  

 

1

2

3

4

5

select b_id 图书编号, b_name 图书名称,bt_name 图书类型名称

 

from bookinfo join booktype

 

on bookinfo.bt_id = booktype.bt_id

  

23、查询借还表中所有“未还”图书的借阅ID、借阅人(读者)、图书名称、详细存放位置和借出日期。

1

2

3

4

5

6

7

8

9

10

11

select borrowreturn.r_id 借阅ID, r_name 借阅人,b_name 图书名称,s_position

 

from borrowreturn

 

join readerinfo on borrowreturn.r_id=readerinfo.r_id

 

join bookstore on borrowreturn.s_id=bookstore.s_id

 

join bookinfo on bookstore.b_id=bookinfo.b_id

 

where br_status = '未还';

  

24、查询不低于《JSP程序设计安全教程》价格的图书编号、图书名称和图书价格,查询后的结果要求按图书价格升序排列。

1

2

3

4

5

6

7

select b_id 图书编号,b_name 图书名称,b_price 图书价格

 

from bookinfo

 

where b_price>=(select b_price from bookinfo where b_name = 'JSP程序设计案例教程')

 

order by b_price asc;

  

 

 

1

2

3

4

5

6

7

select G2.b_id 图书编号,G2.b_name 图书名称,G2.b_price 图书价格

 

from bookinfo G1 join bookinfo G2 on G1.b_name = 'JSP程序设计案例教程'

 

and G1.b_Price<=G2.b_price

 

order by G2.b_price;

  

25、查询所有图书类别及其对应图书信息,如果该图书类别没有对应图书也需要显示其类别信息。将BookType表和BookInfo表进行左外连接,BookType为左表,BookInfo表为右表。

1

2

3

4

5

6

7

select G2.b_id 图书编号,G2.b_name 图书名称,G2.b_price 图书价格

 

from bookinfo G1 join bookinfo G2 on G1.b_name = 'JSP程序设计案例教程'

 

and G1.b_Price<=G2.b_price

 

order by G2.b_price;

  

26、查询所有图书的信息(即使是不存在对应的图书类别信息,实际上这种情况是不存在的)。

1

2

3

4

5

select booktype.bt_id,bt_name,b_id,b_name,b_price,b_quantity

 

from booktype left join bookinfo

 

on booktype.bt_id = bookinfo.bt_id

  

27、查询和《UML用户指南》为同一出版社的图书的图书编号、图书名称和出版社编号。

1

2

3

4

5

select b_id 图书编号,b_name 图书名称,p_id 出版社编号

 

from bookinfo

 

where p_id =(select p_id from bookinfo where b_name = 'UML用户指南')

  

28、查询借阅了《SQL Server 2005实例教程》的借阅号、借阅日期和操作员。

1

2

3

4

5

select s_id 借阅号,br_outdate 借阅日期,br_operator 操作员

 

from borrowreturn

 

where s_id in(select s_id from bookstore where b_id in(select b_id from bookinfo where b_name = 'SQL Server 2005实例教程'));

  

 

1

2

3

4

5

6

7

8

9

select borrowreturn.s_id 借阅号,br_outdate 借阅日期,br_operator 操作员

 

from borrowreturn

 

join bookstore on borrowreturn.s_id = bookstore.s_id

 

join bookinfo on bookstore.b_id = bookinfo.b_id

 

where b_name = 'SQL Server 2005实例教程';

  

29、查询比出版社编号为“007”任一图书入库日期晚的图书信息,查询结果按降序排列。

1

2

3

4

5

6

7

8

9

select b_id,b_name,b_date,b_price

 

from bookinfo

 

where b_date>all

 

(select b_date from bookinfo where p_id='007')

 

order by b_date desc;

  

 

1

2

3

4

5

6

7

select b_id,b_name,b_date,b_price

 

from bookinfo

 

where b_date>(select max(b_date) from bookinfo where p_id='007')

 

order by b_date desc;

  

30、针对ReadInfo表中的每一位读者,在BorrowReturn表中查找借阅过图书并且图书状态为“已还”的所有借阅信息。

1

2

3

4

5

6

7

8

9

select br_id,s_id,br_outdate,br_indate

 

from borrowreturn

 

where br_status = '已还'

 

and exists

 

(select from readerinfo where readerinfo.r_id=borrowreturn.r_id);

  

31、求每一类别图书的平均价格,并将结果保存到数据库中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

create table avgbookprice(

 

bt_id char(10),

 

p_avg number(7,2)

 

);

 

insert into avgbookprice(bt_id,p_avg)

 

select bt_id,avg(b_price)

 

from bookinfo

 

group by bt_id;

  

32、将图书管理系统中的图书出版社名称为“机械工业出版社”的图书的数量加1.

1

2

3

4

5

update bookinfo set b_quantity=b_quantity + 1

 

where p_id = (select p_id from publisher

 

where p_name = '机械工业出版社');

  

33、删除出版社名称为“机械工业出版社”的所有图书信息。

1

2

3

4

5

delete from bookinfo

 

where p_id =

 

(select p_id from publisher where p_name = '机械工业出版社')

<think>嗯,用户想要找关于SQL语句的选择题或者练习题及答案。首先,我需要确定用户的需求是什么。他们可能在准备考试,或者在学习SQL,需要练习题来巩固知识。用户提到“选择题”和“练习题及答案”,所以我需要提供一些典型的选择题,并附上答案和解析。 接下来,我要考虑用户的水平。可能是初学者或中级学习者,所以题目难度要适中,涵盖基础知识点,比如SELECT语句、JOIN操作、聚合函数、子查询等。同时,要确保题目和答案的准确性,避免错误。 然后,我需要参考提供的引用内容。引用[1]和[2]涉及基本的SQL查询,比如子查询、排序、聚合函数。引用[3]是多表查询的例子。这些可以作为题目设计的依据,确保题目覆盖这些知识点。例如,子查询比较薪水、多表连接查询、聚合函数的使用等。 设计题目时,每个问题应该有一个正确选项和几个常见的错误选项,帮助用户识别常见错误。例如,关于JOIN的类型,可能会有人混淆INNER JOIN和LEFT JOIN的区别。或者关于聚合函数,是否可以使用在WHERE子句中,这也是常见的考点。 另外,答案的解析部分需要详细,说明为什么正确选项是对的,错误选项错在哪里。这样用户才能理解背后的原理,而不仅仅是记住答案。比如,在子查询题目中,解释WHERE子句不能直接使用聚合函数,必须使用查询或HAVING子句。 还要注意题目的多样性,覆盖不同的SQL操作,如SELECT、JOIN、WHERE、GROUP BY、HAVING等。同时,可以包括一些实际应用场景,比如统计部门平均工资,多表关联查询学生成绩等,这样用户能将理论应用于实践。 最后,检查题目的语法是否正确,确保SQL语句的写法符合标准,没有拼写错误或语法错误。例如,表名、字段名是否正确,是否使用了正确的关键字,如“AS”用于别名,JOIN的正确用法等。 总结来说,需要设计涵盖基础知识点、常见错误点、实际应用的题目,并附上清晰的解析,帮助用户巩固SQL知识。同时,参考提供的引用内容,确保题目与用户的学习材料相关,提高练习的针对性。</think>### SQL语句练习题及答案解析 --- #### **题目1:基础查询与聚合函数** 下列哪个SQL语句查询`emp`表中工资高于部门平均工资的员工信息? A. `SELECT ename, sal FROM emp WHERE sal > AVG(sal)` B. `SELECT ename, sal FROM emp WHERE sal > (SELECT AVG(sal) FROM emp)` C. `SELECT ename, sal FROM emp HAVING sal > AVG(sal)` D. `SELECT ename, AVG(sal) FROM emp GROUP BY deptno` **答案与解析** 正确答案:**B** - **A**错误,`AVG(sal)`不能在`WHERE`子句中直接使用,需通过子查询实现[^1]。 - **B**正确,子查询计算整体平均工资并与员工工资比较[^1]。 - **C`HAVING`用于分组后的筛选,此处不适用。 - **D`AVG(sal)`未与员工工资比较,仅计算部门平均值。 --- #### **题目2:多表连接查询** 查询学生姓名、课程名及成绩时,需连接`student`、`course`、`sc`三张表,正确的条件是: A. `student.sno = sc.sno AND sc.cno = course.cno` B. `student.sno = course.cno AND sc.cno = student.sno` C. `student.sno = sc.sno OR sc.cno = course.cno` D. `student.sno = course.cno` **答案与解析** 正确答案:**A** - 学生表(`student`)与成绩表(`sc`)通过学号(`sno`)关联,成绩表(`sc`)与课程表(`course`)通过课程号(`cno`)关联[^3]。 - **B/C/D**的条件逻辑错误,无法正确关联三表。 --- #### **题目3:排序与限制结果** 以下哪个语句查询`table1`中`field1`降序排列的前5条记录? A. `SELECT * FROM table1 ORDER BY field1 DESC LIMIT 5` B. `SELECT TOP 5 * FROM table1 ORDER BY field1 DESC` C. `SELECT * FROM table1 WHERE ROWNUM <=5 ORDER BY field1 DESC` D. 以上全对 **答案与解析** 正确答案:**A** - **A**是MySQL语法,`LIMIT 5`限制返回5条。 - **B`TOP`是SQL Server语法,非通用。 - **C`ROWNUM`是Oracle语法,且`WHERE`子句在排序前执行,逻辑错误[^2]。 --- #### **题目4:聚合函数与分组** 统计每个部门的最高工资,正确的语句是: A. `SELECT deptno, MAX(sal) FROM emp GROUP BY deptno` B. `SELECT deptno, MAX(sal) FROM emp WHERE MAX(sal) > 5000` C. `SELECT deptno, sal FROM emp GROUP BY deptno` D. `SELECT deptno, MAX(sal) FROM emp HAVING MAX(sal)` **答案与解析** 正确答案:**A** - **A`GROUP BY deptno`按部门分组,`MAX(sal)`计算每组最大值。 - **B`WHERE`子句不能使用聚合函数,应改为`HAVING`。 - **C`sal`未聚合且未在`GROUP BY`中,语法错误。 - **D`HAVING`缺少条件。 --- #### **题目5:子查询应用** 查询没有选课的学生记录时,应使用: A. `SELECT * FROM student WHERE sno NOT IN (SELECT sno FROM sc)` B. `SELECT * FROM student LEFT JOIN sc ON student.sno = sc.sno WHERE sc.cno IS NULL` C. `SELECT * FROM student WHERE sno NOT EXISTS (SELECT * FROM sc)` D. A和B **答案与解析** 正确答案:**D** - **A**通过`NOT IN`排除已选课学生。 - **B**通过`LEFT JOIN`和`IS NULL`筛选未关联记录。 - **C`NOT EXISTS`子查询逻辑错误(未关联学生与选课表)。 --- ### §§相关扩展问题§§ 1. 如何优化多表连接查询的性能? 2. `GROUP BY`和`HAVING`的区别与使用场景? 3. 如何用SQL实现分页查询(不同数据库的语法差异)? 4. 什么是SQL注入?如何防范? --- ### 参考引用 : `select ename,sal from emp where sal > (select avg(sal) from emp)` : 排序、聚合函数语法示例 [^3]: 多表连接查询示例:`SELECT * from student, course, sc where student.sno=sc.sno and sc.cno=course.cno`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值