数据库三表连接查询怎么做

数据库三表连接查询怎么做,第1张

1、打开access软件,新建一个数据库,在数据库中新建三个表,分别为订单表,商品表,商品联系表其中商品联系表的字段名分别为商品编号,进货厂家,ID,厂家****,厂家售货员,商品收货员。

2、打开订单表,单击设计选项卡,点击视图,在出现的下拉菜单中选择设计视图,在订单表的设计视图界面,可以看到默认的主键为ID,这时点击视图旁的主键按钮,ID前的主键标志消失。

3、选择创建选项卡,点击查询设计,出现显示表对话框在对话框内选中订单表,商品表,商品联系表,然后单击添加,将这三个表添加到查询界面中来,接着在对话框内点击关闭。

4、分别将订单表的商品名,商品表的商品编号,商品联系表的商品收货员,订单表的订单数量,订单日期,利润用鼠标拖到下方的字段行来。

5、在主体部分左边,点击表旁的三角按钮,在下拉菜单中选中查询点击商品利润查询,会出现输入参数值对话框,在对话框内输入20170008,点确定会看到查询结果。

表A结构如下: Aid:int;标识种子,主键,自增ID Aname:varchar 数据情况,即用select from A出来的记录情况如下图1所示。表B结构如下: Bid:int;标识种子,主键,自增ID Bnameid:int 数据情况,即用select from B出来的记录情况如下图2所示:

为了把Bid和Aid加以区分,不让大家有误解,所以把Bid的起始种子设置为100。有SQL基本知识的人都知道,两个表要做连接,就必须有个连接字段,从上表中的数据可以看出,在A表中的Aid和B表中的Bnameid就是两个连接字段。下图3说明了连接的所有记录集之间的关系:

现在我们对内连接和外连接一一讲解。

 1内连接: 利用内连接可获取两表的公共部分的记录,即图3的记录集C 语句如下:Select from A JOIN B ON AAid=BBnameid 运行结果如下图4所示:其实select from A,B where AAid=BBnameid与Select from A JOIN B ON AAid=BBnameid的运行结果是一样的。

 2外连接: 外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)

 (1)左连接(Left JOIN): 即图3公共部分记录集C+表A记录集A1。

 语句如下:select from A Left JOIN B ON AAid=BBnameid 

运行结果如下图5所示:

说明:在语句中,A在B的左边,并且是Left Join,所以其运算方式为:A左连接B的记录=图3公共部分记录集C+表A记录集A1

在图3中即记录集C中的存在的Aid为:2 3 6 7 8

图1中即表A所有记录集A中存在的Aid为:1 2 3 4 5 6 7 8 9

表A记录集A1中存在的Aid=(图1中即A表中所有Aid)-(图3中即记录集C中存在的Aid),最终得出为:1 4 5 9

由此得出图5中A左连接B的记录=图3公共部分记录集C+表A记录集A1, 最终得出的结果图5中可以看出Bnameid及Bid非NULL的记录都为图3公共部分记录集C中的记录;Bnameid及Bid为NULL的Aid为1 4 5 9的四笔记录就是表A记录集A1中存在的Aid。

(2)右连接(Right JOIN): 即图3公共部分记录集C+表B记录集B1。

语句如下:select from A Right JOIN B ON AAid=BBnameid   运行结果如下图6所示:

说明: 在语句中,A在B的左边,并且是Right Join,所以其运算方式为:A右连接B的记录=图3公共部分记录集C+表B记录集B1 

在图3中即记录集C中的存在的Aid为:2 3 6 7 8  

图2中即表B所有记录集B中存在的Bnameid为:2 3 6 7 8 11  

表B记录集B1中存在的Bnameid=(图2中即B表中所有Bnameid)-(图3中即记录集C中存在的Aid),最终得出为:11  

由此得出图6中A右连接B的记录=图3公共部分记录集C+表B记录集B1, 最终得出的结果图6中可以看出Aid及Aname非NULL的记录都为图3公共部分记录集C中的记录;Aid及Aname为NULL的Aid为11的记录就是表B记录集B1中存在的Bnameid。    

交叉连接(笛卡儿积): 两张表联合没有条件情况下,条数 = 图1 图2

你这个不是内连接啊,是左(外)链接  LEFT JOIN

比如

A表

aid

1

2

3

4

B表

bid  aid

11   1

12    2

13   3

21   1

select aaid,bbid

from a left join b on aaid = baid

返回结果是:

aid  bid

1     11

1     21

2    12

3     13

4    null

就是以a表为主,将a表中的所有数据取出来,b表中没有匹配的,用null表示。

而你说的内连接和 where = 是一致的效果

select aaid,bbid from a,b where aaid = baid

等价于

select aaid,bbid from a inner join b on aaid = baid   (内连接)

返回结果是:

aid  bid

1     11

1     21

2    12

3     13

没有那个aid=4的数据

在JDBC查询以后返回的ResultSet中通过遍历这个ResultSet就可以依次取得所有的结果。至于要去其中的那个字段,那个值,JDBC中提供了两个方法。第一个就是通过已知的列名来获取,还有一种是通过序号来获取。比如说我知道查询后的结果的第一列是UserName,那么我可以getString("UserName")和getString(1)两种方式去获取。

这里涉及的知识点是JDBC相关的,晚上去搜一下就能够找到很多教程的。不是什么难题。

看看这篇博客吧:>

内连接:取的两个表的(有能连接的字段),的交集,即字段相同的。利用内连接可获取两表的公共部分的记录,

select from A,B where AAid=BBnameid

与 Select from A JOIN B ON AAid=BBnameid的运行结果是一样的。

外连接:左右连接。

外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)

(1)左连接(Left JOIN):即图3公共部分记录集C+表A记录集A1。语句如下: select from A Left JOIN B ON AAid=BBnameid A的字段全有,查询出来在结果集的左边。

(2)右连接(Right JOIN):即图3公共部分记录集C+表B记录集B1。语句如下:select from A Right JOIN B ON AAid=BBnameid

左右连接的sql语句实例:(+),中间函数NVL给空值赋值。

sql="select name,id,area_name from (select aname,aid,NVL(carea_name,'未分配') area_name "+

"from department a, area_department b,area_table c "+

"where aid= bf_branch_id(+) "+

"and barea_code= carea_code(+)) d where 1=1 ";

以上就是关于数据库三表连接查询怎么做全部的内容,包括:数据库三表连接查询怎么做、内连接、左外连接、右外连接、交叉连接区别、数据库sql语句。解读。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9623783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存