【Oracle】Oracle基础知识2

1. select count(*)和select count(1)的区别

一般情况下,Select Count (*)Select Count(1)两着返回结果是一样的

    假如表沒有主键(Primary key), 那么count(1)count(*)快,

    如果有主键的話,那主键作为count的条件时候count(主键)最快

    如果你的表只有一个字段的话那count(*)就是最快的

   count(*)  count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计

 1select 1  select *的区别 
select 
常量 from ... 对应所有行,返回的永远只有一个值,即常量 。所以正常只会用来判断是否有还是没有(比如exists子句)。而select * from ... 是返回所有行的所有列。 
性能上的差异,关键看你的fromwhere子句。比如说如果你的where条件中可以通过索引,那显然select 1 from ... 的性能比 select * from ... 好。 

2select sum(1)的使用 
select count(*)
返回所有满足条件的记录数,此时同select sum(1) 
但是sum()可以传任意数字,负数、浮点数都可以,返回的值是传入值n*满足条件记录数m

2. having 子句

HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用

SQL HAVING 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

SQL HAVING 实例

我们拥有下面这个 "Orders" 表:

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

现在,我们希望查找订单总金额少于 2000 的客户。

我们使用如下 SQL 语句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000

结果集类似:

Customer SUM(OrderPrice)
Carter 1700

现在我们希望查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。

我们在 SQL 语句中增加了一个普通的 WHERE 子句:

SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500

结果集:

Customer SUM(OrderPrice)
Bush 2000
Adams 2000

HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似。WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。

请注意,如果 HAVING 中包含多个条件,那么这些条件将通过 AND、OR 或 NOT 组合在一起。

理解应用 WHERE、GROUP BY 和 HAVING 子句的正确顺序对编写高效的查询代码会有所帮助:

WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。 

GROUP BY 子句用来分组 WHERE 子句的输出。 

HAVING 子句用来从分组的结果中筛选行。 

3.oracle rowid  与 rownum的区别?
rownum是行数。rowid  是物理编号,在记录创建时就生成了,而且是不变的,直接指向硬件上的存储位置

通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的

SQL

中删除重复记录的方法

在SQL中删除重复记录的方法(通过使用rowid来实现): 

SQL>delete from employee where rowid not in ( 
        select max(t1.rowid) from employee t1 group by  
        t1.emp_id,t1.emp_name,t1.salary);--这里用min(rowid)也可以。 



4.解释$ORACLE_HOME和$ORACLE_BASE的区别?   
解答:ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品  的目录。


5.解释FUNCTION,PROCEDURE和PACKAGE区别

function 和procedure是PL/SQL代码的集合,通常为了完成  一个任务。procedure 不需要返回任何值而function将返回一个值  
在另一方面,Package是为了完成一个商业功能的一组function和proceudre  的集合 





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值