본문 바로가기

Oracle DB

서브쿼리, 시퀀스

* 본 글은 SQLgate편집기를 이용했습니다.

서브쿼리, 시퀀스

이번엔 서브쿼리와 시퀀스에 대해 알아보겠다. 꼭 알아두어야할 내용중 하나다.

1. 서브쿼리

서브쿼리는 메인쿼리 안에 들어가는 쿼리다.

쉽게말해 쿼리문을 한번에 두개를 작성한다고 생각하면 된다. 이를 이용해서 좀더 자세한 내용을 명령할 수 있다.

 

오늘도 등장하는 홍길이들로 보여주겠다. 테이블 이름은 TEST다.

홍길이들아 안녕?
TEST 테이블

이런 명령을 하고 싶다고 가정하자.

예시문제

서브쿼리를 어떻게 작성하는지 그림으로 보자.

 

서브쿼리문
'결과' 부분의 쿼리를 ENTER키를 눌러 세 줄로 만들었다. 한 줄로 작성해도 무방하다.

 

서브쿼리문
날짜 부분이 바뀐 것을 볼 수 있다.

서브쿼리는 다양하게 이용되기 때문에 거듭 말하지만 알아둬야 한다.

2. 시퀀스

시퀀스는 자동으로 번호를 생성하는 기능이다. 은행의 번호표같은 것이다.

테이블의 행을 구분 짓기위해 사용되는 PRIMARY KEY. 즉, 기본키에 적용시킬 수가 있는데

기본키가 유일한 값을 가져야 하기 때문에 데이터가 무수히 많은 경우, INSERT 명령어에 일일히 작성하기엔 다소 무리가 있다.

시퀀스를 이용하면 알아서 번호를 작성해주기 때문에 편하게 작성할 수 있다.

SEQUENCE

  • 시퀀스 이름 : midx_seq
  • 시퀀스 증가량 : 1
  • 시퀀스 시작값 : 1
  • cache 옵션 : 끄기 (*선택사항)

 

시퀀스를 생성할때 위 그림의 네번째 줄인 NOCACHE설정은 선택사항이고 나머지는 필수사항이다.

NOCACHE를 선언하지 않으면 여러개의 시퀀스를 미리 생성해놓고 가져다 사용하는 특징이 있다.

문제는 몇개정도만 시퀀스를 사용하고 COMMIT을 한다면 미리 생성해놓고 사용하지 않은 시퀀스들은 사라지게 되고

그 이후의 시퀀스값들이 새로 생성된다.

만약 시퀀스를 생성하고 약 5개정도만 사용한 뒤 COMMIT을 했다면, 그다음의 시퀀스 값은 21이 되어버린다.

그래서 일부러 NOCACHE설정을 하였다.

 

중간중간에 현재 시퀀스의 값을 확인하고 싶다면

SELECT 시퀀스명.CURRVAL FROM DUAL;

을 작성하면 된다.(DUAL은 변경해서 작성하면 안된다.)

 

그렇다면 시퀀스를 이용해서 기본키로 설정한 MIDX컬럼에 값을 넣어보겠다.

글쓴이는 이미 TEST테이블에 MIDX가 6까지 작성되어있어서 일부러 시퀀스의 시작값을 7로 설정하였다.

INSERT

결과는 아래의 표와 같다.

홍길이가 10명이 되었다.
홍길친구들이 10명이 되어버렸다.
현재 시퀀스
현재 시퀀스값을 확인하는 방법

시퀀스가 맘에 안들어서 지우고 싶거나, 시퀀스를 생성할때 실수로 NOCACHE옵션을 설정하지 않았다면 이렇게 작성해주자.

 

시퀀스 설정

'Oracle DB' 카테고리의 다른 글

UNION  (4) 2022.01.08
DECODE, NVL, CASE  (2) 2022.01.07
GROUP BY, 집계함수  (2) 2022.01.05
WHERE 절, ORDER BY  (0) 2022.01.04
TCL  (4) 2022.01.03