alt

SQLD 완벽정리 부록편 #ERD해석 #CHAR #VARCHAR비교 #EXISTS #ORACLE #SQLSERVER비교

2026년 11월 9일 공유

데이터 모델링과 SQL·DBMS 비교 강의

개요

ERD 표기법을 해석하는 방법을 살펴보고, 문자형 데이터의 저장·비교 규칙, EXISTS 연산자, 오라클과 SQL Server의 주요 차이를 정리한다.

핵심 개념

  • ERD는 테이블과 속성, 식별자, 관계를 한눈에 파악하기 위한 테이블 설계도다.
  • ERD에서는 관계의 차수, 필수·선택 여부, 식별·비식별 관계를 구분해야 한다.
  • CHAR와 VARCHAR는 공백 저장 및 비교 방식이 다르다.
  • 문자와 숫자를 비교할 때는 숫자형에 맞춘 묵시적 형 변환이 일어날 수 있다.
  • 오라클과 SQL Server는 기본 SQL 문법은 유사하지만, 조인·함수·트랜잭션·DDL 등에서 차이가 있다.

상세 정리

1. ERD 표기법

엔터티와 관계
  • 엔터티는 일반적으로 사각형으로 표현한다. 바커 표기법에서는 원칙적으로 모서리가 둥근 사각형을 사용하기도 한다.
  • 관계의 차수는 1:1, 1:N, N:M으로 나타낸다.
  • IE 표기법은 양쪽의 차수를 표시한다.
  • 바커 표기법은 보통 ‘다(多)’ 쪽에만 차수 기호를 표시하고, ‘1’ 쪽은 별도 표시하지 않는다.
필수성과 선택성
  • 필수 관계: 관련 데이터가 반드시 있어야 한다.
  • 선택 관계: 관련 데이터가 없을 수도 있다.
  • IE 표기법에서는 선택 쪽에 동그라미를 표시한다. 동그라미가 없으면 필수 관계다.
  • 바커 표기법에서는 선택성을 점선으로 표시한다. 점선이 놓인 방향의 반대쪽 엔터티가 선택적이라는 점에 유의한다.
예를 들어 부서와 사원이 1:N 관계이고 사원 쪽이 선택적이면, 부서는 사원이 없어도 존재할 수 있지만 사원이 존재한다면 소속 부서는 반드시 있어야 한다.
식별 관계와 비식별 관계
  • 식별 관계: 한 엔터티의 기본키가 다른 엔터티의 기본키에 포함된다.
  • 비식별 관계: 기본키가 다른 엔터티에 일반 속성으로만 포함된다.
  • IE 표기법은 실선과 점선으로 구분한다.
  • 바커 표기법은 UID 바로 식별 관계를 표시하고, 비식별 관계에는 UID 바를 표시하지 않는다.
  • 부서번호가 사원 엔터티에 일반 속성으로 들어가고 기본키에는 포함되지 않는다면 비식별 관계다.
속성 및 널 허용 여부
  • IE 표기법은 기본키와 일반 속성을 별도 영역에 배치한다. 널 허용 여부는 표기만으로 확인하기 어렵다.
  • 바커 표기법은 기호로 기본키와 일반 속성을 구분하고, 속성의 널 허용 여부도 나타낼 수 있다.

2. CHAR와 VARCHAR의 차이

  • CHAR는 고정 길이 타입이다. 선언된 길이보다 짧은 값은 남는 공간을 공백으로 채워 저장한다.
  • VARCHAR는 입력된 길이만큼 저장한다.
  • 문자열 비교 시 CHAR는 뒤쪽 공백을 무시하는 방식으로 처리될 수 있다. 반면 VARCHAR는 뒤쪽 공백도 값의 일부로 보아 비교한다.
  • 앞쪽 공백은 무시되지 않으므로, 앞에 공백이 들어간 값은 공백 없는 값과 다르게 처리될 수 있다.
  • 문자 정렬 순서는 문자 집합과 데이터베이스 설정에 따라 달라질 수 있다.

