티스토리 뷰

SQL/SQLD 준비

SQLD - 총 정리

CodingTrader 2025. 5. 28. 15:49
728x90

1 과목 - 데이터 모델링의 이해, 정리

 

모델링

- 비즈니스 프로세스와 데이터 요구 사항을 추상적이고, 구조화 된 형태로 표현하는 과정

- 데이터 베이스의 구조와 관계를 정의, 이를 통해 데이터의 저장, 조작, 관리 방법을 명확하게 정의

 

모델링의 특징

1. 단순화 : 현실 세계를 이해하고, 표현하기 쉽게 핵심 요소에 집중하고, 불필요한 세부 사항을 제거

 

2. 추상화 : 다양한 현상을 일정한 형식에 맞추어 간략하게 표현하는 과정

 

3. 명확화 : 의사소통을 원활하게 하기 위해 애매모호함을 최대한 제거하고, 정확하게 현상을 기술하는 과정 

 

데이터 모델링 3가지 관점

1. 데이터 관점

- 데이터가 어떻게 저장되고, 접근되고, 관리되는지 정의하는 단계

 

2. 프로세스 관점

- 시스템이 어떤 작업을 수행하며, 이러한 작업들이 어떻게 조직되고 조정되는지를 정의하는 단계

- 데이터가 시스템 내에서 어떻게 흐르고 변환되는지에 대한 확인

 

3. 데이터와 프로세스 관점

- 데이터 관점 + 프로세스 관점 시스템의 전반적인 동작을 이해하는 단계

- 특정 프로세스가 어떤 데이터를 사용하는지, 데이터가 어떻게 생성되고 변경되는지를 명확하게 정의

 

데이터 모델링 유의점

1. 중복

- 한 테이블 또는 여러 테이블에 같은 정보를 저장하지 않도록 설계

 

2. 비유연성

- 사소한 업무 변화에 대해서도 잦은 모델 변경이 되지 않도록 주의

- 데이터 정의를 프로세스와 분리

 

3. 비일관성

- 데이터베이스 내의 정보가 모순되거나 상반된 내용을 갖는 상태를 의미

- 데이터간 상호연관 관계를 명확히 정의

- 데이터 품질 관리 필요

- 데이터의 중복이 없더라도 비일관성은 발생할 수 있음

 

데이터 모델링 3가지 요소

- 대상(Entity) : 업무가 관리하고자 하는 대상 ( 객체 )

- 속성(Attribute) : 대상들이 갖는 속성 ( 하나의 특징으로 정의될 수 있는 것 )

- 관계(Relationship) : 대상들 간의 관계

 

데이터 모델링의 3단계

1. 개념적 모델링

- 업무 중심적이고 포괄적인 수준의 모델링

- 추상화 수준이 가장 높음

- 업무를 분석 뒤 업무의 핵심 엔터티를 추출하는 단계

- 도출된 핵심 엔터티들과의 관계를 표현하기 위해 ERD 작성

 

2. 논리적 모델링

- 개념적 모델링의 결과를 토대로 세부속성, 식별자, 관계를 표현하는 단계

- 데이터의 구조를 정의하기 때문에 비슷한 업무나 프로젝트에서 동일한 형태의 데이터 사용

- 동일한 논리적 모델을 사용하는 경우 쿼리도 재사용 가능

- 데이터 정규화 수행

- 재사용성이 높은 논리적 모델은 유지보수가 용이해짐

 

3. 물리적 모델링

- 논리 모델링이 끝나면 이를 직접 물리적으로 생성하는 과정

- 데이터베이스 성능, 디스크 저장구조, 하드웨어의 보안성, 가용성 등을 고려

- 가장 구체적인 데이터 모델링이기 때문에 추상화 수준은 가장 낮음

 

개념적 모델링  ---> 논리적 모델링 ---> 물리적 모델링 

 

핵심 엔터티 추출/ ERD 작성 > 세부속성, 식별자, 관계를 표현, 데이터 정규화 > 물리적으로 생성 추상화 수준은 가장 낮음(가장 구체적인 모델링)

 

스키마의 3단계 구조

- 스키마 : 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합

- 개념, 외부, 내부 스키마로 분리

