반응형
LISTAGG([합칠 컬럼명], [구분자]) WITHIN GROUP(ORDER BY [정렬 컬럼명])

LISTAGG함수는 여러행으로 조회되는 것을 한 행으로 합쳐서 보여줄 때 용이하게 사용된다.

때문에 GROUP BY 또는 PARTITION BY 절과 함께 사용된다.

 

 

WITH TEST_DB AS (
SELECT '김철수'AS NM, '101'AS CROOM FROM DUAL
UNION
SELECT '김영수'AS NM, '102'AS CROOM FROM DUAL
UNION
SELECT '김동미'AS NM, '103'AS CROOM FROM DUAL
UNION
SELECT '김슬기'AS NM, '101'AS CROOM FROM DUAL
UNION
SELECT '김지영'AS NM, '102'AS CROOM FROM DUAL
)
SELECT * FROM TEST_DB;

 

 

 

WITH TEST_DB AS (
SELECT '김철수'AS NM, '101'AS CROOM FROM DUAL
UNION
SELECT '김영수'AS NM, '102'AS CROOM FROM DUAL
UNION
SELECT '김동미'AS NM, '103'AS CROOM FROM DUAL
UNION
SELECT '김슬기'AS NM, '101'AS CROOM FROM DUAL
UNION
SELECT '김지영'AS NM, '102'AS CROOM FROM DUAL
)
SELECT CROOM, LISTAGG(NM, ',') WITHIN GROUP(ORDER BY NM) AS NMS
FROM TEST_DB
GROUP BY CROOM;

 

 

반응형
반응형

 

INSTR( [문자열], [찾을문자값], [찾기시작할 위치(1,-1)], [찾은결과순번(1,..n)] )

오라클에서는 문자위치를 찾을때 INSTR함수를 사용한다.

찾는문자가 없으면 0을 반환하며, 찾는 단어의 앞글자의 인덱스를 반환한다.

찾기시작할위치에 음수를 쓰면, 우측부터 스캔한다.

 

 

😊이런경우 사용한다

예를 들어, 조회할 조건이 납부, 미납부, 부분납부가 있다고 가정하자.

납부 FLAG를 1 // 미납 FLAG를 3 // 부분납부 FLAG를 2 로 저장한 테이블이 있다고 가정하였다.

 

이런경우, 납부+부분납부한 경우를 조회하고 싶을때 

INSTR 함수를 이용하여 조회할 수 있다.

 

WITH TEST_DB AS(
SELECT '1' AS FLAG, 'A101' AS 호수 FROM DUAL
UNION
SELECT '2' AS FLAG, 'A201' AS 호수 FROM DUAL
UNION
SELECT '3' AS FLAG, 'A301' AS 호수 FROM DUAL
UNION
SELECT '2' AS FLAG, 'A401' AS 호수 FROM DUAL
UNION
SELECT '3' AS FLAG, 'A501' AS 호수 FROM DUAL
)
SELECT * FROM TEST_DB WHERE INSTR('12', NVL(FLAG,0)) > 0;​

이렇게 조회해볼경우

위와 같은 조회결과를 얻을 수 있다.

 

 

🍯TIP

반응형
반응형

 

데이터 모델링

 * 데이터 모델링이란 ?

   데이터 모델링이란, 조직의 정보 수집과 관리 시스템을 정의하는 시각적 표현 또는 청사진을 생성하는 프로세스입니다.

   현실세계 -> 데이터모델링(추상화, 단순화, 명확화) -> 모델

 

- 특징

   추상화 : 현실세계를 일정한 형식에 맞추어 표현

   단순화 : 복잡한 현실세계를 약속된 규약에 의해 제한된 표기법이나 언어로 표현하여 쉽게 이해할 수 있도록 하는 개념

   명확화 : 애매모호함을 제거하고 정확(正確)하게 현상을 기술

 

- 유의할점

   중복 : 같은 시간 같은 데이터 제공

   비유연성 : 사소한 업무변화에 데이터 모델이 수시로 변경되면 안됨. 데이터 정의 사용

   비일관성 : 데이터 간 상호 연관 관계에 대해 명확히 정의

 

