SQL - DATA_TYPE

김규린·2024년 8월 23일
0

Data Base

목록 보기
15/20

1. DATA TYPES

  • 여러가지 데이터 유형 지원: 문자열, 숫자, 날짜, 시간
  • 적절한 데이터 유형을 정의하면 데이터 저장 공간을 효율적으로 사용하고 데이터 입력의 유효성 검사에도 도움이 됨

1. 데이터 형식의 종류

1-1. 숫자 데이터 형식

  • 정수 또는 실수 등의 숫자를 표현한다.
  • FLOAT이나 DOUBLE형은 큰 범위의 숫자를 저장할 수 있지만 정확하지 않은 근사치를 저장한다. 따라서 실수 형을 저장하고 싶어도 DECIMAL을 사용하는 것이 바람직하다.

  • INT(INTEGER), BIGINT, FLOAT, DOUBLE 정도만 알아두자

  • 추가로 알아두면 좋을 것

    숫자 앞에 부호가 있는 것 Signed

    숫자 앞에 부호가 없는 것 unsigned

1-2. 문자 데이터 형식

  • CHAR는 고정길이 문자형으로 자릿수가 불변이다.
  • VARCHAR는 가변길이 문자형으로 자릿수가 가변이다.
    (큰 자릿수를 설정해도 저장할 공간을 효율적으로 사용할 수 있다.)
  • CHAR 형식으로 설정하는 것이 INSERT/UPDATE 시에 일반적으로 더 좋은 성능을 발휘한다.
  • 대용량 데이터는 TEXT계열의 데이터 형식으로 저장한다.
  • BLOB(Binary Large Object)은 사진 파일, 동영상 파일, 문서 파일 등의 대용량 이진 데이터를 저장한다. → Binary data
  • ENUM은 열거형 데이터를 사용(요일이나 카테고리 등) 시 활용되는 방식이다.
  • SET은 최대 64개를 준비한 후에 2개씩 세트로 데이터를 저장하는 방식을 사용 시 활용되는 방식이다.
  • LONGTEXT는 대용량 문서 데이터, LONGBLOB은 동영상 파일과 같은 큰 바이너리 파일 저장 시에 활용할 수 있다.

1-3. 날짜와 시간 데이터 형식

1-4. 기타 데이터 형식

  • JSON: 모든 프로그래밍 언어를 통역할 수 있음

2. 형변환

  • SQL 데이터의 형변환에는 명시적 형변환과 암시적 형변환이 있다.
  • 날짜 <-> 숫자 변환은 잘 하지 않음
  • 날짜 <-> 숫자 변환을 하거든 문자를 통해 변환을 한다.

2-1. 명시적 형변환(Explicit Conversion)

  • CAST (expression AS 데이터형식 [(길이)])
  • CONVERT (expression, 데이터형식 [(길이)])
  • 데이터 형식으로 가능한 것은 BINARY, CHAR, DATE, DATETIME, DECIMAL, JSON, SIGNED INTEGER, TIME, UNSIGNED INTEGER 등이 있다.
-- 명시적 형변환
SELECT AVG(menu_price) from tbl_menu;

-- 1) 숫자 -> 숫자
-- 소수점에서 반올림해서 정수까지 변환
SELECT CAST(AVG(menu_price) AS UNSIGNED INTEGER) AS '가격평균' FROM tbl_menu;

-- 소수점 이하 한자리까지 변환
SELECT CAST(AVG(menu_price) AS FLOAT) AS '가격평균' FROM tbl_menu; 

-- 소수점 이하 12자리까지 변환
SELECT CAST(AVG(menu_price) AS DOUBLE) AS '가격평균' FROM tbl_menu;
-- 2) 문자 -> 날짜
-- 2023년 12월 27일을 date형으로 변환
SELECT CAST('2023$12$27' AS DATE);
SELECT CONVERT('2023/12/27', DATE);
SELECT CONVERT('2023-12-27', DATE);
SELECT CONVERT('2023#12#27', DATE);
-- 특수기호 기준으로 날짜를 만듬
-- 3) 숫자 -> 문자
SELECT CONCAT(CAST(1000 AS CHAR), '원');

SELECT CAST(menu_price AS CHAR(5)) FROM tbl_menu; -- 문자로 변환하여 결과 추출
SELECT CONCAT(CAST(menu_price AS CHAR(5)), '원') FROM tbl_menu;-- 앞에 있는 문자와 뒤에 있는 문자 합쳐서 문자로 변환 후 결과 추출

2-2. 암시적 형변환(Implicit Conversion)

  • 따로 처리하지 않아도 내부적으로 자동 형변환이 이루어짐
SELECT '1' + '2';    -- 각 문자가 정수로 변환됨
SELECT CONCAT(menu_price, '원') FROM tbl_menu;    -- menu_price가 문자로 변환됨
SELECT 3 > 'MAY';    -- 문자는 0으로 변환된다.
-- 암시적 형변환
-- 연산자 사용시 자동으로 형변환이 되는데 주의해야 함
SELECT 1 + '2'; -- '2'가 숫자 2로 변환

SELECT '1' + '2'; -- 모든 문자는 산술연산 또는 비교연산을 만나면 0이 된다. 해결하려면 'CONCAT('1' + '2');' 이용하자.

SELECT '안녕' + '하세요'; -- 모든 문자는 산술연산 또는 비교연산을 만나면 0이 된다.

SELECT 5 > '반가워'; -- true의 의미인 1이 변환된다.
profile
나는 할 수 있다...!

0개의 댓글