- 사용자의 관점과 실제 설계된 물리적인 방식을 분리하기 위해 고안됨

 

1. 외부 스키마

- 사용자가 보는 관점에서 데이터베이스 스키마를 정의

- 사용자나 응용 프로그램이 필요한 데이터를 정의 ( View : 사용자가 접근하는 대상)

 

2. 내부 스키마

- 데이터가 물리적으로 어떻게 저장되는지를 정의

- 데이터의 저장 구조, 컬럼, 인덱스 등을 정의함

 

3. 개념 스키마

- 사용자 관점의 데이터베이스 스키마를 통합하여 데이터베이스의 전체 논리적 구조를 정의

- 전체 데이터베이스의 개체, 속성, 관계, 데이터 타입 등을 정의

 

스키마의 독립성

- 독립성 : 물리적, 논리적 구조를 변경하더라도 사용자가 사용하는 응용 프로그램에 영향을 주지 않는다

1) 논리적 독립성 : 논리적 데이터 구조가 변경되어도( 개념 스키마 변경 ) 응용 프로그램에 영향을 주지 않는다.

2) 물리적 독립성 : 물리적 구조가 변경되어도 ( 내부 스키마 변경 ) 개념/외부 스키마에 영향을 주지 않는 특성

 

데이터 모델의 표기법 (ERD)

- 엔터티와 엔터티 간의 관계를 시각적으로 표현한 다이어그램

- 피터 첸이 만든 표기법, 데이터 모델링 표준으로 사용

 

ERD 작성 절차 6단계

엔터티 도출 후 / 그림 >> 배치 >> 관계를 설정 >> 관계명을 서술 >> 관계의 참여도 기술 >> 관계의 필수 여부 확인

 

엔터티

- 현실 세계에서 독립적으로 식별 가능한 객체나 사물을 나타냄

- 엔터티는 업무상 분석해야 하는 대상( 인스턴스 )들로 이루어진 집합

- 인스턴스는 엔터티의 특정한 속성 값들로 구성되며, 엔터티의 개념을 현실에서 구체적으로 나타낸 것

예시) 엔터티와 속성, 인스턴스 등의 관계

 

엔터티 : 학생  -------- 테이블

속성 : 학번, 이름, 학과 등등...  ---------- 행, COL

식별자 : 학번 ( 고유한 학번으로 각 학생을 식별 ) -------- PK

인스턴스 : 특정 학생의 데이터 - 학번 이름 학과 ---------- 열 ROW

 

엔터티의 특징

1. 유일한 식별자에 의해 식별 가능

- 인스턴스가 식별자에 의해 한 개씩만 존재하는지 검증 필요

- 유일한 식별자는 그 엔터티의 인스턴스만의 고유 이름

 

2. 해당 업무에 필요하고, 관리하고자 하는 정보

- 설계하는 업무의 시스템 구축에 필요한 정보

 

3. 인스턴스들의 집합

- 영속적으로 존재하는 2개 이상의 인스턴스의 집합

- 인스턴스가 한 개 밖에 없는 엔터티는 집합이 아니므로 성립이 안됨

 

4. 엔터티는 반드시 속성을 가짐

- 각 엔터티는 2개 이상의 속성을 가짐

- 하나의 인스턴스는 각각의 속성들에 대한 1개의 속성 값만 가짐

 

5. 엔터티는 업무 프로세스에 의해 이용

- 업무적으로 필요해 선정했지만, 실제 사용되지 않으면 잘못 설계된 것

- 모델링 시 발견하기 어려운 경우 데이터 모델 검증이나 상관 모델링 시 단위 프로세스 교차점검으로 문제 도출

- 누락된 프로세스의 경우 추후 해당 프로세스 추가

- 반대로 사용되지 않은 고립 엔터티는 제거 필요

 

6. 다른 엔터티와 최소 1개 이상의 관계 성립

- 엔터티는 업무적 연관서을 갖고 다른 엔터티와 연관의 의미를 가짐

- 관계가 없는 엔터티 도출은 부적절한 엔터티이거나 적절한 관계를 찾지 못한것

 

엔터티의 분류

1) 유형과 무형에 따른 분류

유형엔터티

- 물리적 형태가 있음 ( 실체가 있는 대상 )

