프로그래밍/자바(java) 융합개발자 2차

[Spring 기반 자바(Java) 융합 개발자 2차] 1차 테스트 풀이

aSpring 2020. 12. 31. 12:53
728x90
728x90

 

1. 다음 중 사용자에게 부여한 객체 권한을 객체 소유자로부터 철회하기 위한 명령어는? 1revoke

(: madang이라는 사용자가 book 테이블에 select 권한을 철회한다)

[능력단위요소: 기본 SQL 작성하기]

revoke

grant -> 권한을 부여하는 것

drop role -> 역할(권한같은 것을 여러개 묶어놓은 패키지)을 뺏는다

delete authority -> 이런 건 없다

 

 

2. 아래 그림과 같은 뷰에 bookprice라는 속성을 추가시켜 뷰를 수정하기 위한 명령어는? 4

[능력단위요소: 기본 SQL 성하기]

drop view

alter view -> veiw는 alter가 먹히지 않는다.

create view

create or replace view

 

 

3. 인덱스 ix_book를 재생성하는 SQL문장을 작성하시오

[능력단위요소: 기본 SQL 작성하기]

 

ALTER INDEX ix_book REBUILD;
더보기
더보기

왜 Rebuild를 하는가 ?

인덱스는 보이지 않지만 1, 2, 3, 4.. 번호를 부여하는데 데이터가 2 5 6 .. 등 삭제되거나 하는 등 1 3 4 7 8 .. 처럼구멍이 났을 때 정리를 해서 1 2 3 4 .. 로 다시 구성해 주는 것

 

 

4. 아래의 SQL 구문은 도서를 주문하지 않은 고객의 이름을 보이기 위한 MS-SQL 구문이다. 오라클에 사용하기 위해서는 EXCEPT 키워드를 바꿔야 한다. 다음 중 무엇으로 바꿔야 하나? 4

[능력단위요소: 기본 SQL 작성하기]

SELECT name
FROM Customer
EXCEPT
SELECT name
FROM Customer
WHERE custid IN (SELECT custid FROM Orders);

 without
intersect

union

minus

 

 

5. 아래 그림 3개의 릴레이션이 나타낸다. 여기에 속도가 겁나 빠르다고 알려진 UNIQUE INDEX를 걸어보려고 한다. 다음 중 UNIQUE INDEX를 걸기에 적합하지 않은 속성은? 2번, 5번

[능력단위요소: 기본 SQL 작성하기]

OORDERID -> 중복되는 것이 없어서 가능

OCUSTID -> 중복되는 것이 있으므로 불가능

CCUSTID

BBOOKID

위 사항 모두(, , , ) 괜찮아 보인다. -> 2번도 오답이므로 이것도 오답임

 

UNIQUE INDEX : 걸면 더 빠르다, 독보적, 1개만 있어야 한다.

 

 

6. 아래 그림은 릴레이션의 관계를 나타낸다. Orders 릴레이션 있는 CUSTIDBOOKIDBOOK 릴레이션과 Customer릴레이션의 기본키(primary key)를 참조(reference)하여 무결성을 보장하기 위해 만들어졌다. 이와 같은 키(key)를 무엇이라 하는가? 2

[능력단위요소: 기본 SQL 작성하기]

슈퍼키

외래키

후보키

대체키

 

릴레이션 -> 테이블이라고 생각하기

 

참조무결성 : 남의 것을 가져다 쓰는데 존재하는걸 가지고 와야한다

ex) 홍길동은 컴퓨터공학과이다 -> 컴퓨터 공학과 자체가 존재하지 않으면 안되고, 존재하는 컴퓨터 공학과를 삭제할 수 없다 -> 홍길동을 삭제해야 컴퓨터공학과를 삭제할 수 있다

 

 

7. 아래 그림과 같이 3개의 테이블이 있다. 외부 조인을 사용하여 아래 질문의 답을 구하기 위한 SQL문을 작성하시오.

[능력단위요소: 기본 SQL 작성하기]

도서를 구매하지 않은 고객을 포함하여 고객의 이름과 고객이 주문한 도서의 판매가격을 구하시오.

