【数据库】SQL查询强化篇

查询是数据库的基本应用之一,oracle中的SQL查询语法,一方面遵循了SQL标准,另一方面又有自己的独特之处。

从而使得oracle中的SQL查询功能更加强大。接下来将会涉及oracle中的SQL查询语句,包括:

基本查询:主要讲述查询语句及各种子句的使用;

子查询:主要讲述如何在查询语句中添加子查询;

联合语句:主要讲述多个查询语句之间的集合运算;

关联语句:主要讲述多个表/视图之间的关联关系;

层次化查询:主要讲述树状结构的查询。

一、基本查询:

1. 查询命令select

执行查询的命令为select命令,该命令用于在数据源中捕获最终数据。无论查询语句多么复杂,最外层的select命令总是最后执行。

具体表现为:oracle首先根据from子句获得数据源的所有记录,接着,oracle扫描所有记录,并根据select命令所指定的列获取最终结果。

2. 指定过滤条件----where子句

where子句用于限定from子句所指定的数据源,或者各数据源进行运算之后形成的结果集合。因此,执行顺序处于from子句之后,select命令之前。即使from子句更加复杂,其执行顺序仍然如此。

注:笛卡尔积-->获得的是两个数据表的乘积,第一表的每条记录与第二表的每条记录组合所获得结果集。

3. 获取唯一记录----distinct

在查询时,会出现重复记录。为了剔除重复记录,可以利用distinct关键字。

select distinct a.xxx, b.yyy from table a, tables b where a.a_id = b.a_id

其中,distinct关键字用于获取结果集中列a.xxx,b.yyy的唯一性组合。

4. 分组----group by 子句

在数据库查询中,分组是一个非常重要的应用。分组是指将数据表中的所有记录,以某个或者某些列为标准,划分为一组。例如:在一个存储了地区学生的表中,以学校为标准,可以将所有学生信息划分为多个组。

进行分组查询应该使用group by子句。该子句指定分组标准,并将数据源按照该标准进行划分,然后循环处理每组数据。

select cd.channel_id, cd.channel_name 
        from intf.ecs_order eo , liuxin.channel_dianqu cd
          where eo.org_id = cd.channel_id
          group by cd.channel_id, cd.channel_name

其中,group by cd.channel_id, cd.channel_name用于对数据源按列 cd.channel_id, cd.channel_name 进行分组。详细步骤如下:

(1)from子句获得数据源;(2)利用where 子句筛选符合条件的记录;(3)利用group by子句进行分组;

(4)对每组进行循环处理,获得最终结果----每组的cd.channel_id, cd.channel_name。

5. 过滤分组----having子句

where子句可以过滤from子句所指定的数据源,但是对于group by子句所产生的分组无效。为了将分组按照一定条件进行过滤,应该使用having子句。

having子句是依附于group by子句存在而存在的。

select cd.channel_id, cd.channel_name 
        from intf.ecs_order eo , liuxin.channel_dianqu cd
          where eo.org_id = cd.channel_id
          group by cd.channel_id, cd.channel_name

having cd.channel_id >100000199

上面例子说明的是ID号大于100000199的记录。

(1)利用group by子句分组;(2)利用having子句筛选分组----组内所有ID号大于100000199。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值