- 안정적이며 지속적으로 활용되는 엔터티

- 업무로부터 구분하기가 가장 용이한 엔터티 - ( 사원, 물품 등등...)

 

개념엔터티

- 물리적인 형태 없음

- 관리해야 할 개념적 정보로 부터 구분되는 엔터티 - ( 조직, 보험상품 등등.. )

 

사건엔터티

- 업무를 수행에 따라 발생하는 엔터티

- 발생량이 많고 각종 통계자료에 이용 - ( 주문, 청구, 미납 등등... )

 

2) 발생 시점에 따른 분류

기본엔터티

- 그 업무에 원래 존재하는 정보

- 다른 엔터티와 관계에 의해 생성되지 않고, 독립적으로 생성

- 타 엔터티의 부모 역할을 하는 엔터티

- 다른 엔터티로부터 주 식별자를 상속받지 않고 자신의 고유한 주식별자를 가짐 - (Ex) 사원 부서 고객 상품

 

중심엔터티

- 기본엔터티로 부터 발생되고 그 업무에서 중심적인 역할

- 많은 데이터가 발생되고 다른 엔터티와의 관계를 통해 많은 행위 엔터티를 생성 - (Ex) 계약 사고 청구 주문 매출

 

행위엔터티

- 2개 이상의 부모엔터티로부터 발생

- 자주 내용이 바뀌거나 데이터 양이 증가

- 분석 초기 단계보다는 상세 설계 단계나, 프로세스와 상관 모델링을 진행하면서 도출 - (Ex) 주문 - 고객과 상품 엔터티로 부터 발생하므로, 행위엔터티이기도 함, 사원변경이력, 이력 등등..

 

엔터티의 명명

단수 명사 사용

모든 엔터티에서 유일하게 이름 부여, 생성 의미대로 이름 부여

 

엔터티와 인스턴스 표기법

- 엔터티는 사각형으로 표현, 속성은 조금 다름

 

 

[Baker 표기법] 인스턴스 이름 앞에 #을 붙임

과목

#과목이름

 

속성의 개념

- 속성은 업무에서 필요로 하는 고유한 성질, 특징을 의미 ( 관찰 대상 ) => 컬럼으로 표현할 수 있는 단위!

- 업무상 인스턴스로 관리하고자 하는 더 이상 분리되지 않는 최소의 데이터 단위

- 인스턴스의 구성 요소 (Ex) 학생 엔터티에 이름, 학번, 학과번호 등이 속성이 될 수 있음

 

엔터티, 인스턴스, 속성, 속성값의 관계

- 한 개의 엔터티는 2개 이상의 인스턴스 집합이여야 한다 - ( 하나의 테이블에 인스턴스가 1개인 경우 집합으로 인정이 안됨 )

- 한 개의 엔터티는 2개 이상의 속성을 갖는다.

- 한 개의 속성은 1개의 속성값을 갖는다 - ( 각 컬럼의 값은 하나씩만 삽입 가능 )

- 속성은 엔터티에 대한 자세하고 구체적인 정보를 나타냄, 각 속성은 구체적인 값을 가짐

 

속성의 특징

- 반드시 해당 업무에서 필요하고, 관리하고자 하는 정보여야 한다.

- 정해진 주식별자에 함수적 종속성을 가져야 한다.

- 하나의 속성은 한 개의 값만을 가진다. ( 한 컬럼의 값은 각 인스턴스 마다 하나씩만 저장)

- 하나의 속성에 여러 개의 값이 있는 다중값일 경우 별도의 엔터티를 이용하여 분리한다.

- 하나의 인스턴스는 속성마다 반드시 하나의 속성값을 가진다 => 각 속성의 하나의 값을 갖고 있음을 의미 ( 속성의 원자성 )

 

원자성

- 데이터모델에서 각 엔터티의 인스턴스가 해당 속성에 대해 단일하고 명확한 값을 가지는 것을 의미

 

함수의 종속성

- 한 속성의 값이 다른 속성의 값에 종속적인 관계를 갖는 특징을 말함

- 즉, 어떤 속성 A의 값에 의해 다른 속성 B도 유일하게 결정된다면, B는 A에 함수적으로 종속됐다.

