해당 포스트는
SQLD
를 학습하며 정리한 내용에 대한 포스트입니다.
이론을 학습한 내용을 정리하고 퀴즈, 기출문제 등을 기록하려고 합니다.
🌈 ROWNUM, ROWID, WITH문
💻 ROWNUM
ROWNUM은 ORACLE 데이터베이스의 SELECT문 결과에 대해서 논리적인 일련번호를 부여한다
ROWNUM은 조회되는 행 수
를 제한
할 때 많이 사용된다.
=
은 성립될 수 없고 항상 <
조건이나 <=
조건을 사용해야 한다.
ROWNUM은 화면에 데이터를 출력할 때 부여되는 논리적 순번이다.
- 만약 ROWNUM을 사용해서 페이지 단위 출력을 하기 위해서는 인라인 뷰(Inline view)를 사용해야 한다.
Top-N 쿼리를 작성할 때 주의해야할 사항은 ORDER BY 절이 WHERE 절보다 나중에 수행되기 떄문에 ROWNUM으로 순서를 지정할 때에는 ORDER BY 절 바깥에서 해야한다는 점이다.
ROWNUM과 ORDER BY를 같은 단락에서 작성하게 될 경우 ROWNUM으로 랜덤하게 순서가 지정된 후 ORDER BY로 정렬되기 때문에 사실상 의미 있는 데이터라고 볼 수 없다.
인라인 뷰(Inline view)
- 인라인뷰는 FROM절에 사용되는 서브쿼리를 의미한다.
- ROWNUM의 값을 1, 2, 3, 4, 5, 6…. 같이 순차적으로 증가하는 ROWNUM 데이터를 얻고 싶을 때 인라인 뷰를 사용하는 것이다.
- 위의 예에서 “ROWNUM < 2”까지는 사용 가능하다.
- 한 행을 가지고 올 수 있기 때문이다.
- 위와 같이 5건의 행을 조회하기 위해서는 인라인 뷰를 사용하고 ROWNUM에 별칭을 사용해야 한다.
SQL Server의 TOP 구문과 MySQL의 limit 구문
Oracle은 ROWNUM을 사용하지만 SQL Server는 TOP문을 사용하고 MySQL은 LIMIT구를 사용한다.
즉 10명만 인출(Fetch)하고자 할 때에는 다음과 같이 사용한다.
- SQL SERVER
- SELECT TOP(10) FROM EMP;
- MySQL
- SELECT * FROM EMP LIMIT 10;
- SQL SERVER
- ROWNUM을 활용하여 웹 게시판에서 사용되는 쿼리문의 형식이다.
💻 ROWID
ROWID는 ORACLE 데이터베이스 내에서 데이터를 구분할 수 있는 유일한 값이다.
ROWID는 “SELECT ROWID. EMPNO FROM EMP”와 같은 SELECT문으로 확인할 수 있다.
ROWID를 통해서 데이터가 어떤 데이터 파일, 어느 블록에 저장되어 있는 지 알 수 있다.
ROWID는 테이블에 데이터를 입력하면 자동으로 생성되는 값이다.
ROWID 구조
구조 | 길이 | 설명 |
---|---|---|
오브젝트 번호 | 1~6 | 오브젝트별로 유일한 값을 가지고 있으며, 해당 오브젝트가 속해 있는 값이다. |
상대 파일 번호 | 7~9 | 테이블스페이스에 속해 있는 데이터 파일에 대한 상대 파일번호이다. |
블록 번호 | 10~15 | 데이터 파일 내부에서 어느 블록에 데이터가 있는지 알려준다. |
데이터 번호 | 16~18 | 데이터 블록에 데이터가 저장되어 있는 순서를 의미한다. |
💻 WITH문
WITH구문은 서브쿼리(Subquery)를 사용해서 임시 테이블이나 뷰처럼 사용할 수 있는 구문이다.
서브쿼리 블록에 별칭을 지정할 수 있다.
옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단한다.
UNION vs UNION ALL
UNION
- 2개의 테이블을 합해서 출력하며 중복은 제외하는 키워드
UNION ALL
- 2개의 테이블을 합해서 출력하며 중복된 것을 포함한다.
🎯 추가 내용
❌
👉
📚 레퍼런스
정미나. (유튜브 선생님에게 배우는) 유선배 SQL개발자(SQLD) 과외노트 / [정미나 저] (2023). Print.
한국데이터산업진흥원. SQL 자격검정 실전문제 : 국가공인 SQL전문가·국가공인 SQL개발자 / 한국데이터산업진흥원 [편] (2020). Print.