키보드워리어

【SQLite】left, inner문으로 테이블 합쳐보자 본문

개발 관련/Database

【SQLite】left, inner문으로 테이블 합쳐보자

꽉 쥔 주먹속에 안경닦이 2022. 8. 25. 17:28
728x90

 

안녕하세요 【키보드 워리어】

 

⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다.

 

 

오늘은 SQL에 대해 알아보겠습니다~ 
 
 
지난번에 배우신 Group by와 Order by는 어떠셨나요?
 
 
아직 그룹핑과 정렬하는 법이  익숙지 않으시다면
 
 
이전 게시글에 올린 문법들을 종이에 한 번 써보세요 효과가 좋습니다

 
 


 

 

 

 
우리는 이제 주어진 데이터들(테이블)을 바탕으로 조금 더 풍부한 데이터를 뽑을 줄 알아야 합니다
 
 
그렇게 하기 위해서 left절과 inner절을 알아야 할 것입니다
 
 
오늘 배워볼 left, inner절은 왜 배워야 하는지 간단한 예를 들어볼게요
 
 
지금껏 쿼리가 진행되는 순서가 from으로 시작하여
 
 
where, group, select, order로 끝이 났었어요
 
 
모두 테이블 하나를 가지고 와서 데이터를 가지고 왔었죠?
 
 
만약 이러한 테이블을 여러개 가져와서 봐야 하는 경우,
 
 
테이블을 하나씩 하나씩 꺼내서 가져오려고 한다면,
 
 
얼마나 많은 수고가 필요할까요?
 
 
그래서 테이블2를 가져와서 테이블 1에 합치는 것이 left / inner 절인데요
 
 
그림으로 설명드릴게요
 
 

 
left 문은 테이블 2를 테이블 1에 붙이되,
 
 
테이블 1을 기준으로 해당 데이터에 테이블 2에 데이터 값이
 
 
null인 값은 없는 것으로 표시됩니다
 
 
inner 절은 어떨까요?

 
 

 

inner 문은 테이블 2를 테이블 1에 붙이되,
 
 
테이블 1을 기준으로 해당 데이터에 테이블 2에 데이터 값이
 
 
값이 없는 경우에는 제외하고, 두 곳 모두 값이 있는 데이터만 불러옵니다
 
 
null값은 없을 수가 없어요



※먼저 우리가 기억해야 할 것은, 테이블 1과 테이블 2를 불러올 때
데이터를 가져오는 기준이from절에서 부른 테이블 1을 기준으로 한다는 것입니다
 

 

 

테이블 1과 테이블 2에서
 
 
똑같은 컬럼명은 두 데이터를 연결해주는
 
 
key값이 될 수 있어요
 
 
key값은 정보를 찾는 열쇠 역할을 해주어요
 
 
파일에 데이터들 중 조건에 맞는 기록을 찾거나,
 
 
순서대로 정렬할 때
 
 
필요합니다

 

※참고로 한 테이블에 모든 정보를 담을 수도 있지만,
모든 정보를 가져오면 불필요하게 테이블의 크기가 커져서
오히려 데이터를 알아보기 힘들어져요
 
 
이런 이유로 테이블을 종류별로 필드화(컬럼)시켜서 쪼개버리고
 
 
다른 테이블에 담아 놓고 연결이 필요한 경우에 연결할 수 있도록 세팅해 놓는 거예요

 

 

 
테이블을 연결시킬 때는 Join문을 쓰세요
 

두 테이블의 공통된 정보(key값)를
 
 
기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미해요




select * from table1
left join table2
on table1.key = table2.key;

 

    꿀팁🍯 SQL - Join
  • key값을 사용해서 테이블을 연결할 때

똑같은 key값을 가지는 데이터가 여러 개 있으면 어느 데이터를 가져와서
연결해야 할지 알 수 없어요
 

  • Join문은 액셀의 vlookup함수와 동일한 역할을 한다고 생각하시면 돼요

SQL에서 Join은 두 집합 사이의 관계가 교집합과 같아요



이제 left join과 inner join문을 익혀볼게요
 
 
[01] left join

 

select * from 테이블1 t1
left join 테이블2 t2
on t1.key = t2.key;

 
key값이 동일하나 컬럼내의
꽉 찬 데이터, 비어있는 데이터가 있어서
 

