220721 SQL JOINS

SQL JOINS


이번 포스팅에서는 SQL의 JOIN에 대해서 종합적으로 정리를 해보려고 한다.

INNER JOIN

department에 속하는 employee name을 출력

1
2
3
4
5
-- INNER JOIN에서 INNER 생략 가능 
-- JOIN을 할때에는 ON 절에 작성하는 JOIN 조건의 column이름은 달라도 관계없다. Column의 값이 중요하다.
SELECT e.emp_name, d.dept_name
FROM employee e
JOIN department d ON e.dept_id = d.dept_id

OUTER JOIN

LEFT JOIN

모든 employee 이름과 department 이름 출력

1
2
3
4
-- LEFT JOIN = INNER JOIN + ANY additional records from the LEFT TABLE.
SELECT e.emp_name, d.dept_name
FROM employee e
LEFT JOIN department d ON e.dept_id = d.dept_id;

RIGHT JOIN

1
2
3
4
-- RIGHT JOIN = INNER JOIN + ANY additional records from the RIGHT TABLE.
SELECT e.emp_name, d.dept_name
FROM employee e
RIGHT JOIN department d ON e.dept_id = d.dept_id;
Read more

220721 ANSI SQL & NON ANSI SQL

ANSI JOIN AND NON-ANSI JOIN


이번 포스팅에서는 ANSI SQL과 NON ANSI SQL의 각기 다른 방식으로 JOIN 쿼리를 작성했을때의 차이점에 대해서 간단하게 포스팅하려고 한다.

ANSI & NON-ANSI SQL

표준 ANSI 방식의 JOIN 쿼리에서는 JOIN 키워드와 ON 절을 사용하여 두 테이블을 합치며, 필터 조건은 WHERE 절에 작성을 해준다.

아래의 쿼리는 department name이 HR 부서인 employee의 이름과 부서 정보를 출력해주는 쿼리이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
-- ANSI
-- JOIN 키워드를 사용해서 ON clause에서 조인되는 조건을 명시했다면 표준 ANSI 방식
SELECT e.emp_name, d.dept_name
FROM employee e
INNER JOIN department d on d.dept_id = e.dept_id
WHERE d.dept_name = 'HR';

-- INNER JOIN에서는 ON 절에 AND 필터 조건을 붙여서 작성해도 결과는 같다.
SELECT e.emp_name, d.dept_name
FROM employee e
INNER JOIN department d ON d.dept_id = e.dept_id AND d.dept_name = 'HR';

-- 하지만, OUTER JOIN에서는 위와같이 ON 절에 필터조건을 거는 경우 문제가 될 수 있다.
1
2
3
4
5
6
-- NON-ANSI
-- JOIN 키워드 대신 ,(comma)를 사용해서 조인 조건을 명시했다면 NON-ANSI 방식
SELECT e.emp_name, d.dept_name
FROM employee e
,department d WHERE d.dept_id = e.dept_id
AND d.dept_name = 'HR';

아래의 쿼리는 모든 employee의 이름과 부서 정보를 출력해주는 쿼리이다.
모든 employee의 정보를 출력해주기 위해서는 department 테이블에 명기된 부서 정보와 matching되지 않은 employee의 정보도 출력해야 되기 때문에 OUTER JOIN을 해서 모든 employee의 정보를 출력해줘야 한다.

Read more

22040523 SQL NL Join / Sort Merge Join / Hash Join에 대한 이해

SQL JOIN


이번 포스팅에서는 이번에 SQLD 자격증 시험 준비를 하면서 새롭게 알게 된 NL Join, Sort Merge Join, Hash Join에 대한 내용을 간략하게 정리하려고 한다.
이번 SQLD 자격증 시험은 단순 자격증 취득 목적이 아닌, 내가 SQL에 대해 이론적으로나 실제 SQL 쿼리의 사용에 대한 이해가 어느정도 되는지 확인하고, 부족한 부분을 확인하고, 부족한 부분은 개인적인 공부를 통해 채워나가기 위해서 준비하게 되었다.

