[코딩 자율학습 14기] SQL 데이터베이스 입문 5장

안지원·2025년 4월 28일

SQL

목록 보기
5/10

5장. 다양한 자료형 활용하기

  • 데이터베이스는 데이터를 보다 효율적으로 저장, 관리하기 위해 다양한 자료형을 제공합니다.

📗 자료형이란

📌 자료형의 개념

  • 자료형이란 데이터의 형태를 말하는 것입니다.
  • 자료형에서 데이터가 가질 수 있는 값의 종류와 그 값이 메모리에서 차지하는 크기를 정의합니다.
  • 앞서 다룬 INTEGER, VARCHAR, DECIMAL, DATETIME 모두 자료형의 한 종류입니다.
  • 자료형은 칼럼에 저장할 수 있는 데이터의 종류와 특성을 결정합니다.
  • 칼럼의 자료형을 잘못 지정하면 메모리를 낭비할 수 있고, 연산에 제약을 받을 수 있습니다.
  • 자료형에 따라서 지원되는 연산이 전부 다르기 때문입니다.
  • 자료형 설정을 잘 해야 저장의 효율성, 데이터 사용의 정확성을 높일수 있습니다.
  • 데이터베이스에서 사용하는 자료형은 크게 숫자형, 문자형, 날짜 및 시간형으로 나뉩니다.

📌 자료형 - 숫자형

  • 숫자형은 숫자를 저장하기 위한 자료형으로 크게 정수형실수형이 있습니다.

🔎 자료형 - 숫자형(정수형)

  • -2, -1, 0, 1, 2 같이 소수점이 없는 숫자를 정수형이라 합니다.
  • 정수형은 메모리에 따라 세부타입이 나뉩니다.

정수형

  • TINYINT(타이니인트)
    - 1Byte 크기의 매우 작은 정수 저장
  • SMALLINT(스몰인트)
    - 2Byte 크기의 작은 정수 저장
  • MIDIUMINT(미디움인트)
    - 3Byte 크기의 중간 정수 저장
  • INTEGER(인티저) 또는 INT(인트)
    - 4Byte 크기의 표준 정수 저장
  • BIGINT(빅인트)
    - 8Byte 크기의 매우 큰 정수 저장

UNSIGNED(언사인드)

  • 정수형을 선언할 때는 다음과 같이 UNSIGNED(언사인드) 제약조건을 붙일 수 있습니다.
  • UNSIGNED는 해당 칼럼에 음수를 허용하지 않고, 0 이상의 정수만 저장하도록 제한하는 기능을 합니다.
CREATE TABLE 테이블명(
	칼럼명 데이터_타입 UNSIGNED
);
  • UNSIGNED로 저장된 값은 음수를 통째로 제외하기 때문에 저장할 수 있는 최댓값이 두배로 증가하게 됩니다.
  • TINYINT의 경우 -128 ~ 127 까지 저장할 수 있지만 UNSIGNED를 붙이면 0 ~ 255 까지 저장할 수 있게 됩니다.
  • 그리고 UNSIGNED는 음수를 제외하기 때문에 물건의 남은 수량을 나타내는 칼럼을 표현할때 사용하면 데이터 안전성을 보장하는데 도움이 됩니다.

🔎 자료형 - 숫자형(실수형)

  • 실수형은 부동 소수점 방식고정 소수점 방식으로 나뉩니다.

부동 소수점 방식(FLOAT, DOUBLE)

  • 실수를 저장하되, 소수점의 위치가 변하는 특징을 가짐
  • 1.234, 12.34, 123.4 와 같이 소수점의 위치가 다른 세 수를 부동 소수점 방식으로 표현하면 다음과 같음
  • 1.234 => 1.234 x 10^0 (가수 : 1.234, 지수 : 0)
  • 12.34 => 12.34 x 10^1 (가수 : 12.34, 지수 : 1)
  • 123.4 => 123.4 x 10^2 (가수 : 123.4, 지수 : 2)
  • 예시에서 볼 수 있듯 부동 소수점 방식은 모든 수를 소수점 위 한 자리까지만 있는 가수로 바꾼지수를 조정해 숫자를 표현함
  • 부동 소수점 자료형은 FLOAT(플로트)DOUBLE(더블)이 있습니다.
  • 부동 소수점을 사용하면 정수형 보다 표현의 범위가 넓다는 장점이 있습니다.
  • 하지만, 부동 소수점은 특정 소수점 이하의 자릿수 숫자를 정확하게 저장하지 못하고, 근삿값으로 저장하는 단점이 있습니다.

고정 소수점 방식

  • 소수점 이하 자릿수가 고정된 실수를 저장
  • 표현할 수 있는 최대 자릿수를 나타내는 정밀도 P소수점 이하 자릿수를 나타내는 스케일 S로 실수를 표현
  • 앞서 잠시 살펴보았던 DECIMAL(P, S)로 소수점을 표현하는 방법이 고정 소수점 방식을 사용한 소수점 자료형을 만드는 방법입니다.
