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환경을 설정하면 됩니다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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;
set lines 120;
set pages 80;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- select * from tab; -> table을 보여준다.
- dual -> 빈 테이블
ex) select '테스트' as name from dual;
- 주석문 -> 한줄주석: -- 여러줄주석: /* 내용...... */
- DESCRIBE = desc
ex) desc table명; -> 해당 테이블의 컬럼을 보여준다.
ex) desc table명; -> 해당 테이블의 컬럼을 보여준다.
desc emp;
- SELECT
ex) select 컬럼명(name,age) or *(모든컬럽) from 테이블명;
select * from emp;
select name,age,address from emp;
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;
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 * from emp where hiredate = '83/12/03';
ex) select value from NLS_SESSION_PARAMETERS where parameter = 'NLS_DATE_FORMAT';
value
--------------
RR/MM/DD
--------------
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;
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 >
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)
: 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)