SQL-> 외부 조인을 사용하라고 했으므로 OUTER JOIN을 사용해야 한다

select customer.name, saleprice from customer LEFT OUTER JOIN orders On customer.custid = orders.custid;

 

 

8. 위의 테이블에 집합(group)연산과 집계연산을 활용하여, 다음의 질문에 답을 구하기 위한 SQL문을 작성하여라.

[능력단위요소: 기본 SQL 작성하기]

판매가격(saleprice)8000원 이상인 도서를 2권이상 구매한 고객의 고객아이디와 도서수량을 구하여라.

select custid, count(*) from orders where saleprice >= 8000 group by custid having count(*) >= 2;

 

 

9. 다음 인덱스 사용을 중지하는 SQL 문장은? 4

 

ALTER INDEX IDX_EMP_ENAME MONITORING USAGE ; -> 사용을 하는지 안하는지 모니터링

ALTER INDEX IDX_EMP_ENAME NOMONITORING USAGE ;

ALTER INDEX IDX_EMP_ENAME VISIBLE ;

ALTER INDEX IDX_EMP_ENAME INVISIBLE ;

 

 

10. 어떤 테이블이 있다. 속성 중에는 사람이름들이 있다. 가나다 순으로 정렬해서 보고 싶다. 그런데 sql 문장에서 정렬을 하기 위해서 쓰이는 order by 구문은 속도가 무지 느리다고 한다. 다행이도 사람이름속성에 인덱스가 걸려있다고 한다. order by 구문을 쓰지않고 정렬하는 방법을 SQL문장의 예시와 함께 간략히 설명을 기술하시오.

[능력단위요소: 고급 SQL 작성하기]

 

인덱스가 걸려있다면 순번이 있으니 정렬이 가능하다. 

 

만약 emp라는 테이블에 있는 직원 이름(ename)에 인덱스가 걸려있고 가나다 순으로 오름차순으로 정렬해서 보고싶다면 where ename > ‘0’;을 통해서 order by 구문을 쓰지 않고도 정렬이 가능하다.

select /*+ index (emp idx_emp_ename) */ ename
from emp
where ename > ‘0’;

/* */ 사이의 내용은 힌트구문으로 생략 가능하다

 

 

11. 다음 중 PL/SQL의 기본 구조에 포함되지 않는 구성부는? 2

[능력단위요소: 고급 SQL 작성하기]

선언부(Declare)

정의부(Define)

실행부(Begin)

예외처리부(Exception)

 

Declare, Begin, End, Exception

 

 

12. 아래의 그림을 간략하게 설명 해보시오.

[능력단위요소: 고급 SQL 작성하기]

 

 

PL/SQL블록 안에 SQL 구문이 있다.

SQL 구문(select ~ from ~ )은 데이터베이스 엔진에서 처리,

PL/SQL 구문(변수 v_id 등.. )은 PL/SQL 엔진에서 처리한다.

두개는 into로 연결한다.

 

 

13. 다음 중 PL/SQL 구문 밖의 SQL영역에서 사용하기 위한 변수를 선언한 것은 무엇인가? 1

[능력단위요소: 고급 SQL 작성하기]

VARIABLE v_temp NUMBER;

v_temp VARCHAR2(20);

TYPE r_type IS RECORD (...) ; v_temp r_type;

v_temp pl_emp%ROWTYPE;

 

PL/SQL 구문 밖의 SQL영역에서 사용하기 위한 변수 : 비 PL/SQL변수

 

 

14. 다음 중 PL/SQL 연산자와 그 설명으로 올바른 것은? 3

[능력단위요소: 고급 SQL 작성하기]

|| - 논리값을 OR 하는 연산이다. 둘중에 하나라도 참이면 결과값이 참이다.

    -> OR이 맞기는 한데 PL/SQL에서는 OR이 아니다.

    -> 프로그램에서는 and가 && or이 ||

    -> 맞는 문장이나 PL/SQL에서는 오답

