블로그 이미지
'무른모'란 부드럽다라는 뜻을 가진 '무르다'라는 말과 도구, 연장을 뜻하는 '연모'라는 순 우리말의 합성어로 소프트웨어를 말합니다. seanhigher

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total633,812
Today36
Yesterday88
데이터베이스에는 수많은 데이터들이 수도없이 들락날락 거린다. 이렇게 수도없이 변경되는 데이터를 효율적으로, 그리고 일관성있게 관리한다는 것은 굉장히 어려운 일중 하나라고 할 수있다. 이런 어려운 일을 도와주는 특별한 기능들이 오라클 속에는 들어있다.



데이터의 순서를 기억해주는 ROWNUM
어떤 테이블을 생성하고 데이터를 입력하던지간에 데이터에는 순서가 정해지게 되는데, 그 순서를 기억하는 보이지 않는 컬럼이 ROWNUM 이다. ROWNUM은 데이터가 테이블에 입력되는 순서대로 순위가 정해지기 때문에 중간에 새로운 데이터가 들어가게 되면 데이터의 순서는 엉망이 되어버린다. 물론 데이터가 들어간 순서를 알고자 한다면 상관이 없지만... 그래서ROWNUM 의 경우는 인라인뷰로 생성하여 데이터를 정렬하고자 할때, 그리고 상위 몇번째까지의 데이터를 얻고자 할때 사용할 수 있다.

SELECT employee_id, last_name, hire_date, salary
    FROM (SELECT employee_id, last_name, hire_date, salary FROM employees ORDER BY salary DESC)
        WHERE ROWNUM <= 5;

위의 쿼리문은 급여가 가장많은 상위 다섯명의 정보를 얻어올 수 있다.


자동으로 순서를 증가시켜주는 SEQUENCE
새로운 데이터가 입력될때마다 자동으로 일정 값 만큼 증가시키고 싶다면 시퀀스 기능을 사용할 수 있다. 시퀀스를 만들고 그것을 테이블의 컬럼에 적용을 하면, 데이터가 새롭게 입력될 때마다 숫자를 입력시키지 않아도 자동으로 순서번호가 들어가게 된다.

CREATE SEQUENCE 시퀀스명;
INSERT INTO 테이블명 VALUES(시퀀스명.NEXTVAL);
SELECT 시퀀스명.CURRVAR FROM DUAL;

시퀀스는 그 자체로 NUMBER 형태의 데이터 타입을 가지기 때문에, 데이터 타입에 맞추어서 시퀀스를 넣어주어야 한다. 일반적으로 시퀀스명은 테이블명_컬럼명_SEQ 의 형태를 갖게 된다. 위에서 첫번째 쿼리문은 시퀀스를 생성하게 되는데, 다양한 조건으로 시퀀스를 생성할 수 있다. START WITH 는 초기값을 나타내고, INCREMENT BY 는 증가값을 나타낸다. MAXVALUE 는 최대값을 나타낸는데, CYCLE 이 YES일 경우 최대값을 넘으면 다시 초기값부터 시작하게 된다. NEXTVAL은 시퀀스의 다음 값을 가져올 수 있고, CURRVAR은 시퀀스가 가지고 있는 현재의 값을 가져오게 된다. 시퀀스를 사용할때 주의해야 할 점은 데이터의 오류가 발생하더라도 시퀀스 번호는 증가한다는 것이다.그리고 그 시퀀스는 다시 되돌릴 수 없다!!


데이터를 빠르게 찾는 방법 INDEX.
일반적으로 데이터를 찾기 위해서는 순차적으로 검색을 하게 된다. 이럴경우, 찾고자 하는 데이터가 테이블의 가장 나중에 있다면 굉장히 많은 시간이 걸리게 될 것이다. 이러한 문제점을 해결하기 위한 방법중의 하나가 인덱스를 사용하는 것이다. 인덱스는 B트리를 사용하여 어떠한 데이터든지 동일한 횟수만에 접근을 하는것이 가능하다. 인덱스를 이용한 데이터의 검색 속도는 그것을 사용하지 않았을때와는 비교하지 못할만큼 비약적이기 때문에, 대용량의 데이터를 사용하는 경우라면 인덱스를 사용하는 것이 일반적이다. 인덱스는 각 데이터를 구분짓는 유일한 데이터여야 하기때문에 일반적으로 기본키를 인덱스로 적용하게 된다.

