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을 명시해야 할 수 있다.