WorkHard/자격증

[SQLD 개발자] 기출문제 공부(38회)

코딩공대 2023. 3. 10. 23:34
728x90

1.  데이터베이스 논리모델?

  • 논리적 모델은 비즈니스 정보의 논리적 구조 및 구축을 파악할 수도 있다.
    즉, 핵심 Entity와 키 Entity들을 식별하고 모델링하여 데이터베이스 구조를 모델링한다.


2. ERD에 대한 설명?

  • 이용내역 Entity에서 "이용일자 + 사원번호 가 기본키(PK)이므로 일자가 같은 날에 여러 콘도를 이용할 수 없다"

  • 사원, 이용내역(1 : M) -> 1명의 사원은 이용내역이 있을수도 있고 없을수도 있다.

  • 콘도이용정보, 이용 내역(1 : 0 or 1 : 1) : M -> 콘도 이용정보가 있을수도 있고 없을수도 있으며 콘도 이용정보가 이용내역에 있을수도 있고 없을수도 있다.

3. 릴레이션을 정규화(Normalization)하는 목적?

  • 정규화는 함수적 종속성에 따라서 테이블을 분해하는 과정으로 데이터 중복을 제거해서 모델의 독립성을 향상시킨다.

  • 정규화를 수행하지 않으면 발생되는 문제가 갱신이상 삽입, 삭제, 수정이다.

  • 데이터베이스 보안과 관련이 있는 것은 뷰(View)이다.

4. Entity, 관계, 속성?

  • 엔티티의 특징
    • 식별자 : 엔티티는 유일한 식별자가 있어야 한다.

    • 인스턴스 집합 : 2개 이상의 인스턴스가 있어야 한다.

    • 속성 : 엔티티는 반드시 속성을 가지고 있다.

    • 관계 : 엔티티는 다른 엔티티와 최소 한 개 이상 관계가 있어야 한다. 엔티티의 관계 -> 집합과 집합간의 관계.

    • 업무 : 엔티티는 업무에서 관리되어야 하는 집합이다.

  • 엔티티의 종류
    • 독립 엔티티(Kernel Entity, Master Entity) : 사람, 물건, 장소 등과 같이 현실세계에 존재하는 엔티티.

    • 업무중심 엔티티(Transaction Entity) : Transaction이 실행되면서 발생하는 엔티티.

    • 종속 엔티티(Dependent Entity) : 주로 1차 정규화로 인해 관련 중심엔티티로부터 분리된 엔티티.

    • 교차 엔티티(Intersaction Entity) : (M : M)의 관계를 해소하려는 목적으로 만들어진 엔티티.

  • 유형, 무형 엔티티 종류
    • 유형 엔티티 : 업무에서 도출되며 지속적으로 사용되는 엔티티.

    • 개념 엔티티 : 개념적으로 사용되는 엔티티, 유형 엔티티는 물리적으로 형태가 있지만, 개념 엔티티는 물리적 형태가 없다.

    • 사건 엔티티 : 비즈니스 프로세스를 실행하면서 생성되는 엔티티.

  • 발생시점에 따른 엔티티 종류
    • 기본 엔티티(Basic Entity) : 다른 엔티티로부터 영향을 받지 않고 독립적으로 생성되는 엔티티, 키 엔티티(Key Entity)라고도 한다.

    • 중심 엔티티(Main Entity) : 기본 엔티티와 행위 엔티티 간의 중간에 있는 엔티티, 기본 엔티티로부터 발생되고 행위 엔티티를 생성하는 엔티티.

    • 행위 엔티티(Active Entity) : 2개 이상의 엔티티로부터 발생하는 엔티티, 지속적으로 정보가 추가되고 변경되는 엔티티

5. ERD에 대한 설명?

  • 상품은 주문을 한 개 이상 반드시 가져야 하는 것이 아니라 안 가질 수도 있다.

  • ERD 식별관계에서 O은 '있을수도 있고, 없을수도 있다'라는 의미를 가진다.

