SQLD - 명시적(Explicit) 형변환과 암시적(Implicit) 형변환

헨도·2024년 2월 8일
0

SQLD

목록 보기
19/28
post-thumbnail
  • 형변환 이라는 것은 두 개의 데이터의 데이터 타입(형)이 일치하도록 변환하는 것이다.
  • 예를 들어 숫자와 문자열의 비교, 문자열과 날짜형의 비교와 같이 데이터 타입이 불일치할 때 발생한다.
  • 형 변환은 명시적(Explicit) 형변환과 암시적(Implicit) 형변환이 있다.
  • 명시적 형변환은 형변환 함수를 사용해서 데이터 타입을 일치시키는 것으로 개발자가 SQL을 사용할 때 형변환 함수를 사용해야 한다.

형변환 함수

형변환 함수설명
TO_NUMBER(문자열)문자열을 숫자로 변환한다.
TO_CHAR(숫자 혹은 날짜.[FORMAT])숫자 혹은 날짜를 지정된 FORMAT의 문자로 변환한다.
TO_DATE(문자열, FORMAT)문자열을 지정된 FORMAT의 날짜형으로 변환한다.
  • 암시적 형변환은 개발자가 형변환을 하지 않은 경우 데이터베이스 관리 시스템이 자동으로 형변환하는 것을 의미한다.

인덱스 컬럼에 형변환을 수행하면 인덱스를 사용하지 못한다.

  • 인덱스는 데이터를 빠르게 조회하기 위해서 인덱스 키를 기준으로 정렬해 놓은 데이터이다.
  • 그런데 인덱스는 기본적으로 변형이라는 것이 발생하면 인덱스를 사용할 수 없다. 물론 예외적인 것도 있다.
  • 따라서 인덱스가 있어도 인덱스 컬럼에 형변환이 발생하면 인덱스를 사용할 수 없다.
SELECT *
FROM EMP
WHERE
	(1) EMPNO = (2) '100';

(1) EMP 테이블을 생성할 때 숫자형 데이터 타입으로 생성했다.
(2) 문자형 데이터 타입 '100'이다. 따라서 암시적 형변환이 발생한다.

  • EMPNO 컬럼은 숫자형 타입이고 기본키이므로 자동으로 인덱스가 있다.
  • 하지만 암시적 형변환으로 TO_CHAR(EMPNO)로 변환되므로 인덱스를 사용할 수 없다.
  • 이와 같은 문제는 명시적 형변환을 사용하면 된다.
  • 즉, WHERE EMPNO = TO_NUMBER('100')으로 하면 EMPNO 컬럼이 변환되지 않아서 인덱스를 사용할 수 있다.

문제

다음 중 형변환에 대한 설명으로 올바르지 않은 것은?
(1) TO_NUMBER() 함수는 문자열을 숫자로 변환한다.
(2) TO_CHAR 함수는 숫자형과 날짜형을 문자로 변환한다.
(3) TO_DATE 함수는 문자열을 날짜형으로 변환한다.
(4) 명시적 형변환은 형변환 함수를 사용하지 않고 데이터베이스 관리 시스템에서 내부적으로 형변환을 수행한다.

정답 : (4)

  • 암시적 형변환은 SQL 개발자가 형변환을 수행하지 않았을 경우 데이터베이스 관리 시스템이 내부적으로 형변환을 수행하는 것이고 명시적 형변환은 SQL 개발자가 형변환 함수를 사용해서 형변환을 수행하는 것이다.
profile
Junior Backend Developer

0개의 댓글