일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 한글 기호 자동변환 해제
- 오라클DB팁
- 붙여넣기 단축키
- net user 사용법
- 바탕화면에 원격 데스크톱 연결 바로가기 만들기
- 쿼리문 시간구하기
- 오라클팁
- 잘라내기 단축키
- 엑셀에서 콤마를 제외한 숫자 개수 세기
- 업무에 바로 쓰는 SQL
- AIX 버전확인
- 윈도우 10 프리징 해결하기
- 헤드퍼스트SQL
- 윈도우 10 슬라이드 종료 단축키 만들기
- 복사 단축키
- 스타워즈 영화 감상 순서
- POP폰트
- 레드햇 버전확인
- OpenSSL 업데이트
- javascript redirection code
- 삼성멀티캠퍼스SQL
- 부자의 그릇 요약
- 메타버스 용어
- 윈도우10 먹통현상 해결하기
- 작업표시줄 먹통현상 해결하기
- 무료 이미지 제공 사이트
- 롤오버 기간을 설정한 비밀번호 마이그레이션 방법
- AIX NFS
- AIX NAS NFS
- 금리와 물가와의 상관관계
- Today
- Total
Today is Present.
서브쿼리 종류(스칼라 서브쿼리, 인라인뷰, 서브쿼리) 본문
서브쿼리의 종류에 대한 개념정리
'Subquery'란 SQL 내에서 또 다른 select 절을 사용하는 문법을 말한다.
사용위치에 따라 명칭이 달라진다.
SELECT 절에 사용될 경우 스칼라 서브쿼리(Scalar Subquery)라 부르고,
FROM 절에 사용될 경우 인라인 뷰(Inline View)라 부르고,
WHERE 절에 사용될 경우 중첩 서브쿼리 or 서브쿼리 라고 부른다.
쿼리문으로 개념을 살펴보자.
1. 스칼라 서브쿼리(Scalar Subquery)
- Select 절에서 사용하는 서브쿼리다.
- Scalar 는 '한번에 한가지만 처리하는' 이라는 뜻을 가진다. 따라서, scalar subquery 에 의해 나오는 결과는 '하나의 행'이어야 한다.
SELECT *, (SELECT dept_name FROM departments d WHERE d.dept_id = e.dept_id)
FROM employees e;
ex)
아래와 같이 두개의 테이블(departments, employess)이 있다.
두 테이블을 합치는 스칼라 서브쿼리는 작성할 때 주의해야 할 점은 다음과 같다.
- departments를 scalar subquery로 하는 경우, '하린'의 dept_id인 10번에 해당하는 결과는 '총무' 부서로 1개 row를 반환.
- employees를 scalar subquery로 하는 경우, '개발'의 dept_id인 12에 해당하는 결과는 '중민', '웅식', '주아' 총 3개 rows가 결과로 반환되기 때문에 실패하게 된다.
2. 인라인 뷰(Inline View)
- 인라인 뷰는 FROM 절에 사용되는 서브 쿼리다.
- 인라인 뷰는 하나의 임시 테이블 이라고 생각하면 된다.
- 메인 쿼리에서는 인라인 뷰에서 select 한 컬럼만 사용 가능하다.
SELECT e.*, d.dept_name
FROM employees e,
(SELECT dept_id, dept_name FROM departments) d
WHERE e.dept_id = d.dept_id;
3. 서브 쿼리
- 서브 쿼리는 WHERE 절에서 사용하는 쿼리다.
- 서브 쿼리의 결과가 단일행이면 단일행 서브쿼리, 복수행이면 복수행 서브쿼리란 부른다.
SELECT e.*, d.dept_name
FROM employees e, (SELECT dept_id, dept_name FROM departments) d
WHERE e.dept_id = d.dept_id;
SELECT *
FROM employees e
WHERE e.dept_id IN (SELECT d.dept_id FROM deptments d WHERE dept_name IN ('총무', '개발'));
4. Join 으로 표현하기
- 서브 쿼리를 사용하는 것보다는 join을 사용하는 게 일반적으로 성능이 더 좋다.
SELECT *
FROM employees e INNER JOIN departments d
ON e.dept_id = d.dept_id;
'DBMS - 오라클(Oracle)' 카테고리의 다른 글
롤오버 기간을 설정한 비밀번호 마이그레이션 방법 (0) | 2022.10.28 |
---|---|
데이터베이스 보안 실습 환경 만들기 (0) | 2022.10.28 |
오라클 튜닝 학습을 위한 교재 순서 (0) | 2022.08.08 |
Head First SQL (0) | 2022.04.07 |
[ORACLE] 오라클 테이블 & 컬럼 조회 하는 방법 (0) | 2022.01.10 |