일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- github action 사용법
- terraform
- 딥레이서
- 메탈LB
- 쿠버네티스 컴포넌트
- 로드밸런서 컨트롤러
- Aurora cluster
- Prometheus install
- kubernetes 동작 원리
- LoadBalancer Controller
- headless service
- blue-green
- livenessPorbe
- helm
- EKS 클러스터
- 솔데스크
- 그라파나 시각화
- 깃허브 액션
- AWS 딥레이서
- Kubernets on Jenkins
- 쿠버네티스
- 딥레이서 보상함수
- Kubernetes
- EFS CSI Driver
- jenkins
- Firelens
- SAA 합격 후기
- Solution Architecture
- grafana on kubernetes
- 그라파나 대시보드
Archives
mingming
Oracle - Subquery 본문
Subquery
- Subquery는 SQL 에서 사용되는 중첩된 query로, 하나의 SQL 문 안에 포함된 다른 SQL 문 입니다.
- 주로 데이터 검색, 필터링, 계산, 조인 등 다양한 데이터베이스 작업에서 사용됩니다.
Subquery 구문
- Subquery는 main query 전에 실행됩니다.
- Subquery 결과는 main query에서 사용됩니다.
- Subquery는 테이블 자체의 데이터에 종속되는 조건을 사용하여 테이블에서 행을 선택해야하는 경우에 매우 유용합니다.
SELECT select_list
FROM table
WHERE expr operator (SELECT select_list
FROM table);
- expr : 메인 쿼리의 행과 비교할 조건을 지정하는 부분입니다.
- operator : 비교 연산자를 사용하여 서브쿼리 결과를 비교합니다.
SELECT last_name, hire_date
FROM employees
WHERE hire_date > (SELECT hire_date
FROM employees
WHERE last_name = 'Davies');
Subquery 위치
- WHERE 절
- HAVING 절
- FROM 절
Subquery 사용 규칙
- Subquery는 괄호로 묶습니다.
- 가독성을 위해 비교 조건의 오른쪽에 Subquery를 배치합니다. 그러나 Subquery는 비교 연산자의 양쪽 어디에나 사용할 수 있습니다.
- single-row subquery에는 단일 행 연산자를 사용하고 multiple-row subquery에는 다중행 연산자를 사용합니다.
single-row subquery
- 결과 값으로 한 행만 반환합니다.
- 단일 행 비교 연산자를 사용합니다.
SELECT last_name, job_id, salary
FROM employees
WHERE job_id = (SELECT job_id
FROM employees
WHERE last_name = 'Taylor'
AND salary > (SELECT salary
FROM employees
WHERE last_name = 'Taylor');
multiple-row subquery
- 결과 값으로 다중 행을 반환합니다.
- 다중 행 비교 연산자를 사용합니다.
SELECT department_id, department_name
FROM departments
WHERE department_id IN (SELECT department_id
FROM employees
WHERE salary > 10000);
다중 행 비교 연산자
ANY 연산자
subquery 결과 집합에서 하나 이상의 행을 비교할 때 사용됩니다.
ALL 연산자
subquery 결과 집합에서 모든 행을 비교할 때 사용됩니다.
SELECT *
FROM departments
WHERE salry > ANY (SELECT salary
FROM employees
WHERE salary < 10000);
IN 연산자
subquery 결과 집합에서 일치하는 값이 있는지 여부를 비교할 때 사용됩니다.
SELECT *
FROM departments
WHERE department_id IN (SELECT department_id
FROM employees
WHERE salary > 10000);
SOME 연산자
ANY 연산자와 유사하게 작동되며, subquery 결과 집합에서 하나 이상의 행을 비교할 때 사용됩니다.
Subquery 에서 그룹 함수 사용
SELECT last_name, job_id, salary
FROM employees
WHERE salary = (SELECT MIN(salary)
FROM employees);
HAVING 절
- Oracle 서버는 Subquery를 먼저 실행합니다
- Oracle 서버는 main query의 HAVING 절로 결과를 반환합니다.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) > (SELECT MIN(salary)
FROM employees
WHERE department_id = 30);
이 명령문에서 잘못된 점은?
SELECT last_name, job_id
FROM employees
WHERE salary = (SELECT MIN(salary)
FROM employees
GROUP BY department_id);
- ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.
01427. 00000 - "single-row subquery returns more than one row"
Subquery의 결과가 두 개이상의 행을 반환하기 때문에 다중 행 비교 연산자를 사용해야 합니다.
'새싹 하이브리드 클라우드 > Database' 카테고리의 다른 글
Oracle - 단일 행 함수 (2) | 2023.10.09 |
---|---|
Oracle - 집합연산자 (2) | 2023.10.08 |
Oracle - DELETE & TRUNCATE (0) | 2023.10.07 |
Oracle - 제약 조건 & Subquery (0) | 2023.10.07 |
Oracle - SQL (DDL) (3) | 2023.10.07 |