SQLD시험일 2025년 5월 31일· 50문항전문가 검수

[SQLD] 2025년 57회 기출 복원

SQL 개발자 자격증 2025년 57회 기출 복원 50문항. 정답·해설을 펼쳐보고 직접 풀어볼 수도 있습니다.

안녕하세요. 문어입니다 🐙


SQL 개발자 자격증 2025년 57회차 기출 복원입니다. 각 문제 아래의 「정답·해설 보기」를 펼치면 정답과 해설이 나타나요. 실제 시험 환경(타이머·자동 채점·오답 누적)에서 풀어보고 싶다면 글 맨 아래 「직접 풀러가기」를 눌러주세요.

  1. 문제 1

    4지선다

    아래 설명에서 설명하는 스키마 구조로 가장 적절한 것은?

    <설명> 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현이다.

    • 1.외부 스키마
    • 2.개념 스키마
    • 3.내부 스키마
    • 4.논리 스키마
    정답·해설 보기

    정답

    2. 개념 스키마

    해설

    정답: 2. 개념 스키마는 모든 사용자 관점을 통합한 조직 전체 관점의 데이터베이스 논리 구조를 표현한다.

    오답 풀이

    • 1번: 외부 스키마는 개별 사용자나 응용 프로그램 관점의 스키마이다.
    • 2번: 조직 전체 관점의 통합 표현이므로 정답이다.
    • 3번: 내부 스키마는 물리적 저장 구조를 표현한다.
    • 4번: 논리 스키마는 일반 용어로 쓰일 수 있으나 3단계 스키마 구조의 표준 명칭은 개념 스키마이다.

    보충 개념 3단계 스키마는 외부 스키마, 개념 스키마, 내부 스키마로 구분된다. 개념 스키마는 데이터베이스 전체의 논리적 구조와 제약조건을 표현한다.

  2. 문제 2

    4지선다

    다음 중 엔터티 생성 시점에 따른 분류가 아닌 것은?

    • 1.기본 엔터티
    • 2.중심 엔터티
    • 3.사건 엔터티
    • 4.행위 엔터티
    정답·해설 보기

    정답

    3. 사건 엔터티

    해설

    정답: 3. 엔터티의 생성 시점에 따른 일반적인 분류는 기본 엔터티, 중심 엔터티, 행위 엔터티이다.

    오답 풀이

    • 1번: 기본 엔터티는 업무에 원래 존재하는 독립적인 엔터티이다.
    • 2번: 중심 엔터티는 기본 엔터티로부터 발생하고 업무의 중심 역할을 한다.
    • 3번: 사건 엔터티는 표준적인 생성 시점 분류 명칭으로 보기 어렵다.
    • 4번: 행위 엔터티는 두 개 이상의 엔터티로부터 발생하는 엔터티이다.

    보충 개념 엔터티는 발생 시점에 따라 기본, 중심, 행위 엔터티로 구분할 수 있다. 행위 엔터티는 주문, 계약, 이력처럼 업무 활동에 의해 생성되는 경우가 많다.

  3. 문제 3

    4지선다

    제1정규형을 만족시키기 위한 조치로 가장 적절한 것은?

    • 1.직원 속성에 두 개의 값이 들어 있으므로 직원1, 직원2 컬럼으로 나누어 저장한다.
    • 2.하나의 속성에 여러 직원 값이 들어가지 않도록 직원 정보를 별도 행 또는 별도 테이블로 분리한다.
    • 3.모든 테이블의 기본키를 제거한다.
    • 4.계산 가능한 속성을 하나의 테이블에 모두 중복 저장한다.
    정답·해설 보기

    정답

    2. 하나의 속성에 여러 직원 값이 들어가지 않도록 직원 정보를 별도 행 또는 별도 테이블로 분리한다.

    해설

    정답: 2. 제1정규형은 속성 값의 원자성을 요구하므로 하나의 컬럼에 여러 값을 넣지 않도록 분리해야 한다.

    오답 풀이

    • 1번: 직원1, 직원2처럼 반복 컬럼을 만드는 것은 정규화 관점에서 바람직하지 않다.
    • 2번: 다중값 속성을 별도 행 또는 별도 테이블로 분리하여 원자성을 만족시키는 방법이다.
    • 3번: 기본키 제거는 정규화와 무관하며 데이터 식별성을 해친다.
    • 4번: 계산 속성 중복 저장은 정규화가 아니라 반정규화에 가깝다.

    보충 개념 제1정규형은 컬럼 하나에 하나의 값만 저장되도록 하는 단계이다. 반복 속성이나 다중값 속성은 별도 엔터티나 행으로 분리한다.

  4. 문제 4

    4지선다

    다른 속성으로부터 계산이나 변형이 되어 생성되는 속성은 무엇인가?

    • 1.기본 속성
    • 2.설계 속성
    • 3.일반 속성
    • 4.파생 속성
    정답·해설 보기

    정답

    4. 파생 속성

    해설

    정답: 4. 파생 속성은 다른 속성으로부터 계산되거나 변형되어 생성되는 속성이다.

    오답 풀이

    • 1번: 기본 속성은 업무로부터 직접 도출되는 원래 속성이다.
    • 2번: 설계 속성은 업무상 원래 존재하지 않지만 설계를 위해 추가한 속성이다.
    • 3번: 일반 속성은 표준 분류 명칭으로 보기 어렵다.
    • 4번: 계산이나 변형으로 생성되는 속성이므로 정답이다.

    보충 개념 예를 들어 생년월일로부터 계산되는 나이, 주문금액과 할인율로부터 계산되는 최종금액은 파생 속성에 해당한다.

  5. 문제 5

    4지선다

    주식별자에 관한 설명 중 틀린 것은?

    • 1.주식별자는 NULL이어도 된다.
    • 2.주식별자는 유일해야 한다.
    • 3.주식별자는 유일성을 만족하는 선에서 최소의 속성으로 구성되어야 한다.
    • 4.주식별자는 자주 변하지 않아야 한다.
    정답·해설 보기

    정답

    1. 주식별자는 NULL이어도 된다.

    해설

    정답: 1. 주식별자는 각 인스턴스를 식별해야 하므로 NULL이 될 수 없다.

    오답 풀이

    • 1번: 주식별자는 NULL이 허용되지 않으므로 틀린 설명이다.
    • 2번: 주식별자는 유일성을 만족해야 한다.
    • 3번: 주식별자는 최소성을 만족해야 한다.
    • 4번: 주식별자는 안정성을 가져야 하므로 자주 변하지 않아야 한다.

    보충 개념 주식별자의 주요 특징은 유일성, 최소성, 불변성, 존재성이다. 존재성은 주식별자 값이 반드시 존재해야 함을 의미한다.

  6. 문제 6

    4지선다

    다음 ERD에 대한 설명으로 가장 적절한 것은?

    고객(고객ID, 고객명) 1 : N 계약(계약ID, 고객ID, 납부자ID) N : 1 납부자(납부자ID, 납부자명)

    계약은 고객과 납부자 사이에서 발생하는 업무 정보를 관리한다.

    • 1.계약은 고객과 납부자 사이에서 발생하는 행위 엔터티로 볼 수 있다.
    • 2.계약은 고객과 납부 사이의 단순 관계 테이블일 뿐 독립적인 업무 의미가 없다.
    • 3.한 명의 고객이 여러 개의 계약에 가입할 경우 납부자로부터 반드시 식별자를 상속받아야 한다.
    • 4.고객이 계약하고 납부하면 고객 테이블과 납부자 테이블은 항상 합칠 수 있다.
    정답·해설 보기

    정답

    1. 계약은 고객과 납부자 사이에서 발생하는 행위 엔터티로 볼 수 있다.

    해설

    정답: 1. 계약은 고객과 납부자 사이에서 발생하는 업무 행위를 표현하는 엔터티로 볼 수 있다.

    오답 풀이

    • 1번: 관계에서 발생하는 업무 행위이므로 적절하다.
    • 2번: 계약은 단순 관계 테이블이라기보다 업무적으로 의미 있는 행위 엔터티이다.
    • 3번: 여러 계약을 가진다고 해서 납부자로부터 반드시 식별자를 상속받아야 하는 것은 아니다.
    • 4번: 고객과 납부자는 역할과 의미가 다를 수 있으므로 항상 합칠 수 없다.

    보충 개념 행위 엔터티는 두 개 이상의 엔터티 간 관계에서 발생하는 업무 사건을 관리하기 위해 도출된다. 주문, 계약, 수강, 납부 이력 등이 대표적이다.

  7. 문제 7

    4지선다

    다음 SQL의 실행 결과로 가장 적절한 것은?

    <조건> 동일한 연락처를 가진 회원이 2명 존재하며, 서브쿼리는 회원ID 1002, 1003 두 행을 반환한다.

    SQL
    SELECT * FROM 회원 WHERE 회원ID = ( SELECT 회원ID FROM 회원 WHERE 연락처 = '010-1111-2222' );
    • 1.회원ID 1002만 조회된다.
    • 2.회원ID 1003만 조회된다.
    • 3.회원ID 1002와 1003이 모두 조회된다.
    • 4.단일 행 서브쿼리가 여러 행을 반환하여 오류가 발생한다.
    정답·해설 보기

    정답

    4. 단일 행 서브쿼리가 여러 행을 반환하여 오류가 발생한다.

    해설

    정답: 4. = 연산자는 단일 행 서브쿼리를 기대하므로 서브쿼리가 2개 이상의 행을 반환하면 오류가 발생한다.

    오답 풀이

    • 1번: 여러 행 중 임의로 하나만 선택하지 않는다.
    • 2번: 여러 행 중 임의로 하나만 선택하지 않는다.
    • 3번: 여러 값을 비교하려면 = 대신 IN 등을 사용해야 한다.
    • 4번: 단일 행 서브쿼리 반환 행 수 초과 오류가 발생한다.

    보충 개념 단일 행 비교 연산자에는 서브쿼리 결과가 반드시 1행이어야 한다. 여러 행과 비교하려면 IN, ANY, ALL 같은 다중 행 연산자를 사용한다.

  8. 문제 8

    4지선다

    식별자에 대한 설명으로 적절하지 않은 것은?

    • 1.내부 식별자는 엔터티 내부에서 스스로 생성된 식별자이다.
    • 2.외부 식별자는 다른 엔터티와의 관계를 통해 받아온 식별자이다.
    • 3.외래키(FK)는 항상 내부 식별자이다.
    • 4.인조 식별자는 업무 식별자가 복잡하거나 부적절할 때 인위적으로 만든 식별자이다.
    정답·해설 보기

    정답

    3. 외래키(FK)는 항상 내부 식별자이다.

    해설

    정답: 3. 외래키는 다른 엔터티로부터 전달받은 식별자이므로 일반적으로 외부 식별자에 해당한다.

    오답 풀이

    • 1번: 내부 식별자에 대한 올바른 설명이다.
    • 2번: 외부 식별자에 대한 올바른 설명이다.
    • 3번: FK를 내부 식별자라고 한 설명은 틀리다.
    • 4번: 인조 식별자는 설계상 인위적으로 부여한 식별자이다.

    보충 개념 식별자는 대표성, 생성 여부, 속성 수, 대체 여부 등에 따라 여러 기준으로 분류된다. 외래키는 관계를 통해 전달받은 속성이므로 외부 식별자로 볼 수 있다.

  9. 문제 9

    4지선다

    다음 ERD에 대한 설명으로 적절하지 않은 것은?

    학생(학생ID, 학생명) 1 : N 수강(학생ID, 과목ID) N : 1 과목(과목ID, 과목명)

    수강은 학생과 과목 사이의 M:N 관계를 해소하는 엔터티이다.

    • 1.학생은 여러 수강 내역을 가질 수 있다.
    • 2.과목은 여러 수강 내역에 포함될 수 있다.
    • 3.수강은 학생과 과목의 관계에서 발생하는 행위 엔터티로 볼 수 있다.
    • 4.과목 인스턴스를 추가하려면 반드시 학생 인스턴스가 먼저 필요하다.
    정답·해설 보기

    정답

    4. 과목 인스턴스를 추가하려면 반드시 학생 인스턴스가 먼저 필요하다.

    해설

    정답: 4. 과목은 독립적으로 존재할 수 있는 엔터티이므로 과목 인스턴스를 추가하기 위해 학생 인스턴스가 반드시 필요한 것은 아니다.

    오답 풀이

    • 1번: 학생 1명은 여러 수강 내역을 가질 수 있다.
    • 2번: 과목 1개는 여러 학생의 수강 내역에 포함될 수 있다.
    • 3번: 수강은 학생과 과목 사이에서 발생하는 행위 엔터티이다.
    • 4번: 과목 자체는 학생 없이도 등록될 수 있으므로 부적절하다.

    보충 개념 M:N 관계는 보통 교차 엔터티 또는 행위 엔터티로 해소한다. 학생과 과목 사이의 수강 엔터티가 대표적인 예이다.

  10. 문제 10

    4지선다

    상품과 주문의 관계에 대한 설명 중 틀린 것은?

    • 1.상품에는 주문이 무조건 포함된다.
    • 2.주문에는 주문 대상 상품이 포함될 수 있다.
    • 3.하나의 상품은 여러 주문에 포함될 수 있다.
    • 4.하나의 주문은 여러 상품을 포함할 수 있다.
    정답·해설 보기

    정답

    1. 상품에는 주문이 무조건 포함된다.

    해설

    정답: 1. 상품은 주문이 없어도 존재할 수 있으므로 상품에 주문이 무조건 포함된다는 설명은 틀리다.

    오답 풀이

    • 1번: 아직 주문되지 않은 상품도 존재할 수 있으므로 틀리다.
    • 2번: 주문은 일반적으로 주문 대상 상품을 가진다.
    • 3번: 하나의 상품은 여러 주문에 반복적으로 포함될 수 있다.
    • 4번: 하나의 주문은 여러 상품을 포함할 수 있다.

    보충 개념 상품과 주문은 대개 M:N 관계이며 주문상세 같은 교차 엔터티로 해소한다. 상품은 주문과 독립적으로 먼저 등록될 수 있다.

  11. 문제 11

    4지선다

    다음 SQL의 ROW LIMITING 절에 대한 설명 중 옳은 것을 모두 고른 것은?

    SQL
    SELECT * FROM TAB1 ORDER BY NO DESC OFFSET 3 ROWS FETCH FIRST 5 ROWS ONLY;

    <보기> 가. NO를 내림차순으로 정렬한 뒤 일부 행을 반환한다. 나. 3번째 ROW만 제외한다. 다. 5개 이상 행이 나올 수 있다.

    • 1.
    • 2.
    • 3.가, 다
    • 4.가, 나, 다
    정답·해설 보기

    정답

    1. 가

    해설

    정답: 1. ORDER BY NO DESC로 정렬한 뒤 OFFSET 3 ROWS로 앞의 3개 행을 건너뛰고 FETCH FIRST 5 ROWS ONLY로 최대 5개 행만 반환한다.

    오답 풀이

    • 1번: 가만 옳다.
    • 2번: OFFSET 3 ROWS는 3번째 ROW 하나만 제외하는 의미가 아니라 앞의 3개 행을 건너뛰는 의미이다.
    • 3번: 다는 틀리다. ONLY이므로 5개를 초과하여 반환하지 않는다.
    • 4번: 나와 다가 틀리므로 부적절하다.

    보충 개념 OFFSET은 건너뛸 행 수를 지정하고 FETCH FIRST n ROWS ONLY는 반환할 최대 행 수를 지정한다. WITH TIES가 아닌 ONLY는 동순위를 추가 포함하지 않는다.

  12. 문제 12

    4지선다

    SUBSTR 함수 실행 결과 중 다른 결과가 나오는 것을 고르시오.

    • 1.SUBSTR('abcdefgh', 7)
    • 2.SUBSTR('abcdefgh', -2)
    • 3.SUBSTR('abcdefgh', 8, -2)
    • 4.SUBSTR('abcdefgh', INSTR('abcdefgh', 'g'), 2)
    정답·해설 보기

    정답

    3. SUBSTR('abcdefgh', 8, -2)

    해설

    정답: 3. 1번, 2번, 4번은 모두 'gh'를 반환하지만 3번은 길이 인수에 음수가 들어가므로 NULL을 반환한다.

    오답 풀이

    • 1번: 7번째 문자부터 끝까지 반환하므로 'gh'이다.
    • 2번: 뒤에서 두 번째 문자부터 끝까지 반환하므로 'gh'이다.
    • 3번: Oracle에서 SUBSTR의 길이가 음수이면 NULL이 반환된다.
    • 4번: INSTR('abcdefgh', 'g')는 7이므로 SUBSTR('abcdefgh', 7, 2)는 'gh'이다.

    보충 개념 SUBSTR(문자열, 시작위치, 길이)에서 시작위치가 음수이면 뒤에서부터 위치를 센다. 길이 인수가 생략되면 시작위치부터 끝까지 반환한다.

  13. 문제 13

    4지선다

    COMMIT에 대한 설명 중 틀린 것은?

    • 1.COMMIT은 트랜잭션의 변경 내용을 영구적으로 반영한다.
    • 2.COMMIT 전에도 같은 트랜잭션에서는 변경된 데이터를 SELECT로 확인할 수 있다.
    • 3.COMMIT 전에 외부 사용자가 변경된 데이터를 항상 확인할 수 있다.
    • 4.COMMIT 전에는 ROLLBACK을 통해 변경 내용을 취소할 수 있다.
    정답·해설 보기

    정답

    3. COMMIT 전에 외부 사용자가 변경된 데이터를 항상 확인할 수 있다.

    해설

    정답: 3. COMMIT 전 변경 내용은 일반적으로 다른 트랜잭션에서 확인할 수 없다.

    오답 풀이

    • 1번: COMMIT의 기본 역할이다.
    • 2번: 자기 트랜잭션에서는 변경한 데이터를 조회할 수 있다.
    • 3번: 외부 사용자가 항상 확인할 수 있다는 설명은 틀리다.
    • 4번: COMMIT 전에는 ROLLBACK으로 변경을 취소할 수 있다.

    보충 개념 트랜잭션 격리성에 따라 커밋되지 않은 변경은 다른 트랜잭션에 보이지 않는 것이 일반적이다. COMMIT 이후 변경 내용이 확정된다.

  14. 문제 14

    4지선다

    NULL에 대한 설명으로 옳은 것은?

    • 1.NULL은 0과 같은 의미다.
    • 2.NULL은 대부분의 집계 함수에서 제외된다.
    • 3.NULL = NULL은 TRUE이다.
    • 4.바커 표기법에서는 NULL 허용 여부를 알 수 없으나, IE 표기법에서는 NULL 허용 여부를 알 수 있다.
    정답·해설 보기

    정답

    2. NULL은 대부분의 집계 함수에서 제외된다.

    해설

    정답: 2. SUM, AVG, COUNT(expr) 등 대부분의 집계 함수는 NULL을 제외하고 계산한다.

    오답 풀이

    • 1번: NULL은 0이 아니라 알 수 없거나 존재하지 않는 값을 의미한다.
    • 2번: 대부분의 집계 함수는 NULL을 제외한다.
    • 3번: NULL = NULL의 결과는 TRUE가 아니라 UNKNOWN이다.
    • 4번: 표기법 설명이 일반적인 NULL 연산의 핵심 설명으로 적절하지 않다.

    보충 개념 NULL 비교에는 = 대신 IS NULL 또는 IS NOT NULL을 사용해야 한다. COUNT(*)는 NULL 포함 여부와 관계없이 행 수를 센다.

  15. 문제 15

    4지선다

    다음 중 SQL 명령어 분류로 적절하지 않은 것은?

    • 1.DDL : TRUNCATE
    • 2.DML : DROP
    • 3.DCL : REVOKE
    • 4.TCL : COMMIT
    정답·해설 보기

    정답

    2. DML : DROP

    해설

    정답: 2. DROP은 객체를 삭제하는 DDL이지 DML이 아니다.

    오답 풀이

    • 1번: TRUNCATE는 DDL로 분류된다.
    • 2번: DROP은 DML이 아니라 DDL이다.
    • 3번: REVOKE는 권한 회수 명령으로 DCL이다.
    • 4번: COMMIT은 트랜잭션 제어 명령으로 TCL이다.

    보충 개념 DDL은 CREATE, ALTER, DROP, TRUNCATE 등을 포함한다. DML은 SELECT, INSERT, UPDATE, DELETE 등 데이터 조작 명령이다.

  16. 문제 16

    4지선다

    집합 연산자인 INTERSECT에 대한 설명으로 가장 적절한 것은?

    • 1.여러 개의 SQL문 결과에 대한 합집합으로 중복된 행은 하나의 행으로 출력한다.
    • 2.여러 개의 SQL문 결과에 대한 합집합으로 중복된 행도 그대로 결과로 출력한다.
    • 3.여러 개의 SQL문 결과에 대한 교집합으로 중복된 행은 하나의 행으로 출력한다.
    • 4.SQL문 결과 간의 차집합으로 중복된 행은 하나의 행으로 출력한다.
    정답·해설 보기

    정답

    3. 여러 개의 SQL문 결과에 대한 교집합으로 중복된 행은 하나의 행으로 출력한다.

    해설

    정답: 3. INTERSECT는 두 SQL 결과에 공통으로 존재하는 행을 반환하며 중복은 제거된다.

    오답 풀이

    • 1번: UNION에 대한 설명이다.
    • 2번: UNION ALL에 대한 설명이다.
    • 3번: INTERSECT에 대한 올바른 설명이다.
    • 4번: MINUS 또는 EXCEPT에 대한 설명이다.

    보충 개념 집합 연산자는 컬럼 수와 데이터 타입이 호환되어야 한다. INTERSECT는 교집합, UNION은 합집합, MINUS는 차집합이다.

  17. 문제 17

    4지선다

    다음 중 서브쿼리의 결과로 여러 개의 컬럼이 반환되고, 이 결과가 메인 쿼리의 조건절에서 동시에 비교되는 서브쿼리의 유형은 무엇인가?

    • 1.단일행 서브쿼리
    • 2.다중행 서브쿼리
    • 3.단일컬럼 서브쿼리
    • 4.다중컬럼 서브쿼리
    정답·해설 보기

    정답

    4. 다중컬럼 서브쿼리

    해설

    정답: 4. 여러 컬럼을 반환하여 메인 쿼리의 여러 컬럼과 동시에 비교하는 서브쿼리는 다중컬럼 서브쿼리이다.

    오답 풀이

    • 1번: 단일행 서브쿼리는 반환 행 수 기준 분류이다.
    • 2번: 다중행 서브쿼리는 여러 행을 반환하는 서브쿼리이다.
    • 3번: 단일컬럼 서브쿼리는 한 컬럼만 반환한다.
    • 4번: 여러 컬럼을 동시에 비교하므로 정답이다.

    보충 개념 다중컬럼 서브쿼리는 (col1, col2) IN (SELECT col1, col2 FROM ...) 같은 형태로 사용된다.

  18. 문제 18

    4지선다

    다음 두 테이블을 이용한 조건식 중 결과가 다른 것은?

    <데이터>

    TAB1.COL1TAB2.COL1
    AA
    BB
    CNULL

    <조건> 두 컬럼을 비교하여 같은 값을 찾거나 다른 값을 찾는 조건식이다.

    • 1.WHERE T1.COL1 <> T2.COL1
    • 2.WHERE NOT (T1.COL1 = T2.COL1)
    • 3.WHERE T1.COL1 != T2.COL1
    • 4.WHERE T1.COL1 = T2.COL1
    정답·해설 보기

    정답

    4. WHERE T1.COL1 = T2.COL1

    해설

    정답: 4. 1, 2, 3번은 서로 다름을 비교하는 조건이고, 4번은 같음을 비교하는 조건이므로 결과가 다르다.

    오답 풀이

    • 1번: 두 값이 다른 경우를 찾는 조건이다.
    • 2번: 같지 않음을 표현하는 조건이다.
    • 3번: <>와 유사하게 같지 않음을 비교한다.
    • 4번: 같은 값을 찾으므로 나머지와 결과가 다르다.

    보충 개념 SQL에서 NULL이 비교에 포함되면 결과는 UNKNOWN이 될 수 있다. 같음과 다름 비교에서는 NULL 처리 여부에 주의해야 한다.

  19. 문제 19

    4지선다

    다음 정규표현식 메타문자 설명 중 적절한 것은?

    • 1.? : 대상이 0회 또는 1회 반복되는지 확인한다.
    • 2.* : 대상이 1회 이상 반복되는지 확인한다.
    • 3.+ : 대상이 0회 또는 그 이상 반복되는지 확인한다.
    • 4.{m,} : 대상이 0회 또는 그 이상 반복되는지 확인한다.
    정답·해설 보기

    정답

    1. ? : 대상이 0회 또는 1회 반복되는지 확인한다.

    해설

    정답: 1. ?는 앞의 대상이 0회 또는 1회 나타나는 패턴을 의미한다.

    오답 풀이

    • 1번: ?에 대한 올바른 설명이다.
    • 2번: *는 0회 이상 반복을 의미한다.
    • 3번: +는 1회 이상 반복을 의미한다.
    • 4번: {m,}는 m회 이상 반복을 의미한다.

    보충 개념 정규표현식에서 반복 수량자는 매우 자주 출제된다. *는 0회 이상, +는 1회 이상, ?는 0회 또는 1회, {m,}는 m회 이상이다.

  20. 문제 20

    4지선다

    다음 윈도우 함수의 결과로 가장 적절한 것은?

    <데이터>

    IDVAL
    11
    23
    35
    45
    55
    SQL
    SELECT ID, VAL, COUNT(*) OVER( ORDER BY VAL, ID ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS CNT FROM T;

    ID가 3이고 VAL이 5인 행의 CNT 값은?

    • 1.1
    • 2.2
    • 3.3
    • 4.5
    정답·해설 보기

    정답

    3. 3

    해설

    정답: 3. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW는 첫 행부터 현재 물리적 행까지를 프레임으로 잡는다. ORDER BY VAL, ID 기준으로 정렬하면 ID 3 행은 세 번째 행이므로 프레임에는 ID 1, ID 2, ID 3 총 3개 행이 포함된다.

    오답 풀이

    • 1번: 현재 행만 세는 프레임이 아니다.
    • 2번: 현재 행 이전의 두 행만 고려한 값이다.
    • 3번: 첫 행부터 현재 행까지 3개이므로 정답이다.
    • 4번: RANGE 기준으로 동순위까지 포함하는 경우와 혼동한 값이다.

    보충 개념 ROWS는 물리적 행 단위로 프레임을 계산한다. 동점 정렬값이 있을 때 결과를 명확히 하려면 ORDER BY에 고유한 정렬 기준을 추가하는 것이 좋다.

  21. 문제 21

    4지선다

    다음 중 최고 급여를 받는 직원을 구하는 조건으로 옳지 않은 것은?

    • 1.SAL >= ANY (SELECT SAL FROM EMP)
    • 2.SAL >= ALL (SELECT SAL FROM EMP)
    • 3.SAL = (SELECT MAX(SAL) FROM EMP)
    • 4.SAL IN (SELECT MAX(SAL) FROM EMP)
    정답·해설 보기

    정답

    1. SAL >= ANY (SELECT SAL FROM EMP)

    해설

    정답: 1. SAL >= ANY는 전체 급여 중 하나 이상보다 크거나 같으면 TRUE가 되므로 최고 급여자를 찾는 조건으로 부적절하다.

    오답 풀이

    • 1번: 최소 급여 이상인 대부분의 행이 만족할 수 있으므로 최고 급여 조건이 아니다.
    • 2번: 모든 급여보다 크거나 같아야 하므로 최고 급여 조건이다.
    • 3번: 최대 급여와 같은 직원을 찾으므로 적절하다.
    • 4번: MAX(SAL) 결과와 일치하는 직원을 찾으므로 적절하다.

    보충 개념 ANY는 서브쿼리 결과 중 하나라도 만족하면 TRUE이고, ALL은 모든 결과를 만족해야 TRUE이다. 최고값 비교에는 >= ALL 또는 = MAX()를 사용할 수 있다.

  22. 문제 22

    4지선다

    부서 ID가 100인 부서에서 시작하여 최상위부터 최하위 부서까지 출력하려고 한다. 계층형 질의의 CONNECT BY 조건으로 가장 적절한 것은?

    <테이블> 부서(부서ID, 상위부서ID, 부서명)

    • 1.START WITH 부서ID = 100 CONNECT BY PRIOR 상위부서ID = 부서ID
    • 2.START WITH 부서ID = 100 CONNECT BY PRIOR 부서ID = 상위부서ID
    • 3.CONNECT BY PRIOR 상위부서ID = 부서ID
    • 4.CONNECT BY 부서ID = PRIOR 상위부서ID
    정답·해설 보기

    정답

    2. START WITH 부서ID = 100 CONNECT BY PRIOR 부서ID = 상위부서ID

    해설

    정답: 2. 부모 행의 부서ID가 자식 행의 상위부서ID와 같아야 하위 부서 방향으로 탐색된다.

    오답 풀이

    • 1번: 부모의 상위부서ID와 자식의 부서ID를 비교하므로 상위 방향 탐색에 가깝다.
    • 2번: 하위 부서 방향 계층 탐색 조건이다.
    • 3번: 시작 조건이 없고 방향도 부적절하다.
    • 4번: 상위 방향 탐색 조건에 가깝다.

    보충 개념 CONNECT BY PRIOR 부모컬럼 = 자식컬럼 형태는 부모에서 자식 방향으로 탐색한다. PRIOR가 어느 쪽에 붙는지가 방향을 결정한다.

  23. 문제 23

    4지선다

    부서별 평균 급여보다 높은 최대 급여를 가진 부서를 찾으려 한다. 모든 부서의 평균 급여보다 최대 급여가 큰 부서를 찾는 HAVING 절로 가장 적절한 것은?

    • 1.HAVING MAX(SAL) > ANY (SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO)
    • 2.HAVING AVG(SAL) > ANY (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO)
    • 3.HAVING MAX(SAL) > ALL (SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO)
    • 4.HAVING AVG(SAL) > ALL (SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO)
    정답·해설 보기

    정답

    3. HAVING MAX(SAL) > ALL (SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO)

    해설

    정답: 3. 모든 부서의 평균 급여보다 큰 최대 급여를 찾으려면 MAX(SAL) > ALL(부서별 평균 급여)을 사용한다.

    오답 풀이

    • 1번: ANY는 하나의 평균 급여보다만 크면 되므로 조건이 약하다.
    • 2번: 평균 급여를 최대 급여와 비교하고 있어 의도와 다르다.
    • 3번: 모든 평균 급여보다 최대 급여가 큰 조건이다.
    • 4번: 평균 급여끼리 비교하는 조건으로 문제 의도와 다르다.

    보충 개념 ALL은 서브쿼리 결과 전체와 비교할 때 사용한다. 그룹 조건에는 WHERE가 아니라 HAVING을 사용해야 한다.

  24. 문제 24

    4지선다

    윈도우 함수 프레임에서 물리적인 행의 개수를 기준으로 범위를 지정하는 키워드는?

    • 1.ROWS
    • 2.RANGE
    • 3.GROUPS
    • 4.PARTITION
    정답·해설 보기

    정답

    1. ROWS

    해설

    정답: 1. ROWS는 현재 행을 기준으로 물리적인 행 수를 기준으로 윈도우 프레임을 지정한다.

    오답 풀이

    • 1번: 물리적 행 기준 프레임을 지정한다.
    • 2번: RANGE는 정렬값의 논리적 범위를 기준으로 한다.
    • 3번: GROUPS는 동순위 그룹 단위의 프레임을 의미한다.
    • 4번: PARTITION은 분석 함수 적용 범위를 나누는 절이지 프레임 단위 키워드가 아니다.

    보충 개념 ROWS는 행 단위, RANGE는 값의 범위 단위로 프레임을 지정한다. 동점 값이 있을 때 ROWS와 RANGE의 결과가 달라질 수 있다.

  25. 문제 25

    4지선다

    다음 테이블에서 COL1 = COL2인 행의 개수를 구하라.

    <데이터>

    COL1COL2
    AA
    BC
    CC
    NULLNULL
    DD
    • 1.1개
    • 2.2개
    • 3.3개
    • 4.4개
    정답·해설 보기

    정답

    3. 3개

    해설

    정답: 3. A=A, C=C, D=D는 TRUE이지만 NULL=NULL은 TRUE가 아니라 UNKNOWN이므로 제외된다.

    오답 풀이

    • 1번: 같은 값인 행을 일부만 센 값이다.
    • 2번: 같은 값인 행이 3개이므로 부족하다.
    • 3번: NULL 비교를 제외하면 3개가 맞다.
    • 4번: NULL=NULL을 TRUE로 잘못 판단한 값이다.

    보충 개념 SQL에서 NULL은 비교 연산자로 같음을 판단할 수 없다. NULL 여부는 IS NULL을 사용해야 한다.

  26. 문제 26

    4지선다

    고유키와 기본키에 대한 설명으로 적절하지 않은 것은?

    • 1.고유키는 중복 값을 허용하지 않는 제약조건이며 NULL은 여러 개 올 수 없다.
    • 2.기본키는 고유키와 NOT NULL 제약조건이 합쳐진 상태로 볼 수 있다.
    • 3.기본키는 한 테이블에 하나만 지정할 수 있다.
    • 4.고유키는 참조 무결성에서 참조 대상 후보가 될 수 있다.
    정답·해설 보기

    정답

    1. 고유키는 중복 값을 허용하지 않는 제약조건이며 NULL은 여러 개 올 수 없다.

    해설

    정답: 1. 고유키는 중복 값을 허용하지 않지만 DBMS에 따라 NULL은 여러 개 허용될 수 있으므로 'NULL은 여러 개 올 수 없다'고 단정하는 설명은 부적절하다.

    오답 풀이

    • 1번: 고유키의 NULL 허용 여부를 단정한 설명이므로 부적절하다.
    • 2번: 기본키는 고유성 및 NOT NULL을 만족한다.
    • 3번: 기본키는 테이블당 하나의 제약으로 지정한다.
    • 4번: 고유키는 외래키의 참조 대상이 될 수 있다.

    보충 개념 기본키는 각 행을 대표 식별하는 키이므로 NULL이 허용되지 않는다. 고유키는 중복 방지 목적의 제약이며 NULL 처리 방식은 DBMS 구현에 따라 다를 수 있다.

  27. 문제 27

    4지선다

    아래의 SQL을 실행했을 경우 출력되지 않는 것은?

    SQL
    REGEXP_LIKE(문자열, '^[^mw][[:lower:]]*[u]*day$', 'i')
    • 1.Monday
    • 2.Sunday
    • 3.Friday
    • 4.Saturday
    정답·해설 보기

    정답

    1. Monday

    해설

    정답: 1. 정규식 ^[^mw][[:lower:]]*[u]*day$는 첫 글자가 m 또는 w가 아니어야 하고, 뒤에는 소문자가 0회 이상 반복된 뒤 u가 0회 이상 나오며 day로 끝나는 문자열을 찾는다. 옵션 'i'가 있으므로 대소문자는 구분하지 않는다. Monday는 첫 글자가 M이므로 [^mw] 조건을 만족하지 못해 출력되지 않는다.

    오답 풀이

    • 1번: Monday는 첫 글자가 M이므로 m 또는 w가 아닌 문자 조건을 만족하지 못한다.
    • 2번: Sunday는 첫 글자가 S이고 day로 끝나므로 매칭될 수 있다.
    • 3번: Friday는 첫 글자가 F이고 day로 끝나므로 매칭될 수 있다.
    • 4번: Saturday는 첫 글자가 S이고 day로 끝나므로 매칭될 수 있다.

    보충 개념 [^mw]는 m 또는 w가 아닌 문자 1개를 의미한다. 옵션 i가 있으면 대소문자를 구분하지 않으므로 M과 W도 제외 대상이 된다.

  28. 문제 28

    4지선다

    테이블 컬럼과 제약조건 변경에 대한 설명으로 틀린 것은?

    • 1.부적절한 DEFAULT 사용은 데이터 의미를 왜곡하거나 관리상 혼란을 줄 수 있다.
    • 2.NUMBER형 컬럼의 크기는 데이터 손실이 없으면 늘릴 수 있지만, 줄일 때는 기존 데이터에 따라 제한될 수 있다.
    • 3.NULL이 중복이 아니어야만 NOT NULL 제한조건을 사용할 수 있다.
    • 4.NOT NULL 제약조건을 추가하려면 해당 컬럼에 NULL 값이 없어야 한다.
    정답·해설 보기

    정답

    3. NULL이 중복이 아니어야만 NOT NULL 제한조건을 사용할 수 있다.

    해설

    정답: 3. NOT NULL 제약조건은 중복 여부와 관련이 없고, 해당 컬럼 값이 NULL이 아니어야 한다는 제약이다.

    오답 풀이

    • 1번: 부적절한 DEFAULT 사용은 데이터 품질에 영향을 줄 수 있다.
    • 2번: 컬럼 크기 축소는 기존 데이터 손실 가능성 때문에 제한될 수 있다.
    • 3번: 중복 여부는 UNIQUE 제약과 관련되고 NOT NULL과는 다르다.
    • 4번: 이미 NULL이 있는 컬럼에는 바로 NOT NULL 제약을 추가하기 어렵다.

    보충 개념 NOT NULL은 값의 존재 여부를 제한하고 UNIQUE는 중복 여부를 제한한다. PRIMARY KEY는 UNIQUE와 NOT NULL 성격을 모두 가진다.

  29. 문제 29

    4지선다

    동일한 정렬값에 대해 같은 순위를 부여하되, 다음 순위는 건너뛰지 않고 연속된 순위를 부여하는 분석 함수는?

    • 1.DENSE_RANK
    • 2.RANK
    • 3.ROW_NUMBER
    • 4.PERCENT_RANK
    정답·해설 보기

    정답

    1. DENSE_RANK

    해설

    정답: 1. DENSE_RANK는 동일 순위가 있어도 다음 순위를 건너뛰지 않는다.

    오답 풀이

    • 1번: 1, 2, 2, 3처럼 연속 순위를 부여한다.
    • 2번: RANK는 1, 2, 2, 4처럼 다음 순위를 건너뛴다.
    • 3번: ROW_NUMBER는 동일 정렬값이어도 서로 다른 번호를 부여한다.
    • 4번: PERCENT_RANK는 상대 순위를 0~1 범위로 계산한다.

    보충 개념 순위 함수는 RANK, DENSE_RANK, ROW_NUMBER가 자주 비교된다. 공동 순위 이후 번호가 건너뛰는지 여부가 핵심 차이다.

  30. 문제 30

    4지선다

    Oracle 계층형 쿼리의 실행 순서와 관련된 설명으로 가장 적절한 것은?

    • 1.START WITH 절이 WHERE 절보다 항상 나중에 수행된다.
    • 2.ORDER BY 절이 CONNECT BY 절보다 먼저 수행된다.
    • 3.WHERE 절은 계층 구조가 만들어진 뒤 조건에 맞지 않는 행을 제거할 수 있다.
    • 4.START WITH 절은 계층의 시작 행을 지정할 수 없다.
    정답·해설 보기

    정답

    3. WHERE 절은 계층 구조가 만들어진 뒤 조건에 맞지 않는 행을 제거할 수 있다.

    해설

    정답: 3. 계층형 쿼리에서는 START WITH로 시작점을 정하고 CONNECT BY로 계층을 전개한 뒤 WHERE 조건에 따라 행을 필터링할 수 있다.

    오답 풀이

    • 1번: START WITH는 계층 시작점을 지정하는 절이다.
    • 2번: ORDER BY는 일반적으로 최종 결과 정렬 단계에 가깝다.
    • 3번: WHERE 절은 전개된 행에 대한 필터링에 사용될 수 있다.
    • 4번: START WITH는 계층 시작 행을 지정한다.

    보충 개념 계층형 쿼리는 START WITH, CONNECT BY, PRIOR의 의미를 구분해야 한다. 형제 노드 정렬에는 ORDER SIBLINGS BY를 사용할 수 있다.

  31. 문제 31

    4지선다

    다음 중 중복을 제거한 값의 개수를 구하는 표현으로 가장 적절한 것은?

    • 1.COUNT(DISTINCT 컬럼명)
    • 2.DISTINCT COUNT(컬럼명)
    • 3.COUNT(ALL DISTINCT 컬럼명)
    • 4.UNIQUE COUNT(컬럼명)
    정답·해설 보기

    정답

    1. COUNT(DISTINCT 컬럼명)

    해설

    정답: 1. 중복을 제거한 값의 개수를 구할 때는 COUNT(DISTINCT 컬럼명)을 사용한다.

    오답 풀이

    • 1번: 올바른 문법이다.
    • 2번: DISTINCT의 위치가 부적절하다.
    • 3번: COUNT 안에서 ALL과 DISTINCT를 함께 사용할 수 없다.
    • 4번: 일반적인 SQL 집계 함수 문법이 아니다.

    보충 개념 COUNT(*)는 전체 행 수, COUNT(컬럼)는 NULL이 아닌 값의 수, COUNT(DISTINCT 컬럼)는 중복을 제거한 값의 수를 반환한다.

  32. 문제 32

    4지선다

    아래 두 테이블에서 LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN, INNER JOIN을 각각 수행하여 생성되는 행 수의 총합을 구하라.

    <데이터>

    TAB1TAB2
    AE
    BF
    CD
    GG

    <조건> TAB1.COL = TAB2.COL 조건으로 조인한다.

    • 1.14개
    • 2.15개
    • 3.16개
    • 4.17개
    정답·해설 보기

    정답

    3. 16개

    해설

    정답: 3. INNER JOIN은 G만 매칭되어 1건, LEFT JOIN은 TAB1 기준 4건(매칭 1 + TAB1 미매칭 A,B,C 3건), RIGHT JOIN은 TAB2 기준 4건(매칭 1 + TAB2 미매칭 E,F,D 3건), FULL OUTER JOIN은 매칭 1건 + TAB1 미매칭 A,B,C 3건 + TAB2 미매칭 E,F,D 3건 = 7건이므로 합계는 1 + 4 + 4 + 7 = 16건이다.

    오답 풀이

    • 1번: 일부 JOIN의 건수를 과소 계산한 값이다.
    • 2번: FULL OUTER JOIN을 6건으로 잘못 계산한 값이다.
    • 3번: 1 + 4 + 4 + 7 = 16으로 옳다.
    • 4번: 매칭 행이나 미매칭 행을 과대 계산한 값이다.

    보충 개념 LEFT JOIN은 왼쪽 테이블의 모든 행을 보존하고, RIGHT JOIN은 오른쪽 테이블의 모든 행을 보존한다. FULL OUTER JOIN은 양쪽 미매칭 행을 모두 포함하므로 매칭된 행 수에 양쪽 미매칭 행 수를 더한 값이 된다.

  33. 문제 33

    4지선다

    Oracle에서 점수가 높은 상위 10명을 정확히 조회하는 SQL로 가장 적절한 것은?

    • 1.SELECT * FROM EMP WHERE ROWNUM <= 10 ORDER BY SAL DESC
    • 2.SELECT * FROM (SELECT * FROM EMP ORDER BY SAL DESC) WHERE ROWNUM <= 10
    • 3.SELECT * FROM EMP WHERE ROWNUM > 10 ORDER BY SAL DESC
    • 4.SELECT * FROM EMP ORDER BY SAL DESC WHERE ROWNUM <= 10
    정답·해설 보기

    정답

    2. SELECT * FROM (SELECT * FROM EMP ORDER BY SAL DESC) WHERE ROWNUM <= 10

    해설

    정답: 2. Oracle에서 ROWNUM은 ORDER BY보다 먼저 부여될 수 있으므로 먼저 인라인 뷰에서 정렬한 뒤 바깥 쿼리에서 ROWNUM 조건을 적용해야 한다.

    오답 풀이

    • 1번: ROWNUM이 먼저 적용되어 임의의 10건을 뽑은 뒤 정렬될 수 있다.
    • 2번: 정렬 후 상위 10건을 선택하는 올바른 방식이다.
    • 3번: ROWNUM > 10 조건은 일반적으로 원하는 결과를 반환하지 못한다.
    • 4번: SQL 문법상 WHERE 절 위치가 잘못되었다.

    보충 개념 Top-N 쿼리는 정렬과 행 제한의 순서가 중요하다. Oracle 12c 이후에는 FETCH FIRST n ROWS ONLY도 사용할 수 있다.

  34. 문제 34

    4지선다

    다음 SQL의 실행 결과는?

    SQL
    SELECT NVL(COUNT(*), 9999) FROM TABLE_NAME WHERE 1 = 2;
    • 1.NULL
    • 2.1
    • 3.9999
    • 4.0
    정답·해설 보기

    정답

    4. 0

    해설

    정답: 4. COUNT(*)는 조건을 만족하는 행이 없으면 NULL이 아니라 0을 반환하므로 NVL이 적용되어도 0이다.

    오답 풀이

    • 1번: COUNT(*) 결과는 NULL이 아니다.
    • 2번: 조건 1=2는 항상 거짓이므로 1건이 아니다.
    • 3번: NVL은 첫 번째 인자가 NULL일 때만 9999를 반환한다.
    • 4번: COUNT(*) 결과가 0이므로 정답이다.

    보충 개념 COUNT는 집계 대상이 없어도 0을 반환한다. 반면 SUM, AVG 등은 대상 행이 없거나 모두 NULL이면 NULL을 반환할 수 있다.

  35. 문제 35

    4지선다

    다음 중 동일한 이름의 컬럼을 조인 조건으로 사용하고, 중복 컬럼을 하나로 출력하는 조인 방식은?

    • 1.INNER JOIN
    • 2.LEFT OUTER JOIN
    • 3.NATURAL JOIN
    • 4.RIGHT OUTER JOIN
    정답·해설 보기

    정답

    3. NATURAL JOIN

    해설

    정답: 3. NATURAL JOIN은 양쪽 테이블에서 이름이 같은 컬럼을 자동으로 조인 조건으로 사용하며, 동일 이름 컬럼을 하나로 출력한다.

    오답 풀이

    • 1번: INNER JOIN 자체는 동일 이름 컬럼을 자동으로 하나로 출력하지 않는다.
    • 2번: LEFT OUTER JOIN은 왼쪽 행 보존 방식이며 동일 이름 컬럼 자동 처리와 직접 관련이 없다.
    • 3번: 동일 이름 컬럼을 기준으로 자동 조인한다.
    • 4번: RIGHT OUTER JOIN은 오른쪽 행 보존 방식이다.

    보충 개념 NATURAL JOIN은 편리하지만 동일 이름 컬럼이 의도치 않게 조인 조건으로 사용될 수 있어 실무에서는 명시적 JOIN 조건을 선호하는 경우가 많다.

  36. 문제 36

    4지선다

    다음 SQL 중 에러가 발생하는 것의 개수는?

    ㄱ. SELECT 10 / 0 FROM DUAL; ㄴ. SELECT TO_NUMBER('ABC') FROM DUAL; ㄷ. SELECT NVL(NULL, 0) FROM DUAL; ㄹ. SELECT SUBSTR('ABC', 1, 2) FROM DUAL;

    • 1.2개
    • 2.1개
    • 3.3개
    • 4.4개
    정답·해설 보기

    정답

    1. 2개

    해설

    정답: 1. 10/0은 0으로 나누기 오류, TO_NUMBER('ABC')는 숫자 변환 오류가 발생한다. NVL과 SUBSTR은 정상 실행된다.

    오답 풀이

    • 1번: ㄱ, ㄴ 두 개가 오류이므로 2개가 정답이다.
    • 2번: 오류가 하나가 아니라 두 개이다.
    • 3번: ㄷ은 정상 실행된다.
    • 4번: ㄷ, ㄹ은 정상 실행된다.

    보충 개념 Oracle에서 0으로 나누면 ORA-01476 오류가 발생하고, 숫자로 변환할 수 없는 문자열을 TO_NUMBER에 전달하면 ORA-01722 오류가 발생한다.

  37. 문제 37

    4지선다

    다음 SQL의 결과로 가장 적절한 것은?

    <조건> 전체 행 수는 105건이고, 특정 컬럼 COL1이 NULL이 아닌 행 수는 70건이다.

    SQL
    SELECT COUNT(*), COUNT(COL1) FROM T;
    • 1.105, 70
    • 2.70, 105
    • 3.70, NULL
    • 4.103, NULL
    정답·해설 보기

    정답

    1. 105, 70

    해설

    정답: 1. COUNT(*)는 전체 행 수를 세고, COUNT(COL1)은 COL1이 NULL이 아닌 행만 센다.

    오답 풀이

    • 1번: 전체 행 수 105와 NULL 제외 COL1 개수 70이 맞다.
    • 2번: COUNT(*)와 COUNT(COL1)의 순서가 반대이다.
    • 3번: COUNT(COL1)은 NULL이 아니라 70을 반환한다.
    • 4번: 조건과 맞지 않는 값이다.

    보충 개념 COUNT(*)는 NULL 여부와 관계없이 행을 센다. COUNT(컬럼명)은 해당 컬럼 값이 NULL인 행을 제외하고 센다.

  38. 문제 38

    4지선다

    SQL Server에서 다음 결과를 도출하기 위한 조건으로 가장 적절한 것은?

    name
    Jim
    Kim
    Tim
    Sam

    <실행 결과>

    name
    Kim
    Tim
    SQL
    SELECT * FROM member __________;
    • 1.WHERE name LIKE '_im'
    • 2.WHERE name LIKE '%im'
    • 3.WHERE name LIKE '[JT]im'
    • 4.WHERE name LIKE '[KT]im'
    정답·해설 보기

    정답

    4. WHERE name LIKE '[KT]im'

    해설

    정답: 4. SQL Server의 LIKE 패턴 [KT]im은 첫 글자가 K 또는 T이고 뒤가 im인 문자열을 찾으므로 Kim, Tim이 조회된다.

    오답 풀이

    • 1번: _im은 Jim, Kim, Tim처럼 임의의 한 글자 + im을 모두 포함한다.
    • 2번: %im은 im으로 끝나는 Jim, Kim, Tim을 모두 포함한다.
    • 3번: [JT]im은 Jim, Tim을 조회한다.
    • 4번: [KT]im은 Kim, Tim을 조회한다.

    보충 개념 SQL Server LIKE에서 대괄호 []는 문자 목록 중 하나를 의미한다. [KT]는 K 또는 T 한 글자를 의미한다.

  39. 문제 39

    4지선다

    Oracle에서 SYSDATE가 2025-01-01 13:30:00일 때 다음 SQL의 실행 결과로 가장 적절한 것은?

    SQL
    SELECT TRUNC(SYSDATE), ROUND(SYSDATE) FROM DUAL;
    • 1.2025/01/01 00:00:00, 2025/01/02 00:00:00
    • 2.2025/01/01 13:00:00, 2025/01/01 14:00:00
    • 3.2025/01/01 00:00:00, 2025/01/01 00:00:00
    • 4.2025/01/02 00:00:00, 2025/01/02 00:00:00
    정답·해설 보기

    정답

    1. 2025/01/01 00:00:00, 2025/01/02 00:00:00

    해설

    정답: 1. 날짜 단위 TRUNC는 당일 00:00:00으로 절삭하고, ROUND는 정오 이후면 다음 날짜 00:00:00으로 반올림한다.

    오답 풀이

    • 1번: 13:30은 정오 이후이므로 ROUND 결과가 다음 날짜가 된다.
    • 2번: 기본 TRUNC/ROUND는 시각 단위가 아니라 날짜 단위로 처리된다.
    • 3번: 정오 이후 ROUND 결과를 잘못 판단했다.
    • 4번: TRUNC는 다음 날짜가 아니라 현재 날짜 00:00:00이다.

    보충 개념 Oracle 날짜 함수 TRUNC(date)는 지정 단위로 절삭하고 ROUND(date)는 지정 단위로 반올림한다. 단위 생략 시 기본은 일자 기준이다.

  40. 문제 40

    4지선다

    다음 데이터에서 2등급에 해당하는 점수의 개수를 구하라.

    <조건> 2등급 범위는 1200 이상 1400 이하이다.

    <데이터>

    IDSCORE
    11100
    21200
    31300
    41400
    51500
    • 1.1개
    • 2.2개
    • 3.3개
    • 4.4개
    정답·해설 보기

    정답

    3. 3개

    해설

    정답: 3. 1200 이상 1400 이하에 해당하는 값은 1200, 1300, 1400으로 총 3개이다.

    오답 풀이

    • 1번: 범위의 경계값을 제외한 경우보다도 작다.
    • 2번: 한쪽 경계값을 제외한 경우의 값이다.
    • 3번: BETWEEN처럼 양끝을 포함하면 3개이다.
    • 4번: 1100 또는 1500 중 하나를 잘못 포함한 값이다.

    보충 개념 SQL의 BETWEEN A AND B는 A 이상 B 이하를 의미한다. 경계값을 포함한다는 점이 중요하다.

  41. 문제 41

    4지선다

    다음 상황에서 TUTOR LEFT OUTER JOIN CLASS를 수행한 결과 행 수로 가장 적절한 것은?

    <조건>

    • 튜터 테이블에는 튜터 2명이 있다.
    • 클래스 테이블에는 클래스 4개가 있다.
    • LEFT OUTER JOIN의 왼쪽 테이블은 TUTOR이다.
    • 각 클래스는 특정 튜터에 속한다.
    • 두 튜터는 각각 최소 1개 이상의 클래스를 담당한다.
    • 1.2개
    • 2.4개
    • 3.6개
    • 4.8개
    정답·해설 보기

    정답

    2. 4개

    해설

    정답: 2. LEFT OUTER JOIN은 왼쪽 테이블의 행을 보존하지만, 오른쪽 테이블에 여러 행이 매칭되면 왼쪽 행은 매칭된 오른쪽 행 수만큼 반복된다. 클래스 4개가 모두 특정 튜터에 속하고, 두 튜터가 각각 최소 1개 이상의 클래스를 담당하므로 조인 결과는 클래스 행 기준으로 총 4건이다.

    오답 풀이

    • 1번: 왼쪽 테이블의 튜터 수만 단순히 반환되는 것이 아니다.
    • 2번: 클래스 4개가 모두 튜터와 매칭되므로 결과는 4건이다.
    • 3번: 튜터 수와 클래스 수를 단순 합산한 값이다.
    • 4번: 모든 튜터와 모든 클래스를 곱한 값으로 잘못 계산한 결과이다.

    보충 개념 LEFT OUTER JOIN은 왼쪽 행을 보존한다. 오른쪽에 매칭되는 행이 여러 개 있으면 왼쪽 행은 그 수만큼 반복되고, 매칭되는 오른쪽 행이 없으면 NULL 확장 행이 1건 생성된다.

  42. 문제 42

    4지선다

    MERGE 문에서 각 절의 역할 연결로 가장 적절한 것은?

    <보기>

    1. WHEN MATCHED THEN
    2. WHEN NOT MATCHED THEN
    3. ON 조건
    4. USING

    <역할> a. 매칭되지 않는 행에 대해 INSERT 수행 b. 매칭되는 행에 대해 UPDATE 또는 DELETE 수행 c. 병합에 사용할 원본 데이터 집합 지정 d. 대상 테이블과 원본 데이터의 매칭 조건 지정

    • 1.1-a, 2-b, 3-c, 4-d
    • 2.1-b, 2-a, 3-d, 4-c
    • 3.1-b, 2-a, 3-c, 4-d
    • 4.1-d, 2-c, 3-b, 4-a
    정답·해설 보기

    정답

    2. 1-b, 2-a, 3-d, 4-c

    해설

    정답: 2. WHEN MATCHED는 매칭 시 UPDATE/DELETE, WHEN NOT MATCHED는 미매칭 시 INSERT, ON은 매칭 조건, USING은 원본 데이터 집합을 의미한다.

    오답 풀이

    • 1번: MATCHED와 NOT MATCHED의 역할이 바뀌었다.
    • 2번: 각 절의 역할이 올바르게 연결되었다.
    • 3번: 3과 4의 역할이 바뀌었다.
    • 4번: 전체 연결이 부적절하다.

    보충 개념 MERGE는 조건에 따라 INSERT, UPDATE, DELETE를 한 문장에서 처리할 수 있는 명령이다. 기준은 대상 테이블과 원본 데이터의 ON 조건 매칭 여부이다.

  43. 문제 43

    4지선다

    다음 중 2022년 11월, 2022년 12월, 2023년 3월, 2023년 5월 데이터를 조회하는 조건으로 가장 적절한 것은?

    • 1.WHERE 기준월 BETWEEN '202211' AND '202305'
    • 2.WHERE 기준월 IN ('202211', '202212', '202303', '202305')
    • 3.WHERE 기준월 >= '202211' AND 기준월 <= '202305'
    • 4.WHERE 기준월 LIKE '2022%' OR 기준월 LIKE '2023%'
    정답·해설 보기

    정답

    2. WHERE 기준월 IN ('202211', '202212', '202303', '202305')

    해설

    정답: 2. 특정 네 개 월만 조회하려면 IN으로 해당 월을 명시하는 것이 가장 정확하다.

    오답 풀이

    • 1번: 2023년 1월, 2월, 4월 등 원하지 않는 월도 포함된다.
    • 2번: 필요한 네 개 월만 정확히 조회한다.
    • 3번: BETWEEN과 동일하게 중간 월까지 포함된다.
    • 4번: 2022년과 2023년 전체 월을 포함할 수 있다.

    보충 개념 연속 구간은 BETWEEN을 사용하고, 불연속적인 값 목록은 IN을 사용하는 것이 적절하다.

  44. 문제 44

    4지선다

    다음 중 가능한 모든 조합의 소계를 생성하는 GROUP BY 확장 기능은?

    • 1.ROLLUP
    • 2.GROUPING SETS
    • 3.GROUPING
    • 4.CUBE
    정답·해설 보기

    정답

    4. CUBE

    해설

    정답: 4. CUBE는 지정한 컬럼들의 가능한 모든 조합에 대한 소계와 총계를 생성한다.

    오답 풀이

    • 1번: ROLLUP은 계층적 소계를 생성한다.
    • 2번: GROUPING SETS는 사용자가 지정한 그룹 조합만 생성한다.
    • 3번: GROUPING은 해당 행이 소계 행인지 구분하는 함수이다.
    • 4번: 모든 조합의 소계를 생성하므로 정답이다.

    보충 개념 ROLLUP(A, B)는 (A,B), (A), ()를 생성한다. CUBE(A, B)는 (A,B), (A), (B), ()를 생성한다.

  45. 문제 45

    4지선다

    다음 UNPIVOT 결과로 가장 적절한 것은?

    <원본 테이블>

    상품1월2월3월
    A100NULL300
    SQL
    SELECT 상품,, 금액 FROM 매출 UNPIVOT ( 금액 FORIN ("1월", "2월", "3월") );

    <조건> UNPIVOT INCLUDE NULLS를 사용하지 않는다.

    • 1.1월, 2월, 3월이 모두 출력되고 모든 금액이 채워져 있다.
    • 2.2월 행은 제외되고 1월과 3월 행만 출력된다.
    • 3.2월 행이 출력되며 금액은 NULL이다.
    • 4.모든 월이 출력되지만 금액이 원본과 다르게 변환된다.
    정답·해설 보기

    정답

    2. 2월 행은 제외되고 1월과 3월 행만 출력된다.

    해설

    정답: 2. Oracle UNPIVOT은 기본적으로 NULL 값을 제외하므로 2월 행은 출력되지 않는다.

    오답 풀이

    • 1번: NULL인 2월 금액이 있으므로 모든 금액이 채워진 결과가 아니다.
    • 2번: INCLUDE NULLS가 없으면 NULL 값 행은 제외된다.
    • 3번: INCLUDE NULLS를 사용한 경우에 가까운 결과이다.
    • 4번: UNPIVOT은 열을 행으로 변환할 뿐 금액을 임의로 바꾸지 않는다.

    보충 개념 UNPIVOT은 여러 컬럼을 행으로 변환한다. NULL 행까지 포함하려면 INCLUDE NULLS 옵션을 명시해야 한다.

  46. 문제 46

    4지선다

    다음 SQL의 괄호 안에 들어갈 수 없는 것은?

    SQL
    SELECT ( ), COUNT(EMPNO) FROM EMP GROUP BY JOB, DEPT;
    • 1.EMPNO
    • 2.JOB
    • 3.DEPT
    • 4.NULL
    정답·해설 보기

    정답

    1. EMPNO

    해설

    정답: 1. GROUP BY에 포함되지 않은 일반 컬럼 EMPNO는 집계 함수 없이 SELECT 절에 올 수 없다.

    오답 풀이

    • 1번: EMPNO는 GROUP BY에 없고 집계 함수도 아니므로 사용할 수 없다.
    • 2번: JOB은 GROUP BY에 포함되어 사용할 수 있다.
    • 3번: DEPT는 GROUP BY에 포함되어 사용할 수 있다.
    • 4번: NULL 상수는 그룹과 무관하게 SELECT 절에 사용할 수 있다.

    보충 개념 GROUP BY를 사용할 때 SELECT 절에는 GROUP BY 컬럼, 집계 함수, 상수 표현식 등이 올 수 있다. 그룹화되지 않은 일반 컬럼은 사용할 수 없다.

  47. 문제 47

    4지선다

    이름이 중복된 데이터 중 각 이름별로 가장 작은 ID만 남기고 나머지를 삭제하려고 한다. DELETE 조건으로 가장 적절한 것은?

    • 1.WHERE ID NOT IN (SELECT MIN(ID) FROM T GROUP BY NAME)
    • 2.WHERE ID NOT IN (SELECT MAX(ID) FROM T GROUP BY ID)
    • 3.WHERE ID NOT IN (SELECT MAX(ID) FROM T GROUP BY NAME)
    • 4.WHERE ID IN (SELECT MAX(ID) FROM T GROUP BY ID)
    정답·해설 보기

    정답

    1. WHERE ID NOT IN (SELECT MIN(ID) FROM T GROUP BY NAME)

    해설

    정답: 1. 각 NAME 그룹별 MIN(ID)를 남기고 나머지를 삭제하려면 ID가 그룹별 MIN(ID)에 포함되지 않는 행을 삭제한다.

    오답 풀이

    • 1번: 이름별 최소 ID만 보존하는 조건이다.
    • 2번: ID로 GROUP BY하면 각 ID 자체가 반환되어 중복 제거 목적에 맞지 않는다.
    • 3번: 이름별 최대 ID를 남기는 조건이므로 문제 의도와 다르다.
    • 4번: ID별 MAX(ID)는 사실상 모든 ID가 대상이 될 수 있어 부적절하다.

    보충 개념 중복 데이터 삭제에서는 보존 기준을 먼저 정해야 한다. 보통 그룹별 MIN(ID) 또는 MAX(ID)를 남기고 나머지를 삭제한다.

  48. 문제 48

    4지선다

    다음 중 NOT IN과 NOT EXISTS에 대한 설명으로 적절하지 않은 것은?

    • 1.NOT EXISTS는 상관 서브쿼리에서 조건을 만족하는 행이 없을 때 TRUE가 된다.
    • 2.NOT IN은 서브쿼리 결과에 NULL이 포함되면 의도와 다른 결과가 나올 수 있다.
    • 3.서브쿼리 결과에 NULL이 없고 비교 컬럼도 NULL이 아니라면 NOT IN을 NOT EXISTS로 바꿔도 같은 결과를 얻을 수 있다.
    • 4.서브쿼리 결과가 NULL을 포함해도 NOT IN과 NOT EXISTS의 결과는 항상 동일하다.
    정답·해설 보기

    정답

    4. 서브쿼리 결과가 NULL을 포함해도 NOT IN과 NOT EXISTS의 결과는 항상 동일하다.

    해설

    정답: 4. NOT IN은 비교 목록에 NULL이 포함되면 UNKNOWN 때문에 결과가 달라질 수 있어 NOT EXISTS와 항상 동일하지 않다.

    오답 풀이

    • 1번: NOT EXISTS의 올바른 설명이다.
    • 2번: NOT IN의 NULL 관련 주의점이다.
    • 3번: NULL이 배제된 경우 두 방식이 같은 결과를 낼 수 있다.
    • 4번: NULL 포함 시 항상 동일하다는 설명은 틀리다.

    보충 개념 NOT IN (subquery)는 서브쿼리 결과에 NULL이 있으면 비교 결과가 UNKNOWN이 되어 행이 반환되지 않을 수 있다. NULL 가능성이 있으면 NOT EXISTS가 더 안전한 경우가 많다.

  49. 문제 49

    4지선다

    ROLLUP 결과에서 GROUPING 함수를 이용해 합계 행의 표시명을 지정하려고 한다. 다음 중 가장 적절한 CASE 표현식은?

    • 1.CASE WHEN GROUPING(DEPTNO) = 1 AND GROUPING(JOB) = 1 THEN '총계' WHEN GROUPING(JOB) = 1 THEN '소계' ELSE JOB END
    • 2.CASE WHEN GROUPING(DEPTNO) = 0 AND GROUPING(JOB) = 0 THEN '총계' ELSE NULL END
    • 3.CASE WHEN GROUPING(DEPTNO) = 1 THEN DEPTNO ELSE '소계' END
    • 4.CASE WHEN GROUPING(JOB) = 0 THEN '소계' ELSE JOB END
    정답·해설 보기

    정답

    1. CASE WHEN GROUPING(DEPTNO) = 1 AND GROUPING(JOB) = 1 THEN '총계' WHEN GROUPING(JOB) = 1 THEN '소계' ELSE JOB END

    해설

    정답: 1. GROUPING 값이 1이면 해당 컬럼이 집계로 인해 생성된 NULL임을 의미하므로 DEPTNO와 JOB이 모두 1이면 총계, JOB만 1이면 소계로 표시할 수 있다.

    오답 풀이

    • 1번: 총계와 소계를 구분하는 CASE로 적절하다.
    • 2번: GROUPING 값 0은 실제 그룹 컬럼이 존재하는 일반 행을 의미한다.
    • 3번: GROUPING 결과와 실제 컬럼 값을 혼동했다.
    • 4번: GROUPING(JOB)=0은 JOB이 존재하는 일반 상세 행이다.

    보충 개념 GROUPING(컬럼)은 해당 컬럼이 집계에 의해 NULL로 표시된 경우 1, 실제 데이터에 의해 존재하는 경우 0을 반환한다. ROLLUP 결과의 소계와 총계를 구분할 때 유용하다.

  50. 문제 50

    4지선다

    아래 SQL의 실행 결과로 가장 적절한 것은?

    <사원>

    사원ID부서ID사원명연봉
    001100홍길동2500
    002100강감찬3000
    003200김유신4500
    004200김선달3000
    005200유학생2500
    006300변사또4500
    007300박문수3000
    SQL
    SELECT Y.사원ID, Y.부서ID, Y.사원명, Y.연봉 FROM ( SELECT 사원ID, MAX(연봉) OVER(PARTITION BY 부서ID) AS 최고연봉 FROM 사원 ) X, 사원 Y WHERE X.사원ID = Y.사원ID AND X.최고연봉 = Y.연봉;
    • 1.사원ID 003 김유신 4500, 사원ID 006 변사또 4500
    • 2.사원ID 001 홍길동 2500, 사원ID 005 유학생 2500, 사원ID 007 박문수 3000
    • 3.사원ID 002 강감찬 3000, 사원ID 003 김유신 4500, 사원ID 006 변사또 4500
    • 4.사원ID 003 김유신 4500
    정답·해설 보기

    정답

    3. 사원ID 002 강감찬 3000, 사원ID 003 김유신 4500, 사원ID 006 변사또 4500

    해설

    정답: 3. 부서별 최고 연봉은 100부서 3000, 200부서 4500, 300부서 4500이므로 해당 연봉을 받는 강감찬, 김유신, 변사또가 조회된다.

    오답 풀이

    • 1번: 100부서의 최고 연봉자인 강감찬이 누락되었다.
    • 2번: 부서별 최저 또는 다른 기준의 결과이다.
    • 3번: 각 부서별 최고 연봉자를 모두 포함한다.
    • 4번: 200부서 최고 연봉자만 포함되어 부족하다.

    보충 개념 MAX(연봉) OVER(PARTITION BY 부서ID)는 각 사원 행에 해당 부서의 최고 연봉을 함께 표시한다. 이후 자신의 연봉이 부서 최고 연봉과 같은 행만 필터링하면 부서별 최고 연봉자를 구할 수 있다.

이번엔 직접 풀어보세요

타이머와 자동 채점이 켜진 실제 시험 환경으로 응시할 수 있습니다.