1. 기준으로 테이블 합치기 (INNER JOIN)
- 두 테이블 모두에 있는 값만 합치기
SELECT [컬럼]
FROM [테이블 A 이름]
INNER JOIN [테이블 B 이름]
ON [테이블 A 이름].[컬럼 A 이름] = [테이블 B 이름].[컬럼 B 이름]
WHERE 조건식;
- 다른 사용법
: select [컬럼] from [테이블1] a, [테이블2] b where a.컬럼=b.컬럼;
: select wt1.name from world_tour1 wt1, world_tour2 wt2
where wt1.cast = wt2.cast <> '기안84'; # 기안84는 제외하고 name 출력
2. 한쪽을 기준으로 테이블 합치기 (LEFT, RIGHT JOIN)
- 왼쪽 테이블에 있는 값 / 오른쪽 테이블에 있는 값
SELECT [컬럼]
FROM [테이블 A 이름]
LEFT/RIGHT JOIN [테이블 B 이름]
ON [테이블 A 이름].[컬럼 A 이름] = [테이블 B 이름].[컬럼 B 이름]
WHERE 조건식;
- 없는 값은 NULL로 표시됨
- 실무에서는 left join 을 많이 사용함
3. 다양한 방식으로 테이블 합치기 (OUTER, CROSS, SELF JOIN)
- OUTER JOIN 두 테이블에 있는 모든 값 합치기
- LEFT JOIN + UNION + RIGHT JOIN
- UNION : 두 쿼리의 결과를 중복을 제외하고 합쳐서 보여주는 집합 연산자
SELECT [컬럼]
FROM [테이블 A 이름]
LEFT JOIN [테이블 B 이름]
ON [테이블 A 이름].[컬럼 A 이름] = [테이블 B 이름].[컬럼 B 이름]
UNION
SELECT [컬럼]
FROM [테이블 A 이름]
RIGHT JOIN [테이블 B 이름]
ON [테이블 A 이름].[컬럼 A 이름] = [테이블 B 이름].[컬럼 B 이름];
- CROSS JOIN 두 테이블에 있는 모든 값을 각각 합치기
SELECT [컬럼 이름]
FROM [테이블 A 이름]
CROSS JOIN [테이블 B 이름]
WHERE 조건식;
- SELF JOIN 같은 테이블에 있는 값 합치기
SELECT [컬럼 이름]
FROM [테이블 A 이름] AS t1
INNER JOIN [테이블 A 이름] AS t2
ON t1.[컬럼 A 이름] = t2.[컬럼 B 이름]
WHERE 조건식;
4. 실습[1]
MISSION (1)
SELECT A.name, B.attack, B.defense
FROM mypokemon as A
LEFT JOIN ability as B
ON A.number = B.number;
MISSION (2)
SELECT B.number, A.name
FROM mypokemon as A
RIGHT JOIN ability as B
ON A.number = B.number;
5. 실습[2]
MISSION (1)
SELECT type, avg(height)
FROM mypokemon as A
LEFT JOIN ability as B
ON A.number = B.number
GROUP BY type;
MISSION (2)
SELECT type, avg(weight)
FROM mypokemon as A
LEFT JOIN ability as B
ON A.number = B.number
GROUP BY type;
MISSION (3)
SELECT type, avg(height), avg(weight)
FROM mypokemon as A
LEFT JOIN ability as B
ON A.number = B.number
GROUP BY type;
MISSION (4)
SELECT A.number, name, attack, defense
FROM mypokemon as A
LEFT JOIN ability as B
ON A.number = B.number
WHERE A.number >= 100;
MISSION (5)
SELECT name
FROM mypokemon as A
LEFT JOIN ability as B
ON A.number = B.number
ORDER BY attack+defense desc;
MISSION (6)
SELECT name
FROM mypokemon as A
LEFT JOIN ability as B
ON A.number = B.number
ORDER BY speed desc
LIMIT 1;
여러 테이블 한번에 다루기
1. 데이터에 데이터 더하기 (UNION, UNION ALL, 합집합)
- [쿼리A] UNION [쿼리B] / [쿼리A] UNION ALL [쿼리B] : 결과값을 합쳐서 보여줌
- UNION 은 동일한 값 제외, UNION ALL 은 동일한 값 포함
- 쿼리A 과 쿼리B의 결과 값의 개수가 같아야 함
- ORDER BY는 가장 마지막에 작성 가능, 쿼리A에서 가져온 컬럼으로만 가능
2. 데이터에서 데이터 빼기 (교집합, 차집합)
- INTERSECT, MINUS 가 존재하지 않아 JOIN으로 표현
- 교집합 INNER JOIN
- 차집합 LEFT JOIN
3. 실습[1]
MISSION (1)
SELECT distinct type FROM mypokemon
UNION
SELECT distinct type FROM friendpokemon;
MISSION (2)
SELECT number, name, 'my' as whose FROM mypokemon WHERE type='grass'
UNION ALL
SELECT number, name, "friend's" as whose FROM friendpokemon WHERE type='grass'
4. 실습[2]
MISSION (1)
SELECT m.name
FROM mypokemon AS m INNER JOIN friendpokemon AS f
ON m.number = f.number;
MISSION (2)
SELECT m.name
FROM mypokemon as m LEFT JOIN friendpokemon as f
ON m.number = f.number
WHERE f. number IS NULL;
5. WITH ROLLUP
GROUP BY 사용 후 마지막에 붙이면 합계를 출력하는 행을 추가해줌
6. 윈도우 함수
PARTITION BY
'패스트캠퍼스' 카테고리의 다른 글
[패스트캠퍼스] 데이터 분석 부트캠프 17기 - 9주차 (3) MySQL 고객데이터 (0) | 2025.02.12 |
---|---|
[패스트캠퍼스] 데이터 분석 부트캠프 17기 - 9주차 (2) MySQL 서브쿼리 (0) | 2025.02.07 |
[패스트캠퍼스] 데이터 분석 부트캠프 17기 - 8주차 (3) MySQL 조건,고급 (0) | 2025.02.04 |
[패스트캠퍼스] 데이터 분석 부트캠프 17기 - 8주차 (2) MySQL CRUD (0) | 2025.02.04 |
[패스트캠퍼스] 데이터 분석 부트캠프 17기 - 8주차 (1) MySQL 기본 (0) | 2025.01.31 |