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이라고 부른다.
- GRANT REVOKE : 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다.
- 트랜잭션 제어어(TCL : Transaction Control Language)
- COMMIT ROLLBACK : 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위 별로 제어하는 명령어를 말한다.
8. ERD에서 오류가 날 수 있는 SQL문?
- 서브쿼리 결과가 여러 개의 행이 리턴되므로 오류가 발생하게 된다.(단일행 연산자로 서브쿼리의 결과가 반드시 하나만 리턴되어야 한다.)
9. 실행순서?
- 데이터를 추출하기 위해 DBMS가 차례로 수행하는 Access과정으로 실행 계획을 읽을 때는 규칙을 토대로 하나씩 읽어나간다.
- 위에서 아래로 읽어 내려가면서 제일 먼저 읽을 스텝을 찾는다.
- 내려가는 과정에서 같은 들여 쓰기가 존재한다면 위 -> 아래 순으로 읽는다.
- 더 들여쓰기가 된 하위 스텝이 존재하면, 가장 안쪽으로 들여쓰기 된 스텝을 시작으로 하여 한 단계씩 상위 스텝으로 읽어 나온다.
- 자식들의 좌측부터 차례대로 읽어주고 그다음에 상위 부모로 올라가는 식으로 반복한다.
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일'' 남았다 열심히 하자!
'WorkHard > 자격증' 카테고리의 다른 글
[SQLD 개발자] 기출문제 공부(33회) (0) | 2023.03.14 |
---|---|
[SQLD 개발자] 기출문제 공부(38회) (0) | 2023.03.10 |
[SQLD 개발자] 기출문제 공부(37회) (0) | 2023.03.08 |
[SQLD 개발자] 기출문제 공부(35회) (0) | 2023.03.07 |
[SQLD 개발자] 기출문제 공부(35회) (0) | 2023.03.06 |