서브 쿼리(Sub query)는 하나의 쿼리안에 포함되어 있는 또 다른 쿼리문을 말한다.
서브 쿼리는 메인 쿼리가 서브 쿼리를 포함하는 종속적인 관계로, 여러 쿼리를 수행할 결과를 중첩시켜 간편하게 결과을 얻을 수 있다.
또한 아래 같은 특징이 있다.
- 서브 쿼리는 여러개 사용 가능하다.
- 서브 쿼리는 () 를 통해 사용한다.
- 서브 쿼리는 SELECT, FROM, WHERE 절 모두 사용이 가능하며, SELECT를 제외한 INSRT INTO, UPDATE 등에서도 사용이 가능하다.
- 서브 쿼리안에 ORDER BY 절이 들어가면 안된다.
users
id | name | address |
1 | lee | seoul |
2 | park | incheon |
... | ... | ... |
posts
id | user_id | content |
1 | 1 | side dish |
2 | 1 | camera |
3 | 2 | computer |
4 | 2 | keyboard |
... | ... | ... |
SELECT 에서의 서브 쿼리
스칼라 서브쿼리(Scalar subqueries)라고 불린다.
select에서의 서브 쿼리를 쓸 경우, 서브 쿼리의 반환된 값은 하나여야만 한다.
SELECT id, content, (SELECT name from users WHERE users.id = posts.user_id) name
FROM posts;
id | content | name |
1 | side dish | lee |
2 | camera | lee |
3 | computer | park |
4 | keyboard | park |
FROM 에서의 서브 쿼리
인 라인뷰(inline views)라고 불린다.
FROM 절에 사용된 서브쿼리의 결과가 하나의 테이블 처럼 사용된다.
반환 값이 여러개여도 상관 없음
SELECT u.name, p.content, u.address FROM users u,
(SELECT id, user_id, content FROM posts) p
WHERE p.user_id = u.id;
name | content | address |
lee | side dish | seoul |
lee | camera | seoul |
park | computer | incheon |
park | keyboard | incheon |
WHERE 에서의 서브 쿼리
일반 서브 쿼리며, WHERE 절에서 사용하여 조건을 걸수가 있다.
SELECT *
FROM POSTS
WHERE user_id IN (SELECT ID FROM users WHERE name = 'lee');
id | user_id | content |
1 | 1 | side dish |
2 | 1 | camera |
SELECT나 WHERE에서나 많이 썻지, FROM에서는 많이 써보진 않은거 같은데,
이제서야 정리하면서 개념을 다시 배워간다.
728x90
'SQL' 카테고리의 다른 글
INSERT INTO SELECT (1) | 2021.06.06 |
---|---|
INSERT INTO ... VALUES (0) | 2021.05.30 |
CHAR_LENGTH (0) | 2021.05.24 |
DISTINCT (0) | 2021.05.23 |
SELECT.. FROM.. WHERE (0) | 2021.05.23 |