GROUP_ID()的用法
(转载,原文地址:http://www.itpub.net/thread-1266395-1-1.html)在GROUP BY子句中多次使用一个列在GROUP BY子句中可以多次使用某个列,这样可以实现对数据的重新组织,或是按照不同的数据分组进行统计。例如,下面这个查询中包含一个GROUP BY子句,其中使用了两次division_id列,第一次是对division_id进行分组,第二次是在ROLLUP中使用。SQL> select division_id,job_id,sum(salary) 2 from employees2 3 group by division_id,rollup(division_id,job_id);DIV JOB SUM(SALARY)--- --- -----------BUS MGR 530000BUS PRE
Oracle的rollup、cube、grouping sets函数
(转载,原文地址:http://blog.csdn.net/huang_xw/article/details/6402396)Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollup、cube、grouping sets。1 rollup假设有一个表test,有A、B、C、D、E5列。如果使用group by rollup(A,B,C),首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。roll up的意思是“卷起”,这也可以帮助我们理解group by rollup就是对选择的列从右到左以一次少一列的方式进行grouping直到所有列都去掉后的grouping(也就是全表groupi
DifferenceBetweenSQLAndPLSQL
DifferenceBetweenSQLAndPLSQLScott Urman: 过程化的语言都是线性语言,例如PL/SQL,它们以Begin开始,以End结束。虽然这只是非常简化的定义,但是它指出了过程化语言与面向对象语言之间的最根本的区别,每一条语句都必须等到它之前的语句执行完毕之后才能执行。在PL/SQL的特性中,笔者所喜欢的不是它与数据库的紧密结合(虽然它与数据库结合得非常完美),不是它拥有的高级语言的概念很功能,也不是它提供的某种功能,笔者所钟爱的是它结构化的程序设计方法。每一个BEGIN都会有一个END;每一个IF,都会有一个END IF. PL/SQL是一种结构化的、
OracleNull
OracleNULL --Eric, Jun 14, 2009 PL/SQL treats a string of zero-length as a NULL.A zero-length string is two single quotes without any characters in between.The following two assignments are equivalent: my_sting :=NULL; my_sting :=’’;[@more@]
从SQL语言的分类谈COMMIT和ROLLBACK的用法(摘)
从功能上划分,SQL语言可以分为DDL,DML和DCL三大类。 1. DDL(Data Definition Language) 数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ; CREATE---创建表 ALTER---修改表 DROP---删除表 2. DML(Data Manipulation Language) 数据操纵语言,SQL中处理数据等操作统称为数据操纵语言 ; INSERT---数据的插入 DELETE---数据的删除 UPDATE---数据的修改 SELECT---数据的查询 DCL(Data Control Language) 数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操纵
The concept of Left join & Right join!
Frankly speaking , I don't really know the difference between left join and right join! the following will give us a clearly concept ! [@more@]--Right joinSELECT emp_name, dept_name FORM Employee, Department WHERE Employee.emp_deptid(+) = Department.deptid此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。--Left join
A example for Dynamic SQL!
A example for Dynamic SQL I saw in a book![@more@]--首先,根据用户输入的表名及字段名等参数动态建表,并进行编译CREATE OR REPLACE PROCEDURE emp_e ( table_name in varchar2 ,ziduana in varchar2 ,datatypea in varchar2 ,ziduanb in varchar2 ,datatypeb in varchar2 )AS str_sql varchar2(500);BEGIN str_sql := 'create table'||table_name||'('||ziduana||' '||datatypea||','||ziduanb||' '||datatypeb||')'; EXECUTE IMMEDIATE str_sql;EXECEPTION WHEN OTHERS THEN NULL;END;--然
A example for decode;
I don't remember the web site ,the following is from a web site ,thank for the author![@more@]DECODE(E1, E2, E3, E4) IF E1 = E2 THEN E3 ELSE E4 SELECT SUM(DECODE(TO_CHAR (order_dt, 'DAY'), 'SUNDAY ', sale_price, 0)) SUN, SUM(DECODE(TO_CHAR (order_dt, 'DAY'), 'MONDAY ', sale_price, 0)) MON, SUM(DECODE(TO_CHAR (order_dt, 'DAY'), 'TUESDAY ', sale_price, 0)) TUE, SUM(DECODE(TO_CHAR (order_dt, 'DAY'), 'WEDNESDAY', sale_price, 0)) WED, SUM(DECODE(TO_CHAR (order_dt, 'DAY'), 'THURSDAY ', sale
SET NULL & CASCADE;
A example about SET NULL & CASCADE;[@more@]--SET NULL 首先创建两个表,父表为DEPTS,子表为EMPS,如果删除父表中的DEPARTMENT_NUM行,则EMPS表的DEPARTMENT_NUM行会自动设置为NULL; CREATE TABLE DEPTS ( DEPARTMENT_NUM NUMBER(5) PRIMARY KEY, DEPARTMENT_NAME VARCHAR2(20) ); CREATE TABLE EMPS ( EMPLOYEE_NAME VARCHAR2(20), DEPARTMENT_NUM NUMBER(5) REFERENCES DEPTS(DEPARTMENT_NUM) ON DELETE SET NULL ) --CASCADE 父表为DEPTS,子表为EMPS,如果删除父
About NULL;
P.S http://blogger.org.cn/blog/more.asp?name=blakestone&id=8555[@more@]软件环境: 1、Windows NT4.0+ORACLE 8.0.4 2、ORACLE安装路径为:C:ORANT 含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零。 ORACLE允许任何一种数据类型的字段为空,除了以下两种情况: 1、主键字段(primary key), 2、定义时已经加了NOT NULL限制条件的字段 说明: 1、等价于没有任何值、是未知数。 2、NULL与0、空字符串、空格都不同。 3、对空值做
ANY /ALL
ANY 、ALL、 子查询[@more@] 子查询不能使用ORDER BY,且只能从一个表中取数据; 当需要使用聚集函数,并将它的值和其他值进行比较时,要使用子查询; 当查询的结果要显示多个表的内容时,使用连接; ANY 表示与子查询中每一个值进行比较,如果有一个比较为真,则整个子查询的结果集的比较就为真; SELECT e.empno,e.ename,e.job,e.sal FROM scott.emp e WHERE 20<=ANY ( SELECT deptno FROM scott.dept WHERE e.deptno=
About join~!
left joinright join self joinP.S http://www.cnblogs.com/eflylab/archive/2007/06/25/794278.html[@more@] 左连接:将左表中的所有数据分别与右表中的每条记录进行连接组合,返回的结果除了内连接的数据外,还有左表中不符合条件的数据,并在右表的相应列中填上NULL值; 自连接: create table t_emp( emp_id number , emp_name varchar2(10)
A example about exists!
P.S : http://www.itpub.net/861853,1.html[@more@]SQL> select * from v_test; ID NAME---------- ---------- 120 hospitalSQL> select * from v_test_1; ID G---------- - 120 M 110 FSQL> select a.id,a.name from v_test a 2 where exists (select null from v_test_1 b where b.id = a.id); ID NAME---------- ---------- 120 hospitalSQL> select a.id,a.name from v_test a 2 where exists (select null from v_test_1 b where b.id <> a.id); ID NAM
Oracle SQL 九九乘法表
p.s http://www.phpchina.com/78/viewspace_13822.html[@more@]select reverse(sys_connect_by_path(reverse(rpad(rownum * lv, 2)) || '=' || rownum || '*' || lv, ' ')) from (select level lv from dual connect by level < 10) where lv = 1connect by lv + 1 = prior lv;
TO_DATE函数的小问题
p.s http://www.phpchina.com/755/viewspace_6556.html[@more@]SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';会话已更改。SQL> SELECT TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;TO_DATE('2006-05-01-------------------2006-05-01 19:25:34SQL> SELECT TO_DATE('2006-05-01 19:25', 'YYYY-MM-DD HH24:MI') FROM DUAL;TO_DATE('2006-05-01-------------------2006-05-01 19:25:00SQL> SELECT TO_DATE('2006-05-01 19', 'YYYY-MM-DD HH24') FROM DUAL;TO_DATE('2006-05-01---
What's the different between left joint and right joint in PLSQL?
You can see the different between left joint and right joint by a simple example![@more@]SQL> SELECT * FROM T_0918;ID T_A ---------- ---------- 1 A1 2 A2 4 A4SQL> SELECT * FROM T_0918_2;ID T_B ---------- ---------- 1 B1 2 B2 3 B3 SQL> SELECT T_A,T_B FROM T_0918,T_0918_22 WHERE T_0918.ID(+)=T_0918_2.ID;T_A T_B ---------- ---------- A1 B1 A2 B2 B3 SQL> SELECT T_A,T_B FROM T_0918,T_0918_22 WHERE T_0918.ID=T_0918_2.ID(+