A -> B  라고 표현

 

1) 완전 함수적 종속

- 특정 컬럼이 기본키에 대해 완전히 종속될 때를 말함

- PK를 구성하는 컬럼이 2개 이상일 경우 PK 값 모두에 의한 종속 관계를 나타낼 때, 완전 함수 종속성 만족 ( 주문번호 + 제품번호 ) 에 의해 수량 컬럼의 값이 결정됨

 

2) 부분 함수적 종속

- 기본키 전체가 아니라, 기본키 일부에 대해 종속될 때를 말함 ( 학생번호, 과목이 PK라고 가정할 때, 과목에 의해 교수가 결정되면 부분 함수적 종속 )

 

-- PK가 2개 이상일 때, PK 값 모두 연관되서 특정 컬럼의 값이 결정되면, 완전 함수적 / PK 값들 중에서 하나에 연관되어 컬럼의 값이 결정되면 부분 함수적

 

속성의 분류

1) 속성의 특성에 따른 분류

1. 기본 속성

- 업무로 부터 추출된 모든 속성

- 엔터티에 가장 일반적으로 많이 존재하는 속성 ( 원금, 예치기간 )

 

2. 설계 속성

- 기본 속성 외에 업무를 규칙화하기 위해 새로 만들어지거나 기본 속성을 변형하여 만들어지는 속성 ( 상품코드, 지점코드, 예금분류 )

 

3. 파생 속성

- 다른 속성에 의해 만들어지는 속성

- 일반적으로 계산된 값들이 해당

- 데이터 정합성을 유지하기 위해 가급적 적게 정의하는 것이 좋음 ( 합계, 평균, 이자 등 )

 

2) 엔터티 구성방식에 따른 분류

1. PK ( 기본키 )

- 인스턴스를 식별할 수 있는 속성

 

2. FK ( 외래키 )

- 다른 엔터티와의 관계에서 포함된 속성

 

3. 일반 속성

- 엔터티에 포함되어 있고 PK, FK에 포함되지 않는 속성

 

3) 분해 여부에 따른 속성

1. 단일 속성

- 하나의 의미로 구성된 경우 ( 회원 ID, 이름 )

 

2. 복합 속성

- 여러개의 의미로 구성된 경우 ( 주소 - 시 구 동 등으로 분해 가능 )

 

3. 다중값 속성

- 속성에 여러 값을 가질 수 있는 경우

- 다중값 속성은 엔터티로 분해 ( 상품 리스트 )

 

속성의 명명규칙

- 약어의 사용은 가급적 제한

- 업무에서 사용하는 이름 부여 

- 서술식 속성명은 사용하지 않음

- 전체 데이터 모델에서 유일한 명칭

 

도메인 

- 도메인은 각 속성이 가질 수 있는 값의 범위를 의미함

- 엔터티 내에서 속성에 대한 데이터 타입과 크기, 제약사항을 지정하는 것

 

관계(Relationship)의 개념

- 관계는 엔터티간의 연관성을 나타낸 개념

- 관계를 정의할 때는 인스턴스간의 논리적인 연관성을 파악하며 정의

- 엔터티를 어떻게 정의하느냐에 따라 변경되기도 함

 

관계의 종류

1) 존재적 관계

- 한 엔터티의 존재가 다른 엔터티의 존재에 영향을 미치는 관계

- 엔터티 간의 연관된 상태를 의미 ( 부서 엔터티가 삭제되면, 사원 엔터티에 영향을 미침 )

 

2) 행위적 관계

- 엔터티 간의 어떤 행위가 있는 것을 의미 ( 고객 엔터티의 행동에 의해 주문 엔터티가 발생 )

 

- ERD에서는 1,2 를 구분하지 않는다.

 

관계의 구성

1. 관계명

2. 차수

3. 선택성

 

관계의 차수

- 한 엔터티의 인스턴스가 다른 엔터티의 인스턴스와 어떻게 연결되는지를 나타내는 표현

- 주로 1:1, 1:N, N:M 등으로 표현

 

1) 1 대 1 관계

완전 1 대 1

- 하나의 엔터티에 관계되는 엔터티가 반드시 하나로 존재하는 경우 ( 사원은 반드시 소속 부서가 있어야 함 )

 

