SELECT 관련 문법
기본적인 문법은 알지만 안쓰다보면 또 까먹고, 까먹고 또 까먹습니다.. 이놈의 기억력이란..?
<br/>
<span style="color:#8e44ad">LIKE 연산
WHERE last_name like 'Foo%'
WHERE last_name like '%Foo'
WHERE last_name like '%Foo%'
WHERE last_name like 'Foo_'
WHERE last_name like 'Foo__'
WHERE last_name like '_Foo_'
-
1번 라인 조건 : Foo, Foote, Fooooo, Fooxxxx, Foxx
-
2번 라인 조건 : Foo, xxxFoo, dddFoo, dfdFoo
-
3번 라인 조건 : Foo, xxxFooxxxx, dddFooDDD, Fooxxx
-
4번 라인 조건 : Foox, Food, Fooc, Fooa
-
5번 라인 조건 : Fooxx, Foodd, Fooad
-
5번 라인 조건 : zFoox, xFooz, xFoox
<br/>
<br/>
<br/>
<br/>
<span style="color:#8e44ad">UNION, INSERSECT, MINUS
<span style="color:#8e44ad">- SELECT되는 필드의 개수와 데이터 타입이 같아야합니다
<span style="color:#8e44ad">- MySQL은 INTERSECT를 지원하지 않습니다.
<br/>
- UNION, 레코드 결합, 중복값 제거
SELECT NAME
FROM STUDENT
UNION
SELECT NAME
FROM PROFESSOR
<br/>
- UNION ALL, 레코드 결합, 중복값 제거 X
SELECT NAME
FROM STUDENT
UNION ALL
SELECT NAME
FROM PROFESSOR
<br/>
- INTERSECT, 중복되는 값
SELECT NAME
FROM STUDENT
INTERSECT
SELECT NAME
FROM PROFESSOR
<br/>
- MINUS, A레코드 - 중복되는 값
- EX) 한번이라도 A+를 받지 못한 학생
SELECT NAME
FROM STUDENT
MINUS
SELECT NAME
FROM TAKES
WHERE GRADE = 'A+'
<br/>
<br/>
<br/>
<br/>
<span style="color:#8e44ad">조인연산
<span style="color:#8e44ad">- MySQL은 FULL OUTER JOIN을 지원하지 않습니다.
<br/>
- 내부조인, 조인 조건에 부합하는 레코드
SELECT *
FROM IDOL A JOIN SONG B
ON A.SONG_ID = B.SONG_ID
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/RUTIJI181224235458.PNG" style="border-style:solid; border-width:1px"/>
<br/>
<br/>
- 왼쪽 외부조인, 내부조인 결과 레코드 + 왼쪽 테이블의 조건을 만족하지 않는 레코드
SELECT *
FROM IDOL A LEFT JOIN SONG B
ON A.SONG_ID = B.SONG_ID
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/1UB9UV181224235458.PNG" style="border-style:solid; border-width:1px"/>
<br/>
- 오른쪽 외부 조인, 내부조인 결과 레코드 + 오른쪽 테이블의 조건을 만족하지 않는 레코드
SELECT *
FROM IDOL A RIGHT JOIN SONG B
ON A.SONG_ID = B.SONG_ID
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/SJXMXN181224235458.PNG" style="border-style:solid; border-width:1px"/>
<br/>
<br/>
<span style="color:#8e44ad">COUNT, SUM, AVG, MIN, MAX (집계함수)
- COUNT, 레코드의 개수, distinct 키워드를 사용하면 중복되는 레코드를 제외한 개수를 리턴
SELECT COUNT(*)
FROM SONG
<br/>
- SUM, 합
SELECT SUM(LIKES)
FROM SONG
<br/>
- AVG, 평균
SELECT AVG(LIKES)
FROM SONG
<br/>
- MIN, 최소
SELECT MIN(LIKES)
FROM SONG
<br/>
- MAX, 최대
SELECT MAX(LIKES)
FROM SONG
<br/>
<br/>
<br/>
<span style="color:#8e44ad">GROUP BY, HAVING
<span style="color:#8e44ad">- 집계함수는, 다른 일반 필드와 같이 사용할 수 없습니다.
<span style="color:#8e44ad">- 따라서 GROUP BY로 묶어, 집계 함수를 사용합니다.
<span style="color:#8e44ad">- 예를들어 다음과 같습니다.
-
<span style="color:#8e44ad">부서별로 묶어 각 부서 직원들의 수를 집계
-
<span style="color:#8e44ad">부서별로 묶어 각 부서 직원들의 최고 연봉
<br/>
<br/>
-
GROUP BY, 그룹별로 묶음
-
소속사별로 그룹하여, 각 소속사별 아이돌의 수
SELECT B.AGENT_NAME, COUNT(*)
FROM IDOL A JOIN AGENT B
ON A.AGENT_ID = B.AGENT_ID
GROUP BY A.AGENT_ID
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/UZQMXM181224235458.PNG" style="border-style:solid; border-width:1px"/>
<br/>
- HAVING, 묶은 그룹에 대한 조건절
- 소속사별로 그룹하여, 각 소속사별 아이돌의 수가 4이하인 소속사
SELECT B.AGENT_NAME, COUNT(*)
FROM IDOL A JOIN AGENT B
ON A.AGENT_ID = B.AGENT_ID
GROUP BY A.AGENT_ID
HAVING COUNT(*) <= 4
<img src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/B4HJZT181224235458.PNG" style="border-style:solid; border-width:1px"/>
<br/>
<br/>
<br/>