MYSQL 数据查询.多表子查询

一.子查询概述

1.子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query),是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询。

 子查询用于为主查询返回其所需数据,或者对检索数据进行进一步的限制。

 子查询可以在 SELECT、INSERT、UPDATE 和 DELETE 语句中,同 =、<、>、>=、<=、IN、BETWEEN 等运算符一起使用。

2.根据子查询的返回结果分:

子查询返回一个值 (= >  >=   <   <=)

列子查询(子查询结果为一列)(in、all、exists)

行子査询(子査询结果为一行)

表子査询(子査询结果为多行多列)(in)

3.语法格式:

                select * from 表1 where 列1 = (select 列2 from 表2 [where 条件] );    

注意:列1、列2 名称可以不同,但是字段值一致

二.简单实例:

图书管理数据库有读者reader图书book借阅数据表 读者表reader有读者证号dzzh、姓名xm、性别xb、身份sf、电话号码dhhm字段 

图书表book有条形码txm、书名sm、分类号flh,作者zz,出版社cbs,出版日期cbrq,售价sj,典藏类别dclb,在库zk,币种bz字段

借阅表borrow有借阅编号jyid、读者证号dzzh、条形码txm、借阅日期jyrq、还书日期hsrq五个字段。 当读者借阅图书时,在借阅数据表中添加一条记录,还书日期设置为NULL,图书的在库zk字段被设置为0. 当读者归还图书时,将其对应借阅记录的还书日期设置为当天的日期,并修改图书的在库zk字段为1.

 问题:

第一题 查询曾经借过图书的读者的读者证号和姓名

第二题 查询曾经没有被借阅的图书的条形码和书名

第三题 查询与孙思旺借过相同图书的读者的读者证号和姓名,按读者证号升序排列

第四题 查询借阅过李白全集的读者所借过的其他图书的书名 按书名升序排列

代码:

1.
select dzzh,xm from reader where reader.dzzh in (select dzzh from borrow);

2.
select txm,sm from book where book.txm not in (select txm from borrow);

3.
select dzzh,xm from reader where reader.dzzh in (select dzzh from borrow 
where txm in (select txm from borrow 
where borrow.dzzh=(select dzzh from reader 
where xm='孙思旺'))) 
and dzzh!='006' order by dzzh asc;

4.
select sm from book where book.txm in (select txm from borrow
where borrow.dzzh in (select dzzh from borrow 
where borrow.txm=(select txm from book where sm='李白全集')))
and sm!='李白全集' order by sm asc;

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值