2014/08/24 - [DB/MySQL] - MySQL - if ~ else 조건문 사용하기 : if
이번 포스팅은 Oracle 단일 조건문에 대하여 설명하고자 한다.
Oracle에서 제공하는 DECODE를 이용하여 조건에 따른 데이터를 변경해 보겠음
테이블은 이전에 포스팅한 ORACLE - NULL_TABLE 기준으로 설명을 진행하겠음
2014/08/23 - [DB/Oracle] - 오라클 - 널체크(NVL 사용하기)
DECODE 적용
사용법 : DECODE(비교컬럼명,비교값,'참일경우','거짓일경우')
SELECT null_text,DECODE(null_text,null,'널입니다','널이아닙니다') null_str FROM null_table
요약
NULL_TEXT 컬럼의 값이 조건이
TRUE 일 경우 - '널입니다' 문자열 치환
FALSE일 경우 - '널이아닙니다' 문자열 치환
널체크일 경우는 NVL을 이용하도 가능하지만
널체크 외에 다른 조건을 비교할경우에는 DECODE를 사용하면 되겠다.
※ 단일 조건문의 경우 DECODE를 사용해도 되지만
다중조건일 경우는 CASE를 사용하면 되겠다
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
오라클 - 널체크(NVL 사용하기) (0) | 2014.08.23 |
---|---|
ORACLE 오라클 rownum을 이용하여 페이징 처리하기 (0) | 2014.08.15 |
오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...) (2) | 2014.08.13 |
오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR (0) | 2014.08.12 |
오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기 (2) | 2014.08.11 |
2014/08/23 - [DB/MySQL] - MySQL - 널체크(IFNULL 사용하기)
2014/08/23 - [DB/MSSQL] - MS-SQL - 널체크(ISNULL 사용하기)
이어서 ORACLE 널체크(NVL)에 대하여 포스팅을 해보고자 한다.
1. CREATE TABLE
CREATE TABLE NULL_TABLE( NULL_TEXT NVARCHAR2(20) )
2. INSERT DATA
insert into null_table(null_text) values('test1'); insert into null_table(null_text) values(null); insert into null_table(null_text) values('test2'); insert into null_table(null_text) values(null); insert into null_table(null_text) values('test3');
3. SELECT TABLE
SELECT * FROM null_table
4. NVL 적용
사용법 : NVL(컬럼,'컬럼이 NULL일경우 대체값')
select null_text, NVL(null_text,'널입니다') null_check from null_table
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
Oracle - if ~ else 조건문 사용하기 : DECODE (0) | 2014.08.24 |
---|---|
ORACLE 오라클 rownum을 이용하여 페이징 처리하기 (0) | 2014.08.15 |
오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...) (2) | 2014.08.13 |
오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR (0) | 2014.08.12 |
오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기 (2) | 2014.08.11 |
2014/08/15 - [DB/MySQL] - MySQL LIMIT를 사용하여 페이징쿼리를 동작시켜보자
2014/08/15 - [DB/MSSQL] - MS-SQL 2005 이상 row_number() over(order by 정렬조건) 을 이용하여 페이징쿼리를 동작시켜보자
이번에는 ORACLE의 rownum 을 이용하여 페이징 처리를 다루도록 보도록 하자
1. create table 생성
CREATE TABLE PAGE_TABLE ( "IDX" NUMBER, "TITLE" VARCHAR2(100), "CONTENT" VARCHAR2(200) )
2. 가상의 데이터 IMPORT
그렇다면 이제 페이징 테스트를 해보도록 하겠음.
각 페이징 처리를 할때마다 20개씩 출력해보도록 하겠다.
쿼리는 다음과 같다.
-- 1페이지 select * from (SELECT * FROM ( SELECT rownum rnum,idx,title,content FROM page_table ) pagetable where rnum <= 20 ) where rnum >= 1; -- 2페이지 select * from (SELECT * FROM ( SELECT rownum rnum,idx,title,content FROM page_table ) pagetable where rnum <= 40 ) where rnum >= 21; . . . -- 5페이지 select * from (SELECT * FROM ( SELECT rownum rnum,idx,title,content FROM page_table ) pagetable where rnum <= 100 ) where rnum >= 81;
3, 실 행 하 기
1페이지
2페이지
5페이지
ROWNUM
쉽게 생각해서 테이블 데이터아 rownum이라는 컬럼을 추가해서 1부터 출력된 테이블의 갯수를
순차적으로 증가 시켜주는거라고 생각하면 될것이다.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
Oracle - if ~ else 조건문 사용하기 : DECODE (0) | 2014.08.24 |
---|---|
오라클 - 널체크(NVL 사용하기) (0) | 2014.08.23 |
오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...) (2) | 2014.08.13 |
오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR (0) | 2014.08.12 |
오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기 (2) | 2014.08.11 |
2014/08/12 - [DB/MySQL] - MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...)
2014/08/13 - [DB/MSSQL] - MS-SQL SELECT 쿼리로 다른 테이블로 INSERT (INSERT SELECT FROM , SELECT INTO FROM)
오라클에서 데이터 이관하는 작업과 같은 일괄로 다른 테이블에 INSERT해야하는 경우가 생긴다.
이럴경우 INSERT INTO .. SELECT ... FROM 을 이용하여 다른 테이블에 데이터를
일괄 등록이 가능하다
간단하게 진행을 해보도록 하자
1. original_table 생성 (기존 테이블)
create table original_table ( id varchar(10), title varchar(20), flag varchar(1) )
2. new_table 생성(데이터 이관하기 위한 신규 테이블)
create table new_table ( id varchar(10), title varchar(20) )
3. original_table에 임의 데이터 생성
insert into original_table (id,title,flag) values('1','제목11','Y'); insert into original_table (id,title,flag) values('2','제목22','Y'); insert into original_table (id,title,flag) values('3','제목33','Y'); insert into original_table (id,title,flag) values('4','제목44','Y'); insert into original_table (id,title,flag) values('5','제목55','Y'); insert into original_table (id,title,flag) values('6','제목66','Y'); insert into original_table (id,title,flag) values('7','제목77','Y'); insert into original_table (id,title,flag) values('8','제목88','N'); insert into original_table (id,title,flag) values('9','제목99','Y');
4. original_table -> new_table 로 flag값이 N인 데이터만 이관
(예상 결과 = id값이 8인 데이터만 insert 되겠지? ㅎㅎ)
INSERT INTO new_table(id,title) SELECT id,title FROM original_table WHERE flag = 'N'
5. 신규 테이블에 INSERT 데이터 확인
SELECT * FROM new_table
- 실행결과
역시 예상대로 ID값이 8인 데이터만 INSERT 되었다.
일괄로 모든 데이터 넣고 싶을경우에는 WHERE 조건만 빼면 될것이다.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
Oracle - if ~ else 조건문 사용하기 : DECODE (0) | 2014.08.24 |
---|---|
오라클 - 널체크(NVL 사용하기) (0) | 2014.08.23 |
ORACLE 오라클 rownum을 이용하여 페이징 처리하기 (0) | 2014.08.15 |
오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR (0) | 2014.08.12 |
오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기 (2) | 2014.08.11 |
이번 포스팅은 계층형 트리구조 쿼리를 이요하여 트리구조 출력을 하려한다.
오라클에서 계층형 트리는
START WITH .. CONNECT BY PRIOR 구문을 이용하여 트리구조를 심플하게 출력할 수 있다.
데이터 예를 들도록 해보자
1. 테이블 생성
create table tree_table( id number not null, parent_id number not null, name nvarchar2(30) not null );
2. 트리쿼리 출력을 위한 임의의 데이터 생성
-- 1depth insert into tree_table(id,parent_id,name) values(1,0,'1depth 1'); insert into tree_table(id,parent_id,name) values(2,0,'1depth 2'); insert into tree_table(id,parent_id,name) values(3,0,'1depth 3'); -- 2depth 1 insert into tree_table(id,parent_id,name) values(4,1,'2depth 1-1'); insert into tree_table(id,parent_id,name) values(5,1,'2depth 1-2'); insert into tree_table(id,parent_id,name) values(6,1,'2depth 1-3'); -- 2depth 2 insert into tree_table(id,parent_id,name) values(7,2,'2depth 2-1'); insert into tree_table(id,parent_id,name) values(8,2,'2depth 2-2'); insert into tree_table(id,parent_id,name) values(9,2,'2depth 2-3'); -- 3depth 1 insert into tree_table(id,parent_id,name) values(10,4,'3depth 1-1'); insert into tree_table(id,parent_id,name) values(11,4,'3depth 1-2'); insert into tree_table(id,parent_id,name) values(12,4,'3depth 1-3');
3. 재귀쿼리로 트리목록 출력
SELECT id,parent_id,name, LTRIM (SYS_CONNECT_BY_PATH (name, ' > '), ' > ') AS depth_fullname FROM tree_table START WITH parent_id = 0 CONNECT BY PRIOR id=parent_id
위의 재귀쿼리 실행결과를 확인해 보도록 하자
※ ORACLE 11g 에서 ms-sql 2005에서 제공되는 재귀쿼리가 동일하게 동작된다.
다음과 같이 쿼리문을 주어서 실행 하더라도 같은 결과가 출력된다.
WITH tree_query(id,parent_id,name,sort, depth_fullname) AS ( SELECT id , parent_id , name , ''||id as sort , ''||name as depth_fullname FROM tree_table WHERE parent_id = 0 UNION ALL SELECT B.id , B.parent_id , B.name , C.sort || ' > ' || B.id as sort , C.depth_fullname || ' > ' || B.name as depth_fullname FROM tree_table B, tree_query C WHERE B.parent_id = C.id ) SELECT id, parent_id, name,depth_fullname FROM tree_query order by sort
위와같이 트리구조로 잘 조회되었다.
1depth 1
|
-------- 2depth 1-1
| |
| ---- 3depth 1-1
| |
| ---- 3depth 1-2
| |
| ---- 3depth 1-3
-------- 2depth 1-2
|
-------- 2depth 1-3
|
1depth 2
|
-------- 2depth 2-1
|
-------- 2depth 2-2
|
-------- 2depth 2-2
|
1depth 3
위와같은 구조로 출력된 셈이다.
잘 활용해서 실무에 적용해보도록 합시다~
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
Oracle - if ~ else 조건문 사용하기 : DECODE (0) | 2014.08.24 |
---|---|
오라클 - 널체크(NVL 사용하기) (0) | 2014.08.23 |
ORACLE 오라클 rownum을 이용하여 페이징 처리하기 (0) | 2014.08.15 |
오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...) (2) | 2014.08.13 |
오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기 (2) | 2014.08.11 |