칼럼명 INT DECIMAL(5, 2)
// 최대 길이가 5(P)
// 그 중 소수점의 길이는 2(S)
// 예시 : 123.45
  • 고정 소수점 방식은 전체 자릿수와 소수점 이하 자릿수가 고정돼 있기 때문에 표현할 수 있는 실수의 범위가 제한적입니다.
  • 하지만 정확한 실수 값을 저장할 수 있고 계산 속도도 빨라금융 분야처럼 정확히 계산해야 하는 경우에 많이 쓰입니다.
  • 앞서 설명한 부동 소수점 방식(FLOAT, DOUBLE)와 고정 소수점 방식(DECIMAL) 모두 UNSIGNED 제약조건을 지원하지 않습니다(음수 무조건 포함함).

📖 실습 - 숫자형 사용하기

1. TINYINT, DECIMAL 등을 활용해 테이블 자료형 만들기

2. 테이블 데이터 삽입하기

📌 자료형 - 문자형

  • 문자형은 한글, 영어, 기호, 문자화한 숫자 등을 저장하기 위한 자료형입니다.
  • CHAR, VARCHAR, TEXT, BLOB, ENUM 등의 세부 타입이 있습니다.
  • 이 외에도 MYSql에선 BINARY, VARBINARY, SET 등의 문자형을 제공합니다.(이 글에선 따로 다루진 않겠습니다.)

🔎 자료형 - 문자형(CHAR, VARCHAR)

  • CHAR는 고정 길이의 문자를 저장하는 자료형입니다.

    CHAR

  • 고정 길이의 문자를 저장하는 자료형

  • 지정된 길이만큼의 메모리 공간 차지

  • CHAR(10) => 문자길이 10만큼의 메모리 공간 확보

  • CHAR(10) 자료형에 aaaa를 저장할 시 aaaa__ 이렇게 공백으로 저장

  • 최대 255개의 문자 데이터 저장 가능

  • 우편번호나 국가 코드 등 길이가 일정한 데이터를 저장할때 용이

  • VARCHAR는 가변 길이의 문자를 저장하는 자료형입니다.

    VARCHAR

  • 가변 길이의 문자를 저장하는 자료형

  • 실제 입력한 길이만큼만 메모리 공간을 차지

  • VARCHAR(500)은 최대 500만큼의 문자까지 저장 가능

  • 하지만 a를 저장하면 a 하나만 저장(공백 저장 안함)

  • 최대 65,535개의 문자 데이터 저장 가능

  • 길이가 일정하지 않은 문자열을 저장할때 용이

🔎 자료형 - 문자형(TEXT)

  • TEXT는 긴 문자열을 저장하기 위한 자료형입니다.

TEXT

  • 긴 문자열을 저장하기 위한 자료형
  • 주로 VARCHAR가 저장할 수 있는 문자열보다 더 긴 문자열을 저장할 때 사용
  • 지정할 수 있는 최대 크기에 따라 텍스트 타입이 다름
  • TINYTEXT
    - 255Byte 까지 저장 가능
  • TEXT
    - 약 64KB까지 저장 가능
  • MEDIUMTEXT
    - 약 16MB까지 저장 가능
  • LONGTEXT
    - 약 4GB까지 저장 가능

🔎 자료형 - 문자형(BLOB)

  • BLOB(Binary Large OBject)은 크기가 큰 파일을 저장하기 위한 자료형입니다.
  • 이미지, 오디오, 비디오 파일 등을 저장할 때 사용되는 자료형입니다.

BLOB

  • 크기가 큰 파일을 저장하기 위한 자료형
  • 이미지, 오디오, 비디오 파일 등을 저장할 때 사용
  • 저장할 수 있는 최대 크기에 따라 블롭 타입이 다름
  • TINYBLOB
    - 최대 255Byte 까지 저장 가능
  • BLOB
    - 약 64KB 까지 저장 가능
  • MEDIUMBLOB
    - 약 16MB 까지 저장 가능
  • LARGEBLOB
    - 약 4GB까지 저장 가능

🔎 자료형 - 문자형(ENUM)

  • ENUM은 주어진 목록 중 하나만 선택해 입력할 수 있는 자료형입니다.
  • 예를 들어 특정 칼럼의 자료형을 ENUM('bronze', 'silver', 'gold')라고 선언했다면 이 칼럼에선 'bronze', 'silver', 'gold' 3가지 값만 저장할 수 있습니다.
  • ENUM을 통해 입력 가능한 목록을 제한함으로서 잘못된 입력을 예방할 수 있습니다.
ENUM('bronze', 'silver', 'gold')

📖 실습 - 문자형 사용하기

  1. VARCHAR, CHAR, TEXT, BLOB, ENUM을 포함한 테이블 만들기
  2. 테이블 데이터 삽입하기

📌 자료형 - 날짜 및 시간형

  • 날짜 및 시간형은 말 그대로 날짜와 시간 값을 저장하기 위한 자료형입니다.
  • DATE, TIME, DATETIME, YEAR의 세부 타입이 있습니다.

