서브쿼리는 쿼리 안에 있는 또다른 select 쿼리다.
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
이 예에서 SELECT * FROM t1 ... 은 바깥 쿼리이고,
(SELECT column1 FROM t2) 이게 서브쿼리다.
서브쿼리 안에 서브쿼리 안에 서브쿼리가 계속 들어갈 수 있다!
서브쿼리의 장점으로는
1. 각 SQL문의 부분을 분리해서 구조화할 수 있다.
2. JOIN이나 UNION 처럼 복잡한 작업을 대체할 수 있다.
3. 사람들이 읽기 쉽다고 생각한다.
아래는 SQL표준으로 지정된 서브쿼리에 대한 예시다.
DELETE FROM t1
WHERE s11 > ANY
(SELECT COUNT(*) /* no hint */ FROM t2
WHERE NOT EXISTS
(SELECT * FROM t3
WHERE ROW(5*t2.s1,77)=
(SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
(SELECT * FROM t5) AS t5)));
서브쿼리를 사용할 수 있는 문은 다음과 같다.
SELECT, INSERT, UPDATE, DELETE, SET, DO
[출처]
https://dev.mysql.com/doc/refman/8.0/en/subqueries.html
SELECT COUNT(*)
FROM(
SELECT NAME
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME) AS ANIMAL_INS