WorkHard/자격증

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

코딩공대 2023. 3. 9. 17:00
728x90

1. 틀린 것은?

1) RANK() OVER (PARTITION BY JOB ORDER BY 급여 DESC) JOB_RANK                                                                                                                                                                                      
#직업별 급여가 높은 순서대로 부여되고 동일한 순위는 동일한 값이 부여 된다.                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                           
2
) SUM(급여) OVER (PARTITION BY MGR ORDER BY 급여 RANGE UNBOUNDED PRECEDING)                                                                                           
#
RANGE는 논리적 주소에 의한 행  집합을 의미하고 MGR별 현재 행부터 파티션내 첫번째 행까지 급여의 합계를 계산한다.                                                                                    
                                                                                                                                                                                                                    
3
) AVG(급여) OVER (PARTITION BY MGR ORDER BY 날짜 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING))                                                                                            
#각 MGR 별.  로 앞의 한건, 현재 행, 뒤의 한건 사이에서 급여의 평균을 계산한다.                                                                                                                 
                                                                                                                                                                                                                    
4
) COUNT(*) OVER (ORDER BY 급여) RANGE BETWEEN 10 PRECEDING AND 300 FOLLOWING)                                                                                            
#급여를 기준으로 현재 행에서.  의 급여의
10에서 300사이의 급여를 가지는 행의 수를 COUNT                                                                                                                      
  • 3번은 각 MGR별로 급여의 평균을 계산하기 전에 날짜를 기준으로 정렬을 수행한 다음 급여의 평균을 계산한다.
    각 MGR파티션 내에서 날짜 기준으로 정렬을 수행하였을 때, 파티션 내에서 앞의 한 건, 현재 행 뒤의 한 건 사이 급여의 평균을 계산한다.

  • 윈도우 절은 ROWS or RANGE 둘 중 하나를 선택하고 BETWEEN도 선택적으로 사용해서 결과에 대한 범위를 지정할 수 있습니다.

  • BETWEEN이 있을 경우
    • ROWS / RANGE
    • BETWEEN UNBOUNDED PRECEDING | CURRENT ROW | 상수값 PRECEDING or FOLLOWING
      AND UNBOUNDED FOLLOWING | CURRENT ROW | 상수값 PRECEDING or FOLLOWING
  • BETWEEN이 없는 경우
    • ROWS / RANGE UNBOUNDED PRECEDING | CURRENT ROW | 상수값 PRECEDING


2. PL / SQL의 특징?

  • PL / SQL은 Block구조로 되어있어 각 기능별로 모듈화가 가능하다.

  • 변수, 상수 등을 선언하여 SQL문장 간 값을 교환한다.

  • IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 한다.

  • DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용할 수 있다.

  • PL / SQL은 ORACLE에 내장되어 있으므로 ORACLE과 PL / SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.

  • PL / SQL은 응용 프로그램의 성능을 향상시킨다.

  • PL / SQL은 여러 SQL문장을 Block으로 묶고 한 번에 Block전부를 서버로 보내기 때문에 통신량을 줄일 수 있다.

3. 데이터베이스 테이블의 제약조건?

  • 외래키(Forign Key)는 두 개의 테이블 간의 참조 무결성을 제약한다.

  • 기본키(Primary Key) 제약사항은 테이블 당 하나만 제약할 수 있다.

  • Check 제약조건(Constraint)은 특정값만 입력되게 제약한다.

  • 고유키(Unique Key)로 지정된 모든 컬럼은 NULL값을 가질 수도 있다.

4. SQL 설명?

  • CNT컬럼은 분류코드로 GROUPING 된 집합을 원본집합으로 하여 분류코드별 평균상품 가격을 서로 비교하고 현재 읽힌 상품분류코드의 평균가격대비 -10000 ~ + 10000 사이에 존재하는 분류코드의 개수를 구한 것이다.

5. SQL 문의 결과?

  • NOT IN문 서브쿼리의 결과 중에 NULL이 포함되는 경우 데이터가 출력되지 않는다.
    (IN문은 OR조건, NOT IN문은 AND조건)

  • NULL은 논리적으로 비교할 수 없는 연산이기 때문에 원하는 데이터를 추출하기 위해서는 조회 컬럼에 IS NOT NULL조건을 줘 NULL인 데이터를 빼고 조회하면 된다.

6. SQL 문으로 올바른 것?

  • %나 _ 등과 같은 특수문자를 검색하기 위해서는 ESCAPE를 사용한다.

  • SQL > SELECT * FROM TEST WHERE NAME LIKE '%_%';
    위와 같은 쿼리로 검색을 하게 되면 '_' 문자가 포함된 값을 가져오는 게 아니라 모든 행이 출력됩니다.
    특수 구문을 사용하지 않으면 % or _와 같은 특수문자가 포함된 문자열 열에 대해 LIKE 검색을 사용할 수 없다.
  • SQL > SELECT * FROM TEST WHERE NAME LIKE '%@_%' ESCAPE '@';
    LIKE 연산으로 % or _와 같은 특수문자를 검색하기 위해서는 위와 같이 ESCAPE를 사용해야 한다.
    위의 쿼리에서는 @를 사용했지만 아무 특수문자나 사용해도 결과는 같다.

