Oracleのいくつかのクエリーの例、(クエリーの優先度、Sql--plus関数、数値関数、日付時間関数)[詳細]
12087 ワード
( ,Sql--plus , , )
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];
Condition(s) :
=
>
>=
<
<=
<>
!=
And
Or
Not
Between and : BETWEEN ( )
In: IN 。 In(,,,) ,
Like:
l LIKE
l :
• % ( )。
• _ 。
Escape:
: 。 : [%] [/%]、[_] [/_], [ESCAPE ‘/’]
Null:
IS (NOT) NULL 。
// 10
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where deptno=10;
// MANAGER
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where job='MANAGER';
// 10 MANAGER
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where job='MANAGER' anddeptno=10;
:
l 。
l , 。
l DD-MON-RR。
// 10
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where deptno>10;
// 3000
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where sal>=3000;
// 3000
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where sal<>3000;
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where sal !=3000;
// 2000 3000
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where sal>2000 andsal<3000;
// 2000 3000
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where sal between 1600and 3000;
//
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where sal>=1600 andsal<=3000;
// 10,20
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where deptno in(10,20);
// : :
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where deptno =10 ordeptno=20;
// S
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where ename like 'S%';
// S
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where ename like '%S';
// N
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where ename like '__N%';
// N
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where ename like '%N%';
// %
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where ename like'%/%_'escape'/';
// %
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where ename like'%/%%'escape'/';
// null
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where comm is null;
// null
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where comm is not null;
:
1
2
3
4
Is not null like not in
5
Not between
6
not
7
and
8
Or
:
-à ---》 -à -à 。
:
l ORDER BY
• ASC(ascend):
• DESC(descend):
l ORDERBY SELECT 。
// asc
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp order by deptno;
// desc
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp order by deptno desc;
// 20
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where deptno=20 order by empno asc;
: order by
//
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp order by deptno asc,empno desc;
: : ,
:
:
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[ORDER BY {column, expr, alias} [ASC|DESC]];
where 、between、like、in、null、not 、or、and , order by 。
Sql--plus :
oracle .
LOWER:
UPPER:
INITCAP:
CONCAT:
SUBSTR: ( , , )
LENGTH:
INSTR:( , )
LPAD:( , , )
| RPAD:( , , )
TRIM :
REPLACE:( , [, ]): , , , 。
// scott ( )
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where lower(ename)='scott';
SQL> selectempno,ename,job,mgr,hiredate,sal,comm,deptno from emp where upper(ename)='SCOTT';
//
SQL> selectempno,concat(ename,job),mgr,hiredate,sal,comm,deptno from emp;
//
SQL> select empno,concat(ename||'iswork:',job),mgr,hiredate,sal,comm,deptno from emp;
// O
SQL> selectempno,instr(ename,'O'),job,mgr,hiredate,sal,comm,deptno from emp;
// O
SQL> selectempno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp;
// ERK
SQL> selectempno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from empwhere substr(job,3)='ERK';
: ,
// 3
SQL> selectempno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from empwhere substr(job,3,3)='ERK';
// 10 *
SQL> selectempno,ename,job,mgr,hiredate,LPAD(sal,10,'*'),comm,deptno from emp;
// 10 *
SQL> selectempno,ename,job,mgr,hiredate,RPAD(sal,10,'*'),comm,deptno from emp;
// S
SQL> selectempno,TRIM('S' from ename),job,mgr,hiredate,10,comm,deptno from emp;
:
SQL> selectempno,TRIM( both 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;
// S
SQL> selectempno,TRIM( Leading 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;
//
SQL> selectempno,LTRIM( ename,'S'),job,mgr,hiredate,10,comm,deptno from emp;
// S
SQL> selectempno,TRIM( trailing 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;
:
SQL> selectempno,RTRIM( ename,'S'),job,mgr,hiredate,10,comm,deptno from emp;
:
ROUND:
ROUND(45.926, 2) 45.93
TRUNC:
TRUNC(45.926, 2) 45.92
MOD:
MOD(1600, 300) 100
ABS:
CEIL: value
FLOOR: value
SQRT : value 。
// 46
SQL> select round(45.56) from dual;
// 45.56
SQL> select abs(-45.56) from dual;
// -45
SQL> select ceil(-45.56) from dual;
// -46
SQL> selectfloor(-45.56) from dual;
// 300
SQL> selectmod(1800,500) from dual
// : 1800.11
SQL> selecttrunc(1800.11111,2) from dual;
// : , 0. 1000
SQL> selecttrunc(1899.11111,-3) from dual;
Oracle : 。 DD-MON-RR. 、 。
add_months(date,count); count
last_day(date); date
months_between(date1,dates); date1 date2
new_time(date,this’,’other’); date this other
next_day(day,’day’); , day
sysdate();
current_timestamp();
round:
trunc
:
l 。
l 。
l 24 。
// :07-4 -11 11.15.38.390000 +08:00
SQL> selectcurrent_timestamp from dual;
// :2011-4-7 11
SQL> selectsysdate from dual;
// 3 :2011-7-7 11:18:36
selectadd_months(sysdate,3) from dual;
// :2011-4-30 11:19:4
selectlast_day(sysdate) from dual;
// : :4
SQL> selectmonths_between(add_months(sysdate,4),sysdate) from dual;
// GMT AST
SQL> select new_time(sysdate,'GMT','AST')from dual;
// ’ ’
SQL> select next_day(sysdate,' ') from dual;
:
:
: 。
to_char(date,’format’): format
:
。
。
。
// YYYY/MM/DD
SQL> selectto_char(current_timestamp,'YYYY/MM/DD') from dual;
// YYYY/MM/DDHH24/MI/SS AM
SQL> selectto_char(current_timestamp,'YYYY/MM/DD HH24/MI/SS AM') from dual;
//DD “of” MONTH
SQL> selectto_char(current_timestamp,'YYYY DD "of" MONTH HH/MI/SS AM') from dual;
// $99,999 5( $ ) , ########
SQL> selectto_char(11111,'$99,999') from dual;
to_number(char);
to_date(string,’format’); format , foramt , (DD-MON-YY);
//
SQL> selectto_date('2011-02-08','YYYY-MM-DD') from dual;
//
SQL> selectto_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD') fromdual;
//
SQL> select(to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD'))/7 fromdual;
//
SQL> selectceil((to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD'))/7)from dual;
chartorowid(char); rowid
rowidtochar(x); rowid
, :
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)
nvl()
:
l 、 、 。
l :
• NVL(commission_pct,0)
• NVL(hire_date,'01-JAN-97')
• NVL(job_id,'No Job Yet')
// comm null 0
SQL> select empno,ename,job,mgr,hiredate,sal,nvl(comm,0),deptnofrom emp;
//
SQL>select empno,ename,job,mgr,nvl(hiredate,to_date('2011-1-10','YYYY-MM-DD')),sal,nvl(comm,0),deptnofrom emp;
// job redarmy
SQL> selectempno,ename,nvl(job,'redarmy'),mgr,nvl(hiredate,to_date('2011-1-10','YYYY-MM-DD')),sal,nvl(comm,0),deptnofrom emp;
// =( + )
SQL> selectempno,ename,job,mgr,hiredate,(nvl(sal,0)+nvl(comm,0)) as " ",deptnofrom emp;
NVL2 (expr1, expr2, expr3) : expr1 NULL, expr2; NULL, expr3。
:expr1!=null?exrp2:expr3;
//
SQL> selectempno,ename,job,mgr,hiredate,nvl2(comm,sal+comm,sal) as " ",deptnofrom emp;
NULLIF (expr1, expr2) : NULL, expr1
//
SQL> select enameas "expr1",job as "expr2",nullif(length(ename),length(job))from emp;
l COALESCE NVL COALESCE 。
l , , COALESCE 。
SQL> selectempno,ename,job,mgr,hiredate,coalesce(comm,sal,10000) as "salll",deptno from emp;
l : 。 。
:IF-THEN-ELSE
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHENcomparison_expr2 THEN return_expr2
WHENcomparison_exprn THEN return_exprn
ELSE else_expr]
END
DECODE(col|expression, search1, result1
[, search2,result2,...,]
[, default])
// Manager 5000
SQL> selectename,job,case job when 'MANAGER' then nvl(sal,0)+5000 end as" " from emp;
//
SQL> select ename,job,
2 casejob when 'MANAGER' then nvl(sal,0)+5000+nvl(comm,0)
3 elsenvl(sal,0)+nvl(comm,0)
4 end
5 fromemp;
// decode
SQL> selectename,job
2 ,decode(job,'MANAGER', nvl(sal,0)+5000+nvl(comm,0),
3 'CLERK',nvl(sal,0)+nvl(comm,0)+200,
4 nvl(sal,0)+nvl(comm,0)) as " "
5 fromemp;