현업의 그 누구도 여러분께 "Item 테이블에 ItemSizeCd가 REG이면서 ItemCat가 BEV인 데이터만 보여주세요." 라고 친절하게 요청하지 않을 겁니다. 우리는 현업의 언어를 이해하기 위해 데이터를 이해해야 합니다.
- StartUP SQL 교육 슬라이드를 책으로 작성 중인 페이지입니다.
- StartUP SQL이란? 데이터 분석가, 개발자, 기획자를 위한 SQL 입문 교육입니다.
- 전체 교육 슬라이드는 무료 오픈되어 있습니다: https://sweetquant.tistory.com/497
데이터 이해하기
SQL을 작성하는 이유는 데이터를 조회하거나 조작(변경, 입력, 삭제)하기 위해서입니다. 간단히 말하면 데이터를 다루기 위해 SQL을 사용합니다. 단지 SQL을 배우는 목적이 아니라 데이터를 다루기 위해 SQL을 배우는 것입니다.
그런데 우리는 우리가 다루어야 할 데이터에 대해 얼마나 알고 있나요?
많은 분들이 SQL만 배우면 취업이 되고 일하는데 문제가 없을거라고 생각합니다.
하지만, 실제 업무를 해보면 SQL 기술보다 중요한 것이 데이터를 아는 것입니다.
은행, 보험, 병원과 같은 특화된 업무일수록 더욱 데이터 이해를 필요로 합니다.
해당 업종의 취업 공고를 보면 경험자를 찾는 것을 어렵지 않게 볼 수 있습니다.
SQL을 활용해 기계적으로 데이터를 추출하는 일은 많은 사람들이 할 수 있습니다.
다른 사람들보다 조금 더 앞서 나가기 위해서는 SQL뿐만 아니라 데이터를 이해해야 합니다.
그리고 데이터를 이해하고 나면, SQL이 더 쉬워집니다.
SQL 교육을 해보면 개발자보다 업무 지식이 있거나, 데이터에 대한 이해가 빠른 사람들이 SQL을 잘 만드는 것을 자주 볼 수 있습니다.
데이터 이해하기 4단계.
바로 앞에서는 테이블 설계, 식별자, PK에 대해 이야기했습니다. 이것들은 데이터 이해를 위해 필요한 아주 기초적인 지식입니다. 이제 본격적으로 데이터 이해를 위해 테이블을 직접적으로 살펴볼 시간입니다.
데이터를 이해하기 위해서는 절대적인 경험과 시간이 필요합니다. 여기서 소개하는 방법으로 데이터를 완벽히 이해할수는 없습니다. 다만, 이 방법들을 통해 데이터와 조금 더 친숙해질 수 있으며, 결국 데이터를 조금 더 빨리 이해하는데 도움이 될 것입니다.
데이터 이해를 위해 아래와 같은 4 단계의 작업을 권장합니다. 순서상 4번을 가장 마지막에 놓았지만 4번은 언제 진행해도 상관없습니다. 1번과 4번을 병행하는 것도 좋은 방법입니다.
- ERD와 실제 데이터 살펴보기.
- ERD에서 관계 테이블 살펴보기
- 코드성 데이터 추적하기
- 자료형 살펴보기
위 4단계로 Item(상품) 데이터를 이해해보도록 하겠습니다.
1. ERD와 실제 데이터 살펴보기 - Item(상품) 테이블
데이터 이해를 위해 가장 먼저 할 일은 아래와 같이, ERD와 실제 저장된 데이터를 조회하는 것입니다.
ERD로 테이블의 각 컬럼이 의미하는 바를 확인하고, 데이터를 통해 각 컬럼별로 어떤 값들이 있는지 살펴봅니다. 그리고 컬럼별로 자신의 생각을 정리합니다. 이것만으로 데이터와 한층더 가까워집니다. 살펴본 내용을 아래와 같이 정리해봅니다.
- ItemId: 상품(Item)을 구별하는 식별자, PK 컬럼이다.
- ItemNm: 상품의 전체 명칭 값이 들어가 있음
- ItemCat: 상품카테고리, COF, BKR과 같은 값이 있음
- 해당 값 들의 의미를 좀 더 조사해볼 필요가 있음
- ItemSizeCd: 상품의 사이즈를 나타내는 코드
- BIG과 REG가 있음, REG는 Regular 같음
- HotColdCd: Hot/Cold 구분을 나타내는 코드. 실제 값도 HOT 아니면 COLD
- LaunchDt: 상품이 출시한 일자
이처럼 자신만의 생각으로 컬럼이 의미하는 바를 정리해보기 바랍니다. 그리고 PK 컬럼이 무엇인지 반드시 기억해두기 바랍니다. PK 컬럼은 나중에 조인에도 자주 사용되며, 데이터를 정확히 처리하기 위해 반드시 필요한 속성입니다.
이와 같은 정리가 틀렸을 수도 있습니다. 틀리더라도 정리를 해보는 것이 중요하며 나중에 틀린 점은 하나씩 바로 잡으면 됩니다. 업무 담당자나 개발자, 선배 등에게 질문이 필요한 내용은 잘 체크해놓고 기회가 있을 때 질문하면 됩니다.
2. ERD에서 관계 테이블 살펴보기
ERD를 살펴보면, Item 테이블과 관계선으로 연결된 테이블을 발견할 수 있습니다. 아래와 같이 Item(상품) 테이블과, ItemCat(상품카테고리), ItemPrcHist(상품가격이력), OrdDet(주문상세) 테이블이 연결되어 있습니다. 이를 통해 Item 테이블이 아래 테이블들과 관련이 있구나 정도만 기억해도 성공입니다.
관계에 대해 정확히 이해하기 위해서는 관계선과 관계차수에 대한 이해가 필요한데, 아직은 이 부분은 이해하지 못해도 괜찮습니다. 안타깝게도 ERD에 이와 같은 관계선 자체가 없는 경우도 실제로 많답니다.
관계 있는 테이블을 하나씩 조회해보면서 데이터를 살펴보며, 어떤 정보가 있는지 살펴봅니다. 이는 나중에 데이터를 확장해서 분석하는데 큰 도움이 됩니다.
테이블을 하나씩 조회하다 보면 ItemCat(상품카테고리) 테이블에 BEV, BKR과 같은 값의 의미가 저장된 것을 알 수 있습니다. 이 값은 Item(상품) 테이블에 ItemCat 컬럼에도 있던 내용입니다. ItemCat 테이블을 통해 BEV가 무엇인지, BKR이 무엇인지 확인할 수 있다는 것을 알 수 있습니다.
SELECT T1.*
FROM startdb.ItemCat T1;
-- 결과
ItemCat ItemCatNm
------- ---------
BEV 음료
BKR 베이커리
COF 커피
3. 코드성 데이터 추적하기
시스템을 설계하면 다양한 코드성 데이터가 정의됩니다.
코드성 데이터는 기준코드(공통코드, 기초코드, 기본코드등 다양한 이름으로 불립니다. 여기서는 기준코드란 이름을 사용하겠습니다.)란 테이블을 만들어 관리하는 것이 일반적입니다.
대부분의 업무 프로세스의 상태나 유형들은 코드화되서 관리되며, 이러한 코드에 따른 값들이 기준코드 테이블 안에 데이터로 관리됩니다.
처음으로 접한 데이터베이스라면 이 기준코드 테이블 명이 무엇인지 빨리 파악해 놓으면 좋습니다.
그리고 중요한 코드 몇 개 외워놓는 것도 앞으로 데이터를 활용하는데 큰 도움이 됩니다.
우리가 실습 중인 데이터베이스에는 BaseCdDv(기준코드구분)와 BaseCd(기준코드) 테이블에 코드성 데이터의 정보가 담겨있습닙다. BaseCdDv는 기준코드의 종류를 정의하기 위한 부모 테이블로, 실제 기준코드에 따른 값은 BaseCd 테이블만 확인하면 됩니다. BaseCdDv와 BaseCd 테이블은 아래와 같은 구조입니다.
우리가 사용 중인 startdb의 테이블들에는 기준코드 사용 규칙이 있습니다. 기준코드로 등록된 값을 가지게 되는 컬럼은, 컬럼명 자체를 기준코드구분(BaseCdDv) 값으로 사용합니다. 그러므로 Item(상품) 테이블에 ItemSizeCd(상품사이즈코드)란 컬럼의 코드 데이터들을 확인하고 싶다면, 아래와 같이 BaseCd 테이블에 BaseCdDv 조건으로 ItemSizeCd를 사용하면 됩니다. 아래 SQL의 결과를 통해 ItemSizeCd에는 BIG과 REG란 코드 값이 있고 그에 따라 언어(LangDvCd)별로 코드 명을 관리하는 것을 알 수 있습니다.
SELECT T1.*
FROM startdb.BaseCd T1
WHERE T1.BaseCdDv = 'ItemSizeCd';
BaseCdDv BaseCd LangDvCd BaseCdNm SortOrder
---------- ------ -------- ------------ ---------
ItemSizeCd BIG EN Big Size 2
ItemSizeCd BIG KR 큰 사이즈 2
ItemSizeCd REG EN Regular Size 1
ItemSizeCd REG KR 기본 사이즈 1
Item(상품) 테이블의 HotColdCd 컬럼에 대한 코드와 한글 코드명만 알고 싶다면 아래와 같이 조회를 해보면 됩니다.
SELECT T1.*
FROM startdb.BaseCd T1
WHERE T1.BaseCdDv = 'HotColdCd'
AND T1.LangDvCd = 'KR';
BaseCdDv BaseCd LangDvCd BaseCdNm SortOrder
--------- ------ -------- -------- ---------
HotColdCd COLD KR 차가운 2
HotColdCd HOT KR 뜨거운 1
이와 같은 데이터를 구성하는 코드 데이터는 데이터를 집계하거나 추출하는 주요 조건으로 자주 사용됩니다. 업무 처리에도 자주 사용되는 조건입니다. 그러므로 주요 코드 데이터 몇 개 정도는 외우고 SQL을 작성하시면 조금 더 편하고 효율적으로 SQL을 작성할 수 있습니다.
4. 자료형 살펴보기
마지막으로 DESC 명령어를 통해 테이블의 자료형을 살펴봅니다. Comment도 같이 보고 싶다면 DESC가 아닌 아래 SQL을 사용해 볼 수 있습니다. 이 과정을 통해 각 컬럼별로 어떤 자료형을 사용하고 있는지 익혀두는 것입니다.
SELECT T1.TABLE_SCHEMA DB ,T1.TABLE_NAME Tab
,T1.COLUMN_NAME Col ,T1.COLUMN_COMMENT Cmt
,T1.ORDINAL_POSITION Pos ,T1.COLUMN_TYPE Typ
,T1.IS_NULLABLE Null_YN ,T1.COLUMN_KEY Ky
FROM INFORMATION_SCHEMA.COLUMNS T1
WHERE T1.TABLE_NAME = 'Item'
AND T1.TABLE_SCHEMA = 'startdb'
ORDER BY pos ASC;
-- 결과
DB Tab Col Cmt Pos Typ Null_YN Ky
------- ---- ---------- ------------------ --- ------------ ------- ---
startdb item ItemId 상품ID 1 varchar(40) NO PRI
startdb item ItemNm 상품명 2 varchar(100) YES
startdb item ItemCat 상품카테고리 3 varchar(40) YES MUL
startdb item ItemSizeCd 상품사이즈코드 4 varchar(40) YES
startdb item HotColdCd 아이스/HOT구분코드 5 varchar(40) YES
startdb item LaunchDt 출시일자 6 date YES
4번 단계는 1단계 과정에서 같이 작업하는 것도 좋습니다. 대부분의 컬럼이 VARCHAR 형태의 문자형 데이터인 것을 알 수 있습니다. 출시일자인 LaunchDt만 DATE 자료형인 것을 인지하고 있으면 될거 같습니다.
네 단계를 거쳐 Item 테이블을 살펴봤습니다. 이 과정을 통해 Item 데이터와 좀 더 가까워졌기 바랍니다.
Item 데이터와 충분이 가까워졌다면, 이제 현업이 아래와 같이 요구하는 것을 알아 들을 수 있을 겁니다.
음료 상품 중에서 레귤러 사이즈의 상품만 보여주세요.
현업의 그 누구도 여러분께 "Item 테이블에 ItemSizeCd가 REG이면서 ItemCat가 BEV인 데이터만 보여주세요." 라고 친절하게 요청하지 않을 겁니다. 우리는 데이터를 이해하고 현업의 언어를 번역해 데이터를 추출하거나 분석해야 합니다.
[StartUP SQL]
- 데이터 분석가, 개발자, 기획자를 위한 SQL 입문 교육
- 교육용 슬라이드 전체 무료 오픈: https://sweetquant.tistory.com/497
'SQL > StartUP SQL(Book-집필중)' 카테고리의 다른 글
[StartUP SQL BOOK]데이터 이해하기 - 식별자와 PRIMARY KEY (0) | 2024.05.16 |
---|---|
[StartUP SQL BOOK]SELECT 기초 - ORDER BY (0) | 2024.05.15 |
[StartUP SQL BOOK]SELECT 기초 - 특수 조건자 (0) | 2024.05.15 |
[StartUP SQL BOOK]SELECT 기초 - 문자의 크기 비교 (0) | 2024.05.14 |
[StartUP SQL BOOK]SELECT 기초 - AND와 OR (0) | 2024.05.13 |
[StartUP SQL BOOK]SELECT 기초 - WHERE 절 사용법 (0) | 2024.05.09 |
[StartUP SQL BOOK]MySQL 테이블 레이아웃 확인하기 (0) | 2024.05.08 |
[StartUP SQL BOOK]MySQL의 DATA TYPE (0) | 2024.05.07 |