DATE

  • 날짜를 저장하기 위한 자료형
  • YYYY-MM-DD 형식으로 날짜를 지정
  • DATE 날짜의 유효범위는 1000-01-01 부터 9999-12-31까지

TIME

  • 시간을 저장하기 위한 자료형
  • hh:mm:ss 형식으로 시간을 저장
  • TIME의 유효범위는 -838:59:59 부터 838:59:59까지
  • 추가옵션에 따라 밀리초, 마이크로초 까지 저장 가능

DATETIME

  • 날짜와 시간을 함께 저장하기 위한 자료형
  • YYYY-MM-DD hh:mm:ss 형식으로 날짜와 시간을 저장
  • DATETIME의 유효범위는 1000-01-01 00:00:00 부터 9999-12-31 23:59:59까지
  • 추가옵션에 따라 밀리초, 마이크로초 까지 저장 가능

YEAR

  • 4자리 연도를 저장하기 위한 자료형
  • YEAR에 저장할 수 있는 연도의 유효 범위는 1901 부터 2155까지
  • 연도를 알 수 없는 경우에 0000도 YEAR로 저장 가능

📖 실습 - 날짜 및 시간형 사용하기

  1. DATE, TIME, DATETIME, YEAR 사용해서 테이블 만들기

  2. 테이블에 데이터 삽입하기

📖 실습 - 자료형 활용한 데이터셋 만들기

  • 앞서 배운 타입들을 활용해 데이터셋을 만들어봅시다,
  • 그.. 깃허브 같은데에 코드좀 공유해주시면 안될까요.. 시간을 너무 잡아먹습니다.

📌 문자열 필터링하기 - LIKE연산자

  • LIKE연산자는 칼럼 값이 특정 패턴과 완전히 일치하거나 특정 패턴을 포함하는지 확인할 때 사용합니다.
select *
from 테이블명
where 칼럼명 like 찾는패턴;
  • 이 like 키워드를 사용할때 자세한 조건을 명시하고 싶다면 와일드 카드 라는 기호들을 사용해야 합니다.

와일드 카드

  • % : 0개 또는 그 이상의 임의의 문자
    - %조건명 : 조건명으로 시작하는 칼럼
    • 조건명% : 조건명으로 끝나는 칼럼
    • %조건명% : 조건명을 포함하는 칼럼
  • : 엄격하게 글자수와 조건을 정함
    - 조건명
    : 조건명을 앞에 포함하는 4글자
    • _조건명 : 조건명을 뒤에 포함하는 4글자
    • 조건 : 조건을 2번째, 3번째에 포함하는 4글자
    • _ : 한 글자
    • __ : 두 글자
    • _ : 다섯 글자
  • 예를 들어 위에서 만든 order 테이블에서 케첩이라는 글자를 포함한 이름을 가진 튜플을 찾고싶다면
  • 국내로 시작하는 세글자를 포함한 이름을 가진 튜플을 찾고싶다면

📌 날짜 필터링하기 - month집계함수

  • 11월에 주문한 상품의 합을 구해보세요
  • month 집계함수를 사용하면 DATE나 DATETIME 객체의 달을 뽑아낼 수 있습니다.

📌 시간 필터링하기 - 시간 집계함수

  • 오전에 주문받은 매출의 합계를 구해봅시다
  • 시간 함수는 다음과 같습니다.

시간 함수

  • HOUR(시간) : 시간
  • MINUITE(시간) : 분
  • SECONDS(시간) : 초
  • TIME_TO_SEC(시간) : 시, 분, 초를 초로 환산

  • 가격이 몇개 잘못설정됐나봅니당

📌 특정범위 필터링하기 - BETWEEN 연산자

  • 상품 가격이 10,000원부터 20,000원 사이에 있는 주문을 조회해봅시다.
  • 특정 범위를 만족하는 튜플을 찾는 연산자는 BETWEEN을 사용하면 됩니다.
SELECT *
FROM 테이블명
WHERE 칼럼명 BETWEEN 시작_값 AND 마지막_값;

  • 2024년 11월 15일부터 2024년 12월 15일까지 받은 주문 개수의 합계를 구해봅시다.
  • 테이블값을 잘못 넣었나봅니당

📖 셀프체크

  • 아까 만들었던 orders 테이블을 활용해 문제를 풀어보세요
    1. 상품명이 '국내산'으로 시작하는 주문의 개수를 구하세요.

    2. 주문 수량이 2~4개인 상품의 평균 가격을 구하세요.

    3. 11월 주문 중 11월 20일 이후에 들어온 주문의 개수를 구하세요.

    4. 상품명에 부피 단위인 'ml' 또는 'l'가 포함된 주문을 모두 조회하세요.

    5. 10월과 12월에 들어온 주문의 개수를 구하세요(11월은 미포함)

  • 수량(quantity)를 구하는게 아니라 갯수(count(*))를 구하는거였네요🥲

profile
frontend개발자가 되기 위해 노력합니다.

0개의 댓글