| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- jointpoint
- frontController
- 스프링
- SpringBoot
- gradle
- 바인딩변수
- springmvc
- @
- Model
- PointCut
- @Valid
- after-throwing
- AOP
- @RequestParam
- @ResponseBody
- .xml
- @RequestMapping
- produces
- 어노테이션
- spring
- c:if
- springjdbc
- 유효성검사
- 생성자주입
- 서비스레이어
- 의존주입
- Java
- 비즈니스레이어
- MVC
- application.properties
- Today
- Total
메모장
04-1 조인 본문
지금까지 1개의 테이블에서 쿼리를 작성하는 방법을 알아 보았다. 이제는 2개이상의 테이블에서 쿼리를 작성하는 방법인 조인을 알아볼 것이다.
- 테이블을 2개 이상 조인한다는 의미
조인은 테이블 A의 열과 테이블 B의 정보를 포함해 검색 할 수 있게 만들어 준다. 그러면 이런 의문이 생긴다. '테이블을 만들때 처음부터 stock 테이블에 company_name열을 만들면 조인할 필요가 없는것 아닌가요?' 라고 생각 할 수도 있다. 맞는말이다. 하지만 그렇게 테이블을 만들면 stock 테이블에도 nasdaq_company 테이블에도 company_name이 있는 셈이니 데이터가 중복저장되는 문제가 생긴다.
데이터를 중복 저장하면 저장할 공간이 더 필요한 문제와, 중복 저장한 열 데이터를 수정할 경우 해당 열을 가진 테이블의 데이터를 모두 찾아 수정해야 하는 문제가 발생한다. 결국 데이터 중복을 최소화 하는 설계는 피할수 없으므로, 조인을 사용해 2개 이상의 테이블을 조합한 결과를 검색하는 방식이 효율적일 것이다.
내부 조인
출처 입력
가장 많이 사용하는 조인인 내부 조인으로, 보통 조인이라고 하면 내부조인을 가리킬 만큼 많이 쓰인다.
내부조인의 기본 형식
SELECT [열 이름] FROM [테이블 1]
INNER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]
WHERE [검색 조건]

INNER JOIN
INNER JOIN문을 적용한 쿼리
SELECT
[고객.고객번호], [고객], [고객이름], [주문.주문번호], [주문.고객번호], [주문.주문날짜]
FROM [고객]
INNER JOIN [주문] ON [고객.고객번호] = [주문.고객번호]
-- JOIN 하는 두 테이블에 같은 이름의 열이 있으므로 별칭을 사용한다. 만약 별칭을 사용하지 않으면 데이터베이스 엔진은 어떤 테이블의 열을 검색 할 지 판단할 수 없어 오류가 발생한다.
ON 문과 WHERE문의 차이
ON -> ON문은 조인할때 조인조건을 위해 사용
WHERE -> 조인을 완료한 상태에서 조건에 맞는 값을 가져오고자 사용한다.
2개이상의 조건도 적용할 수 있다. (AND 나 OR을 써서)
SELECT a.symbol, a.last_crawel_date, b.date FROM nasdaq_company AS a
INNER JOIN stock AS b ON a.symbol = b.symbol AND a.last_crawel_date = b.date
WHERE a.symbol = 'MSFT'
3개 이상 테이블의 INNER JOIN 기본 형식
SELECT [열 이름] FROM [테이블 1]
INNER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]
INNER JOIN [테이블 3] ON [테이블 2.열] = [테이블 3.열]
WHERE [검색조건]
3개 이상의 테이블이 짝지어 조인할때 서로 열이 중복된다.
우선 INNER JOIN 은 조건에 맞는 데이터만 검색하므로 NULL 데이터가 발생하지는 않는다. 따라서 열이 중복된 상태에서 고려할 부분은 '성능'이다. 성능을 높이려면 인덱스가 형성된 열을 우선 사용하는 것이 좋다. 예를 들어 industry 열이 인덱스가 형성되어 있다면 이 열로 우선 inner join 을 하고 이후 symbol 열로 inner join 을 한다.
인덱스란 데이터베이스에서 데이터 검색 성능을 높일 때 사용하는 것으로 책의 차례와 같다고 보면 된다. 또는 데이터양이 적은 열을 조인 조건으로 우선 사용하는 것이 좋다.
실제로 쿼리를 실행했을때 데이터가 처리되는 순서는 쿼리에 작성된 순서가 아닌, 데이터베이스 엔진에서 판단한 순서이다.
외부 조인
외부 조인의 기본 형식
SELECT [열 이름] FROM [테이블 1]
<LEFT, RIGHT, FULL> OUTER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]
WHERE [검색조건]
<LEFT, RIGHT, FULL> 셋 중 써야함
제일 자주 사용하는 LEFT OUTER JOIN 에 대해서 알아보자 !

고객테이블의 고객번호와 주문테이블의 고객번호를 비교해 고객 테이블에 있는 고객번호만 주문 테이블에서 골라 결과에 포함시키고, 없는것은 NULL로 처리한다.
교차 조인
자주 사용하지는 않지만, 각 테이블의 모든 경우의 수를 조합한 데이터가 필요할 경우 교차조인을 사용할수 있다.
교차조인의 기본형식
SELECT [열 이름] FROM [테이블 1] CROSS JOIN [테이블 2] WHERE [검색 조건]
셀프 조인
셀프조인은 같은 테이블을 사용하는 특수한 조인이다. 한가지 주의사항은 반드시 별칭을 사용해야 한다는 것이다. 별칭을 사용하지 않으면 오류가 발생한다.
SELF JOIN 쿼리 실행
SELECT a.symbol, b.company_name FROM nasdaq_company AS a
INNER JOIN nasdaq_company AS b ON a.symbol = b.symbol
'DB > [SQL 입문]' 카테고리의 다른 글
| 04-3 공통 테이블 식 (0) | 2024.04.11 |
|---|---|
| 04-2 서브쿼리 (0) | 2024.04.11 |
| 03-7 SQL Server에서 다루는 자료형 정리하기 (0) | 2024.04.11 |
| 03-6 테이블 생성하고 데이터 조작하기 (0) | 2024.04.11 |
| 03-5 데이터 그룹화 다루기 (0) | 2024.04.11 |