7. DCL로 올바른 것은?

  • GRANT 권한 ON 테이블명 TO 유저명;
     - GRANT : 권한 부여
     - REVOKE : 권한 회수

  • 데이터 조작어(DML : Date Manipulation Language)
    • SELECT : 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말한다. RETRIEVE라고도 한다.
    • INSERT UPDATE DELETE : 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 테이블에 새로운 행을 집에 넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML이라고 부른다.

  • 데이터 정의어(DDL : Date Definition Language)
    • CREATE ALTER DROP RENAME : 데이블과 같은 데이터 구조를 정의하는 명령어들로 구조를 생성, 변경, 삭제 및 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다.
  • 데이터 제어어(DCL : Date Control Language)
    • GRANT REVOKE : 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다.

  • 트랜잭션 제어어(TCL : Transaction Control Language)
    • COMMIT ROLLBACK : 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위 별로 제어하는 명령어를 말한다.

8. ERD에서 오류가 날 수 있는 SQL문?

  1. 서브쿼리 결과가 여러 개의 행이 리턴되므로 오류가 발생하게 된다.(단일행 연산자로 서브쿼리의 결과가 반드시 하나만 리턴되어야 한다.)

9. 실행순서?

  • 데이터를 추출하기 위해 DBMS가 차례로 수행하는 Access과정으로 실행 계획을 읽을 때는 규칙을 토대로 하나씩 읽어나간다.
    1. 위에서 아래로 읽어 내려가면서 제일 먼저 읽을 스텝을 찾는다.
    2. 내려가는 과정에서 같은 들여 쓰기가 존재한다면 위 -> 아래 순으로 읽는다.
    3. 더 들여쓰기가 된 하위 스텝이 존재하면, 가장 안쪽으로 들여쓰기 된 스텝을 시작으로 하여 한 단계씩 상위 스텝으로 읽어 나온다.

  • 자식들의 좌측부터 차례대로 읽어주고 그다음에 상위 부모로 올라가는 식으로 반복한다.

그림으로 보는 순서

 


10. UNIQUE INDEX SCAN을 수행할 수 없는 경우?

  • 1, 2, 3번은 KEY1, KEY2번 값이 두 개 다 쓰였지만 4번에선 KEY1번만 쓰이고 KEY2번 값은 쓰이지 않아서 수행할 수 없다.

11. 트랜잭션?

  • 원자성(Atomicity) : 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다.

  • 일관성(Consistency) : 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.

  • 고립성(Isolation) : 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.

  • 지속성(Durability) : 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.

12. SQL의 빈칸완성하기

  • 결과값에서 B.GRADE, A.STUDENTNO에 대한 집계, B.GRADE에 대한 집계가 있고 전체 집계는 없다.
  • 따라서 GROUPING SETS(B.GRADE, (B.GRADE, A.STUDENTNO)) 이다.

13. SQL의 빈칸완성하기

  • NULL LAST -> NULL값을 마지막에 정렬시켜준다.
  • NULLS FIRST -> 정렬하고자 하는 NULL 데이터들을 데이터 앞에 나오게 한다.
  • NULLS LAST -> 정렬하고자 하는 NULL 데이터들을 데이터 뒤에 나오게 한다. 

14. 빈칸에 들어갈 JOIN 결과?

  • 결과 테이블에서 TEST46_1의 3번 행만 (COL1, COL2)가 조회되고 TEST46_2는 3번 행이 NULL이므로 'LEFT OUTER JOIN'을 실행한 것이다.

15. 테이블을 생성할 수 있는 권한을 부여하는 SQL문을 작성해라.

  • 문제 7번에도 설명했다시피 GRANT는 테이블의 권한을 부여하는 DCL, REVOKE는 테이블의 권한을 회수하는 DCL이다.

16. SQL의 빈칸완성하기

  • NTILE(3)에서 데이터를 3등분 한다.
    그리고 각 등분에 대해서 COUNT를 계산하므로 ROWCNT는 3, 3, 2가 된다.
  • 따라서 NTINE_2 -> 3이 들어가고 ROWCNT -> 2가 들어간다.

17. SQL의 빈칸에 들어갈 WINDOW FUNCTION은?

  • RANGE는 현재 행의 데이터 값을 기준으로 앞뒤 데이터 값의 범위를 표시하는 것이다.
  • SQLD_37_50 테이블에서 결과값과 같이 반환되도록 SAL속성을 기준으로 정렬을 수행하고, 각 행의 SAL 속성값을 기준으로 -50 ~ +150 범위 사이에 포함되는 SAL값을 가지는 모든 행의 수를 COUNT 하여 SIM_CNT속성값으로 조회한다.
  • 예를 들어 유비의 SAL 속성값 1000을 기준 -50 ~ +150 범위는 950 ~ 1150에 속하는 SAL 속성값은 1000, 1100 두 개이다.
  • 따라서 'RANGE' BETWEEN 50 PRECEDING AND 100 FOLLOWING이 돼야 한다.

계속 보고 있는데 객관식은 많이 올라오는데 주관식이 너무 어렵다.

주관식을 좀 더 신경 써서 공부할 필요가 있는 것 같다.

''10일'' 남았다 열심히 하자!