일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 엑셀에서 콤마를 제외한 숫자 개수 세기
- 스타워즈 영화 감상 순서
- 금리와 물가와의 상관관계
- AIX NAS NFS
- javascript redirection code
- AIX NFS
- 롤오버 기간을 설정한 비밀번호 마이그레이션 방법
- 한글 기호 자동변환 해제
- 업무에 바로 쓰는 SQL
- OpenSSL 업데이트
- 삼성멀티캠퍼스SQL
- 바탕화면에 원격 데스크톱 연결 바로가기 만들기
- 오라클팁
- net user 사용법
- 윈도우 10 프리징 해결하기
- 복사 단축키
- 붙여넣기 단축키
- 레드햇 버전확인
- 부자의 그릇 요약
- POP폰트
- 작업표시줄 먹통현상 해결하기
- ie모드 해제
- 잘라내기 단축키
- 윈도우 10 슬라이드 종료 단축키 만들기
- 무료 이미지 제공 사이트
- 오라클DB팁
- AIX 버전확인
- 헤드퍼스트SQL
- 메타버스 용어
- 윈도우10 먹통현상 해결하기
- 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 |