CREATE INDEX 인덱스명;
CREATE 인덱스명 ON 테이블명(컬럼명);

위와 같이 인덱스를 적용하게 되면 좀더 빠르게 데이터에 접근을 하는 것이 가능하다. 일반적으로 인덱스명은 INDEX_테이블명_컬럼명 의 형식으로 생성하게 된다.

Posted by seanhigher

댓글을 달아 주세요

다양한 데이터 변수들을 선언하고 사용하다보면, 그리고 또 사용하고 만들어보면.... 수도 없이 많아지는 것을 알 수가 있다. 특히 한 학급의 학생들의 이름을 저장하기 위한 변수를 선언한다면 더욱 그렇다. 배열은 동일한 자료형을 변수를 처리하는데 좀더 효과적인 방법이다.


배열?
한반에 30명이 되는 학생들의 이름을 변수로 저장을 해야 한다. 그렇다면 다음과 같이 표현을 할 수 있을 것이다.

String name1 = "김철수";
String name2 = "이영희";
String name3 = "김개똥";
... ...
String name30 = "홍길동";

그래도 30이라는 숫자는 해볼만 하다. 하지만 한 반의 학생이 100명 1000명 그 이상이 된다면 쉽지 않을 것이다. 이렇게 동일한 형태이면서 많은 수의 자료들을 쉽게 관리할 수 있는 방법이 있다. 바로 배열을 사용하는 것이다. 배열은 동일한 형태의 자료들이 일렬로 나열되어 있는 것이다. 위에서 30명이나 되는 학생들을 배열로 표현을 하면 아래와 같이 나타낼 수 있다.

String[] name = new String[] {"김철수", "이영희", "김개똥", ... ... ,"홍길동"};


배열을 표현하는 다른 방법.
이렇게 배열로 선언을 하고나면 훨씬 더 보기가 좋아진다. 만일 학생의 수가 30명인것은 알겠는데, 모두의 이름을 알지 못할때는 다음과 같이 배열의 크기만 선언을 하는 방법도 있다.

String[] name = new String[30];

그리고 그 크기도 모른다면 배열만 선언을 해줄 수도 있다.

String[] name;
name = new String[30];

만일 배열 변수만을 선언해 주었을 경우에는 배열 변수를 사용하기 전에 반드시 'name = new String[30]' 과 같은 초기화 과정을 거처야 사용을 하는 것이 가능하다.


배열 변수를 사용하는 방법.
이렇게 선언된 배열 변수를 사용하기 위해서는 배열의 인덱스 값을 통해 접근하고 사용할 수 있다. 배열이라는 자료형은 동일한 형태의 자료가 나열되어 있는 모습을 갖기 때문에 처음부터 마지막 데이터까지 순차적인 순서 번호를 갖는데 이것이 배열의 인덱스 값이다. 위에서 선언한 배열변수 'name' 으로 홍길동이라는 이름을 출력하고 싶다면 다음과 같이 표현할 수 있다.

System.out.println(name[29]);

"홍길동" 이라는 변수는 name 이라는 변수에 30번째 데이터로 들어가기 때문에 30이라는 순서번호를 갖게 되는 것이다. 헌데, 왜 30이 아닌 '29'의 인덱스 값을 갖게 되는 것일까? 그것은 배열의 인덱스번호가 0번부터 시작하기 때문이다. 0번부터 시작해서 30번째의 수는 30이 아닌 '29'인 것이다.


모든 클래스에 사용가능한 배열
배열은 자바에서 존재하는 모든 자료형, 클래스의 형태에서 사용이 가능하다. 만일 강아지라는 클래스를 만들고, 1000마리의 강아지를 만들고 싶다면,

강아지[] dog = new 강아지[1000];

와 같은 형태로 배열을 선언하고 각각의 인덱스 값으로 접근을 하여 선언을 하는 것이 가능하다.

'Dev Center > JAVA start' 카테고리의 다른 글

배열의 배열  (0) 2010.07.17
getter 와 setter.  (1) 2010.07.16
배열만 알아도 한단계 업그레이드!  (0) 2010.07.15
클래스를 만들고 사용하기.  (2) 2010.07.13
자바의 기본 형태와 접근 수정자.  (0) 2010.07.12
연산자의 분류와 우선순위  (0) 2010.07.03
Posted by seanhigher

댓글을 달아 주세요

최근에 달린 댓글

글 보관함