[SQLD 개발자] 기출문제


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

  • 논리적 모델은 비즈니스 정보의 논리적 구조와 구성을 캡처할 수 있습니다.
    즉, 핵심 엔터티와 키 엔터티를 식별하고 모델링하여 데이터베이스 구조를 모델링한다.



2. EARTH에 대한 설명?


  • 사용 내역 엔터티에서 “사용일 + 사원번호가 기본키(PK)이기 때문에 같은 날 여러 콘도를 사용할 수 없습니다.”

  • 직원, 사용내역(1:M) -> 직원 1명은 사용내역이 있을 수도 있고 없을 수도 있습니다.
  • 콘도 점유 정보, 점유 세부 정보(1:0 또는 1:1): M -> 콘도 점유 정보가 있을 수도 있고 없을 수도 있으며, 콘도 점유 정보가 점유 세부 정보에 있을 수도 있고 없을 수도 있습니다.

3. 관계를 정상화하는 목적은 무엇입니까?

  • 정규화는 기능적 종속성에 따라 테이블을 분해하여 데이터 중복성을 제거하여 모델 독립성을 향상시키는 프로세스입니다.
  • 정규화가 수행되지 않으면 삽입, 삭제 및 수정에 문제가 발생합니다.
  • 데이터베이스 보안과 관련된 것은 보기입니다.

4. 엔터티, 관계, 속성?

  • 엔티티의 특성
    • 식별자: 엔터티에는 고유한 식별자가 있어야 합니다.
    • 인스턴스 세트: 2개 이상의 인스턴스가 있어야 합니다.
    • 속성: 엔티티에는 속성이 있어야 합니다.
    • 관계: 엔터티는 다른 엔터티와 적어도 하나의 관계를 가져야 합니다. 엔터티의 관계 -> 집합 간의 관계.
    • 작업: 엔터티는 작업에서 관리해야 하는 컬렉션입니다.
  • 엔터티 유형
    • 독립 개체(Kernel Entity, Master Entity): 실세계에 존재하는 개체 B. 사람, 사물 또는 장소.
    • 트랜잭션 개체: 트랜잭션이 진행되는 동안 발생하는 개체입니다.
    • 종속 엔터티: 주로 1차 정규화로 인해 관련 중앙 엔터티에서 분리된 엔터티입니다.
    • Interaction Entity: (M:M) 관계를 해소할 목적으로 생성된 개체.
  • 유형, 무형 엔티티 유형
    • Tangible Entity: 업무에서 비롯되어 지속적으로 사용되는 개체.
    • 개념 엔터티: 개념적으로 사용되는 엔터티로, 물질 엔터티는 물리적 형태를 가지며 개념적 엔터티는 물리적 형태가 없습니다.
    • 인시던트 엔터티: 비즈니스 프로세스 실행 중에 생성된 엔터티입니다.
  • 발생 시간별 엔티티 유형
    • 기본 유닛: 다른 유닛의 영향을 받지 않고 독립적으로 생성되는 유닛으로 키 유닛이라고도 합니다.
    • 주요 개체: 기본 개체와 행동 개체 사이의 개체, 기본 개체에서 발생하고 행동 개체를 생성하는 개체입니다.
    • Active Entity: 두 개 이상의 개체로 구성된 개체로 정보가 지속적으로 추가되고 변경되는 개체입니다.

5. 지구에 대한 설명?


  • 제품에는 하나 이상의 주문이 있을 수도 있고 없을 수도 있습니다.
  • ERD 동일시 관계에서 O는 “있을 수도 있고 없을 수도 있다”의 의미를 갖는다.

6. 올바른 ERD 표기법은 무엇입니까?


  • ERD 표기법 하에서 IE 표기법은 관계의 1:N 관계에서 N측에 새로운 바닥글을 표시하고, 선택하고, 필수 참여 관계에서 선택적 참여(또는)를 위해 O를 선택하고, 참여를 요구합니다 | 표시된

7. 각 주식의 특징은 무엇입니까?


  • 동일한 기입일로 동일한 노트가 생성되기 때문에 끝에 동일한 값이 추가되어 최소값이 아니므로 잘못된 모델링입니다.
  • 식별자의 속성
    • 고유성: 엔터티 내의 모든 인스턴스는 자산 식별자로 고유하게 식별되어야 합니다.
    • 미니멀리즘: 스톡 단조를 구성하는 속성의 수는 고유성을 만족하는 최소 수여야 합니다.
    • 불변성: 주어진 자산 식별자의 값은 자주 변경되어서는 안 됩니다.
    • 존재: 보유 식별자가 지정된 경우 값을 입력해야 합니다(NULL일 필요는 없음).
  • 식별자의 분류
    • 묘사
      – 인벤토리별: 엔티티 내 각 라인을 구분할 수 있는 구분자이자 다른 엔티티와의 참조 관계를 연결할 수 있는 식별자입니다.
      – 보조식별자 : 개체 내에서 각 줄을 구분할 수 있는 구분자이나 대표성이 없어 참조관계를 맺을 수 없다.
    • 스스로 만든
      – 내부 식별자: 엔터티 내부에서 스스로 생성하는 식별자.
      – 외부식별자 : 다른 개체와의 관계를 통해 다른 개체로부터 획득한 식별자이다.
    • 속성 수
      – 고유 식별자: 속성으로 구성된 식별자.
      – 복합 식별자: 둘 이상의 속성으로 구성된 식별자.
    • 대리자
      – 필수 식별자: 작업(비즈니스)에서 말하는 식별자입니다.
      – 인공식별자 : 업무용으로 생성된 것이 아니라 원래 식별자가 복잡한 구조를 가지고 있어 인위적으로 생성한 것입니다.

