两个表之间关联查询怎么查捏
查找Bookstore数据库中客户订购的图书书名,订购册数和订购时间。(涉及到两个表的数据)
(此表可看前几天发表的数据结构)
按照常规方法
select 书名,订购册数,订购时间 from book,sell;
--
会出现错误数据 因为 会和无效数据关联 所有需要一个字段做两个表的关联
因为两个表是由“图书编号”相互关联的,所有只用加where条件即可
select 书名,订购册数,订购时间 from book,sell where book.图书编号=sell.图书编号;
还可以使用inner join 代码
select 书名,订购册数,订购时间 from book inner join sell on book.图书编号=sell.图书编号;
咱们再来一个实例
用JOIN关键字表达下列查询:查找购买了“计算机文化基础”且订购数量大于5本的图书书名和订购册数:
select 书名,订购册数 from book inner join sell on book.书名="计算机文化基础" and book.图书编号=sell.图书编号 and 订购册数>5;
三:
用JOIN关键字表达下列查询:查找购买了“计算机文化基础”且订购数量大于5本的图书书名、会员姓名和订购册数。
分析:中间表是sell表所以使用时放在前面
(join连接)
select 书名,会员姓名,订购册数
from sell join book on sell.图书编号=book.图书编号
join members on sell.身份证号=members.身份证号
where 书名="计算机文化基础" and 订购册数>5;
(等值连接)
select 书名,会员姓名,订购册数
from sell,book,members where sell.图书编号=book.图书编号 and sell.身份证号=members.身份证号 and 书名="计算机文化基础" and 订购册数>5;
四:自表连接
查找BookStore数据库中订单不同、图书编号相同的图书的订单号、图书编号和订购册数。
同一个表比较需要生成两个表比较
from sell as a join sell as b
所以代码就为
select a.订单号,a.图书编号,a.订购册数 from sell as a join sell as b on a.图书编号=b.图书编号 where a.订单号!=b.订单号;
五:
查找Members表中所有订购过图书的会员姓名。(注意去重distinct)
因为字段名都叫身份证号,所以可以使用using函数:
select distinct 会员姓名 from sell join members using(身份证号);
外连接:
指定了OUTER关键字的连接为外连接。外连接包括: 左外连接(LEFT OUTER JOIN):
结果表中除了匹配行外,还包括左表有的但右表中不匹配的行,﹒对于这样的行,从右表被选择的列设置为NULL。 右外连接(RIGHT OUTER
JOIN) : 结果表中除了匹配行外,还包括右表有的但左表中不匹配的行.对于这样的行,从左表被选择的列设置为NULL。
六:
查找所有图书的图书编号、数量及订购了图书的会员身份证号,若从未订购过,电要包括其情况。
左边字段全部显示,没有匹配的就用null表示
select 图书编号,数量,身份证号 from book left outer join sell using(图书编号);
select 图书编号,数量,身份证号 from sell right outer join book using(图书编号);
七:
查找订购了图书的会员的订单号、图书编号和订购册数以及所有会员的会员姓名
select 订单号,图书编号,订购册数,会员姓名 from members left outer join sell using(身份证号);
子查询:
八:
查找在Bookstore数据库中张三的订单信息。
join连接
select sell.* from sell join members using(身份证号) where 会员姓名="张三";
子查询
select * from sell where 身份证号 in (select 身份证号 from members where 会员姓名='张三');
嵌套子查询
九:
查找购买了除“网页程序设计”以外图书的会员信息。要查找会员信息,先要知道会员的身份证号,而要知道购买了除“网页程序设计”以外图书的会员,可以按图书编号在sell表中查到,但是“网页程序设计”的图书编号要通过查找Book才可以获得。
查找图书编号
select 图书编号 from book where 书名="网页程序设计";
查找身份证号
select 身份证号 from sell where 图书编号 not in (select 图书编号 from book where 书名="网页程序设计");
所以就最终代码是:
select * from members where 身份证号 in (select 身份证号 from sell where 图书编号 not in (select 图书编号 from book where 书名="网页程序设计"));
查找购买了图书编号为“ISBN 1-45-76-T”的图书的会员信息。要求分别用join连接、等值连接、子查询完成这道题。
join:
select members.* from sell join members using(身份证号) where 图书编号="ISBN 1-45-76-T";
等值:
select members.* from sell,members where sell.身份证号=members.身份证号 and 图书编号="ISBN 1-45-76-T";
子查询
select * from members where 身份证号 in (select 身份证号 from sell where 图书编号="ISBN 1-45-76-T");
博主真是太厉害了!!!
看的我热血沸腾啊
怎么收藏这篇文章?
不错不错,我喜欢看 https://www.237fa.com/
想想你的文章写的特别好https://www.ea55.com/
想想你的文章写的特别好www.jiwenlaw.com
兄弟写的非常好 https://www.cscnn.com/
真好呢
真好呢
博主太厉害了!
《你是我的命运2005》爱情片高清在线免费观看:https://www.jgz518.com/xingkong/27998.html
《影子》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/126073.html
《德云社德云五队小开箱庆典南京站2020》大陆综艺高清在线免费观看:https://www.jgz518.com/xingkong/55232.html
《影子》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/126073.html
《上甘岭预告片(周年纪念版)》战争片高清在线免费观看:https://www.jgz518.com/xingkong/153144.html
哈哈哈,写的太好了https://www.lawjida.com/
哈哈哈,写的太好了https://www.lawjida.com/