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

220528 SQLD 시험후기

새로 개통한 신림선 지하철


SQLD 자격시험 후기

오늘 SQLD 자격시험을 보고 왔다.
마침 고사장이 서울 지방 병무청 근처 성남고등학교였는데, 오늘이 신림선 경전철 노선이 운행을 하게 되는 첫 날이라 보라매역에서 신림선 경전철을 타고 시험을 보고 왔다.
운행 첫 날인데 이용하는 사람들이 생각보다 많았던 것 같다.

자, 이제 시험 이야기로 돌아와서 시험은 객관식 40문제에 주관식 10문제로, 주관식은 평이하게 나왔고, 객관식에서 헷갈리는 문제가 꽤나 많았지만, 전반적으로 풀만한 문제들이 많았다.
이번 시험을 준비하면서 앞으로 SQL 공부를 어떻게 더 해나갈지 방향을 잡는데 도움이 되었던 것 같다. 사실 이번 SQLD 자격시험을 준비하게 된 계기가 기존에 너무 기본적인 SQL지식만 알고 있어서, 나중에 데이터 가공할때 SQL 쿼리문을 많이 사용할텐데 어떻게 하면 앞으로 좀 더 깊이있게 공부 할 수 있을까? 라는 고민에서 시작하게 되었다.

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