MySQL 공부 내용을 깃허브 TIL 저장소에 정리를 해두었습니다. 이를 수행하고자 하는 작업을 기준으로 문법들을 다시 정리를 해보고자합니다. 이번 게시글에서는 서브쿼리에 대해 정리해보았습니다.
서브쿼리는 쿼리 안에 쿼리를 넣는 것으로 Inner Query 라고 부릅니다. 그리고 서브쿼리를 포함하는 쿼리는 Outer Query라고 부릅니다.
# 결과 값이 하나이기 때문에, 비교연산자와 함게 사용되는 경우가 많다.
SELECT column_names
FROM table_name
WHERE column_name = (SELECT column_name From table_name WHERE condtion)
ORDER BY column_name;
# IN : 서브쿼리 결과 중에 포함될 때
SELECT column_names
FROM table_name
WHERE column_name IN (SELECT column_name FROM table_name WHERE condtion)
ORDER BY column_name;
# EXISTS : 서브쿼리 결과에 값이 있을 때
SELECT column_names
FROM table_name
WHERE column_name EXISTS (SELECT column_name FROM table_name WHERE condtion)
ORDER BY column_name;
# ANY : 서브쿼리 결과 중에 최소한 하나라도 만족하면 (비교연산자 사용)
SELECT column_names
FROM table_name
WHERE column_name = ANY (SELECT column_name FROM table_name WHERE condtion)
ORDER BY column_name;
# ALL : 서브쿼리 결과를 모두 만족하면 (비교연산자 사용)
SELECT column_names
FROM table_name
WHERE column_name = ALL (SELECT column_name FROM table_name WHERE condtion);
SELECT column_names
FROM tablename
WHERE (column1, column2, ...) IN (SELECT column1_condition, column2_condition,...
FROM tablename)
ORDER BY column_names;
# 가상의 테이블을 하나 더 만든다고 생각하고 사용
# 서브쿼리에 별칭(alias) 필수
SELECT col_1, Aggregate_Functions(sample)
FROM (
SELECT col_1
, col_2
, Aggregate_Functions(col_3) AS sample
FROM tablename
GROUP BY columname
) new_name
WHERE condition
GROUP BY columnname;
-- AVG 함수에서는 Null값을 무시한다. 그래서 총합을 null을 제외한 값의 수로 나눈다.
-- Null을 무시하지 않고, 0으로 취급해서 계산을 해주기 위해서는 하기의 방법을 사용한다.
SELECT SUM(columnname)/COUNT(*)
FROM tablename
# 두 테이블을 동시에 활용할 경우
SELECT a.column, b.column
FROM table1 a, (SELECT column1, column2 FROM table2) b
WHERE condition;
WITH new_name AS (
SELECT column1
, column2
, Aggregate_Functions(column3)
FROM tablename
GROUP BY columname
) new_name2 AS (
...
)
SELECT columnname
FROM new_name
WHERE condition;
SELECT column1, (SELECT column2 FROM table2 WHERE condition)
FROM table1
WHERE condtion;