2022. 7. 22. 21:02ㆍData 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 특히
이 멋있는 분꺼 같으니 참고 바랍니다
일주일 무료체험 중인데 기냥 한달씩 구독하며 혼자 틈날때마다 공부 하려한다.
나중에 블프나 연초에 1년 구독권을 4~50프로 할인해서 149달러쯤으로 판매한다 하니 만약 본다면 참고하세용
특별한 일정이 없는 한 1일 1학습 글을 기약하며 그럼 이만!