6. 알맞은 ERD 표기법은?

  • ERD 표기법 중 IE 표기법은 관계의 1 : N 관계에서 N쪽에 새발을 표시하고 선택, 필수 참여관계에서 선택 참여(or)에 O,필수 참여에 | 로 표시한다.

7. 어떤 주식별자의 특징인가?

  • 같은 학년은 입학 날짜가 모두 같게 생성되기 때문에 뒤에 같은 값이 붙음으로써 최소의 수가 아니므로 잘못된 모델링이다.

  • 식별자의 특징
    • 유일성 : 주식별자에 의해 엔티티내에 모든 인스턴스들이 유일하게 구분되어야 한다.

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

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

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

  • 식별자의 분류
    • 대표성 여부
       - 주식별자 : 엔티티 내에서 각 행을 구분할 수 있는 구분자이며, 타 엔티티와 참조관계를 연결할 수 있는 식별자이다.
       - 보조식별자 : 엔티티 내에서 각 행을 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못한다.

    • 스스로 생성여부
       - 내부식별자 : 인티티 내부에서 스스로 만들어지는 식별자이다.
       - 외부식별자 : 타 엔티티와의 관계를 통해 타 엔티티로부터 받아오는 식별자이다.

    • 속성의 수
       - 단일식별자 : 하나의 속성으로 구성된 식별자이다.
       - 복합식별자 : 둘 이상의 속성으로 구성된 식별자이다.

    • 대체여부
       - 본질식별자 : 업무(비지니스)에 의해 말들어지는 식별자이다.
       - 인조식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자이다.

8. SQL 문의 결과?

  • CONNECT BY -> 계층형 쿼리는 데이터를 선택하여 계층적인 순서 그대로 리턴하는데 사용된다.

  • 현재 행과 다른 행은 PRIOR라는 키워드를 통해 구별된다.
    PRIOR는 상위 행을 참조 하는 것으로 위의 SQL문에서는 '방금 전 행의 COL2 값이 현재 행의 COL1 값인 모든 행을 찾아라' 라는 의미이다.

  • WHERE 절에 COL3이 3인행은 제외 -> COL3 이 4인것부터 시작 -> CONNECT BY COL1 = PRIOR COL2

    COL1          COL2          COL3
       D                B                 4
       A              NULL            1
       B                A                 2                 이렇게 총 3개이다.

9. JOIN의 설명?(자주 보는 문제 보고 또 보고😛)

  • 중첩 반복 조인(Nested Loop Join)
    • 좁은 범위에 유리하다.

    • 유리 순차적으로 처리하며, Random Access 위주이다.

    • 후행(Driven) 테이블에는 조인을 위한 인덱스가 생성되어 있어야 한다.

    • 실행속도 = 선행 테이블 사이즈 * 후행 테이블 접근횟수

  • 색인된 중첩 반복 조인, 단일 반복 조인(Single Loop Join)
    • 후행(Driven) 테이블의 조인 속성에 인덱스가 존재할 경우 사용한다.

    • 선행 테이블의 각 레코드들에 대하여 후행 테이블의 인덱스 접근 구조를 사용하여 직접 검색 후 조인하는 방식이다.

  • 정렬 합병 조인(Sort Merge Join)
    • Sort Merge Join은 해당 테이블의 인덱스가 없을 때 수행이 된다.

    • 테이블을 정렬(Sort)한 후에 정렬된 테이블을 병합(Merge)하면서 조인을 실행한다.

    • 조인 연결고리의 비교 연산자가 범위 연산(>, <)인 경우 Nested Loop Join보다 유리하다.

    • 두 결과 집합의 크기가 차이가 많이 나는 경우에는 비효율적이다.

  • 해시 조인(Hash Join)
    • 해시 함수를 사용하여 두 테이블의 자료를 결합하는 조인 방식이다.

    • Nested Loop Join, Sort Merge Join의 문제점을 해결한다.

    • 대용량 테이터 처리는 상당히 큰 Hash Area를 필요로 함으로, 메모리의 지나친 사용으로 오버헤드 발생 가능성이 있다.