SQLD 시험 공부는 2022/05/09에 시작했으니, 오늘부로 14일(2주)째인데, 데이터 모델링의 이해부터 SQL 활용부분까지 전체적으로 이론공부도 했고, 직접 부분 실습도 해보았다.
공부를 하면서 실제로 내가 잘 알지 못하는 부분에 대한 내용도 알게 되었고, 문제풀이를 통해서 내가 알고 있다고 착각하고 있는 부분에 대해서 다시 복습할 수 있는 좋은 계기가 되었다.
그리고 이전에 SQL 성능 향상을 위한 튜닝에 대한 내용에 대해서 얼핏 들어보았었는데, 시험에서 SQL 최적화 기본 원리에 대한 내용을 통해서 SQL 튜닝이 뭔지, 내가 작성한 SQL 쿼리의 실행계획을 어떻게 확인하고 분석하는지에 대해서 아직 기본적인 내용만 알고 있지만, 대략적으로 어떤 내용인지 알게 되었고, 나중에 직접 SQL 쿼리를 작성하면서 실행계획 부분도 한 번 꼼꼼하게 확인해봐야겠다고 느꼈다.
자 그럼 이번 포스팅에서는 NL Join, Sort Merge Join 그리고 Hash Join에 대해서 한 번 정리해보도록 하겠다.

Read more

220402 SQL Basic-2

SQL

이번 포스팅에서는 SQL의 기초에 대한 내용을 정리하겠다.

SELECT 문의 주요 기능

  • Selection : 질의에 대해 반환하고자하는 테이블의 행을 선택하기 위한 기능
  • projection : 질의에 대해 반환하고자 하는 테이블의 열을 선택하기 위한 기능
  • Join : 공유 테이블 양쪽의 열에 대해 링크를 생성하여 다른 테이블에 저장되어있는 데이터를 결합하여 가져오기 위해 SQL의 조인 기능을 사용

SELECT 절로 할 수 있는 것들

  • 특정 열과 모든 열을 선택
  • 연산자를 사용 +, -, *, /
  • 그룹화
  • Null 값의 처리
  • 별칭 (Alias)
  • 중복 행의 제거 (Distinct) 등

SELECT 문의 기본 문법

SELECT [DISTINCT] 열 이름[as Alias]
FROM 테이블 이름
[WHERE 조건식]
[ORDER BY 열 이름 [ASC OR DESC]];

[] : 선택사항

SELECT 문장 작성 규칙

명령어는 대문자로 작성하고, 나머지는 소문자로 작성하면 가독성이 좋아진다.

Read more

220403 SQL Basic-4

SQL

이번 포스팅에서는 SQL의 기초에 대한 내용을 정리하겠다.

전체 상품의 월별 매출 추이와 스테이크의 월 별 매출 추이 확인(동등 조인, SUBSTR, DECODE 응용)

문제를 해결하기 위해서는 매 달 매출정보전체 매출과 스테이크 매출을 구분할 수 있는 별도의 조건이 필요하다.

데이터 분석을 할때에는 핵심이 되는 부분을 선정해서 그 부분부터 점점 펼쳐나가는 분석기법이 필요하다.

시계열 (Time Series)?

시간의 흐름에 따라 변화를 나타낸 그래프를 시계열 그래프라고 하는데, 시계열 그래프는 시간의 흐름을 보여주기 때문에 시계열이라고 한다.

선 그래프의 사용

선 그래프는 흐름/추이를 확인할 때 매우 유용하게 사용되는 그래프이다.
선 그래프를 그리기 위해서는 JOIN이 필요하다. 가장 중요한 개념이기 때문에 잘 알아둬야 한다.

ERD(Entity Relationship Diagram)?

ERD란 개체(테이블) 간의 관계를 이해하기 쉽게 그림으로 표현 한 것으로 데이터를 조작하고 분석하는 기초자료로 활용한다. 개체 간에는 관계(relation)이 있는데, 이러한 관계는 점선이나 실선으로 표현된 화살표 모양의 선으로 나타낸다.

(1) P (Primary Key) : 기본 키 (=주 키)라고 하며, 기본 키는 데이터를 식별하는 ‘식별자’ 역할을 한다.
(2) U (Unique Key) : 고유 키라고 하며, 행에서 유일한 값을 갖는 데이터 값으로 구성된 열 (유일하게 식별할 수 있는 열이지만, 기본 키가 아닌 값)
(3) F (Foreign Key) : 외래 키(=보조 키)라고 하며, 참조 테이블의 기본 키 또는 고유 키를 참조한다.(다른 테이블과 연결을 위한 열로, 주로 다른 테이블 간의 연결을 위해 주로 다른 테이블의 기본 키를 참조한다.)
(4) 키값이 아닌 열 : P, U, F를 제외한 나머지 열을 말한다.

ERD는 설계도로, ERD를 기반으로 SQL의 논리로직을 작성하게 된다.

Read more

220403 SQL Basic

SQL

이번 포스팅에서는 SQL의 기초에 대한 내용을 정리하겠다.

비교 분석하기

SUM, COUNT, GROUP_BY를 사용하여 총 판매 금액과 총 판매 수량을 비교한다.

판매금액을 구하는 방법,
판매 수량을 구하는 방법,
메뉴 아이템 별로 나누는 방법 (그룹화)

