Oracle知识点

  ps:由于是自己看的所以笔记比较乱,大家谅解

Commit

rollback

Sql核心语句之select

Selct中要用到以下语句

From语句

Where语句

Group by语句

Group by 来进行分组,分组的参数如果有重复的,只返回一个行值.(比如我按id分组如果记录中有两个id为1的记录,这时候只返回一行)

Having语句

将分组汇总后的查询结果限定为只有该子句的条件为真的数据行.

一般情况下having放在groupby后面执行.

Order by语句

对查询结果最终返回的结果进行排序,默认按照升序排序asc

如果想降序排,可在后边加desc,eg:order by column desc

Insert 语句

单表插入

Insert into tablename (column1,column2,.....) values (value1,value2....)

通过查询子句进行插入

Insert into tablename (column1,column2,..) select column1,column2....from tablename2

多表插入:

Insert all

When sum_orders<10000 then

Into smal_customers

When sum_orders>=10000 and sum_orders<100000 then

Into medium_customers

Else

Into large_customers

Select customer_id ,sum(order_total) sum_orders from oe.orders group by customer_id

Update语句

//创建表副本的一种方法

Create table user1 as select * from user

Alter table user1 add constraint user1_pk primary key (keyid)

比如提高工资的10%

Update user set salary=salary*1.1

Delete 语句

使用where语句删除指定行

Delete from user1 where salary<100000

使用select进行删除

Delete from (select * from user1 where salary<100000)

两者结合

Delete from user1 where salary in (select salary from othertable where name=’yourname’)

Merge语句

Merge语句具有按条件获取要更新或者插入到中的数据行.然后从一个或者多个源头对表进行更新或者向表中插入行两方面的能力.

Merge into tablename t using(

Select id,salary from user1 where salary <100000

) e on (t.id=e.id)

When matched then

Update set t.salary=e.salary where t.salary=0

Delete where (e.salary>7500)

When not matched then

Insert (t.id,t.salary) values(e.id,e.salary*1.1)

Where (e.salary<7500)

分析函数:

select * from (select billcode,rank()

over(partition by billcode order by ahd050203 desc)mm from res_00201)  where mm='02'

拼接表中某个字段

  

sql pivot 用法

PIVOT的中文意思是“在枢轴上转动”,比如对于一个2维坐标,将横坐标变成纵坐标,将纵坐标变成横坐标。反映在一个Relational Table上的意思就是:变行为列,变列为行。

  

Select查询规则

首先,校验语法是否符合规范,其次校验是否有权限操作数据.最后才是查数据

oracle绑定变量

variable Test_id number

SQL> exec :Test_id:=1

PL/SQL procedure successfully completed

Test_id

---------

1

SQL> select * from sys_users s where s.state=:Test_id

SQL> variable Test_id2 char

SQL> exec :Test_id2:=1

PL/SQL procedure successfully completed

Test_id2

---------

1

SQL> select * from sys_users s where s.state=:Test_id2

2  ;

  

Sga--共享池

主要包括共享sql区域sql私有区域,数据字典换成,服务器结果换成,其他,保留池

锁存器(在调用库高缓存器中的某个资源时其他会话必须等待)

Sga-缓冲区缓存

在数据库块写入硬盘之前或读取硬盘之后,用来存储数据库块.

查询转换

分为以下几种:

视图合并

其是一种能将内嵌或者存储式视图展开为能够独立分析或者与查询剩余部分合并成总体执行计划的独立查询块的转换.改写后一般不包含视图

语句中包含以下情况会阻止视图合并:

包含解析函数或聚合函数(sum,min,avg,count),集合运算(union,intersect),orderby子句或rownum

不过你可以通过以下方式进行强制合并

Select /*+MERGE(v)*/ from tablename ,(select * from tablename2)v where .....

子查询解嵌套

和合并视图不同的是位置不同.前者在where之前..后者在where语句里面

  

通过NO_UNNEST提示强制该查询按照所书写的方式进行优选.

  

谓语前推(默认为true)

吧能更多减少检索行的条件放在前面执行 where id=1(类似这种)

可以使用rownum>1禁止谓语前置

 使用物化视图进行查询重写

该情况发生在一个查询或者查询的某一部分已经被保存为一个物化视图,可以直接使用,不需要重写

建立物化视图

  

自动触发查询重写

  

琐碎知识点:

//为null的排序在列的最后  也可以设置nulls first显示在最前面

select AHD050205 from res_00201 order by AHD050205 nulls last

Oracle+的用法

Left join

Select * from a left join b on a.id=b.id

等价于

Select * from a,b where a.id=b.id(+)

Right join

Select * from a right join b on a.id=b.id

等价于

Select * from a,b where a.id(+)=b.id

Union 和intersect以及minus

Union相当于去并集(两边集合中如果有一样的,他也是会合并的,如果想要全部的可以用union all),intersect则是取交集(两个集合中共有的部分)minus则是去同求异

Round函数

  四舍五入

  

  --Oracle trunc()函数的用法
/**************日期********************/
1.select trunc(sysdate) from dual  --2011-3-18  今天的日期为2011-3-18
2.select trunc(sysdate, 'mm')   from   dual  --2011-3-1    返回当月第一天.
3.select trunc(sysdate,'yy') from dual  --2011-1-1       返回当年第一天
4.select trunc(sysdate,'dd') from dual  --2011-3-18    返回当前年月日
5.select trunc(sysdate,'yyyy') from dual  --2011-1-1   返回当年第一天
6.select trunc(sysdate,'d') from dual  --2011-3-13 (星期天)返回当前星期的第一天
7.select trunc(sysdate, 'hh') from dual   --2011-3-18 14:00:00   当前时间为14:41   
8.select trunc(sysdate, 'mi') from dual  --2011-3-18 14:41:00   TRUNC()函数没有秒的精确
/***************数字********************/
/*
TRUNC(number,num_digits) 
Number 需要截尾取整的数字。 
Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
TRUNC()函数截取时不进行四舍五入
*/
9.select trunc(123.458) from dual --123
10.select trunc(123.458,0) from dual --123
11.select trunc(123.458,1) from dual --123.4
12.select trunc(123.458,-1) from dual --120
13.select trunc(123.458,-4) from dual --0
14.select trunc(123.458,4) from dual  --123.458
15.select trunc(123) from dual  --123
16.select trunc(123,1) from dual --123
17.select trunc(123,-1) from dual --120