10. SQL명령어?

  • DDL(데이터 정의어) : CREATE, DROP, MODIFY(ORACLE), ALTER(SQL SERVER), RENAME, TRUNCATE

  • DML(데이터 조작어) : SELECT, INSERT, DELETE, UPDATE

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

  • TCL(트랜잭션 제어어) : COMMIT, ROLLBACK, SAVE POINT

11. SQL 문의 빈칸에 맞는것은?

  • DNAME, JOB별 소계 -> DNAME별 소계 -> JOB별 소계 -> 전체 집계

  • ROLLUP
    • 전체 합계와 소그룹 간의 소계를 계산하는 ROLLUP 함수

    • GROUP BY ROLLUP(DEPTNO)
      -> DEPTNO 합계(소계), 전체 합계를 조회
  • CUBE
    • CUBE는 제시한 컬럼에 대해서 결합 가능한 모든 집계를 계산한다.

    • 다차원 집계를 제공하여 다양하게 데이터를 분석할 수 있다.

    • GROUP BY CUBE(DEPTNO, JOB)
      -> DEPTNO 합계, JOB 합계, DEPTNO & JOB 합계, 전체 합계를 조회
      -> 조합할 수 있는 모든 경우의 수가 조합된다.(시스템에 부하를 많이 주는 단점이 있다.)

  • GROUPING SET
    • 원하는 부분의 소계만 손쉽게 추출하여 계산할 수 있는 GROUPING SETS함수

12. PL / SQL?

  • PL / SQL은 절차형 언어로 PL / SQL 내부에서 테이블을 생성할 수 있다.
  • PL / SQL 내부에서 테이블을 생성하는 이유는 임시 테이블로 잠깐 사용하기 위한 용도가 많다.

  • PL / SQL에서 조건문은 IF ~ THEN ~ ELSE IF ~ END IF와 CASE ~ WHEN을 사용한다.

  • PL / SQL에서 NAME이라는 변수에 'aaa'를 대입할 경우 ":="을 사용한다.

13. 인덱스 생성 구문?

  • 인덱스 생성 / 삭제 구문
    • 생성 : CREATE INDEX 인덱스명 ON 테이블명(속성명 등등)

    • 삭제 : DROP INDEX 인덱스명 ON 테이블명
  • 인덱스 수정
    • 수정 : 인덱스 삭제 후 다시 만들어주는 방법을 사용해야 한다.

  • 인덱스 조회
    • SELECT 테이블명, 인덱스명, 컬럼명
      FROM ALL_IND_COLUMNS
      WHERE TABLE_NAME = '테이블명'

 


14. 사원이 한명도 없는 부서(DEPTNO)를 검색하는 질의를 작성했을때, 거리가 먼 것은?

  • <>(같지 않은), ANY(다수의 비교값 중 하나라도 만족하면 TRUE)이다.

  • EMP 테이블에 DEPTNO(10, 20, 30), DEPT 테이블에 DEPTNO(10, 20, 30, 40) 라는 데이터가 있다고 가정했을 때
    1. WHERE DEPNTO NOT IN(SELECT DEPTNO FROM EMP);
       -> DEPT테이블에 DEPTNO 중에 10, 20, 30을 제외하고 출력한다.

    2. WHERE NOT EXISTS (SELECT * FROM EMP B WHERE A.DEPTNO = B.DEPTNO);
       -> DEPT 테이블에 DEPTNO 주우에 10, 20, 30이 아닌것을 출력한다.

    3. RIGHT OUTER JOIN DEPT B ON A.DEPTNO = B.DEPTNO WHERE EMPNO IS NULL;
       -> DEPT 테이블의 전체 DEPTNO와 DEPT 테이블 DEPTNO 와 같은 EMP 테이블 DEPTNO 중에 EMP 테이블의 EMPNO 값이 NULL인 DEPT 테이블의 DEPTNO을 출력한다.

    4. WHERE DEPTNO <> ANY (SELECT DEPTNO FROM EMP);
       -> DEPT 테이블에 DEPTNO 중에 DEPTNO 이 ANY의 비교값과 다르면 출력한다.