8. SQL 문의 결과는?


  • CONNECT BY -> 계층적 쿼리는 데이터를 선택하고 계층적 순서로 반환하는 데 사용됩니다.
  • 현재 줄과 다른 줄은 PRIOR 키워드로 구별됩니다.
    PRIOR는 부모행을 말하며 위의 SQL 문에서 “이전 행의 COL2 값이 현재 행의 COL1 값인 행을 모두 찾는다”는 의미이다.
  • WHERE 절의 COL3이 3인 행 제외 -> COL3을 4로 시작 -> CONNECT BY COL1 = PRIOR COL2

    COL1 COL2 COL3
    DB4
    제로 1
    BA 2 총 3개가 있습니다.


9. JOIN에 대한 설명?

  • 중첩 루프 조인
    • 좁은 지역에 좋습니다.
    • Glass는 순차적으로 처리되고 랜덤 액세스를 위해 정렬됩니다.
    • 조인을 위한 인덱스는 구동 테이블에 생성되어야 합니다.
    • 실행 속도 = 이전 테이블의 크기 * 다음 테이블에 대한 액세스 수
  • 중첩 인덱스 루프 조인, 단일 루프 조인
    • 구동 테이블의 조인 속성에 인덱스가 존재할 때 사용합니다.
    • 다음 테이블의 인덱스 접근 구조를 이용하여 앞선 테이블의 각 레코드를 직접 조회한 후 조인하는 방식이다.
  • 병합 연결 정렬
    • 정렬 병합 조인은 테이블에 인덱스가 없을 때 수행됩니다.
    • 테이블을 정렬한 후 정렬된 테이블을 병합하여 조인을 수행합니다.
    • 조인 체인의 비교 연산자가 범위 연산(>, <)이면 중첩 루프 조인보다 유리하다.
    • 이는 두 결과 집합의 크기가 매우 다른 경우 비효율적입니다.
  • 해시 조인
    • 해시 함수를 사용하여 두 테이블의 데이터를 결합하는 조인 방법입니다.
    • 중첩 루프 조인 및 정렬 병합 조인의 문제를 해결합니다.
    • 많은 양의 데이터를 처리하려면 상당히 큰 해시 범위가 필요하므로 과도한 메모리 사용으로 인한 오버헤드가 발생할 가능성이 있습니다.

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 함수
    • 롤업 후 그룹화(DEPTNO)
      -> DEPTNO 총계(소계), 총계 조회
  • 주사위
    • CUBE는 제시된 열에 대해 결합할 수 있는 모든 집계를 계산합니다.
    • 데이터를 다양한 방식으로 분석할 수 있도록 다차원 집계를 제공합니다.
    • GROUP BY CUBE(DEPTNO, JOB)
      -> DEPTNO 합계, JOB 합계, DEPTNO & JOB 합계, 합계 합계 검색
      -> 가능한 모든 조합이 결합됩니다(시스템 부하의 단점).
  • 그룹핑 세트
    • 원하는 부분의 소계만 추출하여 계산할 수 있는 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 테이블명, 인덱스명, 컬럼명
      ALL_IND_COLUMNS에서
      WHERE TABLE_NAME = ‘테이블 이름’


14. 직원이 없는 부서(DEPTNO)를 검색하는 쿼리를 작성하는 경우 가장 먼 곳은 어디입니까?


  • <>(같지 않음), ANY(여러 비교 값 중 하나라도 충족되면 TRUE).
  • EMP 테이블에 DEPTNO(10, 20, 30)이 있고 DEPT 테이블에 DEPTNO(10, 20, 30, 40)가 있다고 가정합니다.
    1. DEPTNO가 없는 경우(EMP에서 DEPTNO 선택);
      -> 테이블 DEPT의 DEPTNO에서 10, 20, 30을 제외하여 출력한다.
    2. 존재하지 않는 경우(A.DEPTNO = B.DEPTNO인 경우 EMP B에서 선택 *);
      -> DEPT 테이블에서 DEPTNO에 대해 10, 20, 30 이외의 값을 출력한다.
    3. RIGHT OUTER JOIN DEPT B ON A.DEPTNO = B.DEPTNO 여기서 EMPNO는 NULL입니다.
      -> DEPT 테이블의 전체 DEPTNO 및 DEPT 테이블 DEPTNO와 동일한 EMP 테이블 DEPTNO 아래에서 EMP 테이블의 EMPNO 값이 NULL인 DEPT 테이블의 DEPTNO가 출력된다.
    4. WHERE DEPTNO <> ANY(EMP에서 DEPTNO 선택);
      -> 테이블의 DEPTNO 아래 DEPTNO가 ANY의 비교값과 같지 않으면 DEPT가 출력된다.

