【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子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
我们拥有下面这个 "Orders" 表:
现在,我们希望查找订单总金额少于 2000 的客户。
我们使用如下 SQL 语句:
结果集类似:
现在我们希望查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。
我们在 SQL 语句中增加了一个普通的 WHERE 子句:
结果集:
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的区别?
通过唯一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 的集合
一般情况下,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_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 |
我们使用如下 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
结果集类似:
Customer | SUM(OrderPrice) |
---|---|
Carter | 1700 |
我们在 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 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。
请注意,如果
HAVING 中包含多个条件,那么这些条件将通过 AND、OR 或 NOT 组合在一起。
理解应用 WHERE、GROUP BY 和 HAVING 子句的正确顺序对编写高效的查询代码会有所帮助:
WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
GROUP BY 子句用来分组 WHERE 子句的输出。
HAVING 子句用来从分组的结果中筛选行。
3.oracle rowid 与 rownum的区别?
rownum是行数。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 的集合
相关文章推荐
- ORACLE基础知识
- oracle学习笔记(一)------oracle基础知识和基本sql语句
- Oracle 基础知识(1)
- Oracle基础知识精要
- oracle 存储过程基础知识2
- oracle基础知识(笔记)
- oracle架构的基础知识
- Oracle基础知识-v$Librarycache中的get,pin
- 基础知识:oracle数据字典总结
- ORACLE 基础知识
- Oracle基础知识--实例及其他
- .NET访问Oracle的基础知识
- java weblogic oracle相关连接基础知识收集
- Oracle 基础知识
- oracle架构的基础知识
- Oracle基础知识---Oracle中 Alter Table 语句的使用
- Oracle 基础知识
- Oracle架构的基础知识(入门级)
- Oracle基础知识_小结2
- oracle 基础知识