꽉 찬 데이터는 정상적 출력되나
비어있는 데이터에는 출력이 안돼요
 

 

[02] inner join

 

select * from 테이블1 t1
inner join 테이블2 t2 //join 부분에 inner로 바꾸어 주기만 하면 돼요
on t1.key = t2.key;

 

inner문은 교집합만 되는 걸 가져오기 때문에,
 
 
같은 key값을 가진 두 테이블의
존재하는 데이터만 출력합니다



  꿀팁🍯 SQL - Join

연결의 기준이 되고 싶은 테이블from 절로
붙이고 싶은 테이블 join절에 위치시켜서

 
 
항상 from에 들어간 테이블을 기준으로 다른 테이블이 붙는다고 알고 있으면 됩니다




그럼 지난번에 배웠던 문법을 Join과 함께 써볼까요?
 

[03] 테이블 t1에 테이블 t2를 연결해서 그룹별 데이터를 사용해보자

 

select t2.data ,count(t2.data) as t1_coint from table1 t1
inner join table2 t2
on t1.key = t2.key
group by t2.data;

 
as는 alias(별칭)의 단축키로 위처럼 사용합니다
 
연결되는 테이블이 많아지면서 필드명과 테이블명이 헷갈려 실수할 수 있어요
이렇게 alias를 지정해주면 편하고 깔끔하게 sql 쿼리를 작성할 수 있습니다
 

[04] Order by문과 함께 다 같이 써보기

select * from table1 t1
inner join table2 t2
on t1.key = t2.key
order by t1.data desc

 
지난번에 배워본 Order by문이 헷갈린다면,
 
 
빈종이에 글로 써보시면서 한 번 작성해보세요!
 

[05] Where, like문과 함께 써볼게요
 

select t2.data, count(t2.data) as count_data from table1 t1
inner join table2 t2
on t1.key = t2.key
where t2.email like '%naver.com'
group by t2.data


  위 쿼리가 실행되는 순서는 어떻게 될까요?
  1. from
  2. join
  3. where
  4. group by
  5. select
  6. order by (count)

from table t1
기준이 되는 table1을 가져온다
 

inner join table 2 t2 on t1.key = t2.key
t2테이블을 t1에 붙인다
 

where t2.email like '% N'
t2테이블 email 컬럼명이 N으로 끝나는 값만 가져온다
 

group by t2.data
t2 테이블의 data값이 같은 값들을 뭉쳐줍니다 (그룹핑)
 

select t2.data, count(t2.data) as count_data
t2테이블의 data가 있는 컬럼과 data컬럼을 기준으로
뭉쳐진 개수를 세어서 출력해줍니다


 
inner의 실행 순서는 항상 from과 붙어 다닌다고 생각해주세요


*그러면 intersect는 뭘까요?

INTERSECT와 INNER JOIN은 SQL에서 데이터를 조인하거나 교차(intersection)하는 데 사용되는 개념적으로 다른 연산자입니다.

INNER JOIN:
INNER JOIN은 두 개 이상의 테이블에서 일치하는 행을 결합하는 데 사용됩니다.
INNER JOIN은 조인 조건에 맞는 행만 반환하며, 조인 조건을 충족하지 않는 행은 결과에 포함되지 않습니다.
특정 열의 값이 일치하는 경우에만 결과에 해당하는 행을 반환합니다.

SELECT *
FROM Table1
INNER JOIN Table2
ON Table1.column = Table2.column;



INTERSECT:
INTERSECT는 두 개 이상의 SELECT 문의 결과 집합에서 공통된 행을 선택하는 데 사용됩니다.
INTERSECT는 각 SELECT 문의 결과에서 일치하는 행만을 반환하며, 공통된 행이 없는 경우 결과에 포함되지 않습니다. SELECT 문의 결과 집합의 교집합을 반환합니다.

SELECT column
FROM Table1
INTERSECT
SELECT column
FROM Table2;

그리하여  INNER JOIN은 테이블 간의 조인 작업을 수행하고 일치하는 행을 결합하는 데 사용되며, INTERSECT는 SELECT 문의 결과 집합에서 공통된 행을 선택하는 데 사용됩니다. INNER JOIN은 조인 작업을 수행하고 테이블 간의 연결을 생성하는 데 사용되는 반면, INTERSECT는 결과 집합의 공통된 행을 선택하는 데 사용됩니다.

728x90