-
SQL) SubquerySQL 2023. 3. 22. 16:18
Subquery
- 메인쿼리가 서브쿼리를 포함하는 종속적 관계
- 서브쿼리는 메인쿼리의 칼럼 사용 가능(메인쿼리는 서브쿼리의 칼럼 사용 불가)
- 서브쿼리는 괄호를 묶어서 사용
- 단일 행, 복수 행 비교 연산자와 함께 사용 가능
- 서브쿼리 내에서는 orber by 사용 불가
subquery 종류
- 스칼라 서브쿼리(scalar subquery) - select절에 사용
- 인라인 뷰(inline view) - from 절에 사용
- 중첩 서브쿼리 (nested subquery) - where절에 사용
스칼라 서브쿼리
SELECT column1, (SELECT column2 FROM table2 WHERE condition) FROM table1 WHERE condition;🔔 서울은평경찰서의 강도 검거 건수와 서울시 경찰서 전체의 평균 강도 검거 건수 조회
SELECT case_number, (SELECT avg(case_number) FROM crime_status WHERE crime_type LIKE '강도' AND status_type LIKE '검거') avg FROM crime_status WHERE police_station LIKE '은평' AND crime_type LIKE '강도' AND status_type LIKE '검거';인라인 뷰 : 메인쿼리에서는 인라인뷰에서 조회한 컬럼만 사용 가능
SELECT a.column, b.column FROM table1 a, (SELECT column1, column2 FROM table2) b WHERE condition;🔔 경찰서별로 가장 많이 발생한 범죄 건수와 범죄 유형 조회
SELECT c.police_station, c.crime_type, c.case_number FROM crime_status c, (SELECT police_station, max(case_number) count FROM crime_status WHERE status_type LIKE '발생' GROUP BY police_station) m WHERE c.police_station = m.police_station AND c.case_number = m.count;중첩 서브쿼리
single row : 하나의 열 검색
(서브쿼리가 비교연산자와 사용되는 경우, 서브쿼리의 검색 결과는 한 개의 결과값을 가져야 함)
SELECT column_names FROM table_name WHERE column_name = (SELECT column_name FROM table_name WHERE condition) ORDER BY column_name;multiple row : 하나 이상의 열 검색
- IN (join 쓰는 게 더 유리)
SELECT column_names FROM table_name WHERE column_name IN (SELECT column_name FROM table_name WHERE condition) ORDER BY column_names;- EXISTS
SELECT column_names FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition) ORDER BY column_names;- ANY : 서브쿼리 결과 중 하나라도 만족하면 조회(비교연산자 사용)
SELECT column_names FROM table_name WHERE column_name = ANY (SELECT column_name FROM table_name WHERE condition) ORDER BY column_names;- ALL: 모두 만족(비교연산자 사용)
SELECT column_names FROM table_name WHERE column_name = ALL (SELECT column_name FROM table_name WHERE condition) ORDER BY column_names;Multi Column Subquery(연관 서브쿼리)
- 서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우
SELECT column_names FROM tablename a WHERE (a.column1, a.column2, ...) IN (SELECT b.column1, b.column2, .. FROM tablename b WHERE a.column_name = b.column_name) ORDER BY column_names;🔔 강동원과 성별, 소속사가 같은 연예인의 이름, 성별, 소속사 조회
SELECT name, sex, agency FROM celeb WHERE (sex, agency) IN (SELECT sex, agency FROM celeb WHERE name='강동원');'SQL' 카테고리의 다른 글
SQL) Scalar Functions (0) 2023.03.21 SQL) 집계함수(Aggregate Functions) (0) 2023.03.21 SQL) PRIMARY KEY, FOREIGN KEY (1) 2023.03.21 SQL) Python with MySQL/CSV (0) 2023.03.20 SQL) RDS 접속, SQL FILE 실행, 백업 (0) 2023.03.17