MONTHS_BETWEEN(DATE1,DATE2)

Sql between and用法

select ahd050204 from res_00201 where ahd050204 between 20140101 and  20140506 order by ahd050204 desc;

其中包括区间两端的值

Having的用法

Having子句对group by子句设置条件的方式与where和select的交互式方式类似

SELECT ProductID, AVG(OrderQty) AS AverageQuantity, SUM(LineTotal) AS Total

FROM Sales.SalesOrderDetail

GROUP BY ProductID

HAVING SUM(LineTotal) > $1000000.00

AND AVG(OrderQty) < 3 ;

Group by用法

Cube 和rollUp都会对记录进行汇总

select billcode,ahd050203 from res_00201 group by rollup(billcode,ahd050203)

select billcode,ahd050203 from res_00201 group by cube(billcode,ahd050203)

select deptno,job,avg(sal) from emp group by grouping sets( deptno,job);

使用grouping sets可同时得到使用sal,和deptno统计的结果

关于bin_to_num中参数的问题

Oracle支持的数据类型只有10进制一种,16进制必须通过字符串的方式给出。

oracle唯一接受二进制的函数是bin_to_num

SQL> select bin_to_num(1, 0, 1) from dual;

BIN_TO_NUM(1,0,1)
-----------------
                5

SQL> select bin_to_num(1, 1, 0) from dual;

BIN_TO_NUM(1,1,0)
-----------------
                6

SQL> select bitand(bin_to_num(1, 0, 1), bin_to_num(1, 1, 0)) from dual;

BITAND(BIN_TO_NUM(1,0,1),BIN_TO_NUM(1,1,0))
-------------------------------------------
                                          4

Oracle bitand( )函数:

返回两个数值型数值在按位进行AND 运算后的结果。

oracle琐碎笔记的更多相关文章

  1. Oracle琐碎笔记2

    备注:以下所有操作均在sqlplus中执行. 开始前输入:spool c:\jiyi.txt;结束后输入:spool off;就会记忆操作的所有记录save c:\sql.sql;保存sql脚本可以使 ...

  2. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  3. ORACLE存储过程笔记3

    ORACLE存储过程笔记3 流程控制 1.条件   if expression thenpl/sql or sqlend if;   if expression thenpl/sql or sqlel ...

  4. ORACLE存储过程笔记2

    ORACLE存储过程笔记2 运算符和表达式     关系运算 =等于<>,!=不等于<小于>大于<=小于等于>=大于等于       一般运算   +加-减*乘/除 ...

  5. ORACLE存储过程笔记1

    ORACLE存储过程笔记1 一.基本语法(以及与informix的比较)   create [or replace] procedure procedure_name (varible {IN|OUT ...

  6. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  7. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

  8. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  9. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

随机推荐

  1. 添加AD验证(域身份验证)到现有网站

    每个网站几乎都会有用户登录的模块,登录就会涉及到身份验证的过程.通常的做法是在页面上有个登录的Form,然后根据用户名和密码到数据库中去进行验证. 而验证后如何在网站的各个页面维持这种认证过的状态,有 ...

  2. UVALive 5099 Nubulsa Expo 全球最小割 非网络流量 n^3

    主题链接:点击打开链接 意甲冠军: 给定n个点m条无向边 源点S 以下m行给出无向边以及边的容量. 问: 找一个汇点,使得图的最大流最小. 输出最小的流量. 思路: 最大流=最小割. 所以题意就是找全 ...

  3. iphone手机版降级

    想减少移动版本号.你能下载下来你想要的版本在苹果开发者网站,或"信誉"或可以下载到其他网站的iPhone下载固件固件网站.然后打开iTunes,进入 然后按着(alt).同一时候用 ...

  4. DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

    原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...

  5. iOS开发- 拨打电话总结

    关于iOS应用拨打电话, 我所知道的有3种办法, 详细例如以下: 一.利用openURL(tel) 特点: 直接拨打, 不弹出提示. 而且, 拨打完以后, 留在通讯录中, 不返回到原来的应用. //拨 ...

  6. 我的Linux学习历程:那些我看过的Linux书籍们

    [+]查看原图http://www.ituring.com.cn/article/119401 来北京工作已经一个多月,大都市的生活比起读大学要忙碌得多,尤其是出行,基本以小时为基本的计时单位.有时茫 ...

  7. What day is it

    Description Today is Saturday, 17th Nov,2007. Now, if i tell you a date, can you tell me what day it ...

  8. CQRS

    CQRS 2015-06-04 15:33 by 敏捷的水, 177 阅读, 0 评论, 收藏, 编辑 CQRS是Command Query Responsibility Seperation(命令查 ...

  9. 数据库 基于索引的SQL语句优化之降龙十八掌(转)

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...

  10. linux中如何用root去修改其他用户的密码

    linux中如何用root去修改其他用户的密码 昨天linux实验课,我有很多自己想摸索的东西.今天周五,本是下午一二节是编译的实验,可强烈的欲望让我今早就来实验室了,摸索吧,碰到了这个问题....  ...