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,bbidfrom 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语句。解读。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)