단일행 함수와 그룹 함수

함수?

  • 함수란 어떤 결과를 위해 미리 만들어 놓은 명령어(도구)이다.
  • 함수들은 기본적인 SQL문을 더욱 강력하게 사용할 수 있게 해주며, 데이터 값을 조작하는데 도움을 준다.

SQL함수의 특징

  • 데이터 값을 계산하거나 조작한다.
  • 데이터 값을 조작, 날짜와 숫자 등 데이터 타입을 상호 변환, 행에 대해 조작한다.(단일 행 함수)
  • 행의 그룹에 대해 계산하거나 요약 (그룹함수)

(1) 단일 행 함수 : 문자 함수, 숫자 함수, 날짜 함수, 변환 함수, 일반 함수
(1:1로 값이 mapping되어 수정된다)

데이터 타입의 종류

  • 문자 : CHAR(n) : n크기만큼 고정길이의 문자 타입을 저장 (최대 2000바이트)
  • 문자 : VARCHAR2(n) : n크기만큼 가변 길이의 문자 타입을 저장한다.
    -> 데이터를 관리하고 저장하는데 효율성을 위해서 가변/불가변 데이터 타입을 구분해서 사용한다. 고정 데이터 분석(CHAR)/유연한 데이터 분석(VARCHAR2)
  • 숫자 : NUMBER(p, s) : 수자타입을 저장 (p: 정수, s: 소수 자릿수)
  • 날짜 : DATE : 날짜 타입 : 날짜 타입을 저장 9999년 12월 31일까지 저장
Read more

220404 SQL Basic-1

SQL

이번 포스팅에서는 SQL의 기본적인 부분에 대해서 정리해보려고 한다.

SQL?

SQL(Structured Query Language)의 약어로, RDBMS(관계형 데이터베이스 관리 시스템)을 접근하여 조작할 수 있으며, ANSI 표준을 따른다.

SQL로 할 수 있는 일은?

  • 데이터베이스를 질의(=조회 실행, Query)할 수 있다.
  • 행을 삽입(Insert), 갱신(Update), 삭제(Delete) 할 수 있다.
  • 데이터베이스, 테이블, 프로시져, 뷰 등을 생성(Create)할 수 있으며, 권한을 줄 수 있다.

관계형 데이터 베이스 관리 시스템(RDBMS/Relational Database Management System)?

  • RDBMS는 SQL의 기본이 되는 데이터베이스이다.
  • MY-SQL, ORACLE, DB2, MySQL 등이 대표적인 RDBMS이다.
  • RDBMS는 테이블(Table)이라고 불리는 객체를 갖는다.
  • 테이블(Table)은 행과 열로 구성이 되어있다.

관계형 데이터베이스의 구조

관계형 데이터베이스는 2차원의 테이블관계를 이용한다.

Read more

220402 Mini project 회고 및 정리 - 타이타닉 생존자 예측 데이터 분석

타이타닉

이번 포스팅에서는 학습 16일차에 Kaggle에 있는 타이타닉 생존자예측 dataset을 분석하고, 분석한 dataset을 시각화하는 연습한 내용을 정리하려고 한다.
이번 미니 프로젝트를 통해 얻었던 나 자신에 대한 피드백은 우선 첫 번째 dataset에 대한 사전 분석이 부족했다는 것이다. 그리고 두 번째, DataFrame과 시각화 작업에 대해 연습이 부족하여 작업함에 있어 미숙한 부분이 많았다.

이 피드백을 통해 알게된 개선해야 될 부분에 대해서는 앞으로 차근차근 채워가도록 해야겠다.

타이타닉 생존자 예측 dataset

주어진 dataset은 총 12개의 칼럼과 891개의 행으로 구성되어있다. 즉, 한 사람당 총 12 종류의 정보를 포함하고 있다.
특정 승객의 새존 여부를 알아보려면 survived 항목의 값을 살펴보면 된다. (1:생존)
주어진 test.csv 파일의 구조는 train.csv 파일과 거의 동일하지만, survived 항목이 없다.

1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np # 데이터 분석을 위한 NumPy
import matplotlib.pyplot as plt # 데이터 시각화 라이브러리
import seaborn as sns # 데이터 시각화 라이브러리

train_df = pd.read_csv('train.csv')

print(train_df)
타이타닉

타이타닉 dataset 분석

데이터셋을 시각화하고 결론을 도출해내기 전에는 우선적으로 주어진 dataset에 대한 분석이 필요하다. 이번 미니 프로젝트에서 간과했던 부분이었는데, dataset이 주어졌다면, 우선적으로 주어진 dataset의 columns 구성(df.columns.values),데이터 자료 구성 정보(df.info())를 확인해야한다.

