oracle SQL简介(一)
2008-05-08 10:17
429 查看
select子句
from 子句
where子句
dual表,一行一列,dummy
函数,树结构查询,连接查询,子查询, 优化
1. 基本函数
1.1. 字符串操作
字符串大小写select lower(ename),upper(ename),initcap(ename) from emp;
求长度
select length('王五') from dual;
select lengthb('王五') from dual;
--unicode长度
select lengthc('王五') from dual;
取子字符串
select ename,substr(ename,1,1) first,substr(ename,-1) last from emp;
select substr('张三李四王五赵六',1,6) from dual;
select substrb('张三李四王五赵六',1,6) from dual; --按字节取
select substrc('张三李四王五赵六',1,6) from dual; --unicode
select ename,instr(ename, 'A') from emp;
截取和添加
select trim (leading 'a' from 'aadddabcaaaaa') from dual;
select trim (trailing 'a' from 'aadddabcaaaaa') from dual;
select trim (both 'a' from 'aadddabcaaaaa') from dual;
select trim ('a' from 'aadddabcaaaaa') from dual;
select lpad(ename,20, '-'),rpad(ename,20, '-') from emp;
1.2. 操作数字
round,trunc (可对日期操作)ceil
e为底的幂
select exp(1) value from dual;
取e为底的对数
select ln(2.7182818284590451) value from dual;
取10为底对数
select log(10,10) value from dual;
圆周率
select acos(-1) value from dual;
取符号(-1,0,1)
select sign(-8) value from dual;
求集合最大值
select greatest(1,-2,4,3) value from dual;
求集合最小值
select least(1,-2,4,3) value from dual;
1.3. 操作日期
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';alter session set nls_timestamp_format='yyyy-mm-dd hh24:mi:ss';
select date'1999-02-03' from dual;
select time'5:30:23' from dual;
select timestamp'1999-02-03 5:30:23' from dual;
系统日期时间
sysdate, systimestamp
SELECT to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS.FF3') FROM DUAL;
--日期直接相减
select round(sysdate-hiredate) days,sysdate,hiredate from emp;
--两个日期的月间隔
select trunc(months_between(sysdate,hiredate)),sysdate,hiredate from emp;
--六个月后是哪一天
select add_months(hiredate,6) ,hiredate from emp;
--该日期月底是哪一天
select last_day(hiredate),hiredate from emp;
--当前日期算起,下一个星期五是哪天
select next_day(hiredate,’friday’) hiredate from emp;
select next_day(hiredate,6) hiredate from emp
时间间隔:
select extract(year from sysdate) year,extract(month from sysdate) month, extract(day from sysdate) day from dual;
求某天是星期几
select to_char(sysdate,'day') from dual;
select to_char(sysdate,'d') from dual;
1.4. 类型转换
to_char,to_number,to_dateto_char常用格式:
The following are number examples for the to_char function.
select ename,to_char(sal,'9999.00') from salary from emp;
to_char(1210.73, '9999.9') | would return '1210.7' |
to_char(1210.73, '9,999.99') | would return '1,210.73' |
to_char(1210.73, '$9,999.00') | would return '$1,210.73' |
to_char(21, '000099') | would return '000021' |
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
Parameter | Explanation |
YEAR | Year, spelled out |
YYYY | 4-digit year |
YYY YY Y | Last 3, 2, or 1 digit(s) of year. |
IYY IY I | Last 3, 2, or 1 digit(s) of ISO year. |
IYYY | 4-digit year based on the ISO standard |
Q | Quarter of year (1, 2, 3, 4; JAN-MAR = 1). |
MM | Month (01-12; JAN = 01). |
MON | Abbreviated name of month. |
MONTH | Name of month, padded with blanks to length of 9 characters. |
RM | Roman numeral month (I-XII; JAN = I). |
WW | Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. |
W | Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh. |
IW | Week of year (1-52 or 1-53) based on the ISO standard. |
D | Day of week (1-7). |
DAY | Name of day. |
DD | Day of month (1-31). |
DDD | Day of year (1-366). |
DY | Abbreviated name of day. |
J | Julian day; the number of days since January 1, 4712 BC. |
HH | Hour of day (1-12). |
HH12 | Hour of day (1-12). |
HH24 | Hour of day (0-23). |
MI | Minute (0-59). |
SS | Second (0-59). |
SSSSS | Seconds past midnight (0-86399). |
FF | Fractional seconds. |
to_char(sysdate, 'yyyy/mm/dd'); | would return '2003/07/09' |
to_char(sysdate, 'Month DD, YYYY'); | would return 'July 09, 2003' |
to_char(sysdate, 'FMMonth DD, YYYY'); | would return 'July 9, 2003' |
to_char(sysdate, 'MON DDth, YYYY'); | would return 'JUL 09TH, 2003' |
to_char(sysdate, 'FMMON DDth, YYYY'); | would return 'JUL 9TH, 2003' |
to_char(sysdate, 'FMMon ddth, YYYY'); | would return 'Jul 9th, 2003' |
to_char(sysdate, 'FMMonth DD, YYYY'); | would return 'July 9, 2003' |
to_char(sysdate, 'FMMON DDth, YYYY'); | would return 'JUL 9TH, 2003' |
to_char(sysdate, 'FMMon ddth, YYYY'); | would return 'Jul 9th, 2003' |
1.5. 操作null
nvl,nvl2,nullif, coalesceselect ename,comm,nvl(comm,-1) from emp;
select nvl(comm,0),nvl2(comm,’A’,’B’) type from emp;
select ename,nullif(ename,'KING') from emp;
COALESCE返回参数列表中的第一个非空值,所有关系型数据库系统都支持的标准函数
select coalesce(comm,sal,100) from emp;
1.6. 分组统计
select sum(comm),count(comm),count(*) from emp;select avg(comm),avg(nvl(comm,0)) from emp;
求平均工资大于2000的工作
select job,avg(sal) from emp group by job having avg(sal) >2000;
按部门分组
select deptno,sum(sal) from emp group by deptno;
rollup分组
按部门分组并求统计:
select deptno,sum(sal) from emp group by rollup(deptno);
按部门和工种分组并求统计:
select deptno,job,sum(sal) from emp group by rollup(deptno,job);
grouping(列名),判断列是否参加了分组,0为参加了分组
select deptno,job,grouping(deptno),grouping(job),sum(sal) from emp group by rollup(deptno,job);
cube分组:
select deptno,job,grouping(deptno),grouping(job),sum(sal) from emp group by cube(deptno,job);
为2**n个结果集
1.7. 分支
case统计各年雇用人数,并转为列
select count(*) total,
sum(case to_char(hiredate,'yyyy') when '1980' then count(hiredate) end ) "1980" ,
sum(case to_char(hiredate,'yyyy') when '1981' then count(hiredate) end ) "1981" ,
sum(case to_char(hiredate,'yyyy') when '1982' then count(hiredate) end ) "1982" ,
sum(case to_char(hiredate,'yyyy') when '1983' then count(hiredate) else 0 end ) "1983" ,
sum(case to_char(hiredate,'yyyy') when '1984' then count(hiredate) end ) "1984" ,
sum(case to_char(hiredate,'yyyy') when '1985' then count(hiredate) end ) "1985" ,
sum(case to_char(hiredate,'yyyy') when '1987' then count(hiredate) end ) "1987"
from emp group by hiredate;
统计各部门各岗位收入总和,并按部门转为列显示
select deptno,job,sum(sal) from emp group by deptno,job order by 1;
select job,
sum(case DEPTNO when 10 then sal else 0 end) "dep 10" ,
sum(case DEPTNO when 20 then sal else 0 end) "dep 20" ,
sum(case DEPTNO when 30 then sal else 0 end) "dep 30" ,
sum(case DEPTNO when 40 then sal else 0 end) "dep 40" ,
sum(sal) total
from emp group by job;
decode
求税率
select ename,sal,decode (trunc(sal/2000,0),
0, 0.00,
1,0.09,
2,0.20,
3,0.30,
0.40) tax_rate
from emp;
相关文章推荐
- 笔记:Oracle SQL 高级查询简介 (2) 分析函数
- Oracle扩展PL/SQL简介(二)
- ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介
- oracle PL/SQL简介
- 笔记:Oracle SQL 高级查询简介 (3) MODEL子句,PIVOT与UNPIVOT子句
- oracle心得1--oracle简介@基本sql语句@条件查询@排序数据理论与案例
- ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介
- sql语法值ORACLE简介
- Oracle Database SQL Language Reference 笔记(1)—— Oracle SQL 简介
- oracle 10g 学习之PL/SQL简介和简单使用(10)
- oracle SQL简介(五)
- Oracle扩展PL/SQL编程简介
- ORACLE OEM简介(如何利用OEM查看oracle当前在执行哪些SQL语句)
- Oracle PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下)
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
- Oracle树结构查询 start with ... connect by用法简介&sql有向图问题期待新解决方案
- Oracle扩展PL/SQL编程简介
- oracle pl/sql简介、块、过程
- Oracle扩展PL/SQL简介(四)
- 【Oracle】Oracle PL/SQL编程简介2