内连接与左右连接

来源:互联网 发布:java反射的作用 编辑:程序博客网 时间:2024/05/04 09:34

如题:查询价格大于3000元的商品及其栏目的名称
什么叫1+N模式
流程:1,查询到大于3000的商品,循环从栏目表里找对应的栏目名称
1条语句获得n多条记录进行了n多次查询

由此引入 连接查询

1、内连接查询

select boy.hid,boy.bname,girl.gname from boy inner join girl on boy.hid=girl.hid;

简单写法:

select boy.hid,boy.bname,girl.gname from boy,girl where  boy.hid=girl.hid;

这里写图片描述 这里写图片描述

这里写图片描述

2、左连接
打个比方:内连接是根据hid严格一一配对。左连接就很和蔼,对着屌丝说,没事你也一起来把,只不过现在没有女票,你的女票就为null(没有),然后就按照boy小组到对应的右表一一开始配对。

select boy.hid,boy.bname,girl.gname from boy left join girl on boy.hid=girl.hid;

这里写图片描述

以下为右连接
这里写图片描述

练习题:
现有如下两张表:
这里写图片描述
这里写图片描述
要求查询的结果为:
这里写图片描述

第一种方法:
先将m与t左连接一次再把结果与t在左连接一次。

select mid,hid,hname,mres,gid,tname as gname,matime from (select mid,hid,tname as hname,mres,gid,matime from m left join t on hid=tid) as temp left join t on gid=tid;

第二种方法: 将t表“复制”2份(通过不同的命名使得看似变成2张表)一份与hid连接一份与gid连接

 select mid,hid,t1.tname as hname,mres,gid,t2.tname as gname,matime from m left join t as t1 on t1.tid=hid left join t as t2 on t2.tid=gid;

第三种方法;思想同第二种方法,采用内连接

select mid,hid,t1.tname as hname,mres,gid,t2.tname as gname,matime from m,t t1,t t2 where t1.tid=hid AND t2.tid=gid;
0 0
原创粉丝点击