^ - 제곱 연산을 나타낸다. pow()메소드와 역할이 같다

    -> ^ 공학용 계산기에서만 제곱 연산을 나타내는 것임

:= - 대입, 배정, 할당 연산으로 우변 항의 값을 좌변 항에 넣는 역할을 한다

    -> 다른 언어에서는 = 이 등호가  배정이다.

<> - 논리 연산자로서 비교값이 NULL과 같지 않을 때 결과값이 참이다.

    -> 논리 연산자(and, or 같이 true, false로 값이 나오는 것)가 아니라 비교 연산자이며 뒤에 설명도 틀렸음.

 

 

15. 아래 PL/SQL 의 제어문에 대한 설명과 가장 거리가 것은? 3

[능력단위요소: 고급 SQL 작성하기]

 

Java언어의 do~while문과 동일한 특징을 가진다. -> 일단 1번은 무조건 실행을 한다.

반복 횟수를 모를 경우 사용된다. -> O(그래서 조건을 걸어 줌), 반복 횟수를 알 수 없을 때는 for문을 쓴다.

조건에 따른 분기(branch)으로서, 비슷한 성질의 for문이 있다. -> while, loop는 반복문에 해당함

no1>5 구문은 종료 조건을 나타낸다.

 

 

16. 미리정의 되어 있는 오라클 예외들 중 예외명: DUP_VAL_ON_INDEX 는 어떤 경우에 발생되는가? 4

[능력단위요소: 고급 SQL 작성하기]

문자를 숫자로 변환시 실패 했을 때

select문이 두 건 이상의 행을 리턴했을 때

잘못된 커서 조작이 실행될 때

유일 인덱스에 중복 값을 입력했을 경우

 

 

17. 아래 그램에서 &id 에 대한 설명으로 적합한 것은? 2

id 변수의 주소(adress)값을 의미한다. -> &가 통상적으로 주소값을 의미하긴 하지만 PL/SQL에서는 단지 값을 입력받는 역할을 함

단지 사용자로부터 값을 입력 받는 역할을 한다.

PL/SQL 변수를 바인드 한다.

프로시저의 매개변수로서 중개 역할을 한다.

 

 

18. 아래 그림과 같이 up_sal 이라는 프로시저를 작성하였다. 10라인에서 이 프로시저를 사용하기 위한 코드를 작성하고자 한다. 알맞은 것은? 4

[능력단위요소: 고급 SQL 작성하기]

PROCEDURE upsal(206)

RUN upsal(206)

upsal(206)

EXEC upsal(206) -> 프로시저를 사용할 경우 EXEC


Function이면 Select From..

 

 

19. 다음과 같은 상황에서 필요한 기능은 무엇인가? 1

[능력단위요소: 고급 SQL작성하기]

각종 센서 정보값(센서ID, 온도,습도,미세먼지,현재시간) 을 저장하는 <센서 정보> 테이블이 있다. 센서로부터 값이 수집될 때마다 이 테이블은 업데이트 쿼리를 실행한다. 값을 갱신한다는 뜻이다. 문제는 값이 갱신되어서 이력이 없다는 것이다. 그래서 <센서 정보 이력> 테이블을 만들어서, <센서정보> 테이블에 업데이트 쿼리를 수행할 때 마다, 자동으로 <센서 정보 이력> 테이블에 값을 입력시켜 누적 시키고자 한다.

 

trigger

sequence

package

function

 

 

20. PL/SQL의 프로시저와 함수(function)mode에 대한 설명으로 알맞지 않은 것? 4

[능력단위요소: 고급 SQL 작성하기]

IN 모드: 사용자 -> 프로시저,함수 로 전달 입력

OUT 모드: 프로시저,함수 -> 호출환경(SQL클라이언트) 로 출력

IN OUT 모드: 사용자로부터 입력, 호출환경(SQL클라이언트)로 출력 모두 가능

NOT IN OUT모드: 사용자 입력, 호출환경(SQL클라이언트) 출력 모두 불가, 프로시저,함수 내부 출력 가능

 -> 이런 건 없음

 

 

728x90
728x90