🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • NULL?
  • NULL값을 처리하는 방법들
  • 1. NULL과 산술연산
  • 2. NULL과 비교연산자
  • 3. 집계함수와 NULL
  • 4. NULL과 빈문자열
  • 5. NULL과 논리연산
  • NULL 처리 함수들 - Null Value Logic
  • 1. NVL(값1, 값2)
  • 2. NVL2(값1 , 값2 , 값3)
  • 3. NULLIF(값1, 값2)
  • 4. COALESCE(값1, 값2, 값3, .....)
  1. SQL
  2. SQLD

데이터 모델링의 이해 - NULL

Previous데이터 모델링의 이해 - 정규화NextSQL 기본 및 활용 - WINDOW FUNCTION

Last updated 6 months ago

NULL?

데이터베이스 상에서 NULL은 값이 저장되지 않은 상태를 의미합니다. 오라클 데이터베이스 상에서 모든 자료형에서 사용이 가능하며, 칼럼에 저장된 값이 NULL이라고 함은, 해당 칼럼에 "값이 존재하지 않다" 혹은 "값을 알수없다"와 같은 의미로써 사용됩니다. 여기서 "값이 존재하지 않다"라고 하는 개념은 값이 ''(빈문자열)혹은 0과 같다는 의미가 아닙니다. 실제로 저장된 데이터가 아무것도 없음을 의미합니다.

즉 NULL은 값이 존재하지 않은 상태이기 때문에 정상적인 값들과 동등비교, 대소비교, 산술연산등을 수행할 수 없습니다. 대신 데이터베이스는 특별한 방식으로 NULL값들을 처리하는 방법을 정해 두었습니다.

NULL값을 처리하는 방법들

1. NULL과 산술연산

NULL + 1 , NULL -1 , NULL * 1, NULL / 1등 NULL값과 다른값들 간의 산술연산의 결과는 항상 NULL입니다.

2. NULL과 비교연산자

NULL값은 다른 값들과 비교연산을 수행할 수 없습니다. (=, !=, <> , ^= , > , <, <= , >= ). 따라서 특정 칼럼의 값이 NULL인 행을 찾기 위해선 IS NULL, IS NOT NULL 연산자를 사용하여야 합니다.

3. 집계함수와 NULL

COUNT, SUM과 같은 집계함수 사용시 NULL값은 포함되지 않습니다. 아래 예시 테이블을 구현해 두고 비교해도록 하겠습니다.

A
B

NULL

NULL

2

NULL

1

NULL

SELECT COUNT(A) A의 갯수, COUNT(B) B의 갯수 ,SUM(A) A의 합 , SUM(B) B의 합 FROM TB;

A의 갯수
B의 갯수
A의 합
B의 합

2

0

3

NULL

  • TB테이블에서 A칼럼에 NULL값이 아닌 요소는 2개이므로 2가 반환됩니다.

  • TB테이블에서 B칼럼은 모두 NULL로 이루어져 있으므로 0이 반환됩니다.(0이 기본값)

  • TB테이블에서 A칼럼의 NULL인 요소는 SUM처리에서 제외되었으므로 3이 반환됩니다.

  • TB테이블에서 B칼런은 모두 NULL이므로 SUM처리에서 제외되었으나 NULL값이 기본값이므로 NULL이 반환됩니다.

4. NULL과 빈문자열

NULL값과 빈 문자열('')은 분명 다릅니다. 다만, Oracle에서는 테이블에 데이터를 추가시 빈문자열('')을 추가하데 되면 빈 문자열이 아닌 NULL값이 추가됩니다. (SQL Server, MySql등 기타 dbms에서는 빈문자열이 그대로 들어감)

5. NULL과 논리연산

NULL값은 TRUE, FALSE값과 함께 논리연산에 사용될 때는 알수없음(UNKNOWN)으로 사용이 됩니다. 즉 , 참인지 거짓인지 알수 없다 라는 의미입니다.

SQL에서는 이렇게 논리연산을 할 때 참,거짓, 알수없음 3가지 값으로 논리연산을 수행하며 처리결과는 다음과 같습니다.

AND 연산 샘플

AND 연산자는 두 항중 1개라도 FALSE가 들어가는 경우 결과값이 항상 FALSE입니다.

즉 , NULL AND FALSE와 FALSE AND NULL 모두 결과값이 FALSE입니다.

하지만 두 항 중 한쪽이 TRUE인 경우 반대 항이 TRUE인지 아닌지 확인해야 하는 데요, 이때 TRUE AND NULL 혹은 NULL AND TRUE처럼 NULL값이 들어간 경우 TRUE인지 FALSE인지 알 수 없으므로 결과값도 알수없음(NULL)이 나오게 됩니다.

AND연산
TRUE
FALSE
NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

FALSE

NULL

NULL

FALSE

NULL


OR 연산 샘플

OR연산자는 두 항중 하나라도 TRUE인 경우 결과 값이 항상 TRUE인 연산자입니다. 즉 TRUE OR NULL, NULL OR TRUE등의 비교 연산을 수행 시 결과 값은 항상 TRUE입니다.

하지만 두 항중 한쪽이 FALSE인 경우 나머지 한쪽 항이 TRUE인지 아닌지 확인해 줘야하는데요, 이때 FALSE OR NULL, NULL OR FALSE와 같이 NULL값이 들어간 경우 결과 값도 알수없음(NULL)이 반환됩니다.

AND연산
TRUE
FALSE
NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL

NULL 처리 함수들 - Null Value Logic

TB테이블 샘플

A

NULL

1

2

1. NVL(값1, 값2)

  • 값1이 NULL과 같을 경우 값2를 반환해주며, NULL이 아닐 경우 값1을 그대로 반환하는 함수입니다.

SELECT NVL(A, 0) RESULT FROM TB;

RESULT

0 -> NULL에서 0으로 대체

1

2

2. NVL2(값1 , 값2 , 값3)

  • 값1이 NULL이 아닐 경우 값2를 , NULL일경우 값3을 반환해주는 함수입니다.

SELECT NVL2(A , 100, 0) RESULT FROM TB;

RESULT

0 -> NULL이므로 100 반환

100

100

3. NULLIF(값1, 값2)

  • 값1과 값2가 같으면 NULL을 반환하며, 같지 않다면 값1을 반환해주는 함수입니다.

SELECT NULLIF(A , 1) RESULT FROM TB;

RESULT

NULL -> NULL과 1은 일치하지 않으므로 NULL반환(값1)

NULL -> 1과 1은 일치하므로 NULL반환

2 -> 2와 1은 일치하지 않으므로 2반환(값1)

4. COALESCE(값1, 값2, 값3, .....)

  • 값 1, 2 ,3 ... 들 중 NULL이 아닌 첫번째 요소를 반환해주는 함수

  • SELECT COALSECE(NULL, NULL , 1, 2, 3) FROM DUAL --> 1

  • SELECT COALSECE(NULL, 'AAAA', 1, 2, 3) FROM DUAL --> AAA