단답형
1번. SELECT ABS(-3.8), FLOOR(3.8), TRUNC(3.8) ROUND(3.8) FROM DUAL; 에 대한 값을 구하시오.
답 : 3.8, 3, 3, 4
2번. 아래에서 설명하는 것은 무엇인가?
[설명]
+ 복잡한 질의를 단순하게 작성할 수 있다. 또한 해당 형태의 SQL문을 자주 사용할 때 이용하면 편리하게 사용할 수 있다.
+ 사용자에게 정보를 감출 수 있다.
+ 실제 데이터를 가지고 있지 않다.
답 : VIEW
3. 아래와 같은 데이터가 들어있는 테이블에서 아래 SQL이 수행되었을 때의 결과 건수는?
[데이터]
계층번호 상위계층번호
-----------------------------
1 null
2 null
4 1
5 1
6 2
7 2
8 4
9 5
10 6
11 7
[SQL]
(SQL은 조건절 외에는 가상으로.,..)
SELECT LEVEL,
LPAD('** ', (LEVEL-1)*2,' ') || 계층번호 AS 계층트리,
계층번호,
상위계층번호
FROM SQLD_D3
START WITH 상위계층번호 IS NULL
CONNECT BY 계층 번호 = PRIOR 상위계층번호;
- 답 : 2
4번. 아래의 SQL 구문을 완성하시오.(SQL SEVER)
[SQL] ( ) DEPT ( ) VARCHAR(30) NOT NULL;
- 답 : ALTER TABLE, ALTER COLUMN
*SQL SERVER에서는 ALTER COLUMN, ORACLE에서는 MODIFY임
5번. 아래와 같은 테이블이 있을 때 모든 SQL이 수행된 이후의 결과는?
[테이블]
TABLE : SQLD_D5
COL1 VARCHAR2(30)
COL2 NUMBER
[SQL]
INSERT INTO SQLD_D5(COL1, COL2) VALUES('ABCD', NULL);
INSERT INTO SLQLD_D5(COL2,COL2) VALUES('BC',NULL);
ALTER TABLE SQLD_D5 MODIFY COL2 DEFAULT 10;
INSERT INTO SQLD_D5(COL1,COL2) VALUES('XY',NULL);
INSERT INTO SQLD_D5(COL1) VALUES('EXD');
SELECT SUM(COL2) FROM SQLD_D5;
-답 : 10
풀이) DEFAULT라는 건 값이 들어오지 않을때 그 값을 DEFAULT값으로 표시하는 것을 의미합니다.
null은 값이 없는게 아니라 정의되지 않은 값을 의미합니다. 즉, 값이 있다는 이야기이니
default 값이 들어가 이유가 없는거죠.
직접 null을 넣어준다는건 정의되지 않은 값을 넣어준다는 뜻입니다.
null로 명시를 해주면 insert해서 null로 들어갑니다. -> null로 명시하면 default값이 적용 되지 않고 null이 들어감
아무것도 쓰지 않으면(값이 들어오지 않으면) null값이 들어가는게 아니라 default가 null이라서 null이 들어간다고 보면 됩니다. 실제로 default값을 끌때 default null이라고도 하거든요
insert .. values(null)------------------>명시적인 null입력이므로 default작동 안함(값이 있으므로)
insert into tab(a) values (1) ------------------------> b컬럼에 대한 명시가 없으므로 b 컬럼에 기본 세팅인 null default가 들어감
default를 해제할 때 명령어가 default null 변경이라는 걸 생각하면 이해가 쉬울듯하네요.
6번. 테이블 생성을 위한 권한을 주기 위해 아래의 SQL을 완성하시오.
[SQL] ( ) CREATE TABLE TO USER01;
- 답 : GRANT
7번. 아래와 같은 결과가 나오도록 SQL을 작성하시오.
[결과]
회원ID RANK 주문금액
-----------------------------------
B 1 450
G 2 255
F 2 255
H 3 100
[SQL]
SELECT 회원ID,
DENSE_RANK() OVER(ORDER BY( ) ),
주문금액
FROM SQLD_D7;
-답 : 주문금액 DESC
* 주문금액으로 ORDER BY 시 동일 주문금액에 대해서 동일 등수가 매겨질 수 있음
8번. 아래의 SQL 결과를 작성하시오.
[SQL] SELECT Upper(Sqldeveloper) FROM DUAL;
-답 ㅣ SQLDEVELOPER
2과목 : SQL 기본 및 활용
1. ERD를 참고하여 아래의 SQL 중 오류가 날 수 있는 SQL을 고르시오.
[ERD]
TABLE A -------<- TABLE B / 컬럼 정보 및 데이터
-답 : ...... WHERE 문자열 컬럼 > 0
*TABLE B 의 컬럼 중 문자열 컬럼에 대해서 숫자 비교를 하는 SQL이 답임
*문자와 숫자가 만나면 문자가 숫자로 묵시적 형변환이 일어남. 해당 문자열에는 숫자 뿐만 아니라 문자가 존재함
2. ERD를 참고하여 아래의 SQL 중 오류가 날 수 있는 SQL을 고르시오.
[ERD]
TABLE A -------<-TABLE B -<-------------TABLE C
PK A A,B C
- 답 : 서브쿼리에서 B 테이블의 A컬럼만 조인조건으로 나오는 SQL이 답임
* 단일 행을 요구하는 SQL에서 서브쿼리의 결과가 PK 중 일부 컬럼만 들어와서 다중행이 나오는 서브쿼리는 오류가 남.
3번. 아래의 결과를 보고 빈칸에 들어가는 GROUP BY 뒤의 내용을 고르시오.
[결과]
COL1 COL2 집계결과
-답 : ROLLUP(COL1,COL2)
*COL1과 COL2가 모두 NULL인 전체 집계와 COL1의 소계만 존재하므로 ROLLUP임
4번. 데이터가 주어지고 WHERE절에서 WHERE(COL1,COL2) in ((1000,'ABC'))결과로 알맞은 것은?
- 답 : 위의 조건은 COL1,COL2가 동시에 1000, 'ABC'인 것을 찾는 것으로 데이터 상 한건이 도출됨.
5번. 데이터가 주어지고 WHERE 절에서 WHERE COL1 in (1,2,NULL) 결과로 알맞은 것은?
- 답 : IN (.....) 의 NULL이 있을 경우는 COL1 IN(1,2)와 동일한 결과임
* NULL 은 비교에서 애초에 제외되며 IN(...)안에 NULL이 있어도 NULL비교는 되지 않음
6번. 아래의 실행계획의 순서를 바로 적은 것은?
[보기]
0-SELECT ..
1-NESTED LOOP JOIN
2-NESTED LOOP JOIN
3-TABLE ACCESS(FULL)
4-TABLE ACCESS(BY INDEX ROWID)
5-INDEX(RANGE SCAN)
6-TABLE ACCESS(BY INDEX ROWID)
7-INDEX(RANGE SCAN)
답 : 3-5-4-2-7-6-1-0
7번. SELECT nvl(count(*), 9999) from table where 1=2 의 결과 값은?
- 답 : 0
* COUNT(*) 인 경우 공집합일때 0을 반환하고 다른 집계함수의 경우는 NULL을 반환함
8번. 아래의 데이터가 있을 때 아래의 SQL에 대한 결과값은?
[데이터]
col1 col2
-------------
1 100
1 null
2 100
2 200
[SQL]
SELECT A,SUM(X) FROM TAB GROUP BY A;
- 답 : 1 100 / 2 300
9번. 아래와 같은 SQL이 순서대로 수행되고 난 후 결과 값으로 알맞은 것은?
[SQL]
(1) INSERT INTO TAB1 VALUES (1);
(2) INSERT INTO TAB1 VALUES (2);
(3) SAVEPOINT SV1;
(4) UPDATE TAB1 SET COL1=4 WHERE COL1=2;
(5) SAVEPOINT SV1;
(6) DELETE TAB1 WHERE COL1 >=2;
(7) ROLLBACK TO SV1;
(8) INSERT INTO TAB1 VALUES(3);
(9) SELECT MAX(COL1) FROM TAB1;
- 답 : 4
*SV1이 같을 경우 가장 아래에 있는 쪽으로 ROLLBACK됨.
10번. TRIGGER에 대한 설명중 부적절한 것은? (******)
- 답 : DELETE ON TRIGGER 의 경우
: OLD는 삭제 전 데이터를,
: NEW는 삭제 후 데이터를 나타낸다. + NULL을 가지므로 해당 보기가 답이 아닐 수 있음
11번. SELECT 결과가 NULL이 아닌 경우는?
[보기]
+ COALESCE('AB','BC','CD')
+ CASE WHEN 'AB' THEN 'BC' ELSE 'CD' END...
+ DECODE('AB','CD','DE')
+ NULLIF('AB','CD')
-답 : COALESCE('AB','BC','CD')
"COALESCE 함수는 인수의 숫자가 한정되어 있지 않으며, 임의의 개수 EXPR에서 NULL이 아닌 최초의 EXPR을 나타낸다.
만일 모든 EXPR이 NULL이라면 NULL를 리턴한다."
"NVL/ISNULL"
"NULLIF함수는 EXPR1이 EXPR2와 같으면 NULL을, 같지 않으면 EXPR1을 리턴한다. 특정 값을 NULL로 대체 하는 경우에 유용하게 사용할 수 있다. NULLIF(EXPR1,EXPR2)"
12번. 아래의 데이터가 있을 떄 SQL이 수행된 결과로 옳은 것은?
[데이터]
COL1 COL2
----------------------
100 100
NULL 60
NULL NULL
[SQL]
SELECT COALESCE(COL1, COL2*50, 50) FROM TAB1;
-답 : 100 / 3000 / 50
13번. DML,DCL,DDL이 잘못 짝지워진 것은?
-답 : DCL : SELECT
* SELECT 는 DML임
14번. SQL명령어중 DCL인 것은?
[보기]
+ UPDATE, GRANT, SELECT, COMMIT
-답 : GRANT
15번. 문자열이 들어갈때 빈 공간을 채우는 형태의 데이터 타입은?
[보기]
+VARCHAR2, CHAR, DATE, NUMBER
-답 : CHAR
16.번 아래의 SQL과 같은 SQL은? (TOP() 과 ORACLE의 ROWNUM, ORDER BY SQL에 관련된 문제)
[SQL]
SELECT TOP(10) ENAME,SAL
FROM EMP
ORDER BY SAL;
- 답 : 보기에서 ORDER BY 구문과 ROWNUM이 같은 레벨에 없는 SQL
* SELECT .. FROM (SELECT ...)
-> 같은 SELECT 내에 있는 것을 같은 레벨이라 함
*답 예시
SELECT ...
FROM (SELECT ... FROM ... ORDER BY)
WHERE ROWNUM <=10
17번. 아래의 계층형 SQL 수행했을 때 아래와 같은 결과가 나올때 ( )을 채우시오.
[SQL]
SELECT LEVEL,
LPAD('** ',(LEVEL-1)*2,' ') || 사원 AS 사원트리,
관리자,
사원
FROM SQLD_17
START WITH ( )
CONNECT BY PRIOR( )
-답 : 관리자 IS NULL, 사원 = 관리자
18번. SQL SET OPERATOR에서 중복 제거를 위해 정렬 작업을 하지 않는 집합연산자는?
답 : UNION ALL
19번. SQL 조인 방식 아래의 설명을 만족하는 조인은?
[설명]
+ 대용량 데이터를 정렬하여 조인한다.
+ 동등조인, 비동등 조인에서 다 사용 가능하다
+ 기타 등등
- 답 : Sort Merge JOIN
20번. 아래 ERD를 참고하여 모든 회원의 일자별 총 주문금액을 구하는 SQL문 중 잘못된 SQL은?
[ERD]
테이블A --------o <- 테이블 B -> o -------테이블 C
*optional관계로 연결되어 있음
[보기]
+스칼라 서브쿼리로 합 구하는 SQL
+ OUTER JOIN으로 합 구하는 SQL
+ INNER JOIN으로 합 구하는 SQL
+ UNION ALL로 위는 EXIST, 아래는 JOIN형태
-답 : INNER JOIN 형태 SQL
* 모든 회원을 구하라고 했으나 일부 INNER JOIN인 경우 일부 회원이 누락됨.
21번. 아래의 SQL 의 로우의 건수로 올바른 것은?
[데이터]
TABLE A
COL1 COL2
--------------
1 2
1 2
1 3
TABLE B
COL1 COL2
--------------
1 2
1 4
1 5
[SQL]
SELECT DISTINCT COL1, COL2 FROM TAB_A --> 질문 DISTINCT 할때 하나로 만드나 1 2 이부분 정답
UNION ALL
SELECT COL1, COL2 FROM TAB_B;
-답 : 5건 (실제 문제에선 9건일듯)
22번. 아래의 데이터가 있을 때 다음 SQL의 로우의 건수로 맞는 것은?
[데이터]
...
[SQL]
SELECT COUNT(*)
FROM TAB_A, TAB_B
WHERE TAB_A.COL1 = TAB_B.COL1
AND NVL(A, COL2, -1) = NVL(B.COL2, -1)
AND NVL(A, COL3, -1) = NVL(B.COL3, -1)
-답 : NVL(A,B) A가 NULL인 경우 B, NULL이 아닌 경우 A인 데이터를 구하면 됨.
* INNER JOIN 이므로 JOIN 조건을 만족하는 로우만 가져와서 조건을 수행해야 함
23번. 아래와 같은 테이블 구조를 가졌을 때 UNIQUE INDEX SCAN을 할 수 없는 것은?
[구조]
+ PK : KEY1, KEY2
[보기] SELECT ..
+ 모두 사용할 수 없다.
+ WHERE KEY1 =1 AND KEY2 = 2
+ WHERE (KEY1,KEY2) IN( (1,2) )
+ WHERE KEY1 = 1
- 답 : WHERE KEY1= 1만 있는 것
--> 2,3번은 unique index scan을 할 수 있으니까 1번이 안되고
4번은 PK의 구성칼럼중 일부만이 들어올 경우는 unique index scan이 아닌 range scan이 됩니다.
이거 프라이머리키 KEY1 만해서 Unique Index Scan 인건가요????
PK가 두개 있는데 하나만 where써서 그렇습니다. PK가 여러개면 전부해야지 unique index scan 사용가능합니다.
24번. 아래의 ERD가 있을때, 아래 SQL 대로 수행될 경우 오류가 발생하는 구간은?
[ERD]
TABLE 고객 ------------o <- TABLE 주문
고객ID 주문ID
고객명 고객ID
상품
+ PRIMARY KEY : 고객(고객ID)
+ 주문(고객ID) REFERENCES 고객(고객ID)
[보기]
+ INSERT INTO 고객 VALUES ('C001', 'AAA');
+ INSERT INTO 주문 VALUES ('O001', 'C001', 'XXX');
+ UPDATE 주문 SET 고객ID = NULL WHERE 주문ID = 'O001';
+ INSERT INTO 주문 VALUES ('O002','C002','YYY');
-답 : 4번째 ('C002' 고객ID가 주문에만 있을 수 없음)
25번. CROSS JOIN과 NATURAL JOIN에 대한 차이점에 대해서 잘 못 설명한 것은?
- 답 : CROSS JOIN과 NATURAL JOIN은 WHERE절에서 조건을 걸수 없다는 내용
"NATURE JOIN의 경우 WHERE절에서 JOIN조건을 추가할 수 없지만, CROSS JOIN의 경우 WHERE절에 JOIN조건을 추가할 수 있다.
그러나, 이 경우는 CROSS JOIN이 아니라 INNER JOIN과 같은 결과를 얻기 때문에 CROSS JOIN을 사용하는 의미가 없어지므로, 권고하지 않는다."
26번. 아래와 같이 PK 컬럼이 되어 있을 때 가장 적합한 파티셔닝 방법은 무엇인가? -->이거 안배웠던 내용
[테이블]
+ PK : 지점,코드 ... 등등
+ 데이터는 대용량임
[보기]
+ RANGE, LIST, HASH, INTERVAL
-답 : LIST(PK컬럼의 형태가 지점,코드 등이므로)
27번. 아래 2개 테이블을 특정 JOIN후 나타난 결과이다. 어떤 조인인지 고르시오.
[데이터]
TABLE A
COL1 COL2
--------------
1 2
2 2
3 3
TABLE B
COL1 COL2
--------------------
1 2
2 4
4 5
[SQL 결과]
SELECT *
FROM TAB_A( ) TAB_B
A.COL1, A.COL2, B.COL1, B.COL2
1 2 1 2
2 2 2 4
NULL NULL 4 5
-답 : RIGHT OUTER JOIN
28번. 함수를 이용해 파티션별 윈도우에서 가장 먼저 나온 값을 구하는 WINDOW FUNCTION을 고르시오.
- 답 : FIRST_VALUE
29번. 아래의 SQL이 순차적으로 수행된 후의 결과로 올바른것은?
[SQL]
CREATE TABLE SQLD_29 (N1 NUMBER);
INSERT INTO SQLD_29 VALUES(1);
INSERT INTO SQLD_29 VALUES(2);
CREATE TABLE TMP_SQLD_29 (N1 NUMBER);
INSERT INTO TMP_SQLD_29 VALUES(1);
TRUNCATE TABLE TMP_SQLD_29;
ROLLBACK;
COMMIT;
SELECT SUM(N1) FROM SQLD_29;
-답 : 3 (CREATE, TRUNCATE 같은 DDL은 묵시적 COMMIT을 수행함)
30번. 아래와 같은 데이터가 있을 때 SQL의 실행 결과로 올바른 것은?
[데이터] TABLE_A
COL1 COL2
-----------------
1 10
2 20
3 NULL
[SQL]
SELECT AVG(NVL(COL2,0)) AS AVG_COL FROM TABLE_A;
-답 : 10 (NULL이 0으로 바뀌면서 모수가 3이 됨)
31번. 아래의 SQL에서 ORDERBY로 사용할 수 없는 것은?
[SQL]
SELECT JOB, COUNT(*) AS CNT
FROM TABLE_A
GROUP BY JOB;
[보기]
+ ORDER BY JOB
+ ORDER BY CNT DESC
+ ORDER BY COUNT(*)
+ ORDER BY 3
- 답 : 4번째 (ORDER BY 3), 컬럼이 2개 임
32번. 아래의 SQL이 수행된 후 T1의 건수는?
[데이터]
TABLE : T1
COL1 COL2 COL3
-------------------------
A X 1
B Y 2
C Z 3
TABLE : T2
COL1 COL2 COL3
--------------------------
A X 1
B Y 2
C Z 3
D 가 4
E 나 5
[SQL]
MERGE INTO T1
USING T2
ON(T1.COL1 = T2.COL1)
WHEN MATCHED THEN
UPDATE SET T1.COL3 = 4
WHERE T1.COL3 = 2
DELETE WHERE T1.COL3 <=2
WHEN NOT MATCHED THEN
INSERT INTO(T1.COL1, T1.COL2, T1.COL3) VALUES(T2.COL1,T2.COL2,T3.COL3);
-답 : 5건
1과목
1번. 도메인의 특징에 대해서 설명한 후 보기에서 고르는 문제
- 답 : 도메인
2번. 반정규화에 대한 설명 중 부적절한 것은?
- 답 : 반정규화 전에 테이블 추가(통계 테이블 추가, 중복 테이블 추가, 이력 테이블 추가, 부분 테이블 추가)를 통해 반정규화를 하지 않음. (X)
* 해당 내용은 반정규화기법임.
3번. 반정규화 대상이 아닌것은?
- 답 : Sorting, Order by 하는 프로세스
- 자주 사용되는 테이블에 접근(Access)하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우에 반정규화를 검토한다.
- 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없을 경우에 반정규화를 검토한다.
- 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블)을 생성한다.
- 테이블에 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토한다.
4번. 발생시점에 따른 엔터티 분류에 의한 중심 엔터티가 아닌 것은?
[보기]
+ 매출, 계약, 사원, 주문
- 답 : 사원(기본 엔터티임)
5번. 발생시점에 따른 엔터티 분류에 대해서 아래의 내용중 잘못 짝지워진것은?
[보기]
+ 기본/키 엔터티 : 조직 사원
+ 기본/키 엔터티 : ???
+ 중심 엔터티 : 상품, 주문상품
+ ...
- 답 : 중심엔터티 : 상품, 주문상품 -> 상품은 기본 엔터티임
7번. 테이블 3개(옵션널 관계) 식별자 관계 3개 테이블에 대한 설명 중 부적절한 것은? (** 답이 두개로 보임)
테이블A -------------o <- 테이블B -----------o <- 테이블C
식별자 관계 식별자 관계
[보기]
+ B를 제외하고 A와 C는 카테시안 조인이 된다.
+ 조인 최소 조건은 3개이다.
+ B, C 에서 C의 데이터는 모두 B에 존재하므로 Outer Join을 안해도 된다.
+ B는 A의 데이터를 모두 포함하지 않는다.
- 답 : 조인 최소 조건은 N개 테이블일 경우 n-1개이다(2개)
* A,C는 식별자 관계이므로 카테시안 조인이 되지 않을 수 있다.
8번. 식별자에 대한 설명으로 잘못된것은?
- 답 : 주식별자 / 보조 식별자 설명에 대해서 주식별자가 대표성을 띌수 없다는 내용
9번. 분산 데이터베이스의 특징 중 저장 장소 명시가 불필요 하다는 특성은 무엇일까?
[보기]
+ 분할 투명성, 위치 투명성, 지역사상 투명성, 병행 투명성
- 답 : 위치투명성
10번. 아래의 설명 중 바른것은?(ROW Migration 과 Row Chaining에 대한 설명)
- 답 : ROW Chaining에 대한 설명이 맞음
"많은 칼럼은 로우 체이닝과 로우 마이그레이션이 많아지게 되어 성능이 저하된다. 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가
모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태가 로우체이닝(Row Chaining)현상이다.
또한, 로우 마이그레이션(Row Migration)은 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고
다른 블록의 빈 공간을 찾아 저장하는 방식이다.
로우 체이닝과 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터베이스
메모리에서 디스크와 I/O 입출력이 발생할 때 불필요하게 I/O가 많이 발생하여 성능이 저하된다."