15. 인덱스를 이용하여 검색 속도를 향상시킬 수 있는 쿼리로 적절하지 않은 것은?


  • 인덱스에 대해 연산을 수행하면 인덱스가 변환되므로 인덱스를 사용할 수 없습니다.
    따라서 2단계의 ‘-‘ 연산을 수행할 수 없습니다.

16. 분산 데이터베이스?

  • 분산 데이터베이스의 특징
    • 분산 데이터베이스는 여러 데이터베이스를 병렬로 실행하여 성능을 향상시킵니다.
    • 분산 데이터베이스는 여러 데이터베이스를 네트워크로 물리적으로 분리한 데이터베이스입니다.
  • 분산 데이터베이스의 장점
    • 데이터베이스의 안정성과 가용성이 높습니다.
    • 분산 데이터베이스가 병렬 처리를 하기 때문에 빠른 응답이 가능합니다.
    • 분산 데이터베이스를 추가하여 시스템 용량을 쉽게 확장할 수 있습니다.
  • 분산 데이터베이스의 단점
    • 데이터베이스가 여러 네트워크로 분리되어 있기 때문에 관리 및 제어가 어렵습니다.
    • 보안 관리가 어렵습니다.
    • 데이터 무결성 관리가 어렵습니다.
    • 데이터베이스 디자인은 복잡합니다.

17. 실행계획은?

  • 실행 계획이란 무엇입니까?
    SQL을 실행하는 절차 및 방법을 말합니다.
  • 데이터베이스에서 SQL이 실행될 때 실행 절차와 방법이 표현되어 DBA에게 전달된다.
  • SQL 개발자는 SQL을 작성하고 실행할 때 SQL 실행 방법을 계획합니다. 즉, SQL 실행 계획을 생성한 후 SQL을 실행합니다.
  • 옵티마이저는 SQL 실행 계획(RULE, COST)을 생성하고 SQL을 실행하는 데이터베이스 관리 시스템 소프트웨어입니다.

18. 지수에 대한 설명?

  • 분할된 인덱스를 통해 파티션 키에 인덱스를 생성할 수 있으며, 파티션 키에 생성된 인덱스를 GLOBAL 인덱스라고 합니다.
  • 파티셔닝은 일정한 기준에 따라 나누는 것을 의미합니다.
  • 인덱스에는 순차 인덱스, 복합 인덱스, 비트맵 인덱스, 클러스터 인덱스 및 해시 인덱스가 포함됩니다.
  • 인덱스 수가 증가할수록 입력, 삭제 및 수정 속도가 느려질 수 있습니다.
  • 인덱스는 VARCHAR, CHAR, DATE 및 NUMBER에서 생성할 수 있습니다.

19. 운영자 우선순위?

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

20. SELF JOIN은 어떻습니까?

  • SELF JOIN은 동일한 테이블에 대해 발생하는 조인을 나타내며 동일한 테이블 이름이 FROM 절에 두 번 이상 나타납니다.
    SELF JOIN은 동일한 테이블을 여러 번 사용하므로 FROM 절에 별칭을 사용해야 합니다.

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 ‘(AC)’
    -> 첫 번째 문자가 ‘A’, ‘B’, ‘C’인 문자열 찾기

22. SQL 문의 결과는?


  1. 계산하기
  2. -> 총 행 수는 반환되는 경우 NULL을 포함합니다. 개수(COL1) ->
  3. 열 이름을 지정할 때 NULL을 포함하지 마십시오.
  4. WHERE COL1 IN(12, 10, NULL) -> 12, 10을 포함하고 NULL을 포함하지 않는 COL1을 찾습니다.
  • GROUP BY COL1 -> NULL, 12, 10은 3개로 그룹화된다.

그래서 2, 2, 3.


  • 23. SQL 문의 결과는?
  • GROUP BY COL1 -> 조조 1개, 유비 2개, 관우 3개, 루푸 1개, 조선 1개

계산해야

  • > 2이므로 2보다 큰 수는 3입니다.
  • 24. NUMERIC(숫자)을 입력하시겠습니까?
  • CHAR(문자형): 고정 길이 문자열을 의미합니다.
  • INT(정수형): 소수점이 없는 정수.
  • DOUBLE(실수형): 8바이트 실수형

FLOAT(실수형): 4바이트 실수형

  1. DECIMAL : 소수점을 더 정확하게 표현합니다.
  2. 25. SQL 문의 실행 순서는?
  3. FROM 절에서 테이블 목록을 가져옵니다.
  4. WHERE 절의 검색 조건과 일치하지 않는 행을 제외합니다.
  5. GROUP BY 절에 지정된 행의 값을 그룹화합니다.
  6. HAVING 절은 GROUP BY 절로 그룹화된 데이터에 대한 조건을 정의합니다.

SELECT 절에 지정된 열 값을 검색합니다.

OPDER BY 절에 지정된 컬럼 값을 기준으로 정렬하여 반환합니다.