数据库总结

题目:有如下两个表:

        表A                    表B

 

请写SQL语句输出一下效果:

(1)

  

(2)

(3)

下面讲解一下这三个小题:

  首先由表可以看出:A,B两个表的id都是字符串类型。这一点很重要,后面会用到。

1.

  由第一个小题的要求(图)可以看出,这是在考察SQL的等值连接,表A和表B 的id相等的都满足该条件。故:

    

select * from A a,B b where a.id_a = b.id_b;

 

 

2.

  由图2可知:A的没有全显示,而B的全显示出来了,想到这,马上就可以知道这是“右外连接”,连接的条件为:A的id等于B的id且A的name等于B的name。故可以得到如下SQL语句:

select  * from A a right  join B b on a.id_a = b.id_b  and a.name_a = b.name_b;

 

  不过,这种查询结果有一点小问题:如图

  可以看出来,这明显不符合题目要求(可以对比一下第二题的要求)。

  接下来就考到细节了,查询后的结果去null。SQL有这样一个函数ISNULL(表达式1,表达式2),该函数的大意就是:查询的结果表达式1是否位NULL,如果为NULL则取表达式2的值,否则取表达式1的值。

所以,完全的答案是:

1 select  ISNULL(a.id_a,'') id_a,ISNULL(a.name_a,'') name_a,ISNULL(a.desc_a,'') desc_a,b.id_b,b.name_b,b.desc_b from A a right  join B b on a.id_a = b.id_b  and a.name_a = b.name_b;
View Code

3.

  由图三可知:

    A表id为3对应B表的那一行为空,B表id为3对应A表的那一行为空。这时,可以得出如下结论:

      分别对A表和B表全查询,但是查询的条件不能为id,而是name。可以想到 'full outer join on'  ,它的大意:分别查询A,B表,A和B在查询条件满足时的数据显示出来,还有不满足查询条件的也显示出来。(去NULL的办法2中已经介绍)

1 select ISNULL(a.id_a,'') id_a,ISNULL(a.name_a,'') name_a,ISNULL(a.desc_a,'') desc_a,ISNULL(b.id_b,'') id_b,ISNULL(b.name_b,'') name_b,ISNULL(b.desc_b,'') desc_b from A a full outer  join B b on a.id_a = b.id_b and a.name_a =b.name_b ;
View Code

 


 

 

转载于:https://www.cnblogs.com/xinhuawei/p/5419275.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值