Oracle数据库高级查询(三)连接查询

欢迎转载,转载请指明出处http://blog.csdn.net/hncsy403,谢谢


现在我们有这样一个需求

查询所有用户的用户姓名,电话,订单号,已经订单状态,商品所属分类名称

其实我们这些数据来源于两张表

图书表es_product和图书类别表es_sort

我们可以通过表连接实现

select es_product.id,name,price,sortname from es_product,es_sort where es_product.sort_id=es_sort.id and es_sortname='图书'
或者
select a.id,a.name,a.price,b.sortname from es_product a,es_sort b where a.sort_id =b.id and b.sortname='图书'

那什么时候用子查询,什么时候用表查询呢

其实子查询并不要求两个表有相关字段,只要得到子查询的结果结果集就可以,用于父查询。

而连接查询,则必须要求两个表有相关的字段。当查询的列来自于多个表时,可以使用表连接查询


其中表连接包括以下连接


非等值连接示例如下;



另外一个需求如下

查询所有用户的电话,姓名,订单号,订购日期以及订单状态


使用这样一个内连接就是错误的,因为

它只是显示了下过订单的用户资料,而没下过订单的就漏掉了


也就是说当不满足条件的列也要显示处理。

只限制其中一个表的行,而不限制另外一个表的行时使用外连接

在Oracle中使用+来表示外连接是最常见的写法

达到上述需求我们可以这样书写

select a.realname,b.tel,b.id,createtime,status from es_user a leef outer join es_order b on a.id=b.user_id

还可以这样写

select a.realname,b.tel,b.id,createtime,status from es_user a,es_order b where  a.id =b.user_id(+)


当左表存在这条记录,而右表不匹配的时候



而右连接是以右表来匹配

这个时候也可以写+,不过这个时候的+应该写在条件的左边了









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值