SQL 개발자 자격증 2024년 53회차 기출 복원입니다. 각 문제 아래의 「정답·해설 보기」를 펼치면 정답과 해설이 나타나요. 실제 시험 환경(타이머·자동 채점·오답 누적)에서 풀어보고 싶다면 글 맨 아래 「직접 풀러가기」를 눌러주세요.
문제 1
4지선다모델링 관점 중 업무가 어떤 데이터와 관련되어 있는지 또는 데이터 간의 관계가 무엇인지에 집중하는 관점으로 가장 적절한 것은?
- 1.데이터 관점
- 2.프로세스 관점
- 3.상관 관점
- 4.기능 관점
정답·해설 보기▾
정답
1번. 데이터 관점
해설
정답: 1. 데이터 관점은 업무가 어떤 데이터와 관련되어 있는지, 데이터 간 관계가 무엇인지에 집중한다.
오답 풀이
- 1번: 데이터와 데이터 간 관계를 중심으로 보는 관점이다.
- 2번: 프로세스 관점은 업무가 실제로 처리되는 절차와 흐름에 집중한다.
- 3번: 상관 관점은 데이터와 프로세스의 상호 관련성을 보는 관점이다.
- 4번: 기능 관점은 일반적으로 업무 기능이나 처리 단위에 초점을 둔다.
보충 개념 데이터 모델링에서는 데이터 관점, 프로세스 관점, 데이터와 프로세스의 상관 관점을 구분한다. 데이터 관점은 정적인 데이터 구조를 파악하는 데 중요하다.
문제 2
4지선다데이터 용량과 성능에 대한 설명으로 옳지 않은 것은?
- 1.데이터 용량이 증가하면 조회 범위와 I/O 증가로 성능 저하가 발생할 수 있다.
- 2.대량 데이터 테이블은 파티셔닝이나 인덱스 전략을 고려할 수 있다.
- 3.데이터 용량이 증가해도 테이블 구조와 인덱스 설계는 성능에 영향을 주지 않는다.
- 4.불필요한 중복 데이터는 저장 공간 증가와 정합성 문제를 유발할 수 있다.
정답·해설 보기▾
정답
3번. 데이터 용량이 증가해도 테이블 구조와 인덱스 설계는 성능에 영향을 주지 않는다.
해설
정답: 3. 데이터 용량이 증가할수록 테이블 구조, 인덱스 설계, 파티셔닝 여부는 성능에 큰 영향을 준다.
오답 풀이
- 1번: 데이터가 많아지면 더 많은 블록을 읽게 되어 I/O가 증가할 수 있다.
- 2번: 대량 데이터에서는 파티셔닝과 인덱스 설계가 중요하다.
- 3번: 구조와 인덱스 설계가 성능에 영향을 주지 않는다는 설명은 틀리다.
- 4번: 중복 데이터는 저장 공간과 정합성 관리 비용을 증가시킨다.
보충 개념 데이터 모델과 성능은 밀접하게 연결된다. 대용량 테이블에서는 정규화, 반정규화, 인덱스, 파티셔닝 등을 함께 고려해야 한다.
문제 3
4지선다다음 중 엔터티의 발생 시점에 따른 분류가 아닌 것은?
- 1.기본 엔터티
- 2.중심 엔터티
- 3.유형 엔터티
- 4.행위 엔터티
정답·해설 보기▾
정답
3번. 유형 엔터티
해설
정답: 3. 엔터티의 발생 시점에 따른 일반적인 분류는 기본 엔터티, 중심 엔터티, 행위 엔터티이다.
오답 풀이
- 1번: 기본 엔터티는 업무에 원래 존재하는 독립적인 엔터티이다.
- 2번: 중심 엔터티는 기본 엔터티로부터 발생하고 업무의 중심 역할을 한다.
- 3번: 유형 엔터티는 발생 시점에 따른 표준 분류가 아니다.
- 4번: 행위 엔터티는 두 개 이상의 엔터티 간 업무 행위로부터 발생한다.
보충 개념 발생 시점에 따른 엔터티 분류는 기본, 중심, 행위 엔터티로 구분한다. 예를 들어 고객은 기본 엔터티, 주문은 행위 엔터티로 볼 수 있다.
문제 4
4지선다다음 설명에 해당하는 정규형으로 가장 적절한 것은?
<설명> 일반 속성이 주식별자에 종속되어 있고, 주식별자가 아닌 일반 속성 간의 이행 함수 종속이 제거된 상태이다.
- 1.제1정규형
- 2.제2정규형
- 3.제3정규형
- 4.비정규형
정답·해설 보기▾
정답
3번. 제3정규형
해설
정답: 3. 제3정규형은 제2정규형을 만족하면서 이행 함수 종속을 제거한 정규형이다.
오답 풀이
- 1번: 제1정규형은 속성의 원자성을 만족하는 단계이다.
- 2번: 제2정규형은 부분 함수 종속을 제거하는 단계이다.
- 3번: 이행 함수 종속 제거와 관련되므로 정답이다.
- 4번: 비정규형은 정규화가 이루어지지 않은 상태이다.
보충 개념 이행 함수 종속은 A → B, B → C이면 A → C가 되는 종속 관계를 말한다. 제3정규화는 이러한 일반 속성 간 종속을 분리해 이상 현상을 줄인다.
문제 5
4지선다인조 식별자에 대한 설명으로 틀린 것은?
- 1.업무 식별자가 복잡할 때 인위적으로 식별자를 만들 수 있다.
- 2.인조 식별자는 보통 대체 식별자로 설계된다.
- 3.속성의 수가 적으면 인조 식별자를 반드시 사용해야 한다.
- 4.인조 식별자를 사용하더라도 업무적으로 유일성을 보장하는 제약을 고려해야 한다.
정답·해설 보기▾
정답
3번. 속성의 수가 적으면 인조 식별자를 반드시 사용해야 한다.
해설
정답: 3. 속성 수가 적다고 해서 인조 식별자를 반드시 사용해야 하는 것은 아니다.
오답 풀이
- 1번: 복합 업무 식별자가 지나치게 복잡하면 인조 식별자를 고려할 수 있다.
- 2번: 인조 식별자는 설계상 인위적으로 부여한 식별자이다.
- 3번: 반드시 사용해야 한다는 표현은 부적절하다.
- 4번: 인조 식별자를 쓰더라도 업무 유일성은 별도 제약으로 관리해야 한다.
보충 개념 인조 식별자는 편의성과 성능 측면에서 장점이 있지만, 업무 의미를 직접 담지 않는다. 따라서 자연 식별자 후보의 유일성 관리가 함께 필요할 수 있다.
문제 6
4지선다복합 주식별자를 가진 테이블에서 일반 속성이 주식별자 전체가 아니라 일부 속성에만 종속되어 있다. 이를 분리하는 정규화 단계로 가장 적절한 것은?
- 1.제1정규화
- 2.제2정규화
- 3.제3정규화
- 4.반정규화
정답·해설 보기▾
정답
2번. 제2정규화
해설
정답: 2. 복합 식별자의 일부에만 종속되는 부분 함수 종속을 제거하는 것은 제2정규화이다.
오답 풀이
- 1번: 제1정규화는 반복 속성이나 다중값 속성을 제거한다.
- 2번: 부분 함수 종속 제거에 해당한다.
- 3번: 제3정규화는 이행 함수 종속을 제거한다.
- 4번: 반정규화는 성능 등을 위해 의도적으로 중복을 허용하는 설계이다.
보충 개념 제2정규형은 제1정규형을 만족하면서 기본키 전체에 대해 완전 함수 종속을 만족해야 한다. 복합키 일부에만 의존하는 속성은 별도 엔터티로 분리한다.
문제 7
4지선다상호배타 관계에 대한 설명으로 옳지 않은 것은?
- 1.하나의 상위 엔터티 인스턴스가 여러 하위 유형 중 하나에만 속해야 하는 경우를 표현할 수 있다.
- 2.상호배타 관계는 하위 엔터티 간 중복 소속을 제한하는 의미를 가진다.
- 3.상호배타 관계는 배타적 상속을 표현할 수 없다.
- 4.상호배타 여부는 업무 규칙에 따라 결정된다.
정답·해설 보기▾
정답
3번. 상호배타 관계는 배타적 상속을 표현할 수 없다.
해설
정답: 3. 상호배타 관계는 하위 유형 간 중복을 허용하지 않는 배타적 상속 구조를 표현할 수 있다.
오답 풀이
- 1번: 상위 인스턴스가 하나의 하위 유형에만 속하는 구조를 표현한다.
- 2번: 하위 유형 간 중복을 제한한다는 설명은 적절하다.
- 3번: 배타적 상속을 표현할 수 없다는 설명은 틀리다.
- 4번: 상호배타 여부는 업무상 동시에 속할 수 있는지에 따라 결정된다.
보충 개념 슈퍼타입과 서브타입 관계에서 배타성은 한 인스턴스가 여러 서브타입에 동시에 속할 수 있는지 여부를 나타낸다. 상호배타는 동시에 여러 하위 유형에 속할 수 없다는 의미이다.
문제 8
4지선다참조 무결성을 구현하는 키로 가장 적절한 것은?
- 1.기본키
- 2.외래키
- 3.후보키
- 4.대체키
정답·해설 보기▾
정답
2번. 외래키
해설
정답: 2. 외래키는 자식 테이블의 값이 부모 테이블의 기본키 또는 유일키 값을 참조하도록 하여 참조 무결성을 구현한다.
오답 풀이
- 1번: 기본키는 개체 무결성과 관련이 깊다.
- 2번: 외래키가 참조 무결성을 구현한다.
- 3번: 후보키는 튜플을 유일하게 식별할 수 있는 속성 집합이다.
- 4번: 대체키는 후보키 중 기본키로 선택되지 않은 키이다.
보충 개념 개체 무결성은 기본키, 참조 무결성은 외래키, 도메인 무결성은 CHECK 제약조건 등으로 구현할 수 있다.
문제 9
4지선다데이터 모델링과 트랜잭션에 대한 설명으로 옳지 않은 것은?
- 1.트랜잭션은 논리적 연산 단위이다.
- 2.데이터 모델링에서는 업무 트랜잭션의 흐름과 데이터 정합성을 고려할 수 있다.
- 3.트랜잭션은 여러 작업이 하나의 단위로 커밋될 수 있다.
- 4.데이터 모델링에서는 트랜잭션을 표현하거나 고려할 수 없다.
정답·해설 보기▾
정답
4번. 데이터 모델링에서는 트랜잭션을 표현하거나 고려할 수 없다.
해설
정답: 4. 데이터 모델링에서는 업무 트랜잭션 단위와 데이터 정합성을 고려할 수 있으므로 트랜잭션을 표현하거나 고려할 수 없다는 설명은 틀리다.
오답 풀이
- 1번: 트랜잭션은 데이터베이스 상태를 변화시키는 논리적 작업 단위이다.
- 2번: 모델링 시 업무 처리 단위와 정합성을 고려한다.
- 3번: 트랜잭션 내 여러 작업은 함께 커밋될 수 있다.
- 4번: 트랜잭션을 고려할 수 없다는 설명은 부적절하다.
보충 개념 데이터 모델은 정적인 구조만이 아니라 업무 처리 중 발생하는 데이터 생성·변경 관계도 고려해야 한다. 트랜잭션 분석은 모델의 정합성과 성능 검토에 도움을 준다.
문제 10
4지선다바커 표기법에서 관계선에 대한 설명으로 가장 적절한 것은?
- 1.엔터티 간 관계는 선으로 표현하며, 필수성·선택성 등을 함께 나타낼 수 있다.
- 2.관계는 반드시 점선으로만 표현한다.
- 3.관계는 반드시 화살표로만 표현한다.
- 4.바커 표기법에서는 엔터티 간 관계를 표현할 수 없다.
정답·해설 보기▾
정답
1번. 엔터티 간 관계는 선으로 표현하며, 필수성·선택성 등을 함께 나타낼 수 있다.
해설
정답: 1. 바커 표기법에서는 엔터티 간 관계를 선으로 표현하며, 관계의 필수성·선택성 등을 함께 나타낼 수 있다.
오답 풀이
- 1번: 관계 표현에 대한 설명으로 가장 적절하다.
- 2번: 반드시 점선으로만 표현하지 않는다.
- 3번: 반드시 화살표로만 표현하지 않는다.
- 4번: 바커 표기법은 엔터티 간 관계 표현에 사용된다.
보충 개념 ERD 표기법은 바커 표기법, IE 표기법 등 여러 방식이 있다. 각 표기법은 관계의 선택성, 식별성, 카디널리티를 표현하는 방식이 다르다.
문제 11
4지선다다음 중 데이터 제어어(DCL)에 해당하는 명령어로만 묶인 것은?
- 1.CREATE, ALTER
- 2.INSERT, UPDATE
- 3.GRANT, REVOKE
- 4.COMMIT, ROLLBACK
정답·해설 보기▾
정답
3번. GRANT, REVOKE
해설
정답: 3. GRANT와 REVOKE는 권한을 부여하고 회수하는 데이터 제어어(DCL)이다.
오답 풀이
- 1번: CREATE, ALTER는 DDL이다.
- 2번: INSERT, UPDATE는 DML이다.
- 3번: GRANT, REVOKE는 DCL이다.
- 4번: COMMIT, ROLLBACK은 TCL이다.
보충 개념 SQL 명령어는 DDL, DML, DCL, TCL로 구분한다. DCL은 사용자 권한 제어와 관련된 명령어이다.
문제 12
4지선다SQL Server에서 하위 5개의 점수를 조회하되, 5번째 점수와 같은 동점자도 모두 포함하려고 한다. 가장 적절한 방법은?
- 1.TOP(5)만 사용하고 ORDER BY 없이 조회한다.
- 2.TOP(5) WITH TIES와 ORDER BY 점수 ASC를 사용한다.
- 3.TOP(5) WITH TIES와 ORDER BY 점수 DESC를 사용한다.
- 4.RANK()를 사용하되 ORDER BY 없이 조회한다.
정답·해설 보기▾
정답
2번. TOP(5) WITH TIES와 ORDER BY 점수 ASC를 사용한다.
해설
정답: 2. 하위 5개를 뽑으려면 점수를 오름차순으로 정렬하고 TOP(5) WITH TIES를 사용해 5번째와 같은 점수도 포함한다.
오답 풀이
- 1번: ORDER BY가 없으면 하위 기준이 명확하지 않다.
- 2번: 하위 5개와 동점자 포함 조건에 맞다.
- 3번: DESC는 상위 점수 기준이다.
- 4번: RANK도 정렬 기준 없이 사용할 수 없다.
보충 개념 WITH TIES는 마지막으로 선택된 행과 정렬 기준 값이 같은 행을 추가로 반환한다. Top-N 문제에서는 정렬 방향이 핵심이다.
문제 13
4지선다SQL 실행 결과로 가장 적절하지 않은 것은?
- 1.ROUND(4.875, 2) = 4.88
- 2.LENGTH('KOREAN') = 6
- 3.DATE_FORMAT('2022-11-02', '%Y-%m-%d') = 2022-11-02
- 4.SUBSTR('Gangneung Wonju', 8, 4) = 'g Wo'
정답·해설 보기▾
정답
4번. SUBSTR('Gangneung Wonju', 8, 4) = 'g Wo'
해설
정답: 4. 'Gangneung Wonju'에서 8번째 문자는 n이므로 8번째부터 4글자는 'ng W'이다.
오답 풀이
- 1번: 4.875를 소수 둘째 자리까지 반올림하면 4.88이다.
- 2번: KOREAN은 6글자이다.
- 3번: MySQL 기준 DATE_FORMAT 결과는 지정한 형식의 날짜 문자열이 될 수 있다.
- 4번: SUBSTR 시작 위치 계산이 틀렸다.
보충 개념 문자열 함수 문제는 시작 위치가 1부터인지, 길이 인수가 몇 글자를 의미하는지 정확히 확인해야 한다.
문제 14
4지선다다음 조건을 만족하는 행의 개수로 가장 적절한 것은?
<데이터>
ID AMT VOL 1 2500 5 2 3000 12 3 4000 8 4 5500 9 SQLWHERE AMT BETWEEN 3000 AND 5000 AND VOL <= 10- 1.1개
- 2.2개
- 3.3개
- 4.4개
정답·해설 보기▾
정답
1번. 1개
해설
정답: 1. AMT가 3000 이상 5000 이하이고 VOL이 10 이하인 행은 ID 3 하나이다.
오답 풀이
- 1번: ID 3만 조건을 만족한다.
- 2번: ID 2는 AMT는 맞지만 VOL이 12라 제외된다.
- 3번: ID 1과 ID 4는 AMT 범위에서 벗어난다.
- 4번: 모든 행이 조건을 만족하지 않는다.
보충 개념 BETWEEN은 양 끝값을 포함한다. AND 조건은 두 조건을 모두 만족해야 TRUE가 된다.
문제 15
4지선다다음 중 결과가 NULL이 아닌 것은?
- 1.NULLIF('AB', 'AB')
- 2.SUBSTR('ABC', 1, -1)
- 3.COALESCE('AB', 'CD')
- 4.NULL + 10
정답·해설 보기▾
정답
3번. COALESCE('AB', 'CD')
해설
정답: 3. COALESCE('AB', 'CD')는 첫 번째 NULL이 아닌 값인 'AB'를 반환한다.
오답 풀이
- 1번: NULLIF는 두 값이 같으면 NULL을 반환한다.
- 2번: Oracle에서 SUBSTR 길이가 음수이면 NULL이 반환된다.
- 3번: 첫 번째 인자가 NULL이 아니므로 'AB'가 반환된다.
- 4번: NULL이 포함된 산술 연산 결과는 NULL이다.
보충 개념 COALESCE는 여러 인자 중 첫 번째 NULL이 아닌 값을 반환한다. NVL, NULLIF, COALESCE의 반환 규칙은 자주 출제된다.
문제 16
4지선다다음 SQL의 결과로 가장 적절한 것은?
COL1 1 2 3 4 5 COL1 1 1 1 3 6 SQLSELECT COUNT(*) FROM T1, T2 WHERE T1.COL1 = T2.COL1;- 1.2
- 2.3
- 3.4
- 4.5
정답·해설 보기▾
정답
3번. 4
해설
정답: 3. T1의 1은 T2의 1 세 건과 매칭되고, T1의 3은 T2의 3 한 건과 매칭되므로 총 4건이다.
오답 풀이
- 1번: 매칭되는 값의 종류 수만 센 값이다.
- 2번: T2의 1 중복을 일부만 계산한 값이다.
- 3번: 1 매칭 3건 + 3 매칭 1건 = 4건이다.
- 4번: T2 전체 행 수와 혼동한 값이다.
보충 개념 조인은 값이 중복되면 중복된 조합만큼 결과 행이 늘어난다. 등가 조인의 결과 건수는 매칭되는 행 조합의 수로 계산한다.
문제 17
4지선다다음 ORDER BY 절의 의미로 가장 적절한 것은?
SQLORDER BY 주문번호 DESC, 금액 ASC- 1.주문번호 오름차순 정렬 후 금액 내림차순으로 정렬한다.
- 2.주문번호 내림차순 정렬 후 같은 주문번호 내에서 금액 오름차순으로 정렬한다.
- 3.금액만 오름차순으로 정렬하고 주문번호는 정렬하지 않는다.
- 4.주문번호와 금액을 모두 기본 오름차순으로 정렬한다.
정답·해설 보기▾
정답
2번. 주문번호 내림차순 정렬 후 같은 주문번호 내에서 금액 오름차순으로 정렬한다.
해설
정답: 2.
ORDER BY 주문번호 DESC, 금액 ASC는 먼저 주문번호를 내림차순으로 정렬하고, 주문번호가 같은 행들 사이에서는 금액을 오름차순으로 정렬한다.오답 풀이
- 1번: 주문번호와 금액의 정렬 방향이 반대이다.
- 2번: 제시된 ORDER BY 절의 의미와 일치한다.
- 3번: 주문번호도 정렬 기준에 포함된다.
- 4번: 주문번호에는 DESC가 명시되어 있으므로 기본 오름차순이 아니다.
보충 개념 ORDER BY에서 각 정렬 기준은 왼쪽부터 우선 적용된다. ASC는 오름차순, DESC는 내림차순이며 ASC는 생략 가능하다.
문제 18
4지선다학생 테이블을 생성하면서 학과 테이블을 참조하는 외래키를 설정하려고 한다. 다음 설명 중 옳지 않은 것은?
- 1.학생 테이블의 학과번호는 학과 테이블의 학과번호를 참조할 수 있다.
- 2.외래키 컬럼에 DEFAULT 값이 지정되어 있으면 값을 생략했을 때 기본값이 입력될 수 있다.
- 3.DEFAULT 값이 지정된 컬럼은 값을 생략하면 무조건 NULL이 입력된다.
- 4.외래키 값은 부모 테이블에 존재하는 값이어야 한다.
정답·해설 보기▾
정답
3번. DEFAULT 값이 지정된 컬럼은 값을 생략하면 무조건 NULL이 입력된다.
해설
정답: 3. DEFAULT 값이 지정되어 있으면 값을 생략했을 때 NULL이 아니라 기본값이 입력될 수 있다.
오답 풀이
- 1번: 학생의 학과번호가 학과 테이블을 참조하는 구조는 일반적이다.
- 2번: DEFAULT는 명시 값을 생략했을 때 적용될 수 있다.
- 3번: DEFAULT가 있으면 무조건 NULL이 입력된다는 설명은 틀리다.
- 4번: 외래키는 참조 무결성을 만족해야 한다.
보충 개념 DEFAULT는 INSERT 시 해당 컬럼 값을 생략하면 적용되는 기본값이다. 단, 명시적으로 NULL을 입력하면 DEFAULT가 적용되지 않을 수 있다.
문제 19
4지선다SAL 값을 기준으로 상위 3순위까지 조회하되, 동일 순위의 여러 행을 모두 포함하려고 한다. 가장 적절한 분석 함수는?
- 1.ROW_NUMBER
- 2.DENSE_RANK
- 3.COUNT
- 4.NTILE
정답·해설 보기▾
정답
2번. DENSE_RANK
해설
정답: 2. 동일한 SAL 값에 같은 순위를 부여하고 3순위까지 포함하려면 DENSE_RANK를 사용할 수 있다.
오답 풀이
- 1번: ROW_NUMBER는 동점자도 서로 다른 번호를 부여한다.
- 2번: DENSE_RANK는 동점자를 같은 순위로 처리하고 다음 순위를 건너뛰지 않는다.
- 3번: COUNT는 순위 함수가 아니다.
- 4번: NTILE은 행을 지정한 개수의 그룹으로 나눈다.
보충 개념 동순위를 포함한 Top-N 문제에서는 RANK 또는 DENSE_RANK를 고려한다. 순위 간 공백을 원하지 않으면 DENSE_RANK가 적절하다.
문제 20
4지선다주문월이 '201001'인 데이터만 존재하는 테이블에서 다음 조건을 사용했을 때 결과로 가장 적절한 것은?
SQLSELECT * FROM 주문 WHERE 주문월 = '201010';- 1.NULL 1행이 반환된다.
- 2.0이 반환된다.
- 3.공집합이 반환된다.
- 4.오류가 발생한다.
정답·해설 보기▾
정답
3번. 공집합이 반환된다.
해설
정답: 3. WHERE 조건을 만족하는 행이 없으면 SELECT 결과는 행이 없는 공집합이다.
오답 풀이
- 1번: 조건 불일치 시 NULL 행이 자동 생성되지 않는다.
- 2번: SELECT *는 COUNT가 아니므로 0이라는 값이 반환되지 않는다.
- 3번: 조건을 만족하는 행이 없으므로 공집합이다.
- 4번: 단순 비교 조건이므로 오류가 아니다.
보충 개념 SELECT * 조회에서 조건에 맞는 행이 없으면 결과 행이 없다. COUNT(*)를 사용하면 조건 만족 행 수인 0이 반환된다.
문제 21
4지선다사원 테이블을 셀프 조인하여 사원명과 매니저명을 조회하려고 한다. 매니저가 없는 사원은 '사장'으로 출력하는 표현식으로 가장 적절한 것은?
- 1.COALESCE(매니저명, '사장')
- 2.NULLIF(매니저명, '사장')
- 3.COALESCE(NULL, 사장)
- 4.매니저명 = NULL
정답·해설 보기▾
정답
1번. COALESCE(매니저명, '사장')
해설
정답: 1. 매니저명이 NULL이면 '사장'을 출력하려면 COALESCE(매니저명, '사장')을 사용한다.
오답 풀이
- 1번: 첫 번째 NULL이 아닌 값을 반환하므로 적절하다.
- 2번: NULLIF는 두 값이 같으면 NULL을 반환하는 함수이다.
- 3번: 문자열 리터럴 표기가 없고 매니저명 값을 고려하지 않는다.
- 4번: NULL 비교는 = NULL이 아니라 IS NULL을 사용해야 한다.
보충 개념 셀프 조인은 같은 테이블을 서로 다른 별칭으로 참조해 계층 관계를 표현할 때 사용한다. 상위 값이 없을 때는 COALESCE나 NVL로 대체 값을 출력할 수 있다.
문제 22
4지선다DELETE, TRUNCATE, DROP 명령어에 대한 설명으로 가장 적절하지 않은 것은?
- 1.특정 테이블에 대하여 WHERE 조건절이 없는 DELETE 명령을 수행하면 DROP TABLE 명령을 수행했을 때와 똑같은 결과를 얻을 수 있다.
- 2.DROP 명령어는 테이블 정의 자체를 삭제하고, TRUNCATE 명령어는 테이블을 초기 상태로 만든다.
- 3.TRUNCATE 명령어는 UNDO를 위한 데이터를 적게 생성하므로 동일 데이터량 삭제 시 DELETE보다 빠를 수 있다.
- 4.DROP과 TRUNCATE는 일반적으로 Auto Commit되고, DELETE는 사용자 Commit으로 수행된다.
정답·해설 보기▾
정답
1번. 특정 테이블에 대하여 WHERE 조건절이 없는 DELETE 명령을 수행하면 DROP TABLE 명령을 수행했을 때와 똑같은 결과를 얻을 수 있다.
해설
정답: 1. WHERE 없는 DELETE는 모든 행을 삭제하지만 테이블 구조는 남고, DROP TABLE은 테이블 정의 자체를 삭제하므로 결과가 같지 않다.
오답 풀이
- 1번: DELETE와 DROP의 결과를 같다고 했으므로 틀렸다.
- 2번: DROP과 TRUNCATE의 차이를 적절히 설명한다.
- 3번: TRUNCATE는 대량 삭제 시 DELETE보다 빠른 경우가 많다.
- 4번: DDL 성격의 DROP/TRUNCATE와 DML인 DELETE의 트랜잭션 처리 차이를 설명한다.
보충 개념 DELETE는 행 삭제, TRUNCATE는 테이블 데이터 초기화, DROP은 객체 삭제이다. 세 명령어는 롤백 가능성과 구조 유지 여부가 다르다.
문제 23
4지선다다음 SQL의 실행 결과로 가장 적절한 것은?
SQLSELECT LTRIM('aaaabcd', 'a') AS RESULT FROM DUAL;- 1.abcd
- 2.aaaabcd
- 3.bcd
- 4.NULL
정답·해설 보기▾
정답
3번. bcd
해설
정답: 3. LTRIM('aaaabcd', 'a')는 문자열 왼쪽에서 문자 a를 반복적으로 제거한다. 'aaaabcd'의 왼쪽 a들이 모두 제거되므로 결과는 'bcd'이다.
오답 풀이
- 1번: 왼쪽 a가 모두 제거되므로 'abcd'가 아니라 'bcd'이다.
- 2번: 왼쪽 제거가 수행되지 않은 결과이다.
- 3번: 왼쪽의 a 네 개가 제거된 올바른 결과이다.
- 4번: 제거 후 남는 문자열이 있으므로 NULL이 아니다.
보충 개념 LTRIM(char, set)은 문자열 왼쪽부터 set에 포함된 문자를 제거한다. 지정 문자가 아닌 문자를 만나면 제거를 멈춘다.
문제 24
4지선다다음 조건과 동일한 의미로 가장 적절한 것은?
SQLWHERE (COL1, COL2) IN ((1, 3), (1, 4))- 1.WHERE COL1 = 1 AND COL2 IN (3, 4)
- 2.WHERE COL1 IN (1, 3) AND COL2 IN (1, 4)
- 3.WHERE COL1 = 3 AND COL2 = 4
- 4.WHERE COL1 = 1 OR COL2 IN (3, 4)
정답·해설 보기▾
정답
1번. WHERE COL1 = 1 AND COL2 IN (3, 4)
해설
정답: 1. (COL1, COL2)가 (1,3) 또는 (1,4)인 경우이므로 COL1 = 1이고 COL2가 3 또는 4인 조건과 같다.
오답 풀이
- 1번: 두 튜플 조건을 정확히 단순화한 표현이다.
- 2번: 원하지 않는 조합까지 포함할 수 있다.
- 3번: 튜플 조건과 전혀 다르다.
- 4번: OR 때문에 COL1이 1인 모든 행 또는 COL2가 3,4인 모든 행을 포함할 수 있다.
보충 개념 다중 컬럼 IN은 컬럼 조합 단위로 비교한다. 각 컬럼별 IN 조건으로 무조건 분해하면 잘못된 조합이 포함될 수 있다.
문제 25
4지선다소수점 처리 함수에 대한 설명으로 옳지 않은 것은?
- 1.FLOOR는 주어진 수보다 작거나 같은 가장 큰 정수를 반환한다.
- 2.TRUNC는 지정한 자리에서 값을 버림 처리할 수 있다.
- 3.ROUND는 지정한 자리에서 반올림한다.
- 4.CEIL은 소수점 이하를 내림 처리한다.
정답·해설 보기▾
정답
4번. CEIL은 소수점 이하를 내림 처리한다.
해설
정답: 4. CEIL은 주어진 수보다 크거나 같은 가장 작은 정수를 반환하는 올림 함수이다.
오답 풀이
- 1번: FLOOR는 내림에 해당한다.
- 2번: TRUNC는 지정 자리 이하를 버림 처리한다.
- 3번: ROUND는 반올림 함수이다.
- 4번: CEIL을 내림이라고 한 설명은 틀리다.
보충 개념 숫자 함수에서 CEIL은 올림, FLOOR는 내림, ROUND는 반올림, TRUNC는 버림을 의미한다.
문제 26
4지선다다음 SQL에서 오류가 발생하는 원인으로 가장 적절한 것은?
SQLSELECT ID, SUM(SAL) FROM EMP WHERE ID = (SELECT ID FROM A WHERE 조건 = 'Y') GROUP BY ID HAVING SUM(SAL) > 5000;<조건> 서브쿼리
(SELECT ID FROM A WHERE 조건 = 'Y')는 여러 행을 반환할 수 있다.- 1.SELECT 절에서 SUM(SAL)을 사용했기 때문이다.
- 2.= 연산자에 사용된 서브쿼리가 여러 행을 반환할 수 있기 때문이다.
- 3.GROUP BY ID를 사용했기 때문이다.
- 4.HAVING SUM(SAL) > 5000을 사용했기 때문이다.
정답·해설 보기▾
정답
2번. = 연산자에 사용된 서브쿼리가 여러 행을 반환할 수 있기 때문이다.
해설
정답: 2. = 연산자는 단일 값을 기대하므로 서브쿼리가 여러 행을 반환하면 단일 행 서브쿼리 오류가 발생할 수 있다.
오답 풀이
- 1번: GROUP BY ID와 함께 SUM(SAL)을 사용하는 것은 가능하다.
- 2번: 다중 행 서브쿼리를 =로 비교하는 것이 오류 원인이다.
- 3번: GROUP BY ID 자체는 오류가 아니다.
- 4번: HAVING 절에서 집계 함수 조건을 사용하는 것은 가능하다.
보충 개념 서브쿼리 결과가 여러 행이면 = 대신 IN, ANY, ALL 등을 사용해야 한다. WHERE 절에는 집계 함수를 직접 사용할 수 없다는 별도 유형도 자주 출제된다.
문제 27
4지선다테이블 별칭을 사용한 SQL 문장으로 적절하지 않은 것은?
- 1.SELECT A.C1 FROM U1.T1 A
- 2.SELECT A.C1 FROM U1.T1 A WHERE A.C2 = 10
- 3.SELECT U1.T1.C1 FROM U1.T1 A
- 4.SELECT C1 FROM U1.T1 A
정답·해설 보기▾
정답
3번. SELECT U1.T1.C1 FROM U1.T1 A
해설
정답: 3. 테이블에 별칭 A를 부여하면 해당 쿼리 블록에서는 원래 테이블명 대신 별칭을 사용해야 한다.
오답 풀이
- 1번: 별칭 A를 통해 컬럼을 참조하므로 적절하다.
- 2번: WHERE 절에서도 별칭을 사용할 수 있다.
- 3번: 별칭을 부여한 뒤 원래 전체 테이블명으로 참조하는 것은 부적절하다.
- 4번: 컬럼명이 모호하지 않다면 별칭 없이 컬럼명만 쓸 수 있다.
보충 개념 테이블 별칭은 긴 테이블명을 간단히 쓰고 셀프 조인이나 다중 테이블 조인에서 컬럼 소속을 명확히 하기 위해 사용한다.
문제 28
4지선다NATURAL JOIN에 대한 설명으로 가장 적절한 것은?
- 1.동일 이름 컬럼이 여러 개 존재하여 의도하지 않은 조인 조건이 만들어지면 예상과 다른 결과가 발생할 수 있다.
- 2.NATURAL JOIN은 항상 60건을 반환한다.
- 3.NATURAL JOIN은 항상 90건을 반환한다.
- 4.NATURAL JOIN은 항상 두 테이블 행 수를 곱한 225건을 반환한다.
정답·해설 보기▾
정답
1번. 동일 이름 컬럼이 여러 개 존재하여 의도하지 않은 조인 조건이 만들어지면 예상과 다른 결과가 발생할 수 있다.
해설
정답: 1. NATURAL JOIN은 동일한 이름의 컬럼을 자동으로 조인 조건으로 사용하므로 의도하지 않은 컬럼까지 조건에 포함되면 예상과 다른 결과가 발생할 수 있다.
오답 풀이
- 1번: NATURAL JOIN의 위험성을 설명한다.
- 2번: 결과 건수는 데이터와 조인 조건에 따라 달라진다.
- 3번: 결과 건수는 고정되지 않는다.
- 4번: 모든 조합을 생성하는 것은 CROSS JOIN이다.
보충 개념 NATURAL JOIN은 컬럼명이 같은 컬럼들을 자동으로 조인한다. 실무에서는 의도를 명확히 하기 위해 ON 또는 USING을 사용하는 방식이 더 안전하다.
문제 29
4지선다고객 등급을 우선순위에 따라 VVIP, VIP 순서로 정렬하려고 한다. 가장 적절한 ORDER BY 표현은?
- 1.ORDER BY CASE 등급 WHEN 'VVIP' THEN 1 WHEN 'VIP' THEN 2 ELSE 3 END
- 2.ORDER BY 등급 ASC
- 3.ORDER BY 등급 DESC
- 4.ORDER BY CASE 등급 WHEN 'VIP' THEN 1 WHEN 'VVIP' THEN 2 ELSE 3 END
정답·해설 보기▾
정답
1번. ORDER BY CASE 등급 WHEN 'VVIP' THEN 1 WHEN 'VIP' THEN 2 ELSE 3 END
해설
정답: 1. VVIP를 1, VIP를 2로 매핑하면 VVIP가 VIP보다 먼저 정렬된다.
오답 풀이
- 1번: 원하는 사용자 정의 정렬 순서를 정확히 표현한다.
- 2번: 문자열 오름차순은 업무 우선순서와 다를 수 있다.
- 3번: 문자열 내림차순도 업무 우선순서와 다를 수 있다.
- 4번: VIP가 VVIP보다 먼저 정렬된다.
보충 개념 업무상 정렬 순서가 문자 순서와 다를 때는 CASE 표현식을 ORDER BY에 사용한다. 등급, 상태값, 우선순위 정렬에서 자주 활용된다.
문제 30
4지선다다음 조건을 만족하는 값으로 가장 적절한 것은?
SQLWHERE COL <= ALL (50, 15)<데이터>
COL 10 12 15 20 50 - 1.10, 12, 15
- 2.20, 50
- 3.10, 12, 15, 20, 50
- 4.50
정답·해설 보기▾
정답
1번. 10, 12, 15
해설
정답: 1. COL <= ALL(50, 15)는 COL이 50 이하이면서 동시에 15 이하이어야 하므로 결국 COL <= 15와 같다.
오답 풀이
- 1번: 15 이하인 10, 12, 15가 조건을 만족한다.
- 2번: 20과 50은 15 이하 조건을 만족하지 않는다.
- 3번: 모든 값이 조건을 만족하지 않는다.
- 4번: 50은 15 이하가 아니므로 제외된다.
보충 개념 ALL은 목록의 모든 값에 대해 조건이 참이어야 한다.
<= ALL은 목록의 최솟값 이하인 조건과 같은 의미가 된다.문제 31
4지선다명절 선물을 받지 못한 회원을 찾기 위해, 전체 회원 집합에서 선물을 받은 회원 집합을 제외하려고 한다. 가장 적절한 집합 연산자는?
- 1.UNION
- 2.UNION ALL
- 3.INTERSECT
- 4.MINUS
정답·해설 보기▾
정답
4번. MINUS
해설
정답: 4. 전체 회원에서 선물을 받은 회원을 제외하려면 차집합 연산인 MINUS를 사용할 수 있다.
오답 풀이
- 1번: UNION은 합집합이다.
- 2번: UNION ALL은 중복을 포함한 합집합이다.
- 3번: INTERSECT는 교집합이다.
- 4번: MINUS는 차집합으로 문제 목적에 맞다.
보충 개념 Oracle에서는 차집합 연산자로 MINUS를 사용한다. 일부 DBMS에서는 EXCEPT라는 명칭을 사용한다.
문제 32
4지선다집합 연산자에 대한 설명으로 가장 적절하지 않은 것은?
- 1.UNION 연산자는 합집합 결과에서 중복된 행을 하나의 행으로 만든다.
- 2.UNION ALL 연산자는 집합 간의 결과가 중복되지 않는 경우 UNION과 결과가 동일하다.
- 3.UNION 연산자를 사용한 SQL은 각각의 집합에 GROUP BY 절을 사용할 수 있다.
- 4.UNION 연산자를 사용한 SQL은 각각의 집합에 ORDER BY 절을 사용할 수 있다.
정답·해설 보기▾
정답
4번. UNION 연산자를 사용한 SQL은 각각의 집합에 ORDER BY 절을 사용할 수 있다.
해설
정답: 4. 집합 연산자를 사용할 때 ORDER BY는 일반적으로 전체 결과에 대해 마지막에 한 번만 사용할 수 있다.
오답 풀이
- 1번: UNION은 중복을 제거한다.
- 2번: 중복이 없다면 UNION과 UNION ALL의 결과는 동일할 수 있다.
- 3번: 각 SELECT 문 안에서 GROUP BY를 사용할 수 있다.
- 4번: 각 집합마다 ORDER BY를 자유롭게 사용할 수 있다는 설명은 부적절하다.
보충 개념 집합 연산에서는 각 SELECT 문의 컬럼 개수와 데이터 타입 호환성이 중요하다. 최종 정렬은 집합 연산 전체 결과에 대해 ORDER BY를 적용한다.
문제 33
4지선다다음 SQL 문장에서 오류가 발생하는 원인으로 가장 적절한 것은?
SQLSELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY SUM(SAL);- 1.SELECT 절의 서브쿼리에서 집계 함수를 사용했기 때문이다.
- 2.WHERE 절에서 단일 행 비교 연산자 = 에 다중 행 서브쿼리가 사용되었기 때문이다.
- 3.GROUP BY 절에 집계 함수를 사용했기 때문이다.
- 4.ORDER BY 절에 집계 함수를 사용했기 때문이다.
정답·해설 보기▾
정답
3번. GROUP BY 절에 집계 함수를 사용했기 때문이다.
해설
정답: 3. GROUP BY 절에는 그룹화 기준이 되는 일반 컬럼이나 표현식이 와야 하며, SUM(SAL)과 같은 집계 함수를 직접 사용할 수 없다.
오답 풀이
- 1번: 제시된 SQL에는 SELECT 절 서브쿼리가 없다.
- 2번: 제시된 SQL에는 WHERE 절의 다중 행 서브쿼리가 없다.
- 3번: GROUP BY 절에 집계 함수를 사용한 것이 오류 원인이다.
- 4번: 제시된 SQL에는 ORDER BY 절이 없다.
보충 개념 집계 결과에 조건을 걸 때는 HAVING 절을 사용한다. GROUP BY는 집계 전 데이터를 어떤 기준으로 묶을지 지정하는 절이다.
문제 34
4지선다GROUP BY 확장 기능에 대한 설명으로 옳지 않은 것은?
- 1.ROLLUP은 시간이나 지역처럼 계층적 구조의 소계를 구할 때 유용하다.
- 2.CUBE는 가능한 모든 조합의 소계를 생성한다.
- 3.GROUPING SETS는 원하는 그룹 조합을 선택해서 표현할 수 있다.
- 4.GROUP BY 확장 기능을 사용하면 결과를 정렬할 수 없다.
정답·해설 보기▾
정답
4번. GROUP BY 확장 기능을 사용하면 결과를 정렬할 수 없다.
해설
정답: 4. GROUP BY 확장 기능을 사용해도 ORDER BY 등을 통해 결과 정렬이 가능하다.
오답 풀이
- 1번: ROLLUP은 계층적 소계에 적합하다.
- 2번: CUBE는 모든 조합의 소계를 만든다.
- 3번: GROUPING SETS는 필요한 그룹 집합을 명시적으로 지정한다.
- 4번: 정렬할 수 없다는 설명은 틀리다.
보충 개념 ROLLUP, CUBE, GROUPING SETS는 소계와 총계 생성을 위한 GROUP BY 확장 기능이다. 소계 행 식별에는 GROUPING 함수를 사용할 수 있다.
문제 35
4지선다두 테이블을 CROSS JOIN했을 때 결과 행 수로 가장 적절한 것은?
<조건>
- T1 테이블 행 수: 3건
- T2 테이블 행 수: 5건
- 1.3개
- 2.5개
- 3.8개
- 4.15개
정답·해설 보기▾
정답
4번. 15개
해설
정답: 4. CROSS JOIN은 두 테이블의 모든 조합을 생성하므로 3 × 5 = 15건이 된다.
오답 풀이
- 1번: 왼쪽 테이블 행 수만 센 값이다.
- 2번: 오른쪽 테이블 행 수만 센 값이다.
- 3번: 두 테이블 행 수를 더한 값이다.
- 4번: 모든 조합 수를 계산한 값이다.
보충 개념 CROSS JOIN은 카테시안 곱을 생성한다. 조인 조건 누락으로 의도치 않게 발생하면 결과 건수가 급격히 증가할 수 있다.
문제 36
4지선다SAL 기준 상위 5건을 조회하는 SQL로 가장 적절한 것은?
- 1.SELECT * FROM EMP WHERE ROWNUM <= 5 ORDER BY SAL DESC
- 2.SELECT * FROM EMP WHERE ROWNUM = 5 ORDER BY SAL DESC
- 3.SELECT * FROM EMP WHERE ROWNUM <= 5
- 4.SELECT * FROM EMP ORDER BY SAL DESC FETCH FIRST 5 ROWS ONLY
정답·해설 보기▾
정답
4번. SELECT * FROM EMP ORDER BY SAL DESC FETCH FIRST 5 ROWS ONLY
해설
정답: 4. SAL 기준으로 정렬한 뒤 FETCH FIRST 5 ROWS ONLY를 사용하면 상위 5건을 조회할 수 있다.
오답 풀이
- 1번: Oracle에서 ROWNUM이 정렬 전에 부여될 수 있어 정확한 상위 5건 보장이 어렵다.
- 2번: ROWNUM = 5 조건은 일반적으로 의도한 결과를 반환하지 못한다.
- 3번: 정렬 기준 없이 5건만 조회한다.
- 4번: 정렬 후 행 제한이 적용되는 명확한 방식이다.
보충 개념 Top-N 쿼리는 정렬 후 제한이 중요하다. Oracle 12c 이상에서는 FETCH FIRST 구문을 사용할 수 있다.
문제 37
4지선다다음 UNPIVOT 결과에 포함되는 AMOUNT_TYPE 값으로 가장 적절한 것은?
<원본>
ID AMOUNT1 AMOUNT2 AMOUNT3 1 10 20 30 SQLSELECT ID, AMOUNT_TYPE, AMOUNT FROM T UNPIVOT ( AMOUNT FOR AMOUNT_TYPE IN (AMOUNT3, AMOUNT2, AMOUNT1) );- 1.AMOUNT1만 포함된다.
- 2.AMOUNT3, AMOUNT2, AMOUNT1이 포함된다.
- 3.AMOUNT2만 포함된다.
- 4.모든 AMOUNT 값이 NULL로 출력된다.
정답·해설 보기▾
정답
2번. AMOUNT3, AMOUNT2, AMOUNT1이 포함된다.
해설
정답: 2. UNPIVOT은 IN 목록에 지정된 여러 컬럼을 행으로 변환한다. 따라서 AMOUNT3, AMOUNT2, AMOUNT1이 AMOUNT_TYPE 값으로 포함된다.
오답 풀이
- 1번: AMOUNT1 하나만 변환되는 것이 아니다.
- 2번: IN 목록에 지정된 세 컬럼이 모두 행으로 변환된다.
- 3번: AMOUNT2 하나만 변환되는 것이 아니다.
- 4번: 원본 값이 10, 20, 30으로 존재하므로 모두 NULL이 아니다.
보충 개념 UNPIVOT은 여러 컬럼을 행으로 변환한다. 결과 행의 출력 순서가 중요하면 ORDER BY를 별도로 작성해야 한다.
문제 38
4지선다다음 중 이메일 형식을 찾는 정규표현식으로 적절하지 않은 것은?
- 1.REGEXP_SUBSTR(email, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}')
- 2.REGEXP_SUBSTR(email, '[[:alnum:]._%+-]+@[[:alnum:].-]+\.[[:alpha:]]{2,}')
- 3.REGEXP_SUBSTR(email, '[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+')
- 4.REGEXP_SUBSTR(email, '[^@]+@[^@]+\.[^@]+')
정답·해설 보기▾
정답
3번. REGEXP_SUBSTR(email, '[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+')
해설
정답: 3. 이메일 도메인 뒤에 점(.)과 최상위 도메인을 확인하는 부분이 없어 이메일 형식 검증으로 부적절하다.
오답 풀이
- 1번: 일반적인 이메일 패턴에 가깝다.
- 2번: POSIX 문자 클래스를 사용한 이메일 패턴이다.
- 3번: @ 뒤에 점(.)과 최상위 도메인을 요구하지 않아 부적절하다.
- 4번: 단순하지만 @ 뒤 점을 요구한다.
보충 개념 정규표현식에서
\.은 문자 그대로의 점을 의미한다. 이메일 검증은 복잡할 수 있으므로 시험에서는 제시된 패턴의 핵심 누락 여부를 확인한다.문제 39
4지선다다음 SQL의 실행 결과로 가장 적절한 것은?
SQLSELECT REGEXP_SUBSTR('aabbc', 'a*b+c') AS R1, REGEXP_SUBSTR('abbc', 'a*b+c') AS R2 FROM DUAL;- 1.aabbc, abbc
- 2.abbc, aabbc
- 3.NULL, abbc
- 4.aabbc, NULL
정답·해설 보기▾
정답
1번. aabbc, abbc
해설
정답: 1.
a*는 a가 0회 이상,b+는 b가 1회 이상 반복됨을 의미하므로 aabbc와 abbc가 각각 매칭된다.오답 풀이
- 1번: 두 문자열 모두 패턴에 매칭된다.
- 2번: 결과 순서가 반대이다.
- 3번: aabbc도 패턴에 매칭된다.
- 4번: abbc도 패턴에 매칭된다.
보충 개념 정규표현식에서
*는 0회 이상 반복,+는 1회 이상 반복을 의미한다. 패턴 전체가 문자열 일부와 매칭되면 REGEXP_SUBSTR은 해당 부분 문자열을 반환한다.문제 40
4지선다다음 윈도우 함수에서 VAL이 100인 행의 합계로 가장 적절한 것은?
<데이터>
ID VAL 1 50 2 100 3 150 SQLSELECT ID, VAL, SUM(VAL) OVER( ORDER BY VAL ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS SUM_VAL FROM T;- 1.50
- 2.100
- 3.150
- 4.300
정답·해설 보기▾
정답
4번. 300
해설
정답: 4. VAL이 100인 현재 행을 기준으로 이전 1행 50, 현재 행 100, 다음 1행 150이 포함되어 합계는 300이다.
오답 풀이
- 1번: 이전 행만 계산한 값이다.
- 2번: 현재 행만 계산한 값이다.
- 3번: 다음 행만 계산한 값이다.
- 4번: 이전, 현재, 다음 행을 모두 합산한 값이다.
보충 개념 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING은 현재 행 기준 앞뒤 1행씩 포함하는 물리적 프레임이다.
문제 41
4지선다계층형 쿼리에 대한 설명으로 적절하지 않은 것은?
- 1.ORDER SIBLINGS BY는 같은 부모를 가진 형제 노드 간 정렬에 사용할 수 있다.
- 2.NOCYCLE은 순환 구조로 인한 무한 탐색을 방지하는 데 사용할 수 있다.
- 3.CONNECT BY는 계층 구조의 부모-자식 관계를 지정한다.
- 4.WHERE 절은 CONNECT BY 수행 전에 항상 계층 자체를 완전히 차단한다.
정답·해설 보기▾
정답
4번. WHERE 절은 CONNECT BY 수행 전에 항상 계층 자체를 완전히 차단한다.
해설
정답: 4. WHERE 절은 계층 전개 후 결과 행을 필터링하는 방식으로 작동할 수 있으므로 항상 CONNECT BY 전에 계층 자체를 차단한다고 볼 수 없다.
오답 풀이
- 1번: 형제 노드 정렬에 ORDER SIBLINGS BY를 사용할 수 있다.
- 2번: NOCYCLE은 순환 참조 방지에 사용된다.
- 3번: CONNECT BY는 계층 관계를 정의한다.
- 4번: WHERE 절의 계층형 쿼리 처리에 대한 설명이 지나치게 단정적이다.
보충 개념 계층형 쿼리에서는 START WITH, CONNECT BY, PRIOR, NOCYCLE, ORDER SIBLINGS BY의 의미를 구분해야 한다.
문제 42
4지선다다음 SQL의 실행 결과로 가장 적절한 것은?
<데이터>
COL1 '10' '90' '100' SQLSELECT TO_NUMBER(MIN(COL1)) + TO_NUMBER(MAX(COL1)) AS RESULT FROM T;<조건> COL1은 문자형 컬럼이다.
- 1.100
- 2.110
- 3.190
- 4.1010
정답·해설 보기▾
정답
1번. 100
해설
정답: 1. 문자형 기준 정렬에서 MIN은 '10', MAX는 '90'이므로 숫자로 변환해 더하면 100이다.
오답 풀이
- 1번: 문자형 MIN/MAX 결과를 숫자로 변환해 더한 값이다.
- 2번: 숫자형 최솟값 10과 최댓값 100을 더한 값과 혼동했다.
- 3번: 90과 100을 더한 값이다.
- 4번: 문자열 결합과 혼동한 값이다.
보충 개념 문자형 컬럼의 MIN/MAX는 숫자 크기가 아니라 문자 정렬 순서 기준으로 결정된다. 숫자 비교가 필요하면 명시적 형 변환이 필요하다.
문제 43
4지선다이름이 n으로 끝나는 회원을 찾는 LIKE 조건으로 가장 적절한 것은?
- 1.WHERE NAME LIKE 'n%'
- 2.WHERE NAME LIKE '%n'
- 3.WHERE NAME LIKE '%n%'
- 4.WHERE NAME LIKE '_n'
정답·해설 보기▾
정답
2번. WHERE NAME LIKE '%n'
해설
정답: 2.
%n은 임의의 문자열 뒤 마지막 문자가 n인 값을 찾는다.오답 풀이
- 1번: n으로 시작하는 값을 찾는다.
- 2번: n으로 끝나는 값을 찾는다.
- 3번: n을 포함하는 모든 값을 찾는다.
- 4번: 두 글자이고 두 번째 글자가 n인 값을 찾는다.
보충 개념 LIKE에서
%는 0개 이상의 임의 문자열,_는 정확히 한 글자를 의미한다. 끝 글자 조건은%문자형식으로 작성한다.문제 44
4지선다테이블 구조 변경에 대한 설명으로 틀린 것은?
- 1.기존 데이터가 있으면 컬럼 사이즈 축소 시 제한이 있을 수 있다.
- 2.NULL만 입력된 컬럼은 경우에 따라 컬럼 사이즈 축소가 가능할 수 있다.
- 3.DEFAULT 값을 변경하면 변경 이후 입력되는 데이터부터 새 기본값이 적용된다.
- 4.DEFAULT 값을 변경하면 기존에 저장된 모든 데이터 값도 자동으로 새 기본값으로 변경된다.
정답·해설 보기▾
정답
4번. DEFAULT 값을 변경하면 기존에 저장된 모든 데이터 값도 자동으로 새 기본값으로 변경된다.
해설
정답: 4. DEFAULT 변경은 일반적으로 이후 INSERT에서 값이 생략된 경우에 적용되며, 기존 저장 데이터가 자동으로 변경되지는 않는다.
오답 풀이
- 1번: 기존 값이 줄이려는 크기를 초과하면 축소가 제한될 수 있다.
- 2번: 실제 저장값이 제한에 걸리지 않으면 축소가 가능할 수 있다.
- 3번: DEFAULT 변경은 이후 입력 데이터에 영향을 준다.
- 4번: 기존 데이터가 자동 변경된다는 설명은 틀리다.
보충 개념 ALTER TABLE로 컬럼 정의를 변경할 때 기존 데이터와 제약조건에 따라 허용 여부가 달라질 수 있다. DEFAULT는 저장된 값을 소급 변경하지 않는다.
문제 45
4지선다아래 테이블에 대한 INSERT 문 중 오류가 발생하는 것은?
SQLCREATE TABLE TEST45 ( COL1 NUMBER, COL2 NUMBER, COL3 NUMBER, COL4 NUMBER );- 1.INSERT INTO TEST45 VALUES(1, 2, 3)
- 2.INSERT INTO TEST45 VALUES(1, 2, 3, 4)
- 3.INSERT INTO TEST45 (COL1, COL2, COL3) VALUES(1, 2, 3)
- 4.INSERT INTO TEST45 (COL1, COL2, COL3, COL4) VALUES(1, 2, 3, 4)
정답·해설 보기▾
정답
1번. INSERT INTO TEST45 VALUES(1, 2, 3)
해설
정답: 1. 컬럼 목록을 생략한 INSERT는 테이블의 전체 컬럼 수와 VALUES 값의 개수가 일치해야 하므로 3개 값만 넣으면 오류가 발생한다.
오답 풀이
- 1번: 컬럼은 4개인데 값은 3개이므로 오류가 발생한다.
- 2번: 전체 4개 컬럼에 4개 값을 넣으므로 가능하다.
- 3번: 컬럼 목록을 3개로 명시했으므로 3개 값을 넣을 수 있다.
- 4번: 컬럼 4개와 값 4개가 일치한다.
보충 개념 INSERT에서 컬럼 목록을 생략하면 테이블 정의 순서대로 모든 컬럼에 값을 제공해야 한다. 일부 컬럼만 입력하려면 컬럼 목록을 명시해야 한다.
문제 46
4지선다다음 세 테이블을 모두 등가 조인했을 때 결과 행 수로 가장 적절한 것은?
C1 C2 C3 1 2 3 C1 C2 C3 1 2 NULL C1 C2 C3 1 NULL NULL SQLSELECT COUNT(*) FROM T1, T2, T3 WHERE T1.C1 = T2.C1 AND T2.C1 = T3.C1;- 1.0개
- 2.1개
- 3.2개
- 4.3개
정답·해설 보기▾
정답
2번. 1개
해설
정답: 2. 조인 조건이 C1만 비교하므로 세 테이블 모두 C1=1로 매칭되어 결과는 1건이다.
오답 풀이
- 1번: C1 값이 모두 1이므로 매칭 행이 존재한다.
- 2번: 각 테이블에 매칭 행이 1개씩 있으므로 1건이다.
- 3번: NULL 컬럼은 조인 조건에 사용되지 않는다.
- 4번: 세 테이블 수와 결과 행 수를 혼동한 값이다.
보충 개념 조인 결과는 실제 조인 조건에 포함된 컬럼을 기준으로 결정된다. NULL 컬럼이 있어도 조인 조건에 포함되지 않으면 해당 NULL은 매칭 여부에 영향을 주지 않는다.
문제 47
4지선다A 테이블과 B 테이블을 UNION하여 중복 제거한 결과가 1, 2, 3, 4, 5, 6일 때 결과 행 수로 가장 적절한 것은?
- 1.4개
- 2.5개
- 3.6개
- 4.7개
정답·해설 보기▾
정답
3번. 6개
해설
정답: 3. UNION 결과가 1, 2, 3, 4, 5, 6으로 총 6개의 서로 다른 값이므로 결과 행 수는 6개이다.
오답 풀이
- 1번: 결과 값의 개수를 적게 센 값이다.
- 2번: 하나의 값을 누락한 값이다.
- 3번: 서로 다른 값 6개가 출력된다.
- 4번: 중복 제거 전 개수와 혼동한 값이다.
보충 개념 UNION은 중복을 제거한 합집합이다. UNION ALL은 중복을 제거하지 않고 모든 행을 반환한다.
문제 48
4지선다다음 SQL의 결과로 가장 적절한 것은?
<데이터>
COL_B COL_C SCORE NULL 10 5 15 50 10 NULL NULL NULL SQLSELECT NVL(MIN(COL_B), 0) AS A, NVL(MAX(COL_C), 0) AS B, SUM(NVL(SCORE, 0)) AS C FROM T;- 1.0, 50, 15
- 2.15, 50, 15
- 3.15, 10, 15
- 4.0, 0, 0
정답·해설 보기▾
정답
2번. 15, 50, 15
해설
정답: 2. MIN(COL_B)는 NULL을 제외하고 15, MAX(COL_C)는 50, SUM(NVL(SCORE,0))는 5+10+0=15이다.
오답 풀이
- 1번: MIN은 NULL을 제외하므로 0이 아니라 15이다.
- 2번: 각 집계 함수의 NULL 처리 결과가 맞다.
- 3번: MAX(COL_C)를 10으로 잘못 계산했다.
- 4번: 모든 값을 NULL 또는 0으로 처리한 잘못된 결과이다.
보충 개념 집계 함수 MIN, MAX는 NULL을 제외하고 계산한다. NVL을 집계 함수 안에 쓰는지 밖에 쓰는지에 따라 결과가 달라질 수 있다.
문제 49
4지선다제약조건 변경에 대한 설명으로 적절하지 않은 것은?
- 1.NOT NULL 제약조건을 추가하려면 기존 데이터에 NULL이 없어야 한다.
- 2.이미 NULL 값이 들어 있는 컬럼에는 바로 NOT NULL 제약조건을 추가할 수 없다.
- 3.기존 NULL 값을 수정한 뒤 NOT NULL 제약조건을 추가할 수 있다.
- 4.기존 데이터에 NULL이 들어 있어도 NOT NULL 제약조건은 항상 오류 없이 추가된다.
정답·해설 보기▾
정답
4번. 기존 데이터에 NULL이 들어 있어도 NOT NULL 제약조건은 항상 오류 없이 추가된다.
해설
정답: 4. 기존 데이터에 NULL이 있으면 NOT NULL 제약조건 추가 시 오류가 발생할 수 있다.
오답 풀이
- 1번: NOT NULL 추가 전 기존 NULL 여부를 확인해야 한다.
- 2번: NULL이 있는 상태에서는 바로 추가하기 어렵다.
- 3번: NULL 값을 적절히 보정하면 제약조건 추가가 가능하다.
- 4번: 항상 오류 없이 추가된다는 설명은 틀리다.
보충 개념 제약조건은 기존 데이터도 만족해야 한다. 따라서 NOT NULL, CHECK, UNIQUE 같은 제약조건을 추가할 때 기존 데이터 검증이 필요하다.
문제 50
4지선다아래 SQL에서
ROLLBACK TO SAVEPOINT SQL1실행 시 오류가 발생한 뒤, 같은 세션에서 계속해서SELECT * FROM TABLE50을 수행한다고 할 때 결과 행 수로 가장 적절한 것은?SQLINSERT INTO TABLE50 VALUES(1); INSERT INTO TABLE50 VALUES(2); INSERT INTO TABLE50 VALUES(3); SAVEPOINT SQL1; INSERT INTO TABLE50 VALUES(4); INSERT INTO TABLE50 VALUES(5); COMMIT; INSERT INTO TABLE50 VALUES(6); ROLLBACK TO SAVEPOINT SQL1; SELECT * FROM TABLE50;- 1.4
- 2.5
- 3.6
- 4.7
정답·해설 보기▾
정답
3번. 6
해설
정답: 3. COMMIT을 수행하면 이전 트랜잭션의 SAVEPOINT는 사라진다. 따라서 COMMIT 이후
ROLLBACK TO SAVEPOINT SQL1은 오류가 발생한다. 같은 세션에서 SELECT를 계속 수행하면 1~5는 이미 커밋되었고, 6은 현재 세션에서 입력된 상태이므로 총 6건이 조회된다.오답 풀이
- 1번: SAVEPOINT로 정상 롤백된다고 잘못 해석한 값이다.
- 2번: INSERT 6이 조회되지 않는다고 잘못 해석한 값이다.
- 3번: 1~5와 6까지 총 6건으로 해석한 값이다.
- 4번: INSERT는 6번까지만 수행되었으므로 7건이 아니다.
보충 개념 COMMIT을 수행하면 해당 트랜잭션의 SAVEPOINT는 사라진다. COMMIT 이후 이전 SAVEPOINT로 롤백할 수 없다.