Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dynamic programming
- 파이썬
- Stack
- Tree
- 코테
- array
- hash table
- implement
- Binary Tree
- geometry
- sorting
- 코딩테스트
- two pointers
- 구현
- Class
- Data Structure
- string
- Method
- java
- SQL
- 자바
- Math
- Binary Search
- greedy
- simulation
- Counting
- Number Theory
- bit manipulation
- database
- Matrix
Archives
- Today
- Total
코린이의 소소한 공부노트
[MySQL] SUB QUERY 본문
[예시에 쓰이는 테이블]
# student_info에서 idols별로 몇 명이 좋아하는지 추려서
# 아이돌 이름이랑 좋아하는 학생수를 구한 다음
# 좋아하는 학생수에 따라 분류해줘
select *, case when cnt>40 then '인기 아이돌' else '유명 아이돌' end as '아이돌 분류'
from (
select idols, count(*) cnt
from student_info
group by idols
) idolcount; # from절에 사용한 서브쿼리의 이름
# 결과
idols cnt 아이돌 분류
ITZY 30 유명 아이돌
G-idle 31 유명 아이돌
LESSERAFIM 54 인기 아이돌
IVE 44 인기 아이돌
NMIXX 31 유명 아이돌
New Jeans 49 인기 아이돌
Aespa 61 인기 아이돌
[sub query, 서브 쿼리]
1. 쿼리 내부에 있는 또 다른 쿼리를 의미한다.
- 기존 데이터를 이용해 새로운 데이터를 만들어 활용하거나, 상수로만 표현할 수 없는 조건절이 필요한 경우에 쓰인다.
2. 서브 쿼리는 SELECT, FROM, WHERE 어디에나 사용할 수 있다.
- select절에 이용된 서브 쿼리는 스칼라 서브쿼리(scalar sub-query)라고도 한다. 단일 값을 반환하기 때문이다.
- from절에 이용된 서브 쿼리는 인라인 뷰(inline view)라고도 한다. 내부에 테이블을 새로 만들었다고 보기 때문이다.
- where절에 이용된 서브 쿼리는 중첩 서브쿼리(nested sub-query)라고도 한다. 조건절을 쿼리로 표현하면서 쿼리가 중첩됐다고 보기 때문이다.
3. 서브 쿼리의 시작과 끝은 소괄호 ()로 감싸야한다..
- 소괄호로 감싼 후 ) 뒤에 서브 쿼리의 별명을 붙여줘야 한다. 서브쿼리의 내용과 연관 있는 이름을 짓는 게 도움이 된다.
4. 서브 쿼리에는 order by를 사용할 수 없다.
- 최종 출력이 아니기 때문에 굳이 정렬할 필요가 없기 때문이다.
[where절에 사용한 서브 쿼리 예시]
# 수학 성적이 A인 학생들의
# 한달 정보를 모두 보여줘
select * from student_monthly m
where m.hakbeon in (select g.hakbeon from student_grade g where Math='A');
# 결과
hakbeon book volunteer youtube allowance
10101 2 39 124 170000
10105 9 39 148 60000
10115 8 43 206 120000
10119 6 9 205 200000
10201 4 29 13 140000
...
- where절 서브 쿼리가 많이 쓰이는 편이다.
[select절에 사용한 서브 쿼리 예시]
# 국어 영어 모두 A인 학생들의 과목 점수와
# 한달에 읽은 책의 양을 함께 보여줘
select g.*, (select book from student_monthly m where g.hakbeon=m.hakbeon) as '책', '권' as '단위'
from student_grade g
where Korean='A' and English='A';
# 결과
hakbeon Korean English Math 책 단위
10111 A A B 3 권
10402 A A A 10 권
10511 A A C 7 권
10513 A A D 10 권
...
- select절 서브 쿼리 대신 join을 더 많이 사용한다.
'Back-End' 카테고리의 다른 글
[MySQL] LIKE, NOT LIKE (0) | 2023.03.31 |
---|---|
[MySQL] CASE WHEN, THEN, ELSE (0) | 2023.03.29 |
[MySQL] INSERT, UPDATE, DELETE (0) | 2023.03.29 |
[MySQL] COUNT, GROUP BY, HAVING (0) | 2023.03.28 |
[MySQL] ORDER BY, LIMIT (0) | 2023.03.18 |