15. 인덱스에 의하여 검색속도를 향상시킬 수 있는 질의로 적절하지 않은 것은?

  • 인덱스에 대해서 연산을 하면 인덱스가 변형이 되므로 인덱스를 사용할 수 없다.
    따라서 2번에서 '-' 연산은 할 수 없다.

16. 분산 데이터베이스?

  • 분산 데이터베이스의 특징
    • 분산 데이터베이스는 여러개의 데이터 베이스를 병렬적으로 실행하여 성능을 향상시킨다.

    • 분산 데이터베이스는 네트워크를 통해서 여러개의 데이터베이스를 물리적으로 분리한 데이터베이스이다.

  • 분산 데이터베이스의 장점
    • 데이터베이스 신뢰성과 가용성이 높다.

    • 분산 데이터베이스가 병렬 처리를 수행하기 때문에 빠른 응답이 가능하다.

    • 분산 데이터베이스를 추가하여 시스템 용량 확장이 쉽다.

  • 분산 데이터베이스의 단점
    • 데이터베이스가 여러 네트워크를 통해서 분리되어 있기 때문에 관리와 통제가 어렵다.

    • 보안관리가 어렵다.

    • 데이터 무결성 관리가 어렵다.

    • 데이터베이스 설계가 복잡하다.

17. 실행계획(Execution Plan)?

  • 실행계획이란?
    SQL을 실행하기 위한 절차와 방법을 의미한다.

  • SQL이 데이터베이스에서 실행될 때 실행 절차 및 방법을 표현하여 DBA에게 알려준다.

  • SQL 개발자가 SQL을 작성하여 실행할 때, SQL을 어떻게 실행할 것인지를 계획하게 된다. 즉, SQL실행계획을 수립 후 SQL을 실행한다.

  • 옵티마이저는 SQL의 실행계획을 수립(RULE, COST)하고 SQL을 실행하는 데이터베이스 관리 시스템의 소프트웨이이다.

18. 인덱스에 대한 설명?

  • 파티션 인덱스의 경우 파티션 키에 대해서 인덱스를 생성할 수 있고 파티션 키에 대해서 생성한 인덱스를 GLOBAL 인덱스라고 한다.

  • 파티션이라는 것은 어떤 특정한 기준으로 분할하는 것이다.

  • 인덱스는 순차인덱스, 결합인덱스, 비트맵, 클러스터, 해시인덱스가 있다.

  • 인덱스의 수가 증가하면 입력과 삭제, 수정 속도가 저하될 수 있다.

  • VARCHAR, CHAR, DATE, NUMBER 모두 인덱스 생성이 가능하다.

19. 연산자 우선순위?

  1. 산술 연산자(*, /, +, -)
  2. 연결 연산자(||)
  3. 비교 연산자(<, >, <=, =>, <>, =)
  4. IS NULL, LIKE, IN
  5. BETWEEN
  6. NOT 연산자
  7. AND 연산자
  8. OR 연산자

20. SELF JOIN의 경우?

  • SELF JOIN은 동일한 테이블에서 발생하는 조인을 의미하며, FROM절에 동일한 데이블명이 두 번 이상 나타난다.
    그리고 SELF JOIN을 하기 위해서 동일한 테이블을 두 번 이상 사용하므로 FROM절에 별칭(Alias)을 사용해야 한다.

