2014/08/23 - [DB/Oracle] - 오라클 - 널체크(NVL 사용하기)
2014/08/23 - [DB/MSSQL] - MS-SQL - 널체크(ISNULL 사용하기)
우리는 간혹가다 데이터 null일경우의 데이터를 치환해야하는 일이 생긴다
이럴경우 MySQL에서는 IFNULL이라는 함수를 이용하여 NULL값을 원하고자 하는 데이터로 치환
이 가능하다
1. 임의의 테이블 생성
CREATE TABLE `null_table` ( `idx` bigint(20) NOT NULL AUTO_INCREMENT, `null_text` varchar(20) DEFAULT NULL, PRIMARY KEY (`idx`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2. 데이터 추가
insert into null_table(null_text) values('1'); insert into null_table(null_text) values(null); insert into null_table(null_text) values('2'); insert into null_table(null_text) values(null); insert into null_table(null_text) values('3');
3. null_table 테이블 조회
SELECT * FROM null_table
4. IFNULL 함수적용
사용법 : IFNULL(컬럼명,'컬럼이 널일경우 대체할 데이터')
select *, IFNULL(null_text,'널입니다') null_check from null_table
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
MySQL - DB 및 테이블 목록 조회 (2) | 2014.09.03 |
---|---|
MySQL - if ~ else 조건문 사용하기 : if (0) | 2014.08.24 |
MySQL LIMIT를 사용하여 페이징쿼리를 동작시켜보자 (0) | 2014.08.15 |
MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...) (0) | 2014.08.12 |
MySQL 인코딩 UTF-8 설정하기 [한글깨짐문제 해결] (7) | 2014.08.12 |
문자열 합치는 포스팅은 간단해서 쿼리와 실행화면으로만 샘플을 들어보도록 하겠음
1. MS-SQL('문자열'+'문자열'+'문자열')
select 's'+'u'+'m' total
실행화면
2. ORACLE('문자열'||'문자열'||'문자열')
select 's'||'u'||'m' total from dual
실행화면
3. MySQL(CONCAT('문자열','문자열'))
SELECT CONCAT('s','u','m') total
실행화면
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
각 DBMS(oracle,mssql,mysql) 별 컬럼,필드 삭제 명령어 (0) | 2014.09.23 |
---|---|
오라클,MySQL,MSSQL 각 DBMS별 컬럼을 추가해보도록 하자 (0) | 2014.09.23 |
(MySQL,MS-SQL,ORACLE) DB에 존재하는 테이블이름 변경하기 (0) | 2014.09.22 |
(MySQL,MS-SQL,ORACLE) case when then else end 사용하여 조건문 다루기 (0) | 2014.08.24 |
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/15 - [DB/MySQL] - MySQL LIMIT를 사용하여 페이징쿼리를 동작시켜보자
2014/08/15 - [DB/Oracle] - ORACLE 오라클 rownum을 이용하여 페이징 처리하기
이번에는 MS-SQL 2005버전 이상부터 지원을 하는 ROW_NUMBER() OVER(ORDER BY 정렬조건) 을 이용하여 페이징 처리를 다루도록 해보겠음.
MS-SQL 2000 버전에는 TOP을 이용하여 페이징 처리를 하였는데 이부분은 페이지가 뒤로 가면 갈수록
느려지는 단점이 있다.
2005부터 ROW_NUMBER를 제공하기 시작했는데 ORACLE만큼 페이징이 편해졌다.
역시 샘플 데이터를 기준으로 설명하도록 하겠음.
1. create table 생성
create table page_table ( [idx] bigint NULL , [title] varchar(100) NULL , [conetnt] varchar(200) NULL );
2. 가상의 데이터 IMPORT
구조 및 가상의 데이터는 이전에 포스팅한 mysql 페이징과 같다
그렇다면 이제 페이징 테스트를 해보도록 하겠음.
각 페이징 처리를 할때마다 20개씩 출력해보도록 하겠다.
쿼리는 다음과 같다.
-- 1페이지 SELECT * FROM ( SELECT row_number() over(order by idx) rownum,* FROM page_table ) pagetable where rownum between 1 and 20 -- 2페이지 SELECT * FROM ( SELECT row_number() over(order by idx) rownum,* FROM page_table ) pagetable where rownum between 21 and 40 . . -- 5페이지 SELECT * FROM ( SELECT row_number() over(order by idx) rownum,* FROM page_table ) pagetable where rownum between 81 and 100 -- 존재하지 않는 6페이지 SELECT * FROM ( SELECT row_number() over(order by idx) rownum,* FROM page_table ) pagetable where rownum between 101 and 120
3, 실 행 하 기
1페이지
2페이지
5페이지
존재하지 않는 6페이지
ROW_NUMBER() OVER (ORDER BY ... )
쉽게 생각해서 테이블 데이터아 rownum이라는 컬럼을 추가해서 1부터 출력된 테이블의 갯수를
순차적으로 증가 시켜주는거라고 생각하면 될것이다.
WHERE 절에
where rownum컬럼 between start and end
라는 조건을 주어서 시작ROWNUM ~ 마지막으로 출력하고자하는 ROWNUM
을 데이터에 출력을 하는것이다.
물론 BETWEEN으로 안하고
>= AND <=
이와같은 문법을 이용하여 페이징 처리를 해주어도 무관함.
마지막 존재하지 않는 6페이지일경우는 그냥 한번 출력해보았음.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
MS-SQL - 널체크(ISNULL 사용하기) (0) | 2014.08.23 |
---|---|
MS-SQL SELECT 쿼리로 다른 테이블로 INSERT (INSERT SELECT FROM , SELECT INTO FROM) (1) | 2014.08.13 |
MS-SQL 계층형 트리구조 쿼리 (재귀호출) - with ...(col 1, col 2 ...,col n) as ... union . (2) | 2014.08.12 |
MS-SQL 시퀀스 identity 생성 및 초기화하기 (0) | 2014.08.11 |
2014/08/15 - [DB/MSSQL] - MS-SQL 2005 이상 row_number() over(order by 정렬조건) 을 이용하여 페이징쿼리를 동작시켜보자
2014/08/15 - [DB/Oracle] - ORACLE 오라클 rownum을 이용하여 페이징 처리하기
mysql의 경우는 limit를이용하여 페이징을 처리 한다.
샘플 데이터를 기준으로 설명하도록 하겠음.
1. create table 생성
CREATE TABLE `page_table` ( `idx` bigint(20) DEFAULT NULL, `title` varchar(100) DEFAULT NULL, `content` varchar(200) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2. 가상의 데이터 IMPORT
가상의 데이터를 100개를 생성하여 page_table에 IMPORT 하였다.
그렇다면 이제 페이징 테스트를 해보도록 하겠음.
각 페이지마다 데이터 20개씩 출력해보도록 하겠다.
쿼리는 다음과 같다.
-- 1페이지 SELECT * FROM page_table LIMIT 0, 20; -- 2페이지 SELECT * FROM page_table LIMIT 20, 20; -- 3페이지 SELECT * FROM page_table LIMIT 40, 20; -- 4페이지 SELECT * FROM page_table LIMIT 60, 20; -- 5페이지 SELECT * FROM page_table LIMIT 80, 20; -- 6페이지 SELECT * FROM page_table LIMIT 100, 20;
3, 실 행 하 기
1페이지
2페이지
3페이지
4페이지
5페이지
6페이지
LIMIT 사용법
SELECT [col1,col2...col n] FROM table명 WHERE[AND] 조건절.... LIMIT 인덱스 값(0부터 시작) , 한번에 출력할 수
※ 상단 SELECT쿼리를 실행한 화면을 보면 마지막 6페이지는 나오지 않을것이다.
이유 - 전체 데이터의 마지막 인덱스 값이 99인대 100부터 20개를 출력하겠다라고 하였으니
나오지 않는것
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
MySQL - if ~ else 조건문 사용하기 : if (0) | 2014.08.24 |
---|---|
MySQL - 널체크(IFNULL 사용하기) (0) | 2014.08.23 |
MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...) (0) | 2014.08.12 |
MySQL 인코딩 UTF-8 설정하기 [한글깨짐문제 해결] (7) | 2014.08.12 |
MySQL 시퀀스 auto_increment 생성 및 초기화하기 (0) | 2014.08.11 |