- 제공하는기능

  시스템을 현재 또는 원하는 모습으로 가시화 하도록 도와준다.

  시스템의 구조와 행동을 명세화 할 수 있게 한다.

  시스템을 구축하는 구조화된 틀을 제공한다.

  시스템을 구축하는 과정에서 결정한 것을 문서화한다.

  다양한 영역에 집중하기 위해 다른 영역의 세부 사항은 숨기는 다양한 관점을 제공한다.
  특정 목표에 따라 구체화된 상세 수준의 표현방법을 제공한다.

 

- 좋은 데이터모델이란?

완전성 : 업무에 필요한 모든 데이터가 모델에 정의

중복배제 : 하나의 DB내에 동일한 데이터는 한번만 

업무규칙 : 많은 규칙을 사용자가 공유하도록 제공

데이터 재사용 : 데이터가 독립적으로 설계되어 재사용이 용이하게 함 

의사소통 업무규칙 : 엔터티 서브타입 속성 관계 등의 형태로 최대한 자세히 표현 

통합성 : 동일한 데이터는 한 번만 정의 및 참조

 

- 모델링 3단계 진행

 - 실제 데이터 베이스 구축시 참고되는 모델은 물리적 데이터 모델링.

 - 개념 > 논리 > 물리 로 갈수록 구체적

 - 데이터 모델링의 3가지요소는 Thing, Attributes, Relationship

 - 논리 모델링의 외래키는 물리 모델에서 반드시 구현되지는 않음(선택사항)

 

 * 데이터 독립성이란?

데이터 각 단계별 서로 간섭되지 않는 모델을 제시한다는 의미

- 외부스키마 : View단계에서 여러개의 사용자 관점으로 구성,

                       즉 개개 사용자 단계로서 개개 사용자가 보는 개인적 DB 스키마

                       DB의 개개 사용자나 응용 프로그래머가 접근하는 DB정의 (사용자 관점)

   -> 논리적 독립성 : 개념 스키마가 변경되어도 외부 스키마에는 영향을 미치지 않도록 지원한다. 

                                (즉, 논리적 구조가 변경되어도 응용프로그램에 영향이 없음)

- 개념스키마 : 개념단계 하나의 개념적 스키마로 구성 모든 사용자 관점을 통합한 조직 전체의 DB를 기술하는것

                       모든 응용시스템들이나 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술하는것

                       DB에 저장되는 데이터와 그들간의 관계를 표현하는 스키마 (통합관점)

    -> 물리적 독립성 : 내부스키마가 변경되어도 외부/개념 스키마에는 영향을 받지 않도록 지원한다.

                                  (즉 저장장치의 구조가 변경되어도 응용프로그램과 개념스키마에 영향을 주지 않는다.)

- 내부스키마 : 내부단계, 내부 스키마로 구성. DB가 물리적으로 저장된 형식

                       물리적 장치에서 데이터가 실제적으로 저장되는 방법을 표현하는 스키마 (물리적 저장구조)

 

 

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

엔터티, 관계, 속성으로 이루어진 데이터 모델 표기법

 

- 작업순서

1. 엔터티 그림

2. 엔터티 배치

3. 엔터티 관계설정

4. 관계명 기술

5. 관계의 참여도 기술

6. 관계필수여부 기술

 

- ERD 표기법

ERD 표시방법

 

* 엔터티란?

업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것 (보이지 않는 개념포함)

1. 반드시 해당 업무에서 필요하고 관리하고자 하는 정보

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

3. 두 개 이상의 인스턴스의 집합

4. 업무 프로세스에 의해 이용되어야 함

5. 반드시 속성이 있어야 함

6. 다른 엔터티와 최소 한개 이상의 관계가 있어야 함 (통계성 코드성 엔터티는 관계 생략 가능)

 

-> 한개의 엔터티는 두개 이상의 인스턴스의 집합

    예를 들어 학생이라는 엔터티에는 김철수만 존재하는게 아니라, 김철수 김영희가 존재한다.

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

    예를 들어 학생이라는 엔터티에는 학번이라는 속성 뿐만 아니라, 학번 학년 성별 등 두개이상이 존재한다.

-> 한개의 속성은 한 개의 속성값을 갖는다.

     예를 들어 학생이라는 엔터티의 학번이라는 속성에는 1개의 학번만 존재해야 한다.

 

- 엔터티의 분류

(발생시범에 따른 분류)

기본 / 키 엔터티 : 그 업무에 원래 존재하는 정보 (학생, 학과)

중심엔터티 : 기본 엔터티로 부터 발생 (성적)

행위엔터티 : 2개 이상의 부모 엔터티로 부터 발생 (수강신청이력)

 

(유무형에 따른 분류)

유형 엔터티 : 물리적형태 (학생)

개념 엔터티 : 개념적 정보 (학과)

사건 엔터티 : 업무 수행시 발생 (수강신청)

 

-엔터티 명명규칙

해당 업무에서 사용하는 이름을 부여한다.

약어 사용은 가급적 제한한다.

단수명사를 사용한다.

고유한 이름을 사용한다.

생성의미대로 부여한다.

 

 

*속성이란?

업무에서 필요로 하는 인스턴스로 관리하고자 하는 의미상 분리되지 않는 최소의 데이터 단위

 

- 속성의 특성에 따른 분류

기본속성 : 업무로 부터 추출한 모든 일반적인 속성 (이름, 성별)

설계속성 : 업무를 규칙화하기 위해 새로 만들거나 변형하여 정의한 속성 (학번)

파생속성 : 다른 속성에 영향을 받아 발생한 속성 (학기별 평균성적)

 

- 각 속성은 가질 수 있는 값의 범위가 있는데, 이를 그 속성의 도메인 이라 하며, 엔터티 내에서 속성에 대한 데이터 타입과 크기 그리고 제약사항을 지정하는 것이다.

 

- 속성명명규칙

해당업무에서 사용하는 이름을 부여한다.

서술식 속성명은 사용하지 않는다.

약어 사용은 가급적 제한한다.

전체 데이터 모델에서 유일성을 확보하기 위해 구체적으로 명명한다.

 

 

 

* 관계란 ? 

엔터티 간 논리적인 연관성 을 의미한다.

 

- 관계의 종류

존재에 의한 관계  (학과 -> 학생)

행위에 의한 관계  (학생 -> 수강신청)

 

연관관계 (실선) : 항상 이용하는 관계 

의존관계 (점선) : 상대 행위에 의해 발생하는 관계 

 

ERD에서는 존재적 관계와 행위에 의한 관계를 구분 하지는 않지만, 

클래스다이어그램에서는 이것을 구분하여 연관관계와 의존관계로 표현한다.

 

- 관계의 표기법

관계명 : 관계의 이름

관계 차수 : 1:1, 1:M, M:N

관계 선택 사양 : 필수관계, 선택관계

 

- 관계의 확인 사항

 2개의 엔터티 사이에 관심있는 연관규칙 존재하는가?

 2개의 엔터티 사이에 정보의 조합이 발생하는가?

 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 이는가?

 업무기술서, 장표에 관계연결을 가능케 하는 동사가 있는가?

 

 

* 식별자란?

엔터티 내에서 인스턴스를 구분하는 구분자

 

-특징

유일성 : 주식별자에 의해 모든 인스턴스들이 유일하게 구분된다.

최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.

불변성 : 지정된 주 식별자의 값는 자주 변하지 않는 값이어야 한다.

존재성 : 주식별자가 지정되면 반드시 값이 들어와야 한다.

 

- 식별자 분류

엔터티 내에서 대표성을 가지는 가에 따라 주식별자보조식별자로 나뉨

엔터티 내에서 스스로 생성되었는지 여부에 따라 내부식별자 외부식별자로 구분

단일 속성으로 식별이 되는가에 따라 단일식별자복합식별자로 구분

원래 업무적으로 의미가 있던 식별자 속성을 대체하여 일련번호와 같이 새롭게 만든 식별자를 구분하기 위해 본질식별자인조식별자로 구분

 

 

 

반응형

'ORACLE > SQLD' 카테고리의 다른 글

SQLD 시험후기 (46회)  (0) 2022.09.15
반응형



반응형

+ Recent posts