선택적 1 대 1

- 하나의 엔터티에 관계되는 엔터티가 하나이거나 없을 수 있는 경우 ( 사원은 하나의 소속 부서가 있거나 아직 발령 전이면 없을 수 있음 )

 

2) 1 대 N 관계

- 엔터티에 하나의 행에 다른 엔터티의 값이 여러 개 있는 관계 ( 고객은 여러 계좌를 소유할 수 있음 )

 

3) M 대 N 관계

- 두 엔터티가 다대다의 연결 관계를 가지고 있음

- 이 경우 조인 시 카테시안 곱이 발생하므로 두 엔터티를 연결하는 연결엔터티의 추가로 1 대 N 관계로 해소할 필요가 있음

( 한 학생이 여러 강의를 수강할 수 있고, 한 강의 기준으로도 여러 학생이 보유할 수 있음 )

 

관계의 페어링

- 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것

- 관계란 페어링의 집합을 의미

 

관계와 차수, 페어링의 차이

 

차수 : 하나의 엔터티와 다른 엔터티 간의 연결 방식

페어링 : 두 엔터티 간의 특정 연결을 설명하고 추가 정보를 제공

 

식별자 개념

- 하나의 엔터티에 구성된 여러 개의 속성 중에서 엔터티를 대표할 수 있는 속성을 나타냄

- 하나의 유일한 식별자가 존재해야 함

- 식별자는 논리 모델링에서 사용하는 용어, 물리 모델링에서는 키라고 표현

 

주식별자 특징

1. 유일성 : 주식별자에 의해 모든 인스턴스를 유일하게 구분함 (학생 엔터티에서 이름 속성은 동명이인이 발생할 수 있으므로 학생번호와 같은 유일한 식별자를 주식별자로 사용)

 

2. 최소성 : 주식별자를 구성하는 속성은 유일성을 만족하는 최소한의 속성으로 구성 ( 주식별자는 학생번호 + 이름 등등... 2개 이상으로 구성할 필요 없음 )

 

3.불변성 : 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함 ( 학생번호가 때에 따라 변경되어선 안됨 )

 

4. 존재성 : 주식별자가 지정되면 반드시 값이 존재해야 하며, NULL은 허용 X

 

식별자 분류

주식별자

- 유일성과 최소성을 만족하며, 엔터티를 대표하는 식별자

- 엔터티 내에서 각 인스턴스를 유일하게 구분할 수 있는 식별자

- 타 엔터티와 참조관계를 연결할 수 있는 식별자

 

보조식별자

- 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자지만, 대표성을 가지지 못해 참조 관계 연결을 할 수 없는 식별자

- 유일성과 최소성은 만족하지만, 대표성을 만족하지 못하는 식별자

 

내부식별자

- 다른 엔터티 참조 없이 엔터티 내부에서 스스로 생성되는 식별자

 

외부식별자

- 다른 엔터티와 관계로 인하여 만들어지는 식별자 ( FK )

 

단일식별자

- 하나의 속성으로 구성

 

복합식별자

- 2개 이상의 속성으로 구성

 

본질식별자( 원조식별자 )

- 비지니스 프로세스에서 만들어지는 식별자

 

인조식별자

- 인위적으로 만들어지는 식별자

- 자동 증가하는 일련번호 같은 형태

 

관계간 엔터티 구분

1) 강한 개체

- 독립적으로 존재할 수 있는 엔터티 ( 고객과 계좌 엔터티 중 고객은 독립적으로 존재 할 수 있음 )

 

2) 약한 개체

- 독립적으로 존재할 수 없는 엔터티 ( 계좌는 독립적으로 존재할 수 없음 고객에 의해 파생되는 엔터티 )

 

식별 관계와 비식별관계

1) 식별관계

- 하나의 엔터티의 기본키를 다른 엔터티가 기본키의 하나로 공유하는 관계

- 식별관계는 ERD에서 실선으로 표시

 

2) 비식별관계

- 강한 개체의 기본키를 다른 엔터티의 기본키가 아닌 일반 속성으로 관계를 가지는 것

- 비식별관계는 ERD에서 점선으로 표시 ( 부서와 사원의 관계에서 부서의 부서번호 기본키를 사원 엔터티에서는 일반키로 가짐 사원번호가 기본키 )

 

기본키

- 엔터티를 대표할 수 있는 키

 

후보키

- 유일성과 최소성을 만족하는 키

- 결국 후보키를 중 하나가 기본키가 되고, 나머지를 대체키라고 부름

 

슈퍼키

- 유일성은 만족하지만 최소성은 만족하지 않는 키 ( 학번 + 이름으로 구성되면 슈퍼키 )

 

대체키

- 여러 후보키 중 기본키가 아닌 키

 

외래키

- 다른 테이블의 기본키를 참조하는 키 ( 다른 테이블의 기본키에 존재하는 값만 입력될 수 있는 키 )

- 참조 테이블은 하나 또는 여러개 가능

 

정규화 개념

- 최소한의 데이터만을 하나의 엔터티에 넣는식으로 데이터를 분해하는 과정

- 데이터의 중복을 제거하고, 모델의 독립성을 확보

- 데이터의 이상현상을 줄이기 위한 데이터베이스 설계 기법

- 엔터티를 상세화 하는 과정으로 논리 데이터 모델링 수행 시점에서 고려됨

- 1~5까지 존재하지만, 실질적으로 3정규화 까지만 수행

 

이상현상

- 정규화를 하지 않아 발생하는 현상

 

삽입이상

- 특정 인스턴스가 삽입 될 때, 정의하지 않아도 될 속성까지도 반드시 입력되어야 하는 현상

 

삭제이상

- 특정 정보만 삭제하면 되는데 관련된 다른 정보까지도 함께 삭제되는 현상

 

정규화 단계

1. 제 1정규화 ( 1NF )

- 컬럼이 원자성 한 속성이 하나의 값을 갖는 특성을 갖도록 테이블을 분해하는 단계

2. 제 2정규화 ( 2NF )

- 제 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만들도록 테이블을 분해

- 기본키를 구성하는 모든 컬러므이 값이 다른 컬럼을 결정짓는 상태

- 기본키의 부분 집합이 다른 컬럼과 1:1 대응 관계를 갖지 않는 상태를 의미

- 즉 PK가 2개 이상일 때, PK의 일부와 종속되는 관계가 있다면 분리

 

3. 제 3정규화 ( 3NF )

- 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리

A >> B >> C  A가 C의 결과를 결정이 성립 A, B / B, C

 

 

반정규화 ( 역정규화 )

- 데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고, 조인을 줄이는 데이터베이스 성능 향상 방법

- SELECT 속도 향상, 데이터 모델의 유연성은 낮아짐

- 정규화를 수행하지 않음

 

반정규화 수행 케이스

- 정규화에 충실하여 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우

- 요약/집계 정보가 자주 요구되는 경우

- 특정 범위의 데이터만 자주 처리하는 경우

- 다량의 범위를 자주 처리해야하는 경우

 

관계의 개념

- 엔터티의 인스턴스 사이의 논리적인 연관성

- 관게를 맺는다는 의미는 부모의 식별자를 자식에게 상속하고, 상속된 속성을 조인키 ( 매핑키 )로 활용 > 부모 자식을 연결

 

관계의 분류

- 존재 관계는 엔터티 간의 상태를 의미 (EX 사원 엔터티는 부서 엔터티에 소속)  

- 행위 관계는 엔터티 간의 어떤 행위가 있는 것을 의미 ( EX 주문은 고객이 주문할 때 발생 )

 

트랜잭션

- 하나의 연속적인 업무 단위

- 트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐

 

계좌이체 할 떄, 입금과 출금의 작업이 동시에 수행되어야 함 >> 두 작업이 모두 성공하거나, 모두 취소되어야 함

INSERT X , 부분 COMMIT  X, 동시 COMMIT, ROLLBACK

 

NULL

- DBMS 에서 아직 정해지지 않은 값을 의미

- 0 / ' ' 빈 문자열 과는 다른 개념

 

NULL을 포함한 연산 결과는 항상 NULL이기 때문에 NULL을 치환 한 후 계산해줘야 한다.

 

그룹 함수는 NULL을 제외하고 연산을 수행

- SUM, AVG, MIN, MAX 등 그룹 함수는 항상 NULL을 무시하고 연산

- COUNT는 일반적으로 NULL이 아닌 값의 수만 세지만, COUNT ( * )는 NULL 여부와 상관 없이 모든 행의 수를 리턴

 

GROUP BY 그룹화 할 때, 대상 그룹에 NULL이 껴 있으면 NULL을 기준으로 그룹핑 해준다.

 

식별자 구분

1) 본질식별자

- 업무에 의해 만들어지는 식별자 ( 꼭 필요 )

 

2) 인조식별자

- 꼭 필요하진 않지만, 관리의 편의성 등의 이유로 인위적으로 만들어지는 식별자

 

인조식별자의 단점

- 중복 데이터 발생으로 데이터 품질 저하

- 불필요한 인덱스 생성으로 저장공간 낭비와 DML 성능 저하

 

----------------------------------------------------------------------------------------------------------------------------------------------

 

2과목 - SQL 기본

관계형 데이터베이스 특징

- 데이터의 분류, 정렬, 탐색, 속도가 빠름

- 신뢰성이 높고, 데이터 무결성 보장

- 기존에 작성된 스키마를 수정하기 어려움

- 데이터베이스의 부하를 분석하는 것이 어려움

 

데이터 무결성

- 데이터의 정확성과 일관성을 유지하고, 데이터에 결손과 부정합이 없음을 보증하는 것

- 저장된 값과, 현실의 비즈니스 모델의 값이 일치하는 정확성, 데이터 무결성을 유지하는 것이 DBMS의 중요한 기능

 

데이터 무결성 종류

1. 개체 무결성 : 테이블의 기본키를 구성하는 컬럼은 NULL 값이나, 중복 값을 가질 수 없음

2. 참조 무결성 : 외래키 값은 NULL 이거나 참조 테이블의 기본키 값과 동일해야 한다. ( 외래키란 참조 테이블의 기본 키에 정의된 데이터만 허용하는 구조)

3. 도메인 무결성 : 주어진 속성 값이 정의된 도메인에 속한 값 이어야 함

4. NULL 무결성 : 특정 속성에 대해 NULL을 허용하지 않는 것이 특징

5. 고유 무결성 : 특정 속성에 대해, 값이 중복되지 않는 것이 특징

6 키 무결성  : 하나의 관계에는 적어도 하나의 키가 존재해야 함 ( 테이블이 서로 관계를 가질 경우 반드시 하나 이상의 조인키를 가짐 )

 

SQL

- 관계형 데이터베이스에서 데이터 조회, 조작, DBMS 시스템 관리 기능을 명령하는 언어

 

DDL ( Definition ) :  데이터 정의 ( CREATE, ALTER, DROP, TRUNCATE )

DML ( Manipulation ) : 데이터 조작 ( INSERT, DELETE, UPDATE, MERGE )

DCL ( Control ) : 데이터 제어 언어 ( GRANT, REVOKE )

TCL ( Transaction Control ) : 트랜젝션 제어 언어 ( COMMIT, ROLLBACK )

DQL ( Query ) : SELECT

 

SQL 동작 순서

 

FROM >> WHERE >> GROUP BY >> HAVING >> SELECT >> ORDER BY

 

연산자 우선 순위

 

NOT >> AND >> OR

 

ORDER BY가 제일 마지막에 오기 때문에, SELECT 문에서 AS를 사용한 별칭을 사용해서 결과 값 오름차순,내림차순 변경 가능

 

AS

- 이미 존재하는 예약어 ( AVG, SUM, SELECT, FROM 등등.... ) 사용 불가

- 공백이나 특수 문자가 들어가야하는 경우, " " 를 사용해서 구분해줘야 함

 

FROM

- 뒤에 테이블 명, 뷰 명 전달

- 테이블을 여러 개 컴마로 구분해서 전달 >> 조인 조건이 없이 테이블 명만 나열하면, 카타시안 곱 발생 주

 

문자함수 종류

LOWER(str) 문자열을 소문자로

UPPER(str) 문자열을 대문자로