21. SQL 문의 수행결과?

  • SELECT * FROM [테이블명] WHERE LIKE [조건]


  • SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE 'A%'
     -> A로 시작하는 문자 찾기

  • SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '%A'
     -> A로 끝나는 문자 찾기

  • SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '%A%'
     -> A를 포함하는 문자 찾기

  • SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE 'A_'
     -> A로 시작하는 두글자 문자 찾기

  • SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[^A]'
     -> 첫번째 문자가 'A'가 아닌 모든 문자열 찾기

  • SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[ABC]'
    SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[A-C]'
     -> 첫번째 문자가 'A', 'B', 'C'인 문자열 찾기

22. SQL 문의 결과?

  1. COUNT(*) -> 전체 행의 갯수는 반환할 때에는 NULL을 포함한다.

  2. COUNT(COL1) -> 컬럼명을 지정할 경우 NULL을 포함시키지 않는다.

  3. WHERE COL1 IN(12, 10, NULL) -> 12, 10을 포함한 COL1을 찾고 NULL은 포함시키지 않는다.

  4. GROUP BY COL1 -> NULL, 12, 10 3개로 묶인다.
  • 따라서 2, 2, 3이다.

23. SQL 문의 결과?

  • GROUP BY COL1 -> 조조 1개, 유비 2개, 관우 3개, 여포 1개, 초선 1개

  • HAVING COUNT(*) > 2 이므로 갯수가 2개 초과인 것은 관우고 3개이다.

24. NUMERIC(숫자)형?

  • CHAR(문자형) : 고정길이 문자열을 의미한다.

  • INT(정수형) : 소숫점을 포함하지 않은 정수이다.

  • DOUBLE(실수형) : 8byte 실수형

  • FLOAT(실수형) : 4byte 실수형

  • DECIMAL : 더 정밀하게 소수점을 표현한다.

25. SQL 문의 실행순서?

  1. FROM 절에서 테이블의 목록을 가져온다.
  2. WHERE 절에서 검색 조건에 일치하지 않는 행을 제외한다.
  3. GROUP BY 절에 명시된 행의 값을 그룹화 한다.
  4. HAVING 절은 GROUP BY 절로 그룹화된 데이터를 대상으로 조건을 정의한다.
  5. SELECT 절에서 명시한 컬럼값들을 조회한다.
  6. OPDER BY 절에서 명시한 컬럼값을 기준으로 정렬한 후 출력한다.

26. 순수 관계 연산자?

  • 순수 관계 연산자란?
    관계형 데이터베이스에 적용할 수 있도록 개발한 관계 연산자를 의미한다. DELETE는 포함되지 않는다.

  • 순수 관계 연산자
    • SELETE(σ)
       - 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션을 만든다.
       - 릴레이션의 행(가로)에 해당하는 튜플을 구하는 것이므로 수평 연산이라도고 한다.
       - 연산자의 기호는 그리스 문자 시그마(σ)를 사용한다.

    • PROJECT(π)
       - 주어진 릴레이션에서 속성 List에 제시된 Attribute만을 추출하는 연산이다.
       - 릴레이션의 열(세로)에 해당하는 Attribute를 추출하는 것이므로 수직 연산자라도고 한다.
       - 연산자의 기호는 그리스 문자 파이(π)를 사용한다.

    • JOIN(⋈)
       - 공통 속성을 중심으로 2개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산이다.
       - 연산자의 기호는 ⋈를 사용한다.
       - 조인 조건이 '='일 때 동일한 속성이 두 번 나타나게 되는데, 이 중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법을 자연(NATURAL)조인이라고 한다.

    • DIVISION(÷)
       - X ⊃ Y인 2개의 릴레이션에서 R(X)와 S(Y)가 있을 때, R의 속성이 S의 속성값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산한다.

27. SQL의 빈칸 채우기

  • 등수메기기 문제이다.

  • 지금 SQL문을 보면 RANK가 1, 2, 3, 4, 5, 6으로 중복 값이 있어도 고유등수를 부여한다.

  • 따라서 ROW_NUMBER()가 적절하다.

  • RANK() : 중복값은 중복등수이고, 등수를 건너뛴다.(1위, 1위, 3위, 3위, 5위, 6위)

  • DENSE_RANK() : 중복값은 중복등수, 등수 안 건너뛴다.(1위, 1위, 2위, 2위, 3위, 4위)

