您的位置:首页 > 数据库 > Oracle

【Oracle】Oracle基础知识2

2015-03-02 21:43 218 查看
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的统计
 1、select 1 与 select *的区别 

select 常量 from ... 对应所有行,返回的永远只有一个值,即常量 。所以正常只会用来判断是否有还是没有(比如exists子句)。而select * from ... 是返回所有行的所有列。 
性能上的差异,关键看你的from和where子句。比如说如果你的where条件中可以通过索引,那显然select 1 from ... 的性能比 select * from ... 好。 
2、select 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_IdOrderDateOrderPriceCustomer
12008/12/291000Bush
22008/11/231600Carter
32008/10/05700Bush
42008/09/28300Bush
52008/08/062000Adams
62008/07/21100Carter
现在,我们希望查找订单总金额少于 2000 的客户。

我们使用如下 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000


结果集类似:
CustomerSUM(OrderPrice)
Carter1700
现在我们希望查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。

我们在 SQL 语句中增加了一个普通的 WHERE 子句:
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500


结果集:
CustomerSUM(OrderPrice)
Bush2000
Adams2000
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  的集合 







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: