C. Oracle

oracle 기본쿼리 사용하기

sfeg 2017. 7. 2. 21:32
* SQL*PLUS의 기능
 
 - 버퍼에 있는 명령어 편집하기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 A(PPEND) text          : line의 끝에 text를 추가함 

 C(HANGE)/old/new : old를 new로 바꿈 
 DEL n                         : n line을 지움  
 I(NPUT) text             : 다음 line에 text를 추가함 
 L(IST)                       : 전체 문장을 보여줌
 n text                         : n line전체를 text로 바꿈  
 R(UN)                        : buffer에 있는 문장을 실행함(/ 와 같음) 
 ED(IT)                       : buffer에 있는 문장을 파일로 부름(afiedt.buf)
 
반드시 하나의 sql문만 사용가능,
문장 종결자 ;  다음라인 첫글자에 / 가 온다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
- 파일에 있는 명령어 편집하기
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
- SAVE  파일명.SQL,  @파일명.SQL  
 ->  buffer에 있는 내용을 a.sql 파일로 저장
       저장 경로는 커맨드창에서 SQL을 실행시켰던 경로에 저장된다. 경로를 지정해서 저장할수 있음 
       SAVE   C:\SQL_TEST\ABC.SQL 
 
- SPOOL 파일명,  SPOOL OFF 
 -> SAVE는 한명령어줄을 저장하지만 SPOOL은 SPOOL OFF전까지의 모든 명령줄과 실행결과를 TEXT파일로 저장한다.
      PS. SPOOL OFF 명령어로 마무리 지어주어야 한다.

 GET a : 파일 a에 있는 내용을 buffer로 부름 
 START a ( =@a) : 파일 a를 실행함 
 ! : UNIX Shell로 나들이  
 !vi a.sql : 파일 a.sql을 vi편집기로 부름
 
- HOST , EXIT
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
 - 환경설정 : SET 환경변수 값 자신이 쓰는 환경을 항상 맞추고 싶으면  login.sql 파일에
                         SET환경을 설정하면 됩니다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 COLSEP (text) : 칼럼이 표시될때 칼럼간의 구별문자 기본값은 공백 
 FEEDBACK (off|on) : 선택된 행이 몇행인지를 표시함 기본값은 6행 이상인 경우에 on 
 HEADING (off|on) : 칼럼에 대한 HEADING를 표시함 기본 값은 on  
 LINESIZE (n) : 한 라인당 표시되는 문자의 수 기본값은 80  
 PAGES (n) : 한 페이지당 표시되는 라인수 기본값은 24  
 PAUSE (off|on|text) : 「ENTER」키를 누를 때마다 화면이 지나감 기본값은 off 
 TIMING (off|on) : SQL문장이 처리되는데 걸리는 시간을 표시 기본값은 off  
 SHOW : SET 환경이 어떻게 설정되어 있는지 보는 명령어
 SHOW ALL : 전체가 어떻게 설정되어 있는지 보고 싶은 경우
 
 
 col NAME for(mat) a18;

 set lines 120;

 set pages 80;
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
- select * from tab;  -> table을 보여준다.
 
 
- dual                        -> 빈 테이블
 ex) select '테스트' as name from dual;
 
 
- 주석문   -> 한줄주석: --        여러줄주석:   /*    내용......     */
 
 
- DESCRIBE = desc
  ex) desc table명; -> 해당 테이블의 컬럼을 보여준다. 
          desc emp; 

 
- SELECT
  ex) select 컬럼명(name,age) or *(모든컬럽) from 테이블명;
         select * from emp;
         select name,age,address from emp;
 

- DISTINCT -> 해당컬럼에 같은 값이 존재하는 경우 결과를 출력할때 중복되는 값은 하나만 출력
  ex) select  DISTINCT  job  from  emp; ->job컬럼값에서 중복되는건 하나만 출력
         select  DISTINCT  job, deptno  from  emp; -> job컬럼과 deptno컬럼이 둘다 중복될때 하나만 출력
 

- ALL -> (DISTINCT의 반대결과) 모두 보여준다. distinct를 써주지않으면 default로 all이된다.
  ex) select ALL job from emp;
         select job from emp;
 

- ALIAS -> " " 별칭
 
  4가지 방법  -> 컬럼명    별칭
                           컬럼명   "별칭"         : 공백,_,@$같은 특수기호 사용가능
                           컬럼명   AS   별칭
                           컬럼명   AS  "별칭"   : 공백,_,@$같은 특수기호 사용가능
  ex) select job "직업컬럼이다", empno "Empno 부서번호" from emp;
 
 
 
- 문자열 컬럼 '   '
   ex) SELECT  ENAME , ' IS A ' ,JOB  FROM EMP;
 
 
연결연산자 ||
   ex) SELECT  ENAME || ' IS A ' || JOB  FROM EMP;   
    PS. 연결 연산자임으로 컬럼사이에 , 가 없어야한다.(연결연산자로 결합된것은 하나의 컬럼으로 취급한다.)
 
 
 
- WHERE -> 조건절 조건에 맞는 행들만 검색할때 사용하며 from절 이하에 정의 되어야 함
   ex) select empno, ename from emp where deptno=10;
 
 

- 연산자1:  우선순위 =>  1. ()    2. NOT    3. AND      4. OR 
   ex) select empno, sal, comm,  (sal + comm)*0.1 from emp;
   ex) select empno, sal, comm+100 from emp;
   ex) select * from emp where deptno <10;
 
  ex) select * from emp where ename = 'Blake';
  ex) select * from emp where hiredate = '83/12/03';
 
  ex) select value from NLS_SESSION_PARAMETERS where parameter = 'NLS_DATE_FORMAT';
         
        value
       --------------
        RR/MM/DD
 
  ex) select * from emp where deptno = 10  AND  sal < 3000;
   ex) select * from emp where deptno = 5    OR   sal < 2500;
   ex) select * from emp where NOT job = 'SALESMEN';
           select * from emp where NOT sal  =500;
 
 
- 연산자2: 1. IN   2. BETWEEN AND     3. IS NULL // IS NOT NULL      4. LIKE  //ESCAPE
 
ex) select * from emp where job IN ('CLERK','ANALYST');
       select * from emp where empno IN (7934,7502,7500);
        PS. IN은 = OR의 줄임표현임  < /FONT >

 ex) select * from emp where sal BETWEEN 200 AND 300;
 
 ex) select * from emp where comm IS NULL;
        select * from emp where comm IS NOT NULL;
 
        
 ex) select * from emp where ename LIKE 'f%';  
         => ename 데이타중 f로 시작하는 모든~
 
        select * from emp where ename LIKE 'f\_%' ESCAPE ''
         =>ename 데이타중  f_로 시작하는 모든~

         select * from emp where ename LIKE 'f%e%q';  
         =>ename 데이타중  f로 시작해서 e가 들어가고 q로 끝나는 모든~
 
         select * from emp where ename LIKE 'f\_%' ESCAPE '' 
                                                         or ename LIKE 'f%#%' ESCAPE '%' 
         =>ename 데이타중  f_로 시작하거나 f#로 시작하는 모든~
 
 
 

- ORDER BY 
:  지정된 컬럼들을 기준으로 분류하여 볼 때 사용 (default값은 ascending[오름차순] 작은값->큰값이며
    descrnding[내림차순] 큰값->작은값이다.)  asc(기본으로 오름차순으로 정렬된다.), desc(내림차순)
    항상 select문의 가장 마지막에 위치한다. asc-> 작은값부터 큰값순으로  desc-> 큰값에서 작은값순으로

                               ex) select *  from  emp  order by  sal  asc;
                              ex) select *  from  emp  order by  sal  desc;
중첩정렬                ex) select *  from  emp  order by  sal  desc, ename desc;
중첩정렬                ex) select *  from  emp  order by  sal  desc, ename asc;
별칭이용한 정렬    ex) select ename,sal*12+nvl(comm,0) as "별칭"  from  emp order by 별칭 desc;  
 
 
  
 
GROUP BY   
: 조회하려는 테이블의 특정한 컬럼의 데이터별로 그룹함수를 사용하기위해 사용하는 SQL 문장의 절입니다.
  통상적으로  group by절 에 따라오는 컬럼과 같이 조회한다.(정보를 명확하게 알기위해서)
 ex) select deptno, avg(sal) from emp group by deptno;

- HAVING 
: 그룹함수에 대해(group by에 대한) 조건을 주는데 사용한다. 
   Where 절에는 그룹함수를 조건으로 사용할 수 없습니다.

  
ex) select deptno, avg(sal) from emp  group by deptno  having avg(sal)>= 2000 

 ps. 문장의 조건 해석순서는 where => group by  => having 순서입니다.
 
- ROLLUP 
: group by에 뒤에 그룹핑과 동일하게 주어진 그룹핑 조건에 따라 ROW들을 그룹화하고 
  각 그룹에 대해 부분합을 제공합니다.

  ex)
select deptno,job,avg(sal) from emp group by rollup (deptno,job)
 

 - CUBE 
: ROLLUP 연산자를 수행한 결과에 더해 group by절에 기술된 조건에 따라 모든 가능한 그룹핑 조합에
  대한 결과를 출력합니다.
   ex) select deptno,job,avg(sal) from emp group by cube (deptno,job)