본문 바로가기

배우기/복습노트[oracle sql]

[복습] SQL | Oracle 행의 순서 출력 ROWNUM과 FETCH + 복습후기(20231120)

728x90
반응형

ROWNUM 먼저 살펴보자.

 

이렇게 출력해서 나오는 세 개의 행은 데이터가 입력된 순서의 행이다.

ORDER BY로 EMPNO대로 정렬해도 위와같이 나온다.

이렇게 추출된 세 데이터 내에서 이름 순으로 정렬될 뿐 BLAKE라는 사원은 나오지 않는다.

 

참고로 ROWNUM = 3으로 하여 세 번째 행을 추출할 수도 없다.

데이터는 SELECT 절에서 출력할 때 임시번호가 붙여지는 것이지 실제로 WHERE 절에서는 3번 줄이라는 것을 알 수가 없다.

이게  ROWNUM의 단점이다.

 

서브쿼리가 들어가는 경우 정렬 순서대로 데이터가 순서대로 출력이 가능하다.

 

이름 순으로 뽑으니 BLAKE가 추출되었다. 

인라인뷰로 데이터를 테이블화 하여 새롭게 정렬된 데이터를 불러오는 것이다.

 

이것을 FETCH 절에서 인라인뷰를 사용하지 않고도 가능하며 오라클 12c 이상부터 적용된다.

우리가 설치할 땐 11g를 설치했기 때문에 버전 업그레이드를 했다.

그런데! orange 툴은 오라클 11g 32bit 까지만 호환이 되므로 오라클 12c 실습은 dbeaver를 이용하여 진행하였다.

 

설치에서도 애를 먹었는데 어쨌든 자세한 건 나중에 기록하고, FETCH 절을 마무리하겠다.

 

 

FETCH 절은 행의 수를 제한하며 오라클 12c 이상부터 제공한다.

ORDER BY 뒤에 작성하여 사용하는데, 내부 파싱 순서도 ORDER BY 뒤이므로 서브쿼리를 쓰지 않아도 된다.

 

문법은 다음과 같다.

 

OFFSET: 건너뛸 행의 수

예를 들면 성적 높은 순으로 1등을 제외하고 그 다음 순서대로 3명을 추출한다고 한다면 1을 쓰면 된다. 1등을 제외하지 않을 것이라면 OFFSET을 쓰지 않으면 된다.

FETCH: 출력할 행의 수

FIRST: OFFSET을 쓰지 않았을 때 처음부터 N행 출력 명령

NEXT: OFFSET을 사용했을 때 제외한 행 다음부터 N 행 출력 명령

 

위 FETCH를 적용한 예제를 풀어보자.

EMP 테이블에서 SAL을 순서대로 상위 5명을 추출하여보자.

 

ORANGE툴만 보다가 DBEAVER 출력 결과를 보니 어색하다. 어쨌든 이렇게 출력되었다.

 

 

 

복습후기

나머지 시간은 오라클 19C 설치하느라 시간을 다 보냈다.

나는 설치하는 데에 뭔가 잘못되어 재설치하면서 꼬여버렸는데 집에서도 설치할 때 에러가 날까봐 조바심이 난다..

집에서도 PC와 노트북에 설치해보고 잊지 않기 위해 설치과정을 올려놔야겠다.

DBEAVER도 설치해야하고... 

내일부터는 R 프로그래밍과 통계 수업에 들어간다.

내일은 늦잠자지 말아야지.

728x90
반응형