Read more

220402 학습 16일차 자기반성

메타인지

2022년 4월 2일, 퇴사한지는 어느덧 42일차가 되었고, 새롭게 학습을 시작한지는 16일차가 되었다. 그리고 추가적으로 건강관리의 일관으로 시작한 식단조절 및 운동을 한지는 27일차가 되었다.

이번 포스팅에서는 나의 내적으로 좀 의미있는 반성의 시간을 갖으며, 글을 작성해보려고 한다.
반성이 없는 계획과 발전은 의미가 없기 때문에 지난 나의 과거를 다시 되새기고 현재 내가 걱정하는 것을 구체화시켜서 현재의 나를 좀 더 발전시켜 나가고자 한다.

현실적으로 해결할 수 있는 문제와 그렇지 않은 문제

최근 오랜만에 공부를 시작하면서 “내가 의욕이 많이 없구나”라는 것을 느꼈다. 이전에는 새로운 것을 배우면 적용시켜보기 위해 따로 만들어보고 만들어보는 과정을 통해 또 추가적으로 공부를 했었다.
그런데 요즘은 처음 배우는 내용임에도 불구하고, 복습과 시뮬레이션해보는 과정을 따로 하지 않았다.
왜 그랬을까?
이 문제부터 생각에 접근해봐야겠다. 우선 의욕이 없는 이유는 내가 아직도 현실적으로 해결할 수 없는 문제에 대해 신경을 쓰고 있다는 것과 아직도 나 자신에 대한 확신이 부족하기 때문이다.

아무리 주변 경력있으신 분께 조언을 얻으면서 좋은 말씀을 들어도 결국은 현실적으로 해결할 수 있는 부분에 집중해서 현실에 최선을 다하는 것은 내 몫이며 어쩌면 그것이 전부이지 않을까 생각이 된다.

사람마다 각기 무언가를 배우거나 적용하는 방법이 다르듯이, 내가 앞으로 나아가고자 하는 방향에 대해 나 자신이 스스로 찾아보고 부딪히고 체득하면서 나만의 루트를 만들어가는 것이 맞는 것 같다.

내가 알고 있는 것과 모르는 것, 메타인지

내가 알고 있는 것과 모르고 있는 것, 메타인지를 높이기 위한 가장 좋은 방법은 시뮬레이션이라고 한다.
무언가 새로 배웠다면, 내가 진짜 이해를 하고, 스스로 응용을 할 수 있는지 확인하는 과정(시뮬레이션)을 거쳐서 메타인지를 높이는 것이 중요하다.
당장 듣고 바로 적용해보면, 마치 내가 다 이해한 것 마냥 착각을 하고 그 다음 그다음 세션으로 넘어가고, 결국 나중에는 이게 누적이 되서 다시 이전으로 돌아가서 다시 학습을 해야되는 최악의 상황이 온다.
이제부터는 무언가를 학습했다면, 그것을 새롭게 적용시켜보는 과정을 거쳐서 완전한 내것으로 만들어야 한다.

단기 성취를 느낄 수 있는 목표 설정

이번에 퇴사를 하고, 새로운 도메인에 대한 학습을 시작하였다. 혼자서 스스로 학습해야되는 부분이 많고, 그 기간도 상대적으로 길기 때문에 단기적으로 성취감을 느끼면서 계속 동기부여를 얻으면서 앞으로 나아갈 수 있는 목표설정이 필요하다.
그래서 자격증 취득이나 짧게는 하루, 일주일, 한달 단위로 해서 계속 자기 피드백을 받을 수 있도록 목표설정을 하고 나 스스로에 대해 피드백을 해야한다.
지금 이 시점에서 16일이라는 시간이 흘렀지만, 지금부터 다시 제대로 교정하고 다잡아야겠다.
지금 이 습관이 나중에 새로운 회사에 입사해서도 새로운 기술을 습득하고 업무를 함에 있어 좋은 원동력이 될 수 있도록 차근차근 준비해야겠다.

220328 Numpy TIL

Numpy

이번 포스팅에서는 이번에 처음 배워보는 넘파이(Numpy)에 대해서 개념 및 기본 사용법에 대해서 정리해보려고 한다.

넘파이(Numpy)?

1
2
(1) Numpy는 C언어로 구성되었으며, 고성능의 수치계산을 위해 나온 패키지이며, Numerical Python의 약자이다.
(2) Python을 활용한 데이터 분석을 수행할 때, 그리고 데이터 시각화나 전처리를 수행할 때, NumPy는 매우 자주 사용되기 때문에 중요하다.

넘파이의 기본 사용

모듈 Import

1
2
3
import numpy as np

print(np.__version__)
Read more