28. SQL의 빈칸 채우기

  • SELECT * INTO 새로만들 테이블명 FROM 복사할 테이블명

  • ORACLE
    • CREATE TABLE 새로만들 테이블명 AS SELECT * FROM 복사할 테이블명 [WHERE절]
       -> 테이블 복사할 때
    • CREATE TABLE 새로만들 테이블명 AS SELECT * FROM 복사할 테이블명 WHERE 1 = 2 [WHERE에 참이 아닌 조건을 넣어준다.]
       -> 테이블 구조만 복사할 때

    • INSERT INTO 복사할 테이블명 SELECT * FROM 복사할 테이블명 [WHERE절]
       -> 테이블은 이미 생성되어 있고 테이터만 복사할 때

    • ALTER TABLE 구 테이블명 RENAME TO 신 테이블명
       -> 테이블 이름 변경

  • SQL SERVER
    • SELECT * INTO 새로만들 테이블명 FROM 복사할 테이블명
       -> 테이블 복사할 때

29. 동일한 결과가 나오도록 빈칸을 완성하시오

  • GROUPING SETS은 여러 그룹질의를 UNION ALL(합집합)과 같은 결과를 만들어서 소계, 합계를 집계할 수 있다.

  • GROUPING SETS 함수와 GROUP BY UNION ALL절
    • GROUP BY GROUPING SETS(A, B, C)
       - Group By A Union All
       - Group By Union All
       - Group By C

    • GROUP BY GROUPING SETS(A, B, (B, C))
       - Group By A Union All
       - Group By Union All
       - Group By B, C

    • GROUP BY GROUPING SETS((A, B, C))
       - Group By A, B, C

    • GROUP BY GROUPING SETS(A, ROLLUP(B, C))
       - Group By A Union All
       - Group By Rollup(B, C)

    • GROUP BY ROLLUP(A, B, C)
       - Group By (A, B, C) Union All
       - Group By (A, B) Union All
       - Group By (A) Union All
       - Group By ()

    • GROUP BY CUBE(A, B, C)
       - Group By (A, B, C) Union All
       - Group By (A, B) Union All
       - Group By (A, C) Union All
       - Group By (B, C) Union All
       - Group By (A) Union All
       - Group By (B) Union All
       - Group By (C) Union All
       - Group By ()

30. SQL의 최종결과?

  • COMMIT시점으로 ROLLBACK을 하는 것이다.

  • 따라서 DELETE로 (2, 2000)이 지워졌지만 ROLLBACK으로 다시 나온다.

  • 그리고 SELECT COUNT(COL1) FROM PRODUCT WHERE COL2 = 2000;을 하면 1개이다.

31. SQL의 결과?

  • WHERE 절에 A.COL1 <> B.COL1; 이므로 A.COL1 컬럼을 기준으로 다른 수의 갯수를 카운트한다.

  • A.COL1 <> B.COL1
    1 다른수 2, 3, 3 = 3개
    1 다른수 2, 3, 3 = 3개
    2 다른수 1, 1, 3, 3 = 4개
    3 다른수 1, 1, 2 = 3개
    3 다른수 1, 1, 2 = 3개        따라서 3 + 3 + 4 + 3 + 3 = 16개이다.

32. 

  • CROSS JOIN의 결ㄹ과 개수는 두 테이블의 행의 개수를 곱한 개수가 된다.

  • CROSS JOIN은 상호 조인이라고도 불리며, 한 쪽 테이블의 모든 행들과 다른 테이블의 모든 행을 조인시키는 기능을 한다.
    CROSS JOIN을 카데시안 곱(Cartesian Product)라고도 한다.