3. 문자형과 숫자형의 비교·변환

  • 서로 다른 데이터 타입을 비교하면 묵시적 형 변환이 발생할 수 있다.
  • 문자형과 숫자형을 비교할 때는 일반적으로 숫자형에 맞춰 변환한다.
  • 문자 컬럼에 숫자로 변환할 수 없는 값이 포함되어 있으면 숫자 비교에서 오류가 발생할 수 있다.
  • 문자 컬럼의 값이 모두 숫자로 변환 가능하면 숫자 상수와 비교할 수 있다.
  • 숫자 컬럼과 숫자 형태의 문자 상수를 비교할 때는 문자 상수가 숫자로 변환된다.
  • 타입이 섞인 비교에서 예상치 못한 오류나 성능 문제를 피하려면, 명시적 형 변환과 데이터 타입을 확인하는 것이 좋다.

4. EXISTS와 NOT EXISTS

  • EXISTS는 서브쿼리 조건을 만족하는 행이 있는지 확인한다. 만족하는 행이 있으면 메인 쿼리의 행을 남긴다.
  • 서브쿼리의 SELECT 항목은 존재 여부 판단에 사용되지 않으므로, 보통 SELECT 1 등을 쓴다.
  • NOT EXISTS는 조건을 만족하는 행이 없는 경우를 찾는다.
  • 두 연산자는 다른 테이블에 대응하는 데이터가 있는지 또는 없는지 확인할 때 유용하다.
  • IN도 포함 관계를 표현할 수 있지만, 비교 대상 컬럼을 명확히 지정해야 한다.

5. 오라클과 SQL Server의 주요 차이

조인
  • 오라클은 오라클식 조인과 ANSI 조인을 모두 사용할 수 있다.
  • SQL Server는 ANSI 조인 문법을 사용한다.
  • ANSI 조인에서는 JOIN ... ON에 조인 조건을, WHERE에 일반 조건을 구분해 작성한다.
  • 오라클의 구식 외부 조인에서는 (+)를 사용하지만, ANSI 방식에서는 LEFT JOIN, RIGHT JOIN 등으로 표현한다.
함수와 날짜 처리
  • 널 치환 함수는 오라클에서 NVL, SQL Server에서 ISNULL 등을 사용한다.
  • 문자열 위치·추출 함수는 DBMS별 이름과 인수 방식이 다를 수 있다. 예를 들어 오라클의 SUBSTR와 SQL Server의 SUBSTRING·CHARINDEX를 구분한다.
  • 날짜 변환과 날짜 타입도 차이가 있다. 오라클은 DATE를 사용하고, SQL Server는 DATE, DATETIME 등의 타입과 CAST·CONVERT 등을 사용한다.
빈 문자열과 문자열 길이 초과
  • 오라클은 빈 문자열 ''을 NULL로 처리한다.
  • SQL Server는 빈 문자열과 NULL을 구분한다.
  • 문자열이 컬럼 길이를 초과할 때의 처리 방식도 DBMS 설정과 타입에 따라 다를 수 있다. 입력 전에 길이를 확인해야 한다.
커밋과 트랜잭션
  • 오라클은 DML 작업에 명시적 커밋이 필요한 것이 기본 동작이며, DDL은 실행 시 암묵적 커밋이 발생한다.
  • SQL Server는 기본 설정에 따라 자동 커밋 방식으로 동작할 수 있으며, 여러 작업을 묶어 롤백하려면 명시적으로 트랜잭션을 시작하는 방식이 필요하다.
  • 오라클에서는 DDL 실행 전후의 암묵적 커밋에 주의해야 한다.
별칭·상위 행 조회·DDL
  • 테이블 별칭 및 인라인 뷰 별칭의 작성 규칙은 DBMS별로 차이가 있다.
  • 상위 행 조회는 오라클의 ROWNUM, SQL Server의 TOP 등을 사용할 수 있다. 동순위까지 포함하려면 SQL Server의 TOP ... WITH TIES 같은 기능을 고려한다.
  • 컬럼 수정·이름 변경·기본값 변경 문법도 서로 다르다.
  • 컬럼을 수정할 때 널 허용 여부가 어떻게 유지되는지 DBMS별 규칙을 확인해야 한다. SQL Server에서는 수정 시 NULL 또는 NOT NULL을 명시해야 할 수 있다.
공개 노트 모두 보기