SUBSTR(str,m,n) 문자열 중 m 위치에서 n개의 문자열 추출 (n 생략 시 끝까지 추출 m이 음수일 경우 뒤에서 m번째 부터 오른쪽 n개의 문자열)

INSTR(str, 찾을문자열, m, n) 찾을 문자열 위치 반환 ( m 위치에서 시작 n번째 발견된 문자열 위치)

LTRIM(str, 삭제문자열) 문자열 중 특정 문자열을 왼쪽에서 삭제

RTRIM(str,삭제문자열) 문자열 중 ''' 오른쪽에서 삭제

TRIM (str) 특정 문자열을 양쪽에서 삭제

LPAD(str, n, 문자열) 대상 왼쪽에 문자열을 추가하여 총 n의 길이 리턴

RPAD(str, n, 문자열) 대상 오른쪽에 ''

CONCAT(str1, str2) str1 + str2

LENGTH(str) 문자열 길이

REPLACE(str, 찾을 문자열, 바꿀 문자열) 문자열 치환 및 삭제

TRANSLATE(str, 찾을 문자열, 바꿀 문자열) 글자를 1:1로 치환

 

숫자함수

ABS() 절대값 반환

ROUND(int, N) 소수점 특정 자리 N 에서 반올림 N이 음수면 정수자리에서 반올림

TRUNC(int, N) 소수점 특정 자리에서 버림

SIGN(int) 숫자가 양수면 1 음수면 -1 0이면 0반환

FLOOR(int) 작거나 같은 최대 정수 리턴

CEIL(int) 크거나 같은 최소 정수 리턴

MOD(int1, int2) int1을 int2로 나누어 나머지 반환

POWER(int1, int2) int1의 int2 거듭제곱 int1^int2

SQRT(int) 루트값 리턴

 

그룹함수

- 여러 값이 input 값으로 들어가서 하나의 요약된 값으로 리턴

- count, sum, avg, min, max, variance 분삭, stddev 표준편차 - ( NULL을 무시하고 연산)

 

일반함수

DECODE( Col, 10, '인사부', 20, '재무부') - Col 값이 10이면, 인사부 20이면 재무부

 

NULL 값 처리 함수

NVL( Col, 0 ) - Col 값이 Null일 경우 0으로 치환하여 리턴

NVL2( Col, a, b ) - Col 값이 Null 이면, b로 Null이 아니면 a로 치환하여 리턴

ISNULL( Col, A ) - Col 값이 Null 이면, A를 리턴

COALESCE( Col1, Col2, A, B, ......) - Col1 이 NULL 이면, Col2 를 비교 Col2도 Null 이면, A 비교, NULL 값이 아닌 값이 나올 때, 해당 값을 리턴

 

NULLIF( Col , A ) - Col 의 값과 A 의 값이 같으면 Null을 리턴하고, 값이 다르면 Col 값을 반환

Null 값을 치환하기 위한 목적이 아닌, A 값과 일치하는 대상을 Null로 치환하기 위해서 사용되는 함수

 

ORACLE은 FULL OUTER JOIN이 존재하지 않기 떄문에

LEFT/RIGHT OUTER JOIN 각각 결과를 구해서 두 결과를 UNION 해서 출력

 

UNION - 중복되는 컬럼 제거

UNION ALL - 중복되는 컬럼도 출력

 

ORACLE JOIN 표준은 WHERE 절에 조인 조건을 작성하므로 특정 조인을 기술하지 않음

WHERE 절에서 기준이 되는 테이블에 반대 되는 테이블 조건 컬럼 뒤에 (+)를 붙임

 

EX)

FROM S, P

WHERE S.COL = P.COL (+)

기준인 S 테이블에 P 테이블을 더한다. >> 왼쪽 테이블이 기준이니까 LEFT OUTER JOIN 형태

 

 

 

 

 

내용 출처:  Youtube 홍쌤의 데이터랩 2025개정 SQLD 1과목 완벽 정리 https://www.youtube.com/watch?v=xmkaOqbTQRE&t=4500s

 

 

728x90

'SQL > SQLD 준비' 카테고리의 다른 글

SQLD - 2과목 SQL 기본  (0) 2025.05.15
SQLD 1과목 - 데이터 모델링의 이해 정리  (0) 2025.05.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함
250x250