SQL 데이터 분석 : 4.6. 실습용 Table Create && Data Type

yeppi1802·2024년 7월 23일

📖 실습용 Table 생성

🔆 hr_employee_attrition 은 35개의 2개의 데이터 타입을 가진 테이블

🔆 현실 DB스럽게 Table을 분리하여 생성해보는 실습

🔆 두 테이블을 엮어줄 Unique Key는?

  • EmployeeNumber키로 결정!

🔆 Table 생성 방법1 : CREATE TABLE → INSERT INTO

  • Table을 생성할 땐 빈 Table을 만들고 데이터를 넣어주기

🔆 Table 생성 방법2 : 원천 테이블이 있는 경우 CREATE TABLE + SELECT QUERY

  • CREATE TABLE을 하며 곧바로 SELECT QUERY 문을 넣어서 입력!

  • 입력한 컬럼 순서대로 생성되는 테이블!
    • Join할 키를 맨 앞에 두면 GOOD
CREATE TABLE hr.hr_number
(
SELECT
PRI_KEY, COL1, COl2....
FROM Source_Table
);

☁️ 기존 존재하는 원천 테이블로부터 새로운 2개의 Mini Table 생성

  • STRING Type을 담고있는 컬럼을 모은 테이블
CREATE TABLE hr.hr_cate
(
EmployeeNumber int(11)
, Attrition VARBINARY(50)
, BusinessTravel VARBINARY(50)
, Department VARBINARY(50)
, EducationField VARBINARY(50)
, Gender VARBINARY(50)
, JobRole VARBINARY(50)
, MaritalStatus VARBINARY(50)
, OverTime VARBINARY(50)
);

  • Data INSERT
INSERT INTO hr.hr_cate
(
	SELECT 
		  EmployeeNumber
		, Attrition
		, BusinessTravel
		, Department
		, EducationField 
		, Gender 
		, JobRole 
		, MaritalStatus 
		, OverTime
	FROM hr.hr_employee_attrition hea
);

☁️ Numeric 테이블

  • 원천 테이블 컬럼명 복사하기

    SELECT *
    FROM hr.hr_employee_attrition hea 
    • 결과 테이블 좌측 상단 우클릭 → Advanced Copy → 컬럼명 복사 선택

    • 다음과 같이 설정 후 확인

      SELECT
      Age, Attrition, BusinessTravel, 
      DailyRate, Department, DistanceFromHome, 
      Education, EducationField, EmployeeCount, 
      EmployeeNumber, EnvironmentSatisfaction, 
      Gender, HourlyRate, JobInvolvement, 
      JobLevel, JobRole, JobSatisfaction, 
      MaritalStatus, MonthlyIncome, MonthlyRate,
      NumCompaniesWorked, Over18, OverTime, 
      PercentSalaryHike, PerformanceRating, 
      RelationshipSatisfaction, StandardHours, 
      StockOptionLevel, TotalWorkingYears, 
      TrainingTimesLastYear, WorkLifeBalance, 
      YearsAtCompany, YearsInCurrentRole, 
      YearsSinceLastPromotion, YearsWithCurrManager
      FROM hr.hr_employee_attrition hea 
  • hr_cate와 겹치는 컬럼 제외하고 CREATE TABLE 생성

CREATE TABLE hr.hr_number
(
SELECT
EmployeeNumber,
Age, DailyRate, DistanceFromHome, 
Education, EmployeeCount, EnvironmentSatisfaction, 
HourlyRate, JobInvolvement, JobLevel, JobSatisfaction, 
MonthlyIncome, MonthlyRate, NumCompaniesWorked,
PercentSalaryHike, PerformanceRating, RelationshipSatisfaction, 
StandardHours, StockOptionLevel, TotalWorkingYears, 
TrainingTimesLastYear, WorkLifeBalance, YearsAtCompany, 
YearsInCurrentRole, YearsSinceLastPromotion, YearsWithCurrManager
FROM hr.hr_employee_attrition hea 
);

☁️ 결과

☁️ 키 값 연결

  • 연결할 테이블을 엔티티 관계도에 drag&drop

  • 연결할 키 값을 다른 키 값 위에 drag&drop

  • 연결 컬럼 맞는지 확인

  • EmployeeNumber를 가상 키로 연결


📖 Data Type에 대한 이해

참고 : mysql datatypes

🔆 Numeric Data - INT

TypeStorage(bytes)Minimum Value SignedMaxmum Value Signed
TINYINT127-2^7(-128)2712^7-1 (127)
SMALLINT2215-2^{15}(-32768)21512^{15}-1(32767)
MEDIUMINT3223-2^{23}(-8388608)22312^{23}-1(8388607)
INT4231-2^{31}(-2147483648)23112^{31}-1(2147483647)
BIGINT8263-2^{63}26312^{63}-1

🔆 Numeric Data - Float

TypeStorage(bytes)연산속도소수점 타입
FLOAT4부동소수점
BOUBLE88부동소수점
DECIMAL16고정소수점

🔆 STRING data

  • ( _ ) 는 띄어쓰기 표현
  • CHAR(n) : n칸을 만들었고, 모든 칸을 다 써야함
  • VARCHAR(n) : n칸을 만들었으나 데이터 공간을 좀더 유연하게 사용 가능
ValueCHAR(4)Storage RequiredVARCHAR(4)Storage Required
‘’‘_ _ _ _‘4 bytes‘‘1 bytes
‘ab’‘ab_ _’4 bytes‘ab’3 bytes
‘abcd’‘abcd’4 bytes‘abcd’5 bytes
‘abcdefgh’‘abcd’4 bytes‘abcd’5 bytes

🔆 SQL DB - 대소문자에 대한 고민

  • Windows : 구분 X

  • Linux : 구분 O

  • MySQL 설정값 확인

    • 0 : 구분 O (대문자 != 소문자)
    • 1 : 구분 X (대문자 = 소문자)
SHOW variables LIKE 'lower%'

🔆 OS 상관없이 대문자 != 소문자 구분을 위해 VARBINARY로 Dtype 세팅

  • VARBINARY : CHAR과 VARCHAR의 차이과 같게 BINARY의 VARCHAR 버전

0개의 댓글