[SQL]Datacamp Joining Data in SQL Day 1 - INNER JOIN, OUTER JOIN

2022. 7. 22. 21:02Data Analyst/SQL

'Introduction to SQL' 과정은 어제 엊그제해서 마쳤고, 수준은 대학교 수업에서 들은 딱 그정도 지식들이 나와서 따라갈만 했다.

그리고 오늘 'Joining Data in SQL' 과정을 들어가는데, 내용도 한 단계 깊이있어졌고(처음보는 내용이라 그런 듯 하다), 이와 동시에 문득 프로젝트성도 아닌데 나는 언제까지 이렇게 기초지식만 듣고 있어야 하나 라는 생각이 들었다.

그리고 이런 기초 지식습득이 의미가 있어지기 위해 적어도 내가 지금 할 수 있는건 기록이라는 생각이 들었다.

대학교 통계수업을 들으며 수많은 구글링을 통해 나는 티스토리가 코딩을 기록하기엔 좋겠다라고 선택해서 이렇게 첫 기록을 시작하게됐다.

각설하고 오늘 배운 내용 정리나 하자.

 

1.INNER JOIN

예시 코드

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;

두 개의 테이블이 있다 가정하고 INNER JOIN을 사용하면 공통된 부분만 쏙 같이 나온다.

 

1-1 INNER JOIN via USING

예시 코드

ON 대신 공통된 열의 이름이 id면 USING 뒤에 (id) 이렇게 사용 가능하다.

주의할 점은 꼭 괄호를 붙여야 한다는 것!

 

1-2 SELF JOIN

예시 코드

-- Select fields with aliases
SELECT p1.country_code, p1.size AS size2010, p2.size AS size2015
-- From populations (alias as p1)
FROM populations AS p1
  -- Join to itself (alias as p2)
  INNER JOIN populations AS p2
    -- Match on country code
    ON p1.country_code = p2.country_code;

한 테이블 가지고도 INNER JOIN을 통해 SELF JOIN이 가능하다.

 

1-3 CASE

숫자형 변수를 범주를 나눠주는 CASE 함수

WHEN, THEN, ELSE, and END와 같이 사용한다.

예시 코드

SELECT name, continent, code, surface_area,
    -- First case
    CASE WHEN surface_area > 2000000 THEN 'large'
        -- Second case
        WHEN surface_area > 350000 THEN 'medium'
        -- Else clause + end
        ELSE 'small' END
        -- Alias name
        AS geosize_group
-- From table
FROM countries;

 

 

2. OUTER JOIN

크게 LEFT JOIN, RIGHT JOIN, FULL JOIN으로 구분

 

2-1 LEFT JOIN

LEFT JOIN은 왼쪽에 있는 테이블의 값을 모두 포함한다.

(예시 코드)

SELECT c1.name AS city, code, c2.name AS country,
       region, city_proper_pop
FROM cities AS c1
  -- Join right table (with alias)
  LEFT JOIN countries AS c2
    -- Match on country code
    ON c1.country_code = c2.code
-- Order by descending country code
ORDER BY code DESC;

 

2-2 RIGHT JOIN

RIGHT JOIN은 LEFT JOIN의 반대, 오른쪽에 있는 테이블의 값을 모두 포함한다.

(예시 코드)

-- convert this code to use RIGHT JOINs instead of LEFT JOINs
/*
SELECT cities.name AS city, urbanarea_pop, countries.name AS country,
       indep_year, languages.name AS language, percent
FROM cities
  LEFT JOIN countries
    ON cities.country_code = countries.code
  LEFT JOIN languages
    ON countries.code = languages.code
ORDER BY city, language;
*/

SELECT cities.name AS city, urbanarea_pop, countries.name AS country,
       indep_year, languages.name AS language, percent
FROM languages
  RIGHT JOIN countries
    ON languages.code = countries.code
  RIGHT JOIN cities
    ON countries.code = cities.country_code
ORDER BY city, language;

코드 또한 LEFT JOIN의 reverse라는 걸 보여줌

 

2-3 FULL JOIN

두 개의 테이블이 있다면 그냥 두 테이블을 다 합친 것.

여태 언급을 안했는데 저 까맣게 칠해진 빈칸은 해당하는 값이 없기 때문에 NULL값이 된 것이다.

(예시 코드)

SELECT name AS country, code, region, basic_unit
-- From countries
FROM countries
  -- Join to currencies
  FULL JOIN currencies
    -- Match on code
    USING (code)
-- Where region is North America or null
WHERE region = 'North America' OR region IS NULL
-- Order by region
ORDER BY region;

 

#2-4 CROSS JOIN

약간 번외 같은 느낌으로 CROSS JOIN도 소개해주셨다

왼쪽 테이블과 오른쪽 테이블을 쌍을 지어주는 JOIN, 그림으로 쉽게 이해시켜줘 좋다.

(예시 코드)

-- Select fields
SELECT c.name AS city, l.name AS language
-- From cities (alias as c)
FROM cities AS c        
  -- Join to languages (alias as l)
  CROSS JOIN languages AS l
-- Where c.name like Hyderabad
WHERE c.name LIKE 'Hyder%';

 

오우 데이터캠프 복습하면서 정리하기에 너무 좋다.. 작성했던 코드도 그대로 남아있고 자료 캡쳐해서 넣기도 좋고

모든 자료는 Datacamp 특히

 

Dr. Chester Ismay - Educator, Data Scientist, and R/Python Consultant

이 멋있는 분꺼 같으니 참고 바랍니다

 

일주일 무료체험 중인데 기냥 한달씩 구독하며 혼자 틈날때마다 공부 하려한다.

나중에 블프나 연초에 1년 구독권을 4~50프로 할인해서 149달러쯤으로 판매한다 하니 만약 본다면 참고하세용

 

특별한 일정이 없는 한 1일 1학습 글을 기약하며 그럼 이만!