SQL 기본과 활용 문제·해설 모음
SQLD SQL 개발자 · 240문항 · 해설은 눌러서 펼쳐요
채점하면서 랜덤 10문항 풀기관계형 DB와 SELECT
- 1.다음 EMP 테이블에서 SELECT DISTINCT DEPTNO FROM EMP를 실행하면 몇 행이 출력되는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 3행
- 2. 4행
- 3. 5행
- 4. 6행
정답·해설 보기
정답: 2번. 중복을 제거한 DEPTNO 값은 10, 20, 30, NULL이다. DISTINCT는 NULL도 하나의 값으로 취급해 한 행으로 출력한다.
- 2.Oracle에서 실행했을 때 오류가 발생하는 SQL은?
- 1. SELECT SAL AS "MONTHLY PAY" FROM EMP;
- 2. SELECT SAL MONTHLY_PAY FROM EMP;
- 3. SELECT SAL "PAY" FROM EMP;
- 4. SELECT SAL AS MONTHLY PAY FROM EMP;
정답·해설 보기
정답: 4번. 별칭에 공백이 들어가면 큰따옴표로 감싸야 한다. AS는 생략할 수 있고, 공백이 없는 별칭은 따옴표 없이 써도 된다.
- 3.Oracle에서 두 문자열을 이어 붙이는 연결 연산자는?
- 1. +
- 2. &
- 3. &&
- 4. ||
정답·해설 보기
정답: 4번. Oracle은 || 연산자(또는 CONCAT 함수)를, SQL Server는 + 연산자(또는 CONCAT 함수)를 사용한다.
- 4.SELECT 문의 논리적 실행 순서로 옳은 것은?
- 1. SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
- 2. FROM → WHERE → SELECT → GROUP BY → HAVING → ORDER BY
- 3. FROM → GROUP BY → WHERE → HAVING → SELECT → ORDER BY
- 4. FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
정답·해설 보기
정답: 4번. 대상 테이블(FROM)을 정하고 행을 거른 뒤(WHERE) 그룹으로 묶고(GROUP BY) 그룹을 거른 다음(HAVING) 출력 항목을 계산(SELECT)하고 마지막에 정렬(ORDER BY)한다. 그래서 WHERE에서는 SELECT 별칭을 쓸 수 없다.
- 5.다음 EMP 테이블에서 SELECT ENAME, SAL + COMM FROM EMP를 실행하면 SAL + COMM 값이 NULL로 나오는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6개
- 2. 4개
- 3. 2개
- 4. 0개
정답·해설 보기
정답: 2번. NULL이 포함된 산술 연산의 결과는 NULL이다. COMM이 NULL인 KIM, PARK, JUNG, KANG의 4행이 NULL이 된다. NULL을 0으로 계산하려면 NVL(COMM, 0)을 쓴다.
- 6.Oracle에서 테이블 없이 SELECT 1 + 1을 계산할 때 FROM 절에 쓰는 가상 테이블은?
- 1. DUAL
- 2. DUMMY
- 3. SYSTEM
- 4. TEMP
정답·해설 보기
정답: 1번. Oracle은 SELECT 문에 FROM 절이 반드시 필요해 한 행짜리 DUAL 테이블을 쓴다. SQL Server는 FROM 절을 생략할 수 있다.
- 7.관계형 데이터베이스 용어로 테이블의 한 행을 뜻하는 것은?
- 1. 속성(애트리뷰트)
- 2. 도메인
- 3. 튜플
- 4. 스키마
정답·해설 보기
정답: 3번. 관계형 모델에서 테이블은 릴레이션, 행은 튜플, 열은 속성(애트리뷰트)이라 한다. 도메인은 속성이 가질 수 있는 값의 범위다.
- 8.다음 중 TCL(트랜잭션 제어어)에 해당하는 명령은?
- 1. COMMIT
- 2. CREATE
- 3. GRANT
- 4. UPDATE
정답·해설 보기
정답: 1번. TCL은 COMMIT, ROLLBACK, SAVEPOINT다. CREATE는 DDL, GRANT는 DCL, UPDATE는 DML이다.
- 9.SELECT 절의 ALL과 DISTINCT에 대한 설명으로 옳은 것은?
- 1. 아무것도 쓰지 않으면 DISTINCT가 기본값이다
- 2. ALL은 NULL을 제외하고 출력한다
- 3. DISTINCT는 첫 번째 컬럼에만 적용된다
- 4. 아무것도 쓰지 않으면 ALL이 기본값으로 적용되어 중복 행도 모두 출력된다
정답·해설 보기
정답: 4번. ALL이 기본값이라 중복도 그대로 출력된다. DISTINCT는 SELECT 절의 모든 컬럼 조합을 기준으로 중복을 제거한다.
- 10.Oracle에서 *와 다른 컬럼을 함께 쓸 때 오류가 발생하는 SQL은?
- 1. SELECT E.*, E.ENAME FROM EMP E;
- 2. SELECT ENAME, SAL FROM EMP;
- 3. SELECT EMP.* FROM EMP;
- 4. SELECT *, ENAME FROM EMP;
정답·해설 보기
정답: 4번. Oracle에서는 * 뒤에 다른 컬럼을 함께 쓰려면 테이블명이나 별칭을 붙여 E.*처럼 써야 한다. SQL Server는 SELECT *, ENAME도 허용한다.
- 11.Oracle에서 CHAR(10) 컬럼에 'ABC'를 저장했을 때, 저장된 값의 길이는?
- 1. 3
- 2. 7
- 3. 10
- 4. 13
정답·해설 보기
정답: 3번. CHAR는 고정 길이라 남는 자리를 공백으로 채워 항상 지정한 길이로 저장한다. VARCHAR2(10)이었다면 입력한 3자리만 저장된다.
- 12.Oracle에서 테이블 이름으로 사용할 수 없는 것은?
- 1. SALES_2024
- 2. EMP#
- 3. T_ORDER$
- 4. 2024_SALES
정답·해설 보기
정답: 4번. 테이블명은 문자로 시작해야 하며 A-Z, a-z, 0-9, _, $, #만 쓸 수 있고 예약어는 쓸 수 없다. 숫자로 시작하는 이름은 쓸 수 없다.
- 13.Oracle에서 오류 없이 실행되는 SQL은?
- 1. SELECT ENAME '사원 이름' FROM EMP;
- 2. SELECT ENAME AS 사원 이름 FROM EMP;
- 3. SELECT ENAME, FROM EMP;
- 4. SELECT ENAME "사원 이름" FROM EMP;
정답·해설 보기
정답: 4번. 별칭에 공백이 있으면 큰따옴표로 감싸야 한다. Oracle은 작은따옴표 별칭을 허용하지 않는다(작은따옴표는 문자열 값이다). 공백이 있는 별칭을 따옴표 없이 쓰거나 컬럼 목록 끝에 쉼표가 남으면 오류다.
- 14.다음 EMP 테이블에서 SELECT (SAL + 100) * 2 FROM EMP WHERE ENAME = 'JUNG'의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 600
- 2. 400
- 3. 300
- 4. 202
정답·해설 보기
정답: 2번. 괄호 안을 먼저 계산해 100 + 100 = 200, 여기에 2를 곱해 400이다. 괄호가 없으면 곱셈이 먼저라 100 + 200 = 300이 된다.
- 15.Oracle에서 SELECT 'SQL' || NULL || 'D' FROM DUAL의 결과는?
- 1. NULL
- 2. 'SQL'
- 3. 오류가 발생한다
- 4. 'SQLD'
정답·해설 보기
정답: 4번. Oracle의 || 연결 연산은 NULL을 빈 문자열처럼 처리하므로 'SQLD'가 된다. 산술 연산(+, -, *, /)에 NULL이 들어가면 결과가 NULL인 것과 다르다.
- 16.Oracle에서 NUMBER(5, 2)로 정의한 컬럼에 저장할 수 있는 가장 큰 값은?
- 1. 99.99
- 2. 999.99
- 3. 9999.99
- 4. 99999.99
정답·해설 보기
정답: 2번. NUMBER(5, 2)는 전체 자릿수 5, 그중 소수 자릿수 2라는 뜻이다. 정수 부분은 3자리까지 쓸 수 있어 가장 큰 값은 999.99다.
- 17.다음 중 DML(데이터 조작어)이 아닌 것은?
- 1. INSERT
- 2. MERGE
- 3. DELETE
- 4. TRUNCATE
정답·해설 보기
정답: 4번. INSERT, UPDATE, DELETE, MERGE는 DML이다. TRUNCATE는 테이블 저장 공간을 초기화하는 DDL로 분류된다.
- 18.SELECT SAL * 12 AS ANNUAL FROM EMP WHERE ANNUAL > 2000;을 Oracle에서 실행한 결과로 옳은 것은?
- 1. 별칭 ANNUAL을 WHERE 절에서 인식하지 못해 오류가 발생한다
- 2. 연봉이 2000보다 큰 사원만 정상적으로 조회된다
- 3. WHERE 조건이 무시되고 모든 행이 조회된다
- 4. 오류는 없지만 아무 행도 조회되지 않는다
정답·해설 보기
정답: 1번. 논리적 처리 순서는 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY다. SELECT 절의 별칭은 그 뒤에 처리되는 ORDER BY에서만 쓸 수 있으므로 WHERE SAL * 12 > 2000으로 써야 한다.
함수
- 19.SUBSTR('SQLDEVELOPER', 4, 3)의 결과는?
- 1. 'DEV'
- 2. 'LDE'
- 3. 'DEVE'
- 4. 'EVE'
정답·해설 보기
정답: 1번. SUBSTR(문자열, 시작 위치, 길이)는 4번째 글자부터 3글자를 잘라 낸다. S(1) Q(2) L(3) D(4) E(5) V(6)이므로 'DEV'다.
- 20.LENGTH('DATA BASE')의 결과는?
- 1. 8
- 2. 9
- 3. 10
- 4. 2
정답·해설 보기
정답: 2번. LENGTH는 공백을 포함한 문자 수를 센다. DATA(4) + 공백(1) + BASE(4) = 9다.
- 21.ROUND(1234.567, -2)의 결과는?
- 1. 1230
- 2. 1235
- 3. 1234.57
- 4. 1200
정답·해설 보기
정답: 4번. 자릿수가 음수이면 소수점 왼쪽으로 반올림한다. -2는 십의 자리에서 반올림해 백의 자리까지 남기므로 1200이다.
- 22.CEIL(3.1)과 FLOOR(-3.1)의 결과를 차례로 나열한 것은?
- 1. 3, -3
- 2. 4, -3
- 3. 4, -4
- 4. 3, -4
정답·해설 보기
정답: 3번. CEIL은 크거나 같은 최소 정수, FLOOR는 작거나 같은 최대 정수를 돌려준다. CEIL(3.1) = 4, FLOOR(-3.1) = -4다.
- 23.MOD(17, 5)의 결과는?
- 1. 5
- 2. 3.4
- 3. 3
- 4. 2
정답·해설 보기
정답: 4번. MOD는 나눗셈의 나머지를 돌려준다. 17 = 5 × 3 + 2이므로 2다.
- 24.다음 EMP 테이블에서 SELECT NVL2(COMM, 'Y', 'N') FROM EMP WHERE ENAME = 'KIM'의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 'N'
- 2. 'Y'
- 3. NULL
- 4. 0
정답·해설 보기
정답: 1번. NVL2(식, 값1, 값2)는 식이 NULL이 아니면 값1, NULL이면 값2를 돌려준다. KIM의 COMM은 NULL이므로 'N'이다.
- 25.COALESCE(NULL, NULL, 3, 4)의 결과는?
- 1. NULL
- 2. 3
- 3. 4
- 4. 7
정답·해설 보기
정답: 2번. COALESCE는 인수 중 처음으로 NULL이 아닌 값을 돌려준다.
- 26.DEPTNO가 30인 행에서 DECODE(DEPTNO, 10, 'A', 20, 'B', 'C')의 결과는?
- 1. 'C'
- 2. 'A'
- 3. 'B'
- 4. NULL
정답·해설 보기
정답: 1번. DECODE(식, 값1, 결과1, 값2, 결과2, 기본값)는 식이 일치하는 값의 결과를 돌려주고, 일치하는 값이 없으면 마지막 기본값을 돌려준다. 기본값을 생략하면 NULL이다.
- 27.SAL이 200인 행에서 다음 식의 결과는?
CASE WHEN SAL >= 250 THEN 'H' WHEN SAL >= 150 THEN 'M' ELSE 'L' END- 1. 'H'
- 2. 'L'
- 3. NULL
- 4. 'M'
정답·해설 보기
정답: 4번. CASE는 위에서부터 조건을 검사해 처음 참인 WHEN의 결과를 돌려준다. 200 >= 250은 거짓, 200 >= 150은 참이므로 'M'이다.
- 28.LTRIM('xxSQLxx', 'x')의 결과는?
- 1. 'SQL'
- 2. 'xxSQL'
- 3. 'SQLx'
- 4. 'SQLxx'
정답·해설 보기
정답: 4번. LTRIM은 왼쪽에서 지정한 문자를 제거한다. 오른쪽의 x는 남는다. 양쪽을 모두 지우려면 TRIM을 쓴다.
- 29.Oracle에서 'sql developer'를 'Sql Developer'처럼 단어마다 첫 글자만 대문자로, 나머지는 소문자로 바꾸는 함수는?
- 1. UPPER
- 2. LOWER
- 3. CONCAT
- 4. INITCAP
정답·해설 보기
정답: 4번. INITCAP은 단어마다 첫 글자는 대문자, 나머지는 소문자로 바꾼다. UPPER는 모두 대문자, LOWER는 모두 소문자로 바꾼다.
- 30.INSTR('CORPORATE FLOOR', 'OR', 3, 2)의 결과는?
- 1. 15
- 2. 14
- 3. 5
- 4. 2
정답·해설 보기
정답: 2번. 3번째 글자부터 'OR'을 찾을 때 첫 번째로 나오는 위치는 5, 두 번째로 나오는 위치는 14다. INSTR(문자열, 찾을 문자열, 시작 위치, 몇 번째)는 위치를 돌려준다.
- 31.LPAD('SQL', 6, '*')의 결과는?
- 1. '***SQL'
- 2. 'SQL***'
- 3. '******SQL'
- 4. '**SQL*'
정답·해설 보기
정답: 1번. LPAD는 전체 길이가 6이 되도록 왼쪽을 '*'로 채운다. 오른쪽을 채우는 함수는 RPAD다.
- 32.REPLACE('SQL SERVER', 'SERVER', 'DB')의 결과는?
- 1. 'SQL DB'
- 2. 'DB SERVER'
- 3. 'DB DB'
- 4. 'SQL SERVERDB'
정답·해설 보기
정답: 1번. REPLACE는 문자열에서 찾은 부분을 다른 문자열로 바꾼다. 바꿀 문자열을 생략하면 찾은 부분을 지운다.
- 33.TRUNC(123.456, 1)의 결과는?
- 1. 123
- 2. 123.4
- 3. 123.5
- 4. 120
정답·해설 보기
정답: 2번. TRUNC는 지정한 자리 아래를 버린다. 소수 첫째 자리까지 남기고 버리므로 123.4다. ROUND(123.456, 1)이면 123.5다.
- 34.SIGN(-5)의 결과는?
- 1. 5
- 2. 0
- 3. -1
- 4. -5
정답·해설 보기
정답: 3번. SIGN은 양수면 1, 0이면 0, 음수면 -1을 돌려준다.
- 35.Oracle에서 SYSDATE + 1/24의 의미는?
- 1. 현재 시각에서 1일 뒤
- 2. 현재 시각에서 1시간 뒤
- 3. 현재 시각에서 1분 뒤
- 4. 현재 시각에서 24일 뒤
정답·해설 보기
정답: 2번. Oracle의 날짜 연산에서 숫자 1은 하루다. 1/24는 1시간, 1/24/60은 1분이다.
- 36.Oracle에서 날짜 값을 'YYYY-MM-DD' 같은 지정한 형식의 문자열로 바꾸는 함수는?
- 1. TO_DATE
- 2. TO_NUMBER
- 3. CAST만 가능
- 4. TO_CHAR
정답·해설 보기
정답: 4번. TO_CHAR는 날짜·숫자를 지정한 형식의 문자열로, TO_DATE는 문자열을 날짜로, TO_NUMBER는 문자열을 숫자로 바꾼다.
- 37.NULLIF(100, 100)의 결과는?
- 1. NULL
- 2. 100
- 3. 0
- 4. 1
정답·해설 보기
정답: 1번. NULLIF(값1, 값2)는 두 값이 같으면 NULL, 다르면 값1을 돌려준다.
- 38.다음 EMP 테이블에서 Oracle로 SELECT DECODE(COMM, NULL, 0, COMM) FROM EMP WHERE ENAME = 'KIM'을 실행한 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. NULL
- 2. COMM
- 3. 오류가 발생한다
- 4. 0
정답·해설 보기
정답: 4번. DECODE는 일반 비교와 달리 NULL과 NULL을 같다고 본다. KIM의 COMM이 NULL이므로 0이 나온다. CASE COMM WHEN NULL THEN 0 …으로 쓰면 = 비교가 되어 일치하지 않는다.
- 39.Oracle에서 MOD(-7, 3)의 결과는?
- 1. 2
- 2. 1
- 3. -1
- 4. -2
정답·해설 보기
정답: 3번. Oracle의 MOD는 나누어지는 수(-7)의 부호를 따르며 -7 - 3 × TRUNC(-7 / 3) = -7 - 3 × (-2) = -1이다. 수학의 나머지처럼 2가 되지 않는다.
- 40.SUBSTR('DATABASE', -4, 2)의 결과는?
- 1. 'BA'
- 2. 'AS'
- 3. 'SE'
- 4. 'TA'
정답·해설 보기
정답: 1번. 시작 위치가 음수면 오른쪽 끝에서부터 센다. 끝에서 4번째 글자는 B이고, 거기서 2글자를 잘라 'BA'다.
- 41.LENGTH(TRIM(' SQL D '))의 결과는?
- 1. 4
- 2. 5
- 3. 7
- 4. 9
정답·해설 보기
정답: 2번. TRIM은 앞뒤 공백만 지우고 가운데 공백은 남긴다. 'SQL D'가 되어 길이는 5다.
- 42.Oracle의 CONCAT 함수에 대한 설명으로 옳은 것은?
- 1. 인수를 정확히 두 개만 받는다
- 2. 인수를 원하는 만큼 넣을 수 있다
- 3. 두 숫자를 더한 값을 돌려준다
- 4. 인수에 NULL이 있으면 항상 NULL이다
정답·해설 보기
정답: 1번. Oracle의 CONCAT(문자열1, 문자열2)는 인수가 두 개라 세 문자열을 이으려면 CONCAT을 중첩하거나 ||를 쓴다. || 연산자와 마찬가지로 NULL은 빈 문자열처럼 처리한다.
- 43.다음 EMP 테이블에서 SELECT AVG(NVL(COMM, 0)) FROM EMP의 결과는 약 얼마인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 80
- 2. 40
- 3. 약 13.3
- 4. NULL
정답·해설 보기
정답: 3번. NVL로 NULL을 0으로 바꾼 뒤 평균을 내므로 6행 모두 계산에 들어간다. (50 + 30) ÷ 6 ≒ 13.3이다. NVL 없이 AVG(COMM)이면 NULL이 빠져 (50 + 30) ÷ 2 = 40이다.
- 44.다음 EMP 테이블에서 SELECT CASE WHEN SAL > 300 THEN 'H' END FROM EMP WHERE ENAME = 'KIM'의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 'H'
- 2. 공백 문자 ' '
- 3. ELSE가 없어 오류가 발생한다
- 4. NULL
정답·해설 보기
정답: 4번. KIM의 SAL은 300이라 SAL > 300이 거짓이다. 맞는 WHEN이 없고 ELSE도 없으면 CASE는 NULL을 돌려준다.
- 45.Oracle에서 ADD_MONTHS(TO_DATE('2024-01-31', 'YYYY-MM-DD'), 1)의 결과 날짜는?
- 1. 2024-02-28
- 2. 2024-02-29
- 3. 2024-03-01
- 4. 2024-03-02
정답·해설 보기
정답: 2번. ADD_MONTHS는 기준 날짜가 그달의 마지막 날이거나 결과 달에 같은 일자가 없으면 결과 달의 마지막 날을 돌려준다. 2024년은 윤년이라 2월 마지막 날은 29일이다.
- 46.EXTRACT(MONTH FROM DATE '2024-07-15')의 결과는?
- 1. 715
- 2. 2024
- 3. 15
- 4. 7
정답·해설 보기
정답: 4번. EXTRACT는 날짜에서 YEAR, MONTH, DAY 같은 원하는 부분을 숫자로 꺼낸다. 월은 7이다.
- 47.단일행 함수에 대한 설명으로 옳지 않은 것은?
- 1. SELECT, WHERE, ORDER BY 절에 쓸 수 있다
- 2. 각 행마다 하나의 결과를 돌려준다
- 3. 함수 안에 다른 함수를 중첩해 쓸 수 있다
- 4. 여러 행을 묶어 그룹마다 하나의 결과를 돌려준다
정답·해설 보기
정답: 4번. 단일행 함수는 행마다 결과를 하나씩 돌려준다. 여러 행을 묶어 하나의 결과를 내는 것은 SUM, COUNT 같은 다중행(집계) 함수다.
- 48.Oracle에서 숫자형 컬럼 SAL에 WHERE SAL = '200' 조건을 썼을 때의 설명으로 옳은 것은?
- 1. '200'이 숫자로 변환되어 SAL이 200인 행이 조회된다
- 2. 데이터 타입이 달라 항상 오류가 발생한다
- 3. 문자와 숫자 비교는 항상 거짓이라 0행이 나온다
- 4. SAL이 문자로 변환되어 사전 순으로 비교된다
정답·해설 보기
정답: 1번. 숫자와 문자를 비교하면 Oracle은 문자 쪽을 숫자로 암시적 형변환한다. 의도를 분명히 하고 변환 실패를 막으려면 숫자 200처럼 같은 타입으로 쓰는 것이 좋다.
WHERE 절과 연산자
- 49.다음 EMP 테이블에서 WHERE SAL BETWEEN 150 AND 250 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 5개
- 2. 4개
- 3. 3개
- 4. 2개
정답·해설 보기
정답: 2번. BETWEEN a AND b는 a 이상 b 이하로 양 끝값을 포함한다. 200, 250, 150, 180의 4행이다.
- 50.다음 EMP 테이블에서 SELECT COUNT(*) FROM EMP WHERE DEPTNO NOT IN (10, NULL)의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0
- 2. 3
- 3. 4
- 4. 6
정답·해설 보기
정답: 1번. NOT IN (10, NULL)은 DEPTNO <> 10 AND DEPTNO <> NULL과 같다. NULL과의 비교는 항상 UNKNOWN이므로 전체 조건이 참이 되는 행이 없어 0이다.
- 51.다음 EMP 테이블에서 WHERE ENAME LIKE '_A%' 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4개
- 2. 3개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 3번. _는 임의의 한 글자, %는 0개 이상의 글자다. 두 번째 글자가 A인 PARK, KANG의 2행이다.
- 52.다음 EMP 테이블에서 SELECT COUNT(*) FROM EMP WHERE COMM = NULL의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0
- 2. 2
- 3. 4
- 4. 6
정답·해설 보기
정답: 1번. NULL은 = 연산자로 비교할 수 없어 결과가 항상 UNKNOWN이다. NULL인 행을 찾으려면 COMM IS NULL을 써야 하며, 그러면 4가 나온다.
- 53.다음 EMP 테이블에서 WHERE DEPTNO = 10 OR DEPTNO = 20 AND SAL > 200 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4개
- 2. 3개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 2번. AND가 OR보다 먼저 계산되므로 DEPTNO = 10 OR (DEPTNO = 20 AND SAL > 200)이다. KIM, LEE(부서 10)와 PARK(부서 20, 250)의 3행이다.
- 54.'SAL이 100 이상 200 이하가 아닌 행'을 찾는 조건과 같은 것은?
- 1. SAL < 100 AND SAL > 200
- 2. SAL <= 100 OR SAL >= 200
- 3. NOT SAL BETWEEN 200 AND 100
- 4. SAL < 100 OR SAL > 200
정답·해설 보기
정답: 4번. NOT BETWEEN 100 AND 200은 100 미만이거나 200 초과인 값이다. AND로 묶으면 만족하는 값이 없다.
- 55.문자열에 밑줄(_) 문자 자체가 포함된 행을 찾으려 한다. 알맞은 조건은?
- 1. COL LIKE '%\_%' ESCAPE '\'
- 2. COL LIKE '%_%'
- 3. COL = '%_%'
- 4. COL LIKE '_'
정답·해설 보기
정답: 1번. LIKE에서 _는 임의의 한 글자를 뜻하므로 문자 자체를 찾으려면 ESCAPE로 지정한 문자를 앞에 붙인다. '%_%'는 한 글자 이상인 모든 문자열과 일치한다.
- 56.다음 EMP 테이블에서 WHERE DEPTNO <> 10 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 3개
- 2. 4개
- 3. 5개
- 4. 6개
정답·해설 보기
정답: 1번. DEPTNO가 20, 20, 30인 3행이다. DEPTNO가 NULL인 KANG은 NULL <> 10이 UNKNOWN이므로 결과에 포함되지 않는다.
- 57.다음 EMP 테이블에서 WHERE DEPTNO IN (10, 30) 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 2개
- 2. 3개
- 3. 4개
- 4. 5개
정답·해설 보기
정답: 2번. IN은 목록 중 하나와 같으면 참이다. 부서 10의 KIM, LEE와 부서 30의 JUNG으로 3행이다.
- 58.다음 EMP 테이블에서 WHERE ENAME LIKE 'K%' 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4개
- 2. 3개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 3번. 'K%'는 K로 시작하는 모든 문자열이다. KIM과 KANG의 2행이다.
- 59.다음 EMP 테이블에서 WHERE MGR IS NULL 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0개
- 2. 1개
- 3. 2개
- 4. 5개
정답·해설 보기
정답: 2번. MGR이 NULL인 행은 KIM 하나다. NULL을 찾을 때는 = NULL이 아니라 IS NULL을 쓴다.
- 60.다음 EMP 테이블에서 WHERE DEPTNO NOT IN (10, 20) 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4개
- 2. 3개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 4번. 부서 30인 JUNG 1행이다. DEPTNO가 NULL인 KANG은 NULL <> 10 비교가 UNKNOWN이라 포함되지 않는다.
- 61.WHERE NOT (SAL >= 200)과 같은 결과를 내는 조건은? (SAL에 NULL은 없다)
- 1. SAL <= 200
- 2. SAL > 200
- 3. SAL <> 200
- 4. SAL < 200
정답·해설 보기
정답: 4번. NOT (SAL >= 200)은 200 이상이 아닌 값, 즉 200 미만이다. SAL에 NULL이 있다면 두 조건 모두 그 행을 제외한다.
- 62.다음 EMP 테이블에서 WHERE NOT DEPTNO = 10 AND SAL > 150 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0개
- 2. 1개
- 3. 2개
- 4. 3개
정답·해설 보기
정답: 2번. NOT이 AND보다 먼저 적용되어 (DEPTNO <> 10) AND (SAL > 150)이 된다. 부서가 10이 아니면서 급여가 150보다 큰 사원은 PARK(250)뿐이다. KANG은 DEPTNO가 NULL이라 제외된다.
- 63.다음 EMP 테이블에서 WHERE SAL BETWEEN 250 AND 150 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4개
- 2. 3개
- 3. 2개
- 4. 0개
정답·해설 보기
정답: 4번. BETWEEN a AND b는 SAL >= a AND SAL <= b이다. 250 이상이면서 150 이하인 값은 없으므로 0행이다. 작은 값을 앞에 써야 한다.
- 64.Oracle에서 CHAR 타입 값 'AB'와 'AB '(뒤에 공백 하나)를 비교한 결과로 옳은 것은?
- 1. 짧은 쪽에 공백을 채워 비교하므로 같다고 판단한다
- 2. 공백도 문자로 보므로 다르다고 판단한다
- 3. 길이가 다르면 항상 오류가 난다
- 4. 앞쪽 공백만 무시하고 비교한다
정답·해설 보기
정답: 1번. CHAR끼리 비교할 때는 짧은 쪽 끝에 공백을 채워 길이를 맞춘 뒤 비교하므로 같다. VARCHAR2끼리 비교하면 공백도 하나의 문자로 보아 다르다고 판단한다.
- 65.다음 EMP 테이블에서 WHERE ENAME LIKE '____'(밑줄 4개) 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0개
- 2. 2개
- 3. 4개
- 4. 6개
정답·해설 보기
정답: 3번. 밑줄(_)은 정확히 한 글자를 뜻하므로 이름이 정확히 4글자인 행을 찾는다. PARK, CHOI, JUNG, KANG의 4개다.
- 66.다음 EMP 테이블에서 WHERE COMM IN (50, NULL) 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 5개
- 2. 4개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 4번. IN은 COMM = 50 OR COMM = NULL과 같다. COMM = NULL은 언제나 UNKNOWN이라 COMM이 NULL인 행은 찾지 못하고, LEE 1행만 나온다.
- 67.다음 EMP 테이블에서 WHERE SAL > 200 OR DEPTNO = 20 AND COMM IS NOT NULL 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1개
- 2. 2개
- 3. 3개
- 4. 4개
정답·해설 보기
정답: 3번. AND가 OR보다 먼저 계산된다. SAL > 200인 KIM, PARK에 (부서 20이면서 COMM이 있는) CHOI가 더해져 3개다.
- 68.다음 EMP 테이블에서 WHERE ENAME BETWEEN 'K' AND 'L' 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4개
- 2. 3개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 3번. 문자도 사전 순으로 비교한다. 'KIM'과 'KANG'은 'K'보다 크고 'L'보다 작아 포함된다. 'LEE'는 'L'보다 길어서 'L'보다 크므로 빠진다.
- 69.다음 EMP 테이블에서 WHERE COMM IS NULL OR COMM < 40 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1개
- 2. 4개
- 3. 5개
- 4. 6개
정답·해설 보기
정답: 3번. COMM이 NULL인 KIM, PARK, JUNG, KANG의 4행과 COMM이 30인 CHOI를 합쳐 5개다. COMM이 50인 LEE만 빠진다.
- 70.Oracle에서 '같지 않다'를 뜻하는 비교 연산자가 아닌 것은?
- 1. <>
- 2. !=
- 3. ^=
- 4. =!
정답·해설 보기
정답: 4번. Oracle에서 같지 않다는 <>(ISO 표준), !=, ^=로 쓸 수 있다. =!는 비교 연산자가 아니다.
- 71.VARCHAR2 컬럼 ENAME에 쓴 WHERE ENAME LIKE 'KIM' 조건에 대한 설명으로 옳은 것은?
- 1. KIM으로 시작하는 모든 이름을 찾는다
- 2. KIM이 포함된 모든 이름을 찾는다
- 3. 와일드카드가 없어 오류가 발생한다
- 4. ENAME = 'KIM'과 같은 결과를 낸다
정답·해설 보기
정답: 4번. LIKE는 %(0개 이상 문자)와 _(한 글자)를 써야 패턴 검색이 된다. 와일드카드가 없으면 같은지만 비교한다.
- 72.다음 ORD 테이블에서 WHERE NOT (AMT > 250) 조건을 만족하는 행은 몇 개인가?
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 5개
- 2. 3개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 3번. AMT가 250 이하인 103(200), 105(100)의 2행이다. AMT가 NULL인 104는 AMT > 250이 UNKNOWN이고 NOT UNKNOWN도 UNKNOWN이라 빠진다.
GROUP BY·HAVING·ORDER BY
- 73.다음 EMP 테이블에서 SELECT DEPTNO, COUNT(*) FROM EMP GROUP BY DEPTNO를 실행하면 몇 행이 출력되는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6행
- 2. 5행
- 3. 4행
- 4. 3행
정답·해설 보기
정답: 3번. GROUP BY는 NULL도 하나의 그룹으로 묶는다. 10, 20, 30, NULL의 4그룹이다.
- 74.다음 EMP 테이블에서 SELECT AVG(COMM) FROM EMP의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 13.3
- 2. 40
- 3. 80
- 4. NULL
정답·해설 보기
정답: 2번. 집계 함수는 NULL을 제외하고 계산한다. COMM이 있는 50과 30만 평균해 40이다. NULL을 0으로 보고 6명 평균을 내려면 AVG(NVL(COMM, 0))을 써야 하며 약 13.3이다.
- 75.다음 EMP 테이블에서 SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO HAVING SUM(SAL) >= 400을 실행하면 몇 행이 출력되는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4행
- 2. 3행
- 3. 2행
- 4. 1행
정답·해설 보기
정답: 3번. 부서별 합계는 10번 500, 20번 400, 30번 100, NULL 180이다. 400 이상인 10번과 20번의 2행이다.
- 76.집계 함수를 쓰는 위치 때문에 오류가 발생하는 SQL은?
- 1. SELECT DEPTNO FROM EMP WHERE SUM(SAL) > 300 GROUP BY DEPTNO;
- 2. SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING SUM(SAL) > 300;
- 3. SELECT DEPTNO, MAX(SAL) FROM EMP GROUP BY DEPTNO;
- 4. SELECT COUNT(*) FROM EMP WHERE SAL > 300;
정답·해설 보기
정답: 1번. WHERE 절은 그룹을 만들기 전에 행을 거르므로 집계 함수를 쓸 수 없다. 그룹 조건은 HAVING 절에 써야 한다.
- 77.GROUP BY 절과 SELECT 절의 관계 때문에 오류가 발생하는 SQL은?
- 1. SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO;
- 2. SELECT SUM(SAL) FROM EMP GROUP BY DEPTNO;
- 3. SELECT DEPTNO, COUNT(ENAME) FROM EMP GROUP BY DEPTNO;
- 4. SELECT DEPTNO, ENAME, SUM(SAL) FROM EMP GROUP BY DEPTNO;
정답·해설 보기
정답: 4번. GROUP BY를 쓰면 SELECT 절에는 GROUP BY에 쓴 컬럼과 집계 함수만 올 수 있다. ENAME은 그룹마다 값이 여러 개라 오류다. GROUP BY에 없는 컬럼을 SELECT에 쓰지 않는 것은 문제없다.
- 78.NULLS FIRST/LAST 같은 옵션 없이 NULL이 포함된 컬럼을 ORDER BY ... ASC로 정렬할 때, Oracle과 SQL Server의 기본 NULL 위치를 바르게 짝지은 것은?
- 1. Oracle: 맨 마지막 / SQL Server: 맨 처음
- 2. Oracle: 맨 처음 / SQL Server: 맨 마지막
- 3. 둘 다 맨 처음
- 4. 둘 다 정렬에서 제외
정답·해설 보기
정답: 1번. Oracle은 NULL을 가장 큰 값으로, SQL Server는 가장 작은 값으로 취급한다. 그래서 오름차순 정렬 시 Oracle은 마지막, SQL Server는 처음에 온다.
- 79.ORDER BY 절에 대한 설명으로 옳지 않은 것은?
- 1. SELECT 절에서 정한 별칭은 ORDER BY 절에서 사용할 수 없다
- 2. SELECT 절 항목의 위치 번호로 정렬할 수 있다
- 3. 기본 정렬 순서는 오름차순이다
- 4. 여러 컬럼을 기준으로 정렬할 수 있다
정답·해설 보기
정답: 1번. ORDER BY는 SELECT 다음에 실행되므로 SELECT 절의 별칭을 쓸 수 있다. 컬럼명, 별칭, 위치 번호를 모두 쓸 수 있다.
- 80.다음 EMP 테이블에서 Oracle로 SELECT ENAME FROM EMP ORDER BY DEPTNO, SAL DESC를 실행했을 때 첫 번째로 출력되는 사원은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. LEE
- 2. KIM
- 3. KANG
- 4. PARK
정답·해설 보기
정답: 2번. DEPTNO 오름차순으로 먼저 정렬하므로 10번 부서가 먼저 오고, 그 안에서 SAL 내림차순이라 300인 KIM이 첫 번째다. DEPTNO가 NULL인 KANG은 Oracle에서 마지막에 온다.
- 81.다음 EMP 테이블에서 SELECT COUNT(COMM) FROM EMP의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0
- 2. 2
- 3. 4
- 4. 6
정답·해설 보기
정답: 2번. COUNT(컬럼)은 그 컬럼이 NULL이 아닌 행만 센다. COMM이 있는 LEE와 CHOI의 2행이다.
- 82.다음 EMP 테이블에서 SELECT COUNT(DISTINCT DEPTNO) FROM EMP의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 3
- 2. 4
- 3. 5
- 4. 6
정답·해설 보기
정답: 1번. COUNT(DISTINCT 컬럼)은 NULL을 제외한 서로 다른 값의 개수다. 10, 20, 30의 3이다. SELECT DISTINCT DEPTNO는 NULL도 한 행으로 출력해 4행이 나온다.
- 83.다음 EMP 테이블에서 SELECT MAX(ENAME) FROM EMP의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. KIM
- 2. KANG
- 3. LEE
- 4. PARK
정답·해설 보기
정답: 4번. MAX는 문자에도 쓸 수 있으며 사전 순으로 가장 뒤에 오는 값을 돌려준다. CHOI, JUNG, KANG, KIM, LEE, PARK 중 PARK이 가장 뒤다.
- 84.다음 EMP 테이블에서 SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING COUNT(*) >= 2를 실행하면 몇 행이 출력되는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4행
- 2. 3행
- 3. 2행
- 4. 1행
정답·해설 보기
정답: 3번. 부서별 인원은 10번 2명, 20번 2명, 30번 1명, NULL 1명이다. 2명 이상인 10번과 20번의 2행이다.
- 85.다음 EMP 테이블에서 SELECT SUM(SAL) FROM EMP HAVING SUM(SAL) > 1000을 실행한 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1180이 한 행 출력된다
- 2. GROUP BY가 없어 오류가 발생한다
- 3. 아무 행도 출력되지 않는다
- 4. 부서별 합계가 여러 행 출력된다
정답·해설 보기
정답: 1번. GROUP BY 없이 HAVING을 쓰면 테이블 전체를 하나의 그룹으로 본다. 전체 합계 1180이 1000보다 크므로 한 행이 출력된다.
- 86.Oracle에서 GROUP BY를 쓴 SELECT의 ORDER BY 때문에 오류가 발생하는 SQL은?
- 1. SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO ORDER BY SAL;
- 2. SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO ORDER BY SUM(SAL);
- 3. SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO ORDER BY 2;
- 4. SELECT DEPTNO, SUM(SAL) AS TOT FROM EMP GROUP BY DEPTNO ORDER BY TOT;
정답·해설 보기
정답: 1번. GROUP BY를 쓴 SELECT에서 ORDER BY에는 GROUP BY 컬럼, 집계 함수, SELECT 별칭이나 위치 번호만 쓸 수 있다. 개별 행의 SAL은 그룹마다 여러 값이라 오류다.
- 87.다음 EMP 테이블에서 SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO 결과 중 부서 20의 AVG(SAL)은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 150
- 2. 200
- 3. 250
- 4. 400
정답·해설 보기
정답: 2번. 부서 20의 급여는 250과 150이므로 평균은 200이다.
- 88.다음 EMP 테이블에서 SELECT COUNT(*), SUM(SAL) FROM EMP WHERE DEPTNO = 40의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0, 0
- 2. NULL, NULL
- 3. 0, NULL
- 4. 결과 행이 없다
정답·해설 보기
정답: 3번. 조건에 맞는 행이 없어도 집계 함수만 쓴 SELECT는 한 행을 돌려준다. COUNT(*)는 0, SUM은 더할 값이 없으므로 NULL이다.
- 89.다음 EMP 테이블에서 Oracle로 SELECT ENAME FROM EMP ORDER BY DEPTNO DESC를 실행했을 때 첫 번째로 출력되는 사원은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. JUNG
- 2. KIM
- 3. KANG
- 4. PARK
정답·해설 보기
정답: 3번. Oracle은 NULL을 가장 큰 값으로 보므로 내림차순 정렬에서는 NULL이 맨 앞에 온다. DEPTNO가 NULL인 KANG이 첫 번째다. SQL Server였다면 NULL이 맨 마지막에 와 JUNG이 첫 번째다.
- 90.다음 EMP 테이블에서 SELECT DEPTNO, COUNT(*) FROM EMP WHERE SAL >= 200 GROUP BY DEPTNO를 실행하면 몇 행이 나오는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 2행
- 2. 3행
- 3. 4행
- 4. 6행
정답·해설 보기
정답: 1번. WHERE로 먼저 SAL이 200 이상인 KIM, LEE(부서 10)와 PARK(부서 20)만 남긴 뒤 묶는다. 부서 10과 20의 2행이다.
- 91.다음 EMP 테이블에서 SELECT COUNT(DEPTNO) FROM EMP의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 3
- 2. 5
- 3. 4
- 4. 6
정답·해설 보기
정답: 2번. COUNT(컬럼)은 NULL이 아닌 값만 센다. DEPTNO가 NULL인 KANG을 빼고 5다. COUNT(*)이면 6이다.
- 92.다음 ORD 테이블에서 SELECT CID, SUM(AMT) FROM ORD GROUP BY CID를 실행했을 때, CID가 3인 행의 SUM(AMT) 값은?
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. NULL
- 2. 0
- 3. 1
- 4. CID 3 그룹은 결과에 나오지 않는다
정답·해설 보기
정답: 1번. CID 3 그룹은 결과에 나오지만, 그 그룹의 AMT가 모두 NULL이라 SUM은 더할 값이 없어 NULL을 돌려준다. 0으로 보이게 하려면 NVL(SUM(AMT), 0)을 쓴다.
- 93.다음 EMP 테이블에서 SELECT ENAME, SAL FROM EMP ORDER BY 2 DESC를 실행했을 때 두 번째로 출력되는 사원은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. KANG
- 2. PARK
- 3. LEE
- 4. KIM
정답·해설 보기
정답: 2번. ORDER BY 2는 SELECT 절의 두 번째 컬럼인 SAL로 정렬한다는 뜻이다. 내림차순으로 KIM(300), PARK(250), LEE(200) 순이다.
- 94.GROUP BY·ORDER BY·집계 함수 사용 규칙에 맞아 Oracle에서 오류 없이 실행되는 SQL은?
- 1. SELECT DEPTNO, COUNT(*) FROM EMP GROUP BY DEPTNO ORDER BY SAL;
- 2. SELECT ENAME FROM EMP ORDER BY SAL;
- 3. SELECT ENAME FROM EMP WHERE SUM(SAL) > 100;
- 4. SELECT DEPTNO, ENAME FROM EMP GROUP BY DEPTNO;
정답·해설 보기
정답: 2번. GROUP BY가 없으면 SELECT 절에 없는 컬럼으로도 정렬할 수 있다. GROUP BY를 쓰면 ORDER BY에는 GROUP BY 컬럼이나 집계 함수만 올 수 있고, WHERE에는 집계 함수를 쓸 수 없으며, GROUP BY에 없는 일반 컬럼은 SELECT할 수 없다.
- 95.다음 EMP 테이블에서 SELECT DEPTNO, MAX(SAL) - MIN(SAL) FROM EMP GROUP BY DEPTNO HAVING COUNT(*) > 1 결과 중 부서 20의 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0
- 2. 50
- 3. 100
- 4. 250
정답·해설 보기
정답: 3번. 부서 20에는 PARK(250)과 CHOI(150) 두 명이 있어 HAVING 조건을 통과하고, 250 - 150 = 100이다.
- 96.다음 ORD 테이블에서 SELECT AVG(AMT) FROM ORD의 결과는?
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 275
- 2. 220
- 3. 300
- 4. NULL
정답·해설 보기
정답: 1번. AVG는 NULL을 빼고 계산한다. (500 + 300 + 200 + 100) ÷ 4 = 275다. 5로 나눈 220이 아니다.
- 97.GROUP BY 절의 기준 컬럼에 NULL 값이 있을 때의 처리로 옳은 것은?
- 1. NULL인 행은 결과에서 모두 제외된다
- 2. NULL인 행은 각각 서로 다른 그룹이 된다
- 3. NULL이 있으면 오류가 발생한다
- 4. NULL인 행끼리 하나의 그룹으로 묶인다
정답·해설 보기
정답: 4번. 비교에서는 NULL = NULL이 참이 아니지만, GROUP BY와 DISTINCT에서는 NULL을 같은 값으로 보고 하나의 그룹으로 묶는다.
- 98.다음 EMP 테이블에서 Oracle로 SELECT MAX(SUM(SAL)) FROM EMP GROUP BY DEPTNO를 실행한 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1180
- 2. 500
- 3. 400
- 4. 300
정답·해설 보기
정답: 2번. Oracle은 GROUP BY와 함께 집계 함수를 중첩할 수 있다. 부서별 합계 500(10), 400(20), 100(30), 180(NULL) 중 가장 큰 500이 한 행으로 나온다.
- 99.다음 EMP 테이블에서 SELECT COUNT(DISTINCT MGR) FROM EMP의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 2
- 2. 3
- 3. 5
- 4. 6
정답·해설 보기
정답: 1번. MGR 값은 NULL, 1, 1, 3, 3, 1이다. NULL을 빼고 중복을 없애면 1과 3이 남아 2다.
조인
- 100.다음 두 테이블을 SELECT * FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO로 조인하면 몇 행이 나오는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 7행
- 2. 6행
- 3. 5행
- 4. 4행
정답·해설 보기
정답: 3번. 부서번호가 일치하는 행만 나온다. DEPTNO가 NULL인 KANG은 어떤 부서와도 일치하지 않아 빠지므로 5행이다.
- 101.다음 두 테이블을 SELECT * FROM DEPT D LEFT OUTER JOIN EMP E ON D.DEPTNO = E.DEPTNO로 조인하면 몇 행이 나오는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 4행
- 2. 5행
- 3. 6행
- 4. 7행
정답·해설 보기
정답: 3번. 왼쪽 DEPT의 모든 행이 나온다. 10번 2행, 20번 2행, 30번 1행에 사원이 없는 40번이 NULL로 채워진 1행이 더해져 6행이다.
- 102.다음 두 테이블을 FULL OUTER JOIN(ON E.DEPTNO = D.DEPTNO)하면 몇 행이 나오는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 24행
- 2. 7행
- 3. 6행
- 4. 5행
정답·해설 보기
정답: 2번. 일치하는 5행에, EMP에만 있는 KANG 1행과 DEPT에만 있는 40번 OPS 1행이 더해져 7행이다.
- 103.다음 두 테이블을 CROSS JOIN하면 몇 행이 나오는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 6행
- 2. 10행
- 3. 24행
- 4. 4행
정답·해설 보기
정답: 3번. CROSS JOIN은 조인 조건 없이 모든 조합(카티션 곱)을 만든다. 6 × 4 = 24행이다.
- 104.NATURAL JOIN에 대한 설명으로 옳지 않은 것은?
- 1. 조인 컬럼 앞에 테이블 별칭(접두사)을 붙여 SELECT할 수 있다
- 2. 두 테이블에서 이름이 같은 모든 컬럼으로 등가 조인한다
- 3. 조인 조건을 ON 절로 따로 쓰지 않는다
- 4. 이름이 같은 컬럼은 데이터 타입도 같아야 한다
정답·해설 보기
정답: 1번. NATURAL JOIN의 조인 컬럼에는 테이블 별칭이나 테이블명을 접두사로 붙일 수 없다. USING 절을 쓸 때도 조인 컬럼에는 접두사를 붙일 수 없다.
- 105.Oracle에서 조인 컬럼을 표기하는 규칙 때문에 오류가 발생하는 SQL은?
- 1. SELECT DEPTNO, E.ENAME FROM EMP E JOIN DEPT D USING (DEPTNO);
- 2. SELECT E.DEPTNO, E.ENAME FROM EMP E JOIN DEPT D USING (DEPTNO);
- 3. SELECT E.DEPTNO, E.ENAME FROM EMP E JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
- 4. SELECT DEPTNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT;
정답·해설 보기
정답: 2번. USING 절에 쓴 조인 컬럼(DEPTNO)은 SELECT 절에서 별칭 없이 써야 한다. ON 절 조인에서는 별칭을 붙여야 하고, NATURAL JOIN의 공통 컬럼도 접두사 없이 쓴다.
- 106.다음 EMP 테이블을 셀프 조인해 사원과 관리자 이름을 출력하려 한다. SELECT E.ENAME, M.ENAME FROM EMP E JOIN EMP M ON E.MGR = M.EMPNO 결과에서 CHOI의 관리자 이름은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. KIM
- 2. LEE
- 3. JUNG
- 4. PARK
정답·해설 보기
정답: 4번. CHOI의 MGR은 3이고, EMPNO가 3인 사원은 PARK이다. 셀프 조인은 같은 테이블을 별칭으로 두 번 써서 행끼리 연결한다.
- 107.Oracle의 WHERE E.DEPTNO = D.DEPTNO(+) 조건과 같은 결과를 내는 ANSI 조인은?
- 1. FROM EMP E LEFT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
- 2. FROM EMP E RIGHT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
- 3. FROM EMP E FULL OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
- 4. FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
정답·해설 보기
정답: 1번. (+)는 데이터가 없을 수 있는 쪽, 즉 NULL로 채워질 쪽에 붙인다. D 쪽에 (+)가 있으므로 EMP의 모든 행이 나오는 LEFT OUTER JOIN이다.
- 108.사원 테이블의 급여가 급여등급 테이블의 최저·최고 급여 범위에 속하는지로 조인하는 'E.SAL BETWEEN G.LOSAL AND G.HISAL' 조건의 조인은?
- 1. 등가 조인(Equi Join)
- 2. 셀프 조인
- 3. 비등가 조인(Non-Equi Join)
- 4. 카티션 곱
정답·해설 보기
정답: 3번. = 연산자가 아닌 BETWEEN, >, < 같은 연산자로 조인하는 것을 비등가 조인이라 한다.
- 109.다음 두 테이블에 대해 아래 SQL을 실행하면 몇 행이 나오는가?
SELECT D.DNAME, E.ENAME FROM DEPT D LEFT OUTER JOIN EMP E ON D.DEPTNO = E.DEPTNO AND E.SAL >= 250;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 6행
- 2. 4행
- 3. 3행
- 4. 2행
정답·해설 보기
정답: 2번. ON 절의 조건은 조인할 상대 행을 고르는 데만 쓰이고 왼쪽 DEPT의 행은 모두 남는다. 10번 부서는 KIM, 20번 부서는 PARK과 조인되고, 30번과 40번 부서는 ENAME이 NULL인 행으로 남아 4행이다. 조건을 WHERE에 쓰면 2행이 된다.
- 110.다음 두 테이블에서 아래 SQL의 결과 행 수는?
SELECT E.ENAME, D.DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND D.DNAME = 'DEV';
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 5행
- 2. 4행
- 3. 2행
- 4. 1행
정답·해설 보기
정답: 3번. 부서명이 DEV인 부서 20의 사원 PARK, CHOI가 조인되어 2행이다.
- 111.다음 두 테이블에서 SELECT * FROM EMP E RIGHT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO의 결과 행 수는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 5행
- 2. 6행
- 3. 7행
- 4. 24행
정답·해설 보기
정답: 2번. 오른쪽 DEPT의 모든 행이 나온다. 일치하는 5행에 사원이 없는 40번 부서가 1행 더해져 6행이다. EMP에만 있는 KANG은 빠진다.
- 112.다음 두 테이블에서 아래 SQL의 결과 행 수는?
SELECT D.DNAME FROM DEPT D LEFT OUTER JOIN EMP E ON E.DEPTNO = D.DEPTNO WHERE E.EMPNO IS NULL;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 4행
- 2. 2행
- 3. 1행
- 4. 0행
정답·해설 보기
정답: 3번. 외부 조인 후 EMP 쪽이 NULL인 행만 남기면 사원이 한 명도 없는 부서만 나온다. OPS의 1행이다.
- 113.테이블 4개를 모두 연결하는 조인에서 카티션 곱을 피하려면 최소 몇 개의 조인 조건이 필요한가?
- 1. 2개
- 2. 3개
- 3. 4개
- 4. 6개
정답·해설 보기
정답: 2번. N개의 테이블을 조인하려면 최소 N − 1개의 조인 조건이 필요하다.
- 114.다음 EMP 테이블에서 SELECT E.ENAME, M.ENAME FROM EMP E LEFT OUTER JOIN EMP M ON E.MGR = M.EMPNO의 결과 행 수는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 36행
- 2. 6행
- 3. 5행
- 4. 4행
정답·해설 보기
정답: 2번. 외부 조인이므로 관리자가 없는 KIM도 관리자 이름이 NULL인 채로 나온다. 모든 사원 6행이다. 내부 조인이었다면 5행이다.
- 115.테이블 A의 K 컬럼 값이 1, 1, 2이고 테이블 B의 K 컬럼 값이 1, 1, 3이다. A.K = B.K 조건으로 내부 조인하면 몇 행이 나오는가?
- 1. 2행
- 2. 3행
- 3. 4행
- 4. 9행
정답·해설 보기
정답: 3번. A의 1 두 행이 B의 1 두 행과 각각 짝지어져 2 × 2 = 4행이 된다. 조인 키에 중복이 있으면 결과 행이 늘어난다.
- 116.FROM A, B처럼 두 테이블을 나열하고 WHERE 절에 조인 조건을 쓰지 않았을 때의 결과는?
- 1. 공통 컬럼으로 자동 조인된다
- 2. 문법 오류가 발생한다
- 3. 첫 번째 테이블의 행만 나온다
- 4. 두 테이블 행의 모든 조합인 카티션 곱이 나온다
정답·해설 보기
정답: 4번. 조인 조건이 없으면 CROSS JOIN과 같은 카티션 곱이 된다. 공통 컬럼으로 자동 조인하는 것은 NATURAL JOIN이다.
- 117.Oracle의 (+) 외부 조인 표기에 대한 설명으로 옳은 것은?
- 1. (+)는 모든 행이 나와야 하는 쪽 테이블에 붙인다
- 2. (+)는 ANSI 표준 문법이다
- 3. 조인 조건의 양쪽에 모두 (+)를 붙일 수 없어 FULL OUTER JOIN을 바로 표현할 수 없다
- 4. (+)로는 LEFT OUTER JOIN을 표현할 수 없다
정답·해설 보기
정답: 3번. (+)는 NULL로 채워질 쪽에 붙이며 양쪽에 동시에 붙일 수 없다. FULL OUTER JOIN은 ANSI 문법을 쓰거나 LEFT와 RIGHT 외부 조인을 UNION으로 합쳐야 한다.
- 118.다음 두 테이블에서 SELECT * FROM EMP NATURAL JOIN DEPT의 결과 행 수는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 24행
- 2. 6행
- 3. 5행
- 4. 4행
정답·해설 보기
정답: 3번. 두 테이블에 공통으로 있는 DEPTNO로 등가 조인한다. DEPTNO가 NULL인 KANG과 사원이 없는 OPS는 빠져 5행이다.
- 119.다음 두 테이블을 SELECT * FROM CUST C INNER JOIN ORD O ON C.CID = O.CID로 조인하면 몇 행이 나오는가?
[CUST] CID CNAME GRADE 1 ACME VIP 2 BETA GOLD 3 CORE NULL 4 DELTA GOLD
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 6행
- 2. 5행
- 3. 4행
- 4. 3행
정답·해설 보기
정답: 3번. 양쪽에 같은 CID가 있는 주문 101, 102(ACME), 103(BETA), 104(CORE)의 4행이다. 고객이 없는 주문 105와 주문이 없는 DELTA는 빠진다.
- 120.다음 두 테이블을 SELECT * FROM CUST C LEFT OUTER JOIN ORD O ON C.CID = O.CID로 조인하면 몇 행이 나오는가?
[CUST] CID CNAME GRADE 1 ACME VIP 2 BETA GOLD 3 CORE NULL 4 DELTA GOLD
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 4행
- 2. 5행
- 3. 6행
- 4. 20행
정답·해설 보기
정답: 2번. 내부 조인 결과 4행에, 주문이 없는 왼쪽 테이블의 DELTA가 ORD 컬럼은 NULL인 채로 1행 더해져 5행이다.
- 121.다음 두 테이블을 FULL OUTER JOIN(ON C.CID = O.CID)하면 몇 행이 나오는가?
[CUST] CID CNAME GRADE 1 ACME VIP 2 BETA GOLD 3 CORE NULL 4 DELTA GOLD
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 9행
- 2. 6행
- 3. 5행
- 4. 4행
정답·해설 보기
정답: 2번. 내부 조인 4행에 주문이 없는 고객 DELTA 1행과 고객 정보가 없는 주문 105 1행이 더해져 6행이다.
- 122.다음 두 테이블에서 아래 SQL의 결과로 나오는 고객은?
SELECT C.CNAME FROM CUST C LEFT OUTER JOIN ORD O ON C.CID = O.CID WHERE O.ONO IS NULL;
[CUST] CID CNAME GRADE 1 ACME VIP 2 BETA GOLD 3 CORE NULL 4 DELTA GOLD
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. ACME
- 2. BETA
- 3. CORE
- 4. DELTA
정답·해설 보기
정답: 4번. 외부 조인 뒤 ORD 쪽이 NULL로 채워진 행만 남기면 주문이 한 건도 없는 고객을 찾을 수 있다. CORE는 AMT가 NULL인 주문 104가 있어 ONO가 NULL이 아니므로 나오지 않는다.
- 123.다음 두 테이블에서 아래 SQL의 결과 행 수는?
SELECT C.CNAME, O.ONO FROM CUST C LEFT OUTER JOIN ORD O ON C.CID = O.CID AND O.AMT >= 300;
[CUST] CID CNAME GRADE 1 ACME VIP 2 BETA GOLD 3 CORE NULL 4 DELTA GOLD
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 6행
- 2. 5행
- 3. 4행
- 4. 2행
정답·해설 보기
정답: 2번. AMT 조건이 ON 절에 있으므로 조인할 주문만 고를 뿐 왼쪽 고객은 모두 남는다. ACME는 101, 102와 연결되어 2행, BETA·CORE·DELTA는 맞는 주문이 없어 NULL로 1행씩 나와 5행이다. 같은 조건을 WHERE에 쓰면 2행이 된다.
- 124.다음 두 테이블에서 아래 SQL을 실행했을 때 DELTA 행의 CNT 값은?
SELECT C.CNAME, COUNT(O.ONO) AS CNT FROM CUST C LEFT OUTER JOIN ORD O ON C.CID = O.CID GROUP BY C.CNAME;
[CUST] CID CNAME GRADE 1 ACME VIP 2 BETA GOLD 3 CORE NULL 4 DELTA GOLD
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 0
- 2. 1
- 3. 2
- 4. NULL
정답·해설 보기
정답: 1번. DELTA는 외부 조인으로 ONO가 NULL인 1행이 만들어지고, COUNT(O.ONO)는 NULL을 세지 않아 0이다. COUNT(*)로 쓰면 그 행을 세어 1이 되어 주문 건수가 틀어진다.
- 125.다음 두 테이블에서 아래 SQL의 결과 행 수는?
SELECT E.ENAME, M.ENAME, D.DNAME FROM EMP E JOIN EMP M ON E.MGR = M.EMPNO JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 6행
- 2. 5행
- 3. 4행
- 4. 3행
정답·해설 보기
정답: 3번. 관리자가 있는 사원은 LEE, PARK, CHOI, JUNG, KANG의 5명인데, KANG은 DEPTNO가 NULL이라 DEPT와의 내부 조인에서 빠진다. 남는 것은 4행이다.
- 126.조인 조건을 ON 절에 쓰는 것과 WHERE 절에 쓰는 것에 대한 설명으로 옳은 것은?
- 1. 내부 조인에서는 같지만 외부 조인에서는 결과가 달라질 수 있다
- 2. 외부 조인에서는 같지만 내부 조인에서는 결과가 달라질 수 있다
- 3. 외부 조인에서는 ON 절에 추가 조건을 쓸 수 없다
- 4. ON 절을 쓰면 WHERE 절을 함께 쓸 수 없다
정답·해설 보기
정답: 1번. 외부 조인에서 ON 절 조건은 조인할 대상만 고르고 기준 테이블 행은 그대로 남긴다. WHERE 절 조건은 조인을 마친 결과를 거르므로 NULL로 채워진 행이 빠질 수 있다.
- 127.다음 두 테이블을 E.SAL BETWEEN G.LOSAL AND G.HISAL 조건으로 조인했을 때 GRADE가 2인 사원은 몇 명인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[SALGRADE] GRADE LOSAL HISAL 1 0 149 2 150 249 3 250 399- 1. 1명
- 2. 2명
- 3. 3명
- 4. 4명
정답·해설 보기
정답: 3번. 급여가 150 이상 249 이하인 LEE(200), CHOI(150), KANG(180)이 2등급이다. 등호가 아닌 조건으로 조인하는 비등가 조인이다.
- 128.같은 부서의 사원 두 명씩 짝을 지으려고 아래 SQL을 실행했다. 결과 행 수는?
SELECT A.ENAME, B.ENAME FROM EMP A JOIN EMP B ON A.DEPTNO = B.DEPTNO AND A.EMPNO < B.EMPNO;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 8행
- 2. 4행
- 3. 3행
- 4. 2행
정답·해설 보기
정답: 4번. 부서 10의 (KIM, LEE)와 부서 20의 (PARK, CHOI)의 2행이다. A.EMPNO < B.EMPNO로 자기 자신과의 짝과 순서만 바뀐 중복을 없앴다. 부서 30은 한 명뿐이고 KANG은 DEPTNO가 NULL이라 짝이 없다.
서브쿼리와 집합 연산자
- 129.다음 EMP 테이블에서 SELECT ENAME FROM EMP WHERE SAL = (SELECT SAL FROM EMP WHERE DEPTNO = 10)을 실행한 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. KIM과 LEE가 출력된다
- 2. KIM만 출력된다
- 3. 아무 행도 출력되지 않는다
- 4. 서브쿼리가 여러 행을 반환해 오류가 발생한다
정답·해설 보기
정답: 4번. = 연산자는 단일 행 서브쿼리에만 쓸 수 있다. 부서 10의 SAL은 300과 200의 두 행이므로 오류가 난다. 여러 행이면 IN을 써야 한다.
- 130.다음 EMP 테이블에서 WHERE SAL > ALL (SELECT SAL FROM EMP WHERE DEPTNO = 20) 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1개
- 2. 2개
- 3. 4개
- 4. 5개
정답·해설 보기
정답: 1번. > ALL은 서브쿼리 결과(250, 150)의 모든 값보다 커야 하므로 최댓값 250보다 큰 행이다. SAL 300인 KIM 1행이다.
- 131.다음 EMP 테이블에서 WHERE SAL > ANY (SELECT SAL FROM EMP WHERE DEPTNO = 20) 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 5개
- 2. 4개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 2번. > ANY는 서브쿼리 결과 중 하나보다만 커도 되므로 최솟값 150보다 큰 행이다. 300, 200, 250, 180의 4행이다.
- 132.다음 두 테이블에서 아래 SQL의 결과 행 수는?
SELECT DNAME FROM DEPT D WHERE EXISTS (SELECT 1 FROM EMP E WHERE E.DEPTNO = D.DEPTNO);[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. 1행
- 2. 3행
- 3. 4행
- 4. 6행
정답·해설 보기
정답: 2번. EXISTS는 서브쿼리 결과가 한 행이라도 있으면 참이다. 사원이 있는 SALES, DEV, HR의 3행이고, 사원이 없는 OPS는 제외된다.
- 133.다음 EMP 테이블에서 아래 SQL의 결과 행 수는?
SELECT ENAME FROM EMP E WHERE SAL > (SELECT AVG(SAL) FROM EMP S WHERE S.DEPTNO = E.DEPTNO);[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 4행
- 2. 3행
- 3. 2행
- 4. 1행
정답·해설 보기
정답: 3번. 자기 부서 평균보다 급여가 높은 사원을 찾는 상관 서브쿼리다. 10번 평균 250보다 높은 KIM, 20번 평균 200보다 높은 PARK이 해당한다. 30번 부서는 JUNG 혼자라 평균과 같고, DEPTNO가 NULL인 KANG은 비교 결과가 UNKNOWN이라 빠진다.
- 134.SELECT 절에 쓰여 한 행에 대해 반드시 하나의 값(한 행 한 컬럼)만 반환해야 하는 서브쿼리는?
- 1. 스칼라 서브쿼리
- 2. 인라인 뷰
- 3. 다중 행 서브쿼리
- 4. 다중 컬럼 서브쿼리
정답·해설 보기
정답: 1번. 스칼라 서브쿼리는 SELECT 절 등에서 값 하나처럼 쓰인다. 두 행 이상을 반환하면 오류가 난다. FROM 절에 쓰는 서브쿼리는 인라인 뷰다.
- 135.FROM 절에 쓰여 마치 테이블처럼 사용되는 서브쿼리는?
- 1. 스칼라 서브쿼리
- 2. 인라인 뷰
- 3. 상관 서브쿼리
- 4. 중첩 서브쿼리
정답·해설 보기
정답: 2번. 인라인 뷰는 SQL 실행 중에만 존재하는 일회성 뷰로, FROM 절에서 테이블처럼 쓰인다.
- 136.다음 두 테이블에 SELECT C FROM T1 UNION SELECT C FROM T2를 실행하면 몇 행이 나오는가?
[T1] [T2] 1 2 2 3 2 4 3
- 1. 2행
- 2. 4행
- 3. 6행
- 4. 7행
정답·해설 보기
정답: 2번. UNION은 합친 뒤 중복을 제거해 1, 2, 3, 4의 4행이다. 중복을 그대로 두는 UNION ALL이면 7행이다.
- 137.다음 두 테이블에 Oracle에서 SELECT C FROM T1 MINUS SELECT C FROM T2를 실행한 결과는?
[T1] [T2] 1 2 2 3 2 4 3
- 1. 1, 2
- 2. 1
- 3. 4
- 4. 2, 3
정답·해설 보기
정답: 2번. MINUS(SQL Server는 EXCEPT)는 첫 번째 결과에서 두 번째 결과에 있는 값을 뺀 뒤 중복을 제거한다. T1의 1, 2, 3 중 T2에 없는 1만 남는다.
- 138.집합 연산자(UNION, INTERSECT, MINUS)에 대한 설명으로 옳지 않은 것은?
- 1. 각 SELECT 문의 컬럼 수가 같아야 한다
- 2. 대응하는 컬럼의 데이터 타입이 호환되어야 한다
- 3. 결과의 컬럼명은 첫 번째 SELECT 문을 따른다
- 4. ORDER BY는 각 SELECT 문마다 따로 쓸 수 있다
정답·해설 보기
정답: 4번. ORDER BY는 집합 연산 전체 결과에 대해 맨 마지막에 한 번만 쓸 수 있다.
- 139.부하 직원이 없는 사원을 찾으려고 다음 SQL을 실행했다. 결과 행 수는?
SELECT ENAME FROM EMP WHERE EMPNO NOT IN (SELECT MGR FROM EMP);
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0행
- 2. 2행
- 3. 4행
- 4. 6행
정답·해설 보기
정답: 1번. 서브쿼리 결과에 KIM의 MGR인 NULL이 포함되므로 NOT IN 비교가 모두 UNKNOWN이 되어 아무 행도 나오지 않는다. 서브쿼리에 WHERE MGR IS NOT NULL을 붙이거나 NOT EXISTS를 써야 한다.
- 140.다음 SQL의 결과 행 수는?
SELECT ENAME FROM EMP E WHERE NOT EXISTS (SELECT 1 FROM EMP S WHERE S.MGR = E.EMPNO);[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6행
- 2. 4행
- 3. 2행
- 4. 0행
정답·해설 보기
정답: 2번. 자신을 관리자로 둔 사원이 없는 사원을 찾는다. 부하가 있는 KIM과 PARK을 뺀 LEE, CHOI, JUNG, KANG의 4행이다. NOT EXISTS는 NULL의 영향을 받지 않는다.
- 141.다음 SQL(Oracle)의 결과 행 수는?
SELECT ENAME FROM EMP WHERE (DEPTNO, SAL) IN (SELECT DEPTNO, MAX(SAL) FROM EMP GROUP BY DEPTNO);[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 3행
- 2. 4행
- 3. 2행
- 4. 6행
정답·해설 보기
정답: 1번. 부서별 최고 급여자를 찾는 다중 컬럼 서브쿼리다. KIM(10, 300), PARK(20, 250), JUNG(30, 100)이 나온다. KANG은 DEPTNO가 NULL이라 비교가 UNKNOWN이 되어 빠진다. SQL Server는 다중 컬럼 IN을 지원하지 않는다.
- 142.다음 SQL에서 KANG 행의 DNAME 값은?
SELECT ENAME, (SELECT DNAME FROM DEPT D WHERE D.DEPTNO = E.DEPTNO) AS DNAME FROM EMP E;[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL[DEPT] DEPTNO DNAME 10 SALES 20 DEV 30 HR 40 OPS- 1. NULL
- 2. 오류가 발생한다
- 3. SALES
- 4. KANG 행은 출력되지 않는다
정답·해설 보기
정답: 1번. 스칼라 서브쿼리의 결과가 없으면 NULL을 돌려주고 메인 쿼리의 행은 그대로 출력된다. 결과가 두 행 이상일 때 오류가 난다.
- 143.다중 행 서브쿼리와 함께 쓸 수 없는 비교 연산자는?
- 1. IN
- 2. ANY
- 3. ALL
- 4. =
정답·해설 보기
정답: 4번. 다중 행 서브쿼리에는 IN, ANY(SOME), ALL, EXISTS 같은 다중 행 비교 연산자를 쓴다. =, >, < 같은 단일 행 연산자를 쓰면 오류가 난다.
- 144.비연관(Un-Correlated) 서브쿼리에 대한 설명으로 옳은 것은?
- 1. 서브쿼리가 메인 쿼리의 각 행마다 반복 실행된다
- 2. 반드시 FROM 절에만 쓸 수 있다
- 3. EXISTS와만 함께 쓸 수 있다
- 4. 서브쿼리가 메인 쿼리의 컬럼을 참조하지 않아 독립적으로 실행될 수 있다
정답·해설 보기
정답: 4번. 비연관 서브쿼리는 메인 쿼리 컬럼을 갖지 않아 서브쿼리 결과를 먼저 구해 메인 쿼리에 넘겨줄 수 있다. 메인 쿼리 컬럼을 참조하는 것은 연관(상관) 서브쿼리다.
- 145.다음 두 테이블에 SELECT C FROM T1 INTERSECT SELECT C FROM T2를 실행하면 몇 행이 나오는가?
[T1] [T2] 1 2 2 3 2 4 3
- 1. 4행
- 2. 3행
- 3. 2행
- 4. 1행
정답·해설 보기
정답: 3번. INTERSECT는 두 결과에 모두 있는 값을 중복 없이 돌려준다. 2와 3의 2행이다.
- 146.UNION과 UNION ALL에 대한 설명으로 옳은 것은?
- 1. UNION은 중복 제거 작업이 필요해 UNION ALL보다 부하가 크다
- 2. UNION ALL은 중복을 제거한다
- 3. UNION은 결과를 항상 입력 순서대로 출력한다
- 4. 두 연산자의 결과 행 수는 항상 같다
정답·해설 보기
정답: 1번. UNION은 합친 결과에서 중복을 제거하므로 정렬이나 해시 작업이 필요하다. 중복이 없거나 허용해도 되면 UNION ALL이 효율적이다.
- 147.Oracle의 MINUS 연산자와 같은 기능을 하는 SQL Server의 집합 연산자는?
- 1. INTERSECT
- 2. UNION ALL
- 3. DIFFERENCE
- 4. EXCEPT
정답·해설 보기
정답: 4번. 첫 번째 결과에서 두 번째 결과에 있는 값을 빼는 연산을 Oracle은 MINUS, SQL Server(그리고 표준 SQL)는 EXCEPT로 쓴다.
- 148.다음 SQL의 결과 행 수는?
SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) > (SELECT AVG(SAL) FROM EMP);
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1행
- 2. 2행
- 3. 3행
- 4. 4행
정답·해설 보기
정답: 2번. 전체 평균은 1180/6 ≈ 196.7이다. 부서별 평균은 10번 250, 20번 200, 30번 100, NULL 그룹 180이므로 전체 평균보다 높은 10번과 20번의 2행이다.
- 149.다음 SQL의 결과로 나오는 사원을 모두 고른 것은?
SELECT ENAME FROM EMP E WHERE SAL > (SELECT AVG(SAL) FROM EMP S WHERE S.DEPTNO = E.DEPTNO);[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. KIM
- 2. KIM, PARK
- 3. KIM, PARK, KANG
- 4. KIM, PARK, LEE
정답·해설 보기
정답: 2번. 자기 부서 평균보다 급여가 많은 사원을 찾는 연관 서브쿼리다. 부서 10 평균 250보다 큰 KIM, 부서 20 평균 200보다 큰 PARK이 나온다. 부서 30의 JUNG은 평균과 같고, KANG은 DEPTNO가 NULL이라 서브쿼리 평균이 NULL이 되어 빠진다.
- 150.다음 두 테이블에서 아래 SQL의 결과 행 수는?
SELECT CNAME FROM CUST C WHERE NOT EXISTS (SELECT 1 FROM ORD O WHERE O.CID = C.CID AND O.AMT >= 300);[CUST] CID CNAME GRADE 1 ACME VIP 2 BETA GOLD 3 CORE NULL 4 DELTA GOLD
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 1행
- 2. 2행
- 3. 3행
- 4. 4행
정답·해설 보기
정답: 3번. 금액이 300 이상인 주문이 있는 고객은 ACME뿐이다. 그런 주문이 없는 BETA, CORE, DELTA의 3행이 나온다.
- 151.다음 두 테이블에서 아래 SQL을 실행했을 때 ACME 행의 TOT 값은?
SELECT C.CNAME, (SELECT SUM(O.AMT) FROM ORD O WHERE O.CID = C.CID) AS TOT FROM CUST C;[CUST] CID CNAME GRADE 1 ACME VIP 2 BETA GOLD 3 CORE NULL 4 DELTA GOLD
[ORD] ONO CID AMT 101 1 500 102 1 300 103 2 200 104 3 NULL 105 5 100
- 1. 800
- 2. 300
- 3. 500
- 4. 1100
정답·해설 보기
정답: 1번. SELECT 절의 스칼라 서브쿼리가 고객마다 주문 금액 합계를 구한다. ACME의 주문 101(500)과 102(300)를 더해 800이다.
- 152.다중 행 서브쿼리 비교 연산자 중 = ANY와 같은 뜻으로 쓰이는 것은?
- 1. IN
- 2. EXISTS
- 3. > ALL
- 4. NOT IN
정답·해설 보기
정답: 1번. = ANY는 서브쿼리 결과 중 하나라도 같으면 참이므로 IN과 같다. <> ALL은 NOT IN과 같다.
- 153.WHERE 절에 쓰여 메인 쿼리의 조건 값으로 사용되는 서브쿼리를 일반적으로 무엇이라 하는가?
- 1. 스칼라 서브쿼리
- 2. 인라인 뷰
- 3. 중첩 서브쿼리(Nested Subquery)
- 4. 공통 테이블 식(CTE)
정답·해설 보기
정답: 3번. 서브쿼리는 쓰는 위치에 따라 SELECT 절의 스칼라 서브쿼리, FROM 절의 인라인 뷰, WHERE·HAVING 절의 중첩 서브쿼리로 나눈다(SQLD 교재 기준 분류).
- 154.서브쿼리에 대한 설명으로 옳지 않은 것은?
- 1. 메인 쿼리는 WHERE 절 서브쿼리의 컬럼을 SELECT 절에 자유롭게 쓸 수 있다
- 2. 서브쿼리는 괄호로 감싸서 쓴다
- 3. 단일 행 서브쿼리에는 =, < 같은 단일 행 비교 연산자를 쓴다
- 4. 서브쿼리는 메인 쿼리의 컬럼을 참조할 수 있다
정답·해설 보기
정답: 1번. 서브쿼리는 메인 쿼리의 컬럼을 쓸 수 있지만, 메인 쿼리는 서브쿼리의 컬럼을 쓸 수 없다. 서브쿼리 결과의 컬럼을 메인 쿼리에서 쓰려면 FROM 절의 인라인 뷰로 만들어야 한다.
- 155.다음 두 테이블에 SELECT C FROM T1 UNION ALL SELECT C FROM T2를 실행하면 몇 행이 나오는가?
[T1] [T2] C C 1 2 2 3 2 4 3
- 1. 7행
- 2. 6행
- 3. 5행
- 4. 4행
정답·해설 보기
정답: 1번. UNION ALL은 중복을 없애지 않고 두 결과를 그대로 합친다. 4행 + 3행 = 7행이다. UNION이었다면 1, 2, 3, 4의 4행이다.
- 156.SELECT C AS X FROM T1 UNION SELECT C AS Y FROM T2를 실행했을 때 결과 컬럼의 이름은?
- 1. X
- 2. Y
- 3. C
- 4. X_Y
정답·해설 보기
정답: 1번. 집합 연산 결과의 컬럼 이름은 첫 번째 SELECT 절을 따른다. 그래서 맨 끝의 ORDER BY에도 첫 번째 SELECT의 컬럼명이나 별칭을 쓴다.
- 157.다음 두 테이블에 Oracle에서 아래 SQL을 실행하면 몇 행이 나오는가?
SELECT C FROM T1 MINUS SELECT C FROM T2 UNION SELECT C FROM T2;
[T1] [T2] C C 1 2 2 3 2 4 3
- 1. 1행
- 2. 2행
- 3. 3행
- 4. 4행
정답·해설 보기
정답: 4번. Oracle에서 집합 연산자는 우선순위가 같아 위에서부터 차례로 계산한다. T1 MINUS T2는 1이 남고, 여기에 T2(2, 3, 4)를 UNION하면 1, 2, 3, 4의 4행이다.
- 158.집합 연산자 때문에 오류가 발생하는 SQL은?
- 1. SELECT C FROM T1 UNION ALL SELECT C FROM T2;
- 2. SELECT C FROM T1 UNION SELECT C, C FROM T2;
- 3. SELECT C FROM T1 INTERSECT SELECT C FROM T2;
- 4. SELECT C FROM T1 UNION SELECT C FROM T2 ORDER BY C;
정답·해설 보기
정답: 2번. 집합 연산자로 합치는 SELECT 문들은 컬럼 수가 같고, 대응하는 컬럼의 데이터 타입이 호환되어야 한다. ORDER BY는 맨 마지막에 한 번 쓸 수 있다.
그룹 함수와 윈도우 함수
- 159.다음 SALES 테이블에 SELECT REGION, PRODUCT, SUM(AMT) FROM SALES GROUP BY ROLLUP(REGION, PRODUCT)를 실행하면 몇 행이 나오는가?
[SALES] REGION PRODUCT AMT A X 100 A Y 200 B X 300
- 1. 9행
- 2. 8행
- 3. 6행
- 4. 4행
정답·해설 보기
정답: 3번. ROLLUP(REGION, PRODUCT)는 (REGION, PRODUCT) 3행, REGION별 소계 2행, 전체 합계 1행을 만들어 6행이다. 인수의 순서에 따라 결과가 달라진다.
- 160.다음 SALES 테이블에 GROUP BY CUBE(REGION, PRODUCT)를 실행하면 몇 행이 나오는가?
[SALES] REGION PRODUCT AMT A X 100 A Y 200 B X 300
- 1. 6행
- 2. 7행
- 3. 8행
- 4. 9행
정답·해설 보기
정답: 3번. CUBE는 가능한 모든 조합의 소계를 만든다. 상세 3행, REGION별 소계 2행, PRODUCT별 소계 2행, 전체 합계 1행으로 8행이다.
- 161.다음 SALES 테이블에 GROUP BY GROUPING SETS(REGION, PRODUCT)를 실행하면 몇 행이 나오는가?
[SALES] REGION PRODUCT AMT A X 100 A Y 200 B X 300
- 1. 6행
- 2. 5행
- 3. 4행
- 4. 3행
정답·해설 보기
정답: 3번. GROUPING SETS(REGION, PRODUCT)는 REGION별 집계(2행)와 PRODUCT별 집계(2행)를 각각 구해 합친다. 전체 합계는 포함되지 않아 4행이다.
- 162.ROLLUP·CUBE 결과에서 해당 컬럼이 소계(집계)로 만들어진 행이면 1, 아니면 0을 돌려주는 함수는?
- 1. DECODE
- 2. NVL
- 3. GROUPING
- 4. RANK
정답·해설 보기
정답: 3번. GROUPING(컬럼)은 그 컬럼이 집계 과정에서 생략되어 NULL이 된 행이면 1을 돌려준다. CASE나 DECODE와 함께 써서 '소계', '합계' 같은 이름을 붙인다.
- 163.다음 SCORE 테이블에서 RANK() OVER (ORDER BY PT DESC)를 구할 때 D의 순위는?
[SCORE] NAME PT A 100 B 90 C 90 D 80
- 1. 2
- 2. 3
- 3. 4
- 4. 5
정답·해설 보기
정답: 3번. RANK는 같은 값에 같은 순위를 주고 그 수만큼 다음 순위를 건너뛴다. 100이 1위, 90 두 명이 공동 2위, 80은 4위다.
- 164.다음 SCORE 테이블에서 DENSE_RANK() OVER (ORDER BY PT DESC)를 구할 때 D의 순위는?
[SCORE] NAME PT A 100 B 90 C 90 D 80
- 1. 5
- 2. 4
- 3. 3
- 4. 2
정답·해설 보기
정답: 3번. DENSE_RANK는 같은 값에 같은 순위를 주되 다음 순위를 건너뛰지 않는다. 100이 1위, 90이 2위, 80은 3위다.
- 165.ID가 1, 2, 3인 행의 V 값이 각각 10, 20, 30일 때, ID = 3인 행에서 다음 식의 결과는?
SUM(V) OVER (ORDER BY ID ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
- 1. 30
- 2. 50
- 3. 60
- 4. 20
정답·해설 보기
정답: 2번. 바로 앞 한 행과 현재 행만 더한다. ID 3 행에서는 20 + 30 = 50이다. 처음부터 누적하는 UNBOUNDED PRECEDING이었다면 60이다.
- 166.ID가 1, 2, 3인 행의 V 값이 각각 10, 20, 30일 때, LAG(V) OVER (ORDER BY ID)의 결과를 ID 순서대로 나열한 것은?
- 1. 10, 20, 30
- 2. 20, 30, NULL
- 3. 10, 10, 20
- 4. NULL, 10, 20
정답·해설 보기
정답: 4번. LAG는 정렬 기준으로 이전 행의 값을 가져온다. 첫 행에는 이전 행이 없어 NULL이다. 다음 행의 값을 가져오는 함수는 LEAD다.
- 167.다음 EMP 테이블에서 SUM(SAL) OVER (PARTITION BY DEPTNO)를 구할 때 LEE 행의 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1180
- 2. 900
- 3. 500
- 4. 200
정답·해설 보기
정답: 3번. PARTITION BY는 부서별로 나눠 계산하되 행을 줄이지 않는다. LEE가 속한 10번 부서의 합계 300 + 200 = 500이 각 행에 붙는다.
- 168.7개 행에 NTILE(3) OVER (ORDER BY V)를 적용했다. 첫 번째 그룹(값 1)에 속하는 행은 몇 개인가?
- 1. 1개
- 2. 2개
- 3. 3개
- 4. 4개
정답·해설 보기
정답: 3번. 7을 3으로 나누면 몫 2, 나머지 1이다. 나머지는 앞 그룹부터 하나씩 더 배정되므로 그룹 크기는 3, 2, 2다.
- 169.다음 SCORE 테이블에 ROW_NUMBER() OVER (ORDER BY PT DESC)를 적용했을 때 가장 큰 값은?
[SCORE] NAME PT A 100 B 90 C 90 D 80
- 1. 5
- 2. 4
- 3. 3
- 4. 2
정답·해설 보기
정답: 2번. ROW_NUMBER는 같은 값이라도 서로 다른 일련번호를 붙이므로 1, 2, 3, 4가 된다. 동점(90)끼리의 순서는 보장되지 않는다.
- 170.다음 EMP 테이블에서 FIRST_VALUE(ENAME) OVER (PARTITION BY DEPTNO ORDER BY SAL DESC)를 구할 때 LEE 행의 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. LEE
- 2. KIM
- 3. PARK
- 4. NULL
정답·해설 보기
정답: 2번. LEE가 속한 부서 10에서 급여 내림차순으로 첫 번째 사원은 KIM(300)이다.
- 171.다음 EMP 테이블에서 Oracle로 RATIO_TO_REPORT(SAL) OVER (PARTITION BY DEPTNO)를 구할 때 KIM 행의 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 0.25
- 2. 0.4
- 3. 0.6
- 4. 1.0
정답·해설 보기
정답: 3번. RATIO_TO_REPORT는 파티션 합계에서 현재 행이 차지하는 비율이다. 부서 10의 합계 500 중 KIM의 300이므로 0.6이다.
- 172.다음 SCORE 테이블에서 CUME_DIST() OVER (ORDER BY PT)를 구할 때 B 행의 값은?
[SCORE] NAME PT A 100 B 90 C 90 D 80
- 1. 1.0
- 2. 0.75
- 3. 0.5
- 4. 0.25
정답·해설 보기
정답: 2번. CUME_DIST는 현재 값 이하인 행 수의 비율이다. 오름차순에서 90 이하인 행은 D(80), B, C(90)의 3행이므로 3/4 = 0.75다.
- 173.다음 SCORE 테이블에서 PERCENT_RANK() OVER (ORDER BY PT)를 구할 때 B 행의 값은 약 얼마인가?
[SCORE] NAME PT A 100 B 90 C 90 D 80
- 1. 0.25
- 2. 0.33
- 3. 0.5
- 4. 0.75
정답·해설 보기
정답: 2번. PERCENT_RANK = (RANK − 1)/(전체 행 수 − 1)이다. 오름차순에서 90의 RANK는 2이므로 (2 − 1)/(4 − 1) ≈ 0.33이다.
- 174.ID가 1, 2, 3인 행의 V 값이 각각 10, 20, 30일 때, ID = 1인 행에서 LEAD(V, 2) OVER (ORDER BY ID)의 값은?
- 1. NULL
- 2. 30
- 3. 20
- 4. 10
정답·해설 보기
정답: 2번. LEAD(V, 2)는 정렬 기준으로 두 행 뒤의 값을 가져온다. ID 1에서 두 행 뒤는 ID 3이므로 30이다.
- 175.다음 EMP 테이블에서 MAX(SAL) OVER (PARTITION BY DEPTNO)를 구할 때 CHOI 행의 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 150
- 2. 250
- 3. 300
- 4. 400
정답·해설 보기
정답: 2번. CHOI가 속한 부서 20의 최고 급여는 PARK의 250이다. 윈도우 함수는 행을 줄이지 않고 각 행에 결과를 붙인다.
- 176.ID가 1, 2, 3인 행의 V 값이 각각 10, 20, 30일 때, ID = 2인 행에서 다음 식의 결과는?
AVG(V) OVER (ORDER BY ID ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
- 1. 30
- 2. 25
- 3. 20
- 4. 15
정답·해설 보기
정답: 3번. 앞 한 행, 현재 행, 뒤 한 행의 평균이므로 (10 + 20 + 30)/3 = 20이다.
- 177.V 값이 10, 20, 20, 30인 4개 행에 SUM(V) OVER (ORDER BY V)를 구했다. V가 20인 첫 번째 행의 값은?
- 1. 30
- 2. 40
- 3. 50
- 4. 80
정답·해설 보기
정답: 3번. ORDER BY만 쓰고 범위를 생략하면 기본값 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW가 적용된다. RANGE는 같은 값(20)을 모두 현재 범위에 포함하므로 10 + 20 + 20 = 50이다. ROWS로 지정했다면 30이다.
- 178.다음 SALES 테이블에 GROUP BY GROUPING SETS(REGION, ())를 실행하면 몇 행이 나오는가?
[SALES] REGION PRODUCT AMT A X 100 A Y 200 B X 300
- 1. 6행
- 2. 4행
- 3. 3행
- 4. 2행
정답·해설 보기
정답: 3번. REGION별 집계 2행(A, B)과 빈 괄호 ()가 뜻하는 전체 합계 1행을 합쳐 3행이다. ROLLUP(REGION)과 같은 결과다.
- 179.다음 EMP 테이블에 SELECT ENAME, COUNT(*) OVER () FROM EMP를 실행한 결과에 대한 설명으로 옳은 것은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6행이 출력되고 각 행의 COUNT 값은 모두 6이다
- 2. 1행만 출력되고 값은 6이다
- 3. 6행이 출력되고 COUNT 값은 1부터 6까지 늘어난다
- 4. GROUP BY가 없어 오류가 발생한다
정답·해설 보기
정답: 1번. OVER ()는 전체를 하나의 윈도우로 보므로 모든 행에 전체 건수 6이 붙는다. 집계 함수와 달리 윈도우 함수는 결과 행 수를 줄이지 않는다.
- 180.다음 W 테이블에서 LAG(V, 1, 0) OVER (ORDER BY ID)를 구할 때 ID = 1인 행의 값은?
[W] ID V 1 10 2 20 3 30
- 1. 20
- 2. 10
- 3. 0
- 4. NULL
정답·해설 보기
정답: 3번. LAG(컬럼, 몇 행 앞, 기본값)이다. ID = 1은 앞 행이 없으므로 NULL 대신 세 번째 인수로 준 기본값 0이 나온다.
- 181.다음 SALES 테이블에 Oracle로 SELECT REGION, PRODUCT, SUM(AMT), GROUPING_ID(REGION, PRODUCT) FROM SALES GROUP BY ROLLUP(REGION, PRODUCT)를 실행했을 때, 전체 합계 행의 GROUPING_ID 값은?
[SALES] REGION PRODUCT AMT A X 100 A Y 200 B X 300
- 1. 0
- 2. 1
- 3. 2
- 4. 3
정답·해설 보기
정답: 4번. GROUPING_ID(REGION, PRODUCT)는 GROUPING(REGION)과 GROUPING(PRODUCT)를 이진수로 이어 붙인 값이다. 전체 합계 행은 두 컬럼 모두 집계되어 1, 1이므로 이진수 11 = 3이다. REGION별 소계 행은 01 = 1이다.
- 182.다음 SALES 테이블에 GROUP BY ROLLUP(REGION, PRODUCT)를 실행했을 때, REGION이 A이고 PRODUCT가 NULL인 행의 SUM(AMT)는?
[SALES] REGION PRODUCT AMT A X 100 A Y 200 B X 300
- 1. 600
- 2. 300
- 3. 200
- 4. 100
정답·해설 보기
정답: 2번. PRODUCT가 NULL로 표시된 행은 REGION별 소계다. A 지역의 X(100)와 Y(200)를 더해 300이다. 전체 합계는 REGION도 NULL인 행이고 600이다.
- 183.GROUP BY ROLLUP(A, B, C)가 만드는 그룹 수준(전체 합계 포함)은 몇 가지인가?
- 1. 3가지
- 2. 4가지
- 3. 6가지
- 4. 8가지
정답·해설 보기
정답: 2번. ROLLUP은 오른쪽 컬럼부터 하나씩 빼며 (A, B, C), (A, B), (A), ()의 4가지를 만든다. 컬럼이 n개면 n + 1가지다. CUBE(A, B, C)는 모든 조합인 2³ = 8가지다.
- 184.다음 W 테이블에서 ID = 1인 행의 아래 식 결과는?
SUM(V) OVER (ORDER BY ID ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
[W] ID V 1 10 2 20 3 30
- 1. 60
- 2. 40
- 3. 30
- 4. 10
정답·해설 보기
정답: 3번. 현재 행과 앞뒤 한 행씩을 더한다. ID = 1은 앞 행이 없으므로 자기 자신(10)과 다음 행(20)만 더해 30이다.
- 185.다음 EMP 테이블에서 SUM(SAL) OVER (ORDER BY EMPNO ROWS UNBOUNDED PRECEDING)을 구할 때 PARK 행의 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 250
- 2. 500
- 3. 750
- 4. 1180
정답·해설 보기
정답: 3번. EMPNO 순으로 처음부터 현재 행까지 누적 합계를 구한다. KIM(300) + LEE(200) + PARK(250) = 750이다.
- 186.다음 EMP 테이블에서 RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC)를 구할 때 CHOI 행의 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1
- 2. 4
- 3. 2
- 4. 5
정답·해설 보기
정답: 3번. PARTITION BY로 부서마다 따로 순위를 매긴다. 부서 20에서 PARK(250)이 1위, CHOI(150)가 2위다.
- 187.다음 SQL의 결과 행 수는?
SELECT * FROM ( SELECT ENAME, DEPTNO, ROW_NUMBER() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) RN FROM EMP) WHERE RN = 1;[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6행
- 2. 4행
- 3. 3행
- 4. 1행
정답·해설 보기
정답: 2번. 부서마다 급여가 가장 높은 한 명씩 뽑는다. 부서 10, 20, 30과 DEPTNO가 NULL인 그룹(KANG)이 각각 하나의 파티션이 되어 4행이다.
- 188.다음 SCORE 테이블에서 COUNT(*) OVER (ORDER BY PT)를 구할 때 B 행의 값은?
[SCORE] NAME PT A 100 B 90 C 90 D 80
- 1. 1
- 2. 2
- 3. 3
- 4. 4
정답·해설 보기
정답: 3번. ORDER BY만 쓰면 기본 윈도우가 RANGE UNBOUNDED PRECEDING이라 현재 값과 같은 값(동점)까지 포함한다. PT 오름차순으로 D(80), B(90), C(90)까지 세어 3이다.
- 189.다음 중 순위 함수가 아닌 것은?
- 1. RANK
- 2. DENSE_RANK
- 3. LAG
- 4. ROW_NUMBER
정답·해설 보기
정답: 3번. RANK, DENSE_RANK, ROW_NUMBER는 순위 함수다. LAG와 LEAD는 앞뒤 행의 값을 가져오는 행 순서 함수다.
Top N·계층형 질의·PIVOT·정규 표현식
- 190.Oracle에서 급여 상위 3명을 구하려고 SELECT * FROM EMP WHERE ROWNUM <= 3 ORDER BY SAL DESC를 실행했다. 이 SQL의 문제점은?
- 1. ROWNUM 조건이 정렬보다 먼저 적용되어 임의의 3행을 뽑은 뒤 정렬한다
- 2. ROWNUM은 WHERE 절에 쓸 수 없어 실행하면 문법 오류가 발생한다
- 3. 정렬이 끝난 뒤 ROWNUM이 붙으므로 상위 3명이 정확히 나온다
- 4. ORDER BY가 무시되어 3행이 정렬되지 않은 채로 출력된다
정답·해설 보기
정답: 1번. ROWNUM은 WHERE 절 처리 시점에 붙으므로 정렬 전에 3행이 정해진다. 정렬한 결과를 인라인 뷰로 만든 뒤 바깥에서 ROWNUM <= 3을 걸어야 상위 3명이 나온다.
- 191.Oracle에서 SELECT * FROM EMP WHERE ROWNUM = 2를 실행한 결과는?
- 1. 두 번째 행이 출력된다
- 2. 두 행이 출력된다
- 3. 오류가 발생한다
- 4. 아무 행도 출력되지 않는다
정답·해설 보기
정답: 4번. ROWNUM은 조건을 통과한 행에 1부터 차례로 붙는다. 첫 행이 ROWNUM 1이라 조건(= 2)을 통과하지 못하면 다음 행도 다시 1이 되어 영원히 2가 될 수 없다. ROWNUM = 1, ROWNUM <= N은 동작한다.
- 192.점수가 100, 90, 80, 80, 70인 5개 행에 SQL Server에서 SELECT TOP(3) WITH TIES ... ORDER BY 점수 DESC를 실행하면 몇 행이 나오는가?
- 1. 2행
- 2. 5행
- 3. 4행
- 4. 3행
정답·해설 보기
정답: 3번. WITH TIES는 마지막 순위(80)와 같은 값을 가진 행을 모두 포함한다. 100, 90, 80, 80의 4행이다.
- 193.다음 EMP 테이블에서 아래 SQL(Oracle 12c 이상)의 결과로 출력되는 사원을 순서대로 나열한 것은?
SELECT ENAME FROM EMP ORDER BY SAL DESC OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. PARK, LEE
- 2. KIM, PARK
- 3. LEE, KANG
- 4. KIM, LEE
정답·해설 보기
정답: 1번. 급여 내림차순은 KIM(300), PARK(250), LEE(200), KANG(180) … 이다. 첫 행을 건너뛰고(OFFSET 1) 다음 2행을 가져오므로 PARK, LEE다.
- 194.다음 EMP 테이블에 아래 계층형 질의를 실행할 때 CHOI의 LEVEL 값은?
SELECT LEVEL, ENAME FROM EMP START WITH MGR IS NULL CONNECT BY PRIOR EMPNO = MGR;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1
- 2. 2
- 3. 3
- 4. 4
정답·해설 보기
정답: 3번. MGR이 NULL인 KIM이 루트(LEVEL 1)다. PRIOR EMPNO = MGR은 부모에서 자식으로 내려가는 순방향 전개로, KIM → PARK(2) → CHOI(3)이다.
- 195.다음 EMP 테이블에 KIM을 루트로 하는 계층형 질의(START WITH MGR IS NULL CONNECT BY PRIOR EMPNO = MGR)를 실행할 때 CONNECT_BY_ISLEAF 값이 1인 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6개
- 2. 4개
- 3. 3개
- 4. 2개
정답·해설 보기
정답: 2번. CONNECT_BY_ISLEAF는 자식이 없는 리프 노드에서 1이다. 부하 직원이 없는 LEE, CHOI, JUNG, KANG의 4명이다. KIM과 PARK은 부하가 있어 0이다.
- 196.REGEXP_SUBSTR('A12B345', '[0-9]+', 1, 2)의 결과는?
- 1. '12'
- 2. '1'
- 3. 'B345'
- 4. '345'
정답·해설 보기
정답: 4번. '[0-9]+'는 하나 이상 연속된 숫자다. 1번째 위치부터 찾을 때 첫 번째 일치는 '12', 두 번째 일치는 '345'다.
- 197.다음 SQL의 결과 행 수는?
SELECT LEVEL, ENAME FROM EMP START WITH ENAME = 'CHOI' CONNECT BY PRIOR MGR = EMPNO;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1행
- 2. 2행
- 3. 3행
- 4. 6행
정답·해설 보기
정답: 3번. PRIOR MGR = EMPNO는 자식에서 부모로 올라가는 역방향 전개다. CHOI(1) → PARK(2) → KIM(3)으로 올라가 3행이다.
- 198.다음 EMP 테이블에 KIM을 루트로 하는 계층형 질의(START WITH MGR IS NULL CONNECT BY PRIOR EMPNO = MGR)를 실행할 때, CHOI 행의 SYS_CONNECT_BY_PATH(ENAME, '/') 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. '/KIM/PARK/CHOI'
- 2. '/CHOI/PARK/KIM'
- 3. '/PARK/CHOI'
- 4. 'KIM/PARK/CHOI/'
정답·해설 보기
정답: 1번. SYS_CONNECT_BY_PATH는 루트부터 현재 행까지의 경로를 구분자와 함께 이어 붙인다. 각 값 앞에 구분자가 붙는다.
- 199.다음 EMP 테이블에 START WITH MGR IS NULL CONNECT BY PRIOR EMPNO = MGR 계층형 질의를 실행할 때, JUNG 행의 CONNECT_BY_ROOT ENAME 값은?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. KIM
- 2. PARK
- 3. JUNG
- 4. NULL
정답·해설 보기
정답: 1번. CONNECT_BY_ROOT는 현재 행이 속한 계층의 루트 데이터를 돌려준다. MGR이 NULL인 KIM이 루트이고 JUNG은 KIM → PARK → JUNG으로 이어지므로 KIM이다.
- 200.계층형 질의에서 ORDER SIBLINGS BY에 대한 설명으로 옳은 것은?
- 1. 계층 구조를 무시하고 전체 결과를 정렬한다
- 2. 루트 노드만 정렬한다
- 3. 계층 구조를 유지한 채 같은 부모를 가진 형제 노드끼리 정렬한다
- 4. 계층형 질의에서는 쓸 수 없다
정답·해설 보기
정답: 3번. 일반 ORDER BY를 쓰면 계층 순서가 깨지지만, ORDER SIBLINGS BY는 계층을 유지하면서 형제끼리만 정렬한다.
- 201.계층형 질의에서 WHERE 절 조건에 대한 설명으로 옳은 것은?
- 1. 조건에 맞지 않는 행과 그 하위 전체를 전개에서 제외한다
- 2. 루트 행을 정하는 데 쓰인다
- 3. 계층형 질의에는 WHERE 절을 쓸 수 없다
- 4. 계층 전개를 모두 마친 뒤 결과에서 조건에 맞지 않는 행만 제외하고, 그 자식 행은 남을 수 있다
정답·해설 보기
정답: 4번. WHERE 절은 전개가 끝난 결과에 필터로 적용된다. 전개 자체를 제한하려면 CONNECT BY 절에 조건을 쓰고, 루트는 START WITH로 정한다.
- 202.다음 SALES 테이블에 Oracle로 아래 PIVOT 질의를 실행했을 때, REGION이 B인 행의 Y 컬럼 값은?
SELECT * FROM SALES PIVOT (SUM(AMT) FOR PRODUCT IN ('X' AS X, 'Y' AS Y));[SALES] REGION PRODUCT AMT A X 100 A Y 200 B X 300
- 1. NULL
- 2. 0
- 3. 200
- 4. 300
정답·해설 보기
정답: 1번. PIVOT은 PRODUCT 값을 X, Y 컬럼으로 펼친다. 지역 B에는 Y 상품 판매가 없으므로 SUM 결과가 NULL이다. 지역 A 행은 X = 100, Y = 200이다.
- 203.여러 컬럼에 나뉘어 있는 값을 하나의 컬럼으로 모아 여러 행으로 바꾸는(열을 행으로 바꾸는) Oracle 구문은?
- 1. PIVOT
- 2. ROLLUP
- 3. CONNECT BY
- 4. UNPIVOT
정답·해설 보기
정답: 4번. PIVOT은 행을 열로, UNPIVOT은 열을 행으로 바꾼다.
- 204.다음 EMP 테이블에서 WHERE REGEXP_LIKE(ENAME, '^K') 조건을 만족하는 행은 몇 개인가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6개
- 2. 3개
- 3. 2개
- 4. 1개
정답·해설 보기
정답: 3번. '^K'는 K로 시작한다는 뜻이다. KIM과 KANG의 2행이다. 'K$'라면 K로 끝나는 값이다.
- 205.REGEXP_REPLACE('010-1234-5678', '[0-9]', '*')의 결과는?
- 1. '010-****-5678'
- 2. '*-*-*'
- 3. '*************'
- 4. '***-****-****'
정답·해설 보기
정답: 4번. '[0-9]'는 숫자 한 글자와 일치하므로 모든 숫자가 하나씩 '*'로 바뀌고 하이픈은 그대로 남는다.
- 206.다음 EMP 테이블에서 Oracle로 아래 SQL을 실행한 결과를 순서대로 나열한 것은?
SELECT ENAME FROM (SELECT * FROM EMP ORDER BY SAL DESC) WHERE ROWNUM <= 2;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. KIM, PARK
- 2. KIM, LEE
- 3. PARK, LEE
- 4. JUNG, CHOI
정답·해설 보기
정답: 1번. 인라인 뷰에서 먼저 급여 내림차순으로 정렬한 뒤 ROWNUM을 붙이므로 급여 상위 2명이 나온다. ROWNUM을 정렬과 같은 단계에 쓰면 정렬 전에 행을 고르게 된다.
- 207.다음 EMP 테이블에서 아래 SQL(Oracle 12c 이상)의 결과를 순서대로 나열한 것은?
SELECT ENAME FROM EMP ORDER BY SAL DESC OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY;
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. KANG, CHOI
- 2. LEE, KANG
- 3. CHOI, JUNG
- 4. PARK, LEE
정답·해설 보기
정답: 1번. 급여 내림차순은 KIM(300), PARK(250), LEE(200), KANG(180), CHOI(150), JUNG(100)이다. 앞의 3행을 건너뛰고 다음 2행인 KANG, CHOI가 나온다.
- 208.다음 EMP 테이블에 아래 계층형 질의를 실행하면 몇 행이 나오는가?
SELECT LEVEL, ENAME FROM EMP START WITH MGR IS NULL CONNECT BY PRIOR EMPNO = MGR AND LEVEL <= 2;[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6행
- 2. 4행
- 3. 3행
- 4. 1행
정답·해설 보기
정답: 2번. CONNECT BY 절의 LEVEL <= 2 조건 때문에 2단계까지만 전개한다. 루트 KIM(LEVEL 1)과 KIM의 직속 부하 LEE, PARK, KANG(LEVEL 2)으로 4행이다. 3단계인 CHOI, JUNG은 나오지 않는다.
- 209.Oracle 계층형 질의에서 데이터가 순환 구조(A의 관리자가 B, B의 관리자가 A)여도 오류 없이 전개하려고 CONNECT BY 뒤에 붙이는 키워드는?
- 1. PRIOR
- 2. SIBLINGS
- 3. NOWAIT
- 4. NOCYCLE
정답·해설 보기
정답: 4번. CONNECT BY NOCYCLE을 쓰면 이미 나온 행을 다시 만나도 더 전개하지 않는다. 순환이 일어난 행은 CONNECT_BY_ISCYCLE 값이 1이 된다.
- 210.다음 QT 테이블에 Oracle로 아래 UNPIVOT 질의를 실행하면 몇 행이 나오는가?
SELECT * FROM QT UNPIVOT (V FOR QTR IN (Q1, Q2));
[QT] ID Q1 Q2 1 10 20 2 30 NULL
- 1. 3행
- 2. 2행
- 3. 4행
- 4. 6행
정답·해설 보기
정답: 1번. UNPIVOT은 Q1, Q2 컬럼을 (QTR, V) 행으로 바꿔 원래 4행이 될 수 있다. 하지만 기본값이 EXCLUDE NULLS라 V가 NULL인 (2, Q2)는 빠져 3행이다. INCLUDE NULLS를 쓰면 4행이다.
- 211.REGEXP_COUNT('ABCABCAB', 'AB')의 결과는?
- 1. 2
- 2. 3
- 3. 4
- 4. 8
정답·해설 보기
정답: 2번. REGEXP_COUNT는 패턴이 나타나는 횟수를 센다. 'AB'는 1, 4, 7번째 글자에서 시작해 3번 나온다.
- 212.정규 표현식 '^[0-9]{3}-[0-9]{4}$'와 일치하는 문자열은?
- 1. '12-34567'
- 2. '123-4567'
- 3. '1234-567'
- 4. 'A23-4567'
정답·해설 보기
정답: 2번. ^는 시작, $는 끝, [0-9]{3}은 숫자 정확히 3개다. 숫자 3개, 하이픈, 숫자 4개로만 이루어진 문자열만 일치한다.
DML·TCL·DDL·DCL
- 213.사용자에게 권한을 주거나 회수하는 GRANT, REVOKE 명령의 분류는?
- 1. DDL
- 2. DML
- 3. TCL
- 4. DCL
정답·해설 보기
정답: 4번. DCL(데이터 제어어)은 권한을 관리한다. DDL은 CREATE·ALTER·DROP·TRUNCATE, DML은 SELECT·INSERT·UPDATE·DELETE·MERGE, TCL은 COMMIT·ROLLBACK·SAVEPOINT다.
- 214.Oracle에서 TRUNCATE TABLE에 대한 설명으로 옳은 것은?
- 1. 테이블의 데이터와 구조를 모두 삭제해 테이블이 사라진다
- 2. WHERE 조건을 붙여 원하는 행만 골라 삭제할 수 있다
- 3. DML 명령이므로 커밋 전에는 ROLLBACK으로 되돌릴 수 있다
- 4. 테이블 구조는 남기고 데이터를 모두 지우며, ROLLBACK할 수 없다
정답·해설 보기
정답: 4번. TRUNCATE는 DDL로, 데이터를 모두 지우고 저장 공간을 해제하지만 테이블 구조는 남긴다. DROP은 구조까지 삭제하고, DELETE는 조건으로 일부 행을 지울 수 있으며 ROLLBACK할 수 있다. SQL Server는 명시적 트랜잭션 안의 TRUNCATE를 ROLLBACK할 수 있다.
- 215.빈 테이블 T에 대해 Oracle에서 다음을 차례로 실행했다. 최종적으로 T에 남은 행은 몇 개인가?
INSERT INTO T VALUES (1); SAVEPOINT A; INSERT INTO T VALUES (2); SAVEPOINT B; INSERT INTO T VALUES (3); ROLLBACK TO A; COMMIT;
- 1. 0개
- 2. 1개
- 3. 2개
- 4. 3개
정답·해설 보기
정답: 2번. ROLLBACK TO A는 저장점 A 이후의 작업(2와 3의 입력)을 취소한다. 그 상태로 COMMIT하므로 1만 남는다.
- 216.Oracle에서 INSERT로 한 행을 입력한 뒤 COMMIT 없이 CREATE TABLE 문을 실행하고, 이어서 ROLLBACK을 했다. 앞서 입력한 행은 어떻게 되는가?
- 1. CREATE TABLE 실행 시 자동 커밋되어 입력한 행이 남는다
- 2. ROLLBACK으로 입력이 취소되어 행이 남지 않는다
- 3. CREATE TABLE이 실패하면서 앞의 입력도 함께 취소된다
- 4. 다음 COMMIT을 실행할 때까지 보류 상태로 남는다
정답·해설 보기
정답: 1번. Oracle에서 DDL은 실행 전후에 자동으로 커밋된다. 그래서 앞선 INSERT도 함께 커밋되어 ROLLBACK으로 되돌릴 수 없다. SQL Server는 기본적으로 DDL도 트랜잭션 안에서 롤백할 수 있다.
- 217.테이블 T의 컬럼 C를 삭제하는 SQL은?
- 1. DROP COLUMN C FROM T;
- 2. DELETE C FROM T;
- 3. ALTER TABLE T DELETE C;
- 4. ALTER TABLE T DROP COLUMN C;
정답·해설 보기
정답: 4번. 컬럼 추가·변경·삭제는 ALTER TABLE 문으로 한다. ADD, MODIFY(SQL Server는 ALTER COLUMN), DROP COLUMN, RENAME COLUMN을 쓴다.
- 218.제약조건에 대한 설명으로 옳지 않은 것은?
- 1. PRIMARY KEY는 UNIQUE와 NOT NULL의 성질을 함께 가진다
- 2. PRIMARY KEY는 테이블당 하나만 정의할 수 있다
- 3. FOREIGN KEY는 참조하는 테이블의 기본키나 고유키 값만 가질 수 있다(NULL 제외)
- 4. UNIQUE 제약조건이 걸린 컬럼에는 NULL을 입력할 수 없다
정답·해설 보기
정답: 4번. UNIQUE는 중복 값을 막지만 NULL은 허용한다. NULL까지 막으려면 NOT NULL을 함께 지정해야 하며, 이것이 기본키의 성질이다.
- 219.부모 테이블의 행을 삭제하면 그 행을 참조하는 자식 테이블의 행도 함께 삭제되게 하는 외래키 옵션은?
- 1. ON DELETE SET NULL
- 2. ON DELETE RESTRICT
- 3. ON UPDATE CASCADE
- 4. ON DELETE CASCADE
정답·해설 보기
정답: 4번. CASCADE는 자식 행도 함께 삭제하고, SET NULL은 자식의 외래키 값을 NULL로 바꾸며, RESTRICT(NO ACTION)는 자식이 있으면 부모 삭제를 막는다.
- 220.Oracle에서 대상 테이블에 조건에 맞는 행이 있으면 UPDATE하고, 없으면 INSERT하는 작업을 한 문장으로 처리하는 명령은?
- 1. MERGE
- 2. INSERT ALL
- 3. REPLACE
- 4. ALTER
정답·해설 보기
정답: 1번. MERGE INTO … USING … ON … WHEN MATCHED THEN UPDATE … WHEN NOT MATCHED THEN INSERT … 형태로, 조건에 따라 갱신과 입력을 한 번에 처리한다.
- 221.다음 EMP 테이블에 UPDATE EMP SET SAL = SAL * 1.1 WHERE DEPTNO = 20을 실행하면 몇 행이 변경되는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 6행
- 2. 5행
- 3. 2행
- 4. 1행
정답·해설 보기
정답: 3번. WHERE 조건에 맞는 부서 20의 PARK, CHOI 2행만 변경된다. WHERE 절이 없으면 모든 행이 변경된다.
- 222.뷰(View)에 대한 설명으로 옳지 않은 것은?
- 1. 일반 뷰는 조회 결과 데이터를 별도로 물리적으로 저장한다
- 2. 복잡한 SQL을 단순하게 사용할 수 있게 한다
- 3. 사용자에게 필요한 컬럼만 보여 줘 보안에 도움이 된다
- 4. 기반 테이블 구조가 바뀌어도 응용 프로그램의 영향을 줄일 수 있다
정답·해설 보기
정답: 1번. 일반 뷰는 SQL 정의만 저장하는 가상 테이블로 데이터를 따로 저장하지 않는다. 뷰는 독립성, 편리성, 보안성의 장점이 있다. 결과를 저장하는 것은 머티리얼라이즈드 뷰다.
- 223.빈 EMP_BAK 테이블(EMP와 구조가 같음)에 INSERT INTO EMP_BAK SELECT * FROM EMP WHERE DEPTNO = 10을 실행하면 몇 행이 입력되는가?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1행
- 2. 2행
- 3. 4행
- 4. 6행
정답·해설 보기
정답: 2번. SELECT 결과(부서 10의 KIM, LEE 2행)가 그대로 입력된다. INSERT … SELECT는 VALUES 절 없이 조회 결과를 한꺼번에 넣는다.
- 224.Oracle에서 WHERE 절 없이 DELETE FROM EMP를 실행했을 때의 설명으로 옳은 것은?
- 1. 테이블 구조까지 삭제된다
- 2. 모든 행이 삭제되지만 테이블 구조는 남고, COMMIT 전이면 ROLLBACK으로 되돌릴 수 있다
- 3. WHERE 절이 없어 오류가 발생한다
- 4. 자동 커밋되어 되돌릴 수 없다
정답·해설 보기
정답: 2번. DELETE는 DML이라 COMMIT 전에는 ROLLBACK할 수 있다. 구조까지 삭제하는 것은 DROP, 되돌릴 수 없이 모두 지우는 것은 TRUNCATE다.
- 225.SQL Server의 기본 트랜잭션 처리 방식에 대한 설명으로 옳은 것은?
- 1. 기본적으로 AUTO COMMIT 모드라 DML 문장이 성공하면 바로 커밋된다
- 2. DML 후 반드시 COMMIT을 직접 실행해야 반영된다
- 3. DDL은 항상 ROLLBACK할 수 없다
- 4. 트랜잭션 개념이 없다
정답·해설 보기
정답: 1번. SQL Server는 기본이 AUTO COMMIT이고, BEGIN TRANSACTION으로 명시적 트랜잭션을 시작할 수 있다. Oracle은 DML 후 COMMIT을 해야 반영된다(DDL은 자동 커밋).
- 226.Oracle에서 테이블 T의 컬럼 이름 A를 B로 바꾸는 SQL은?
- 1. ALTER TABLE T RENAME COLUMN A TO B;
- 2. RENAME COLUMN T.A TO B;
- 3. ALTER TABLE T MODIFY A TO B;
- 4. UPDATE T SET COLUMN A = B;
정답·해설 보기
정답: 1번. Oracle은 ALTER TABLE … RENAME COLUMN … TO …를 쓴다. SQL Server는 sp_rename 프로시저를 쓴다.
- 227.ALTER TABLE … MODIFY로 컬럼을 변경할 때의 제약으로 옳은 것은?
- 1. 데이터가 있어도 컬럼 크기를 기존 값보다 작게 자유롭게 줄일 수 있다
- 2. 기본값(DEFAULT)을 바꾸면 기존 행의 값도 모두 바뀐다
- 3. 데이터 타입은 데이터가 있어도 언제나 바꿀 수 있다
- 4. 컬럼에 NULL 값이 있으면 NOT NULL 제약조건으로 바꿀 수 없다
정답·해설 보기
정답: 4번. NOT NULL로 바꾸려면 기존 행에 NULL이 없어야 하고, 크기를 줄이려면 기존 데이터가 새 크기를 넘지 않아야 한다. 기본값 변경은 이후 입력되는 행에만 적용된다.
- 228.Oracle에서 다른 테이블이 외래키로 참조하고 있는 부모 테이블을 참조 제약조건까지 함께 지우며 삭제하는 SQL은?
- 1. DROP TABLE DEPT;
- 2. DELETE FROM DEPT CASCADE;
- 3. TRUNCATE TABLE DEPT CASCADE;
- 4. DROP TABLE DEPT CASCADE CONSTRAINTS;
정답·해설 보기
정답: 4번. 참조되고 있는 테이블은 그냥 DROP하면 오류가 난다. CASCADE CONSTRAINTS를 붙이면 그 테이블을 참조하는 외래키 제약조건도 함께 삭제된다.
- 229.Oracle에서 CREATE TABLE EMP2 AS SELECT * FROM EMP로 테이블을 복제했을 때 EMP2에 함께 복사되는 제약조건은?
- 1. NOT NULL 제약조건만
- 2. PRIMARY KEY와 FOREIGN KEY 모두
- 3. 모든 제약조건
- 4. UNIQUE 제약조건만
정답·해설 보기
정답: 1번. CTAS는 컬럼 구조와 데이터를 복사하지만 제약조건은 명시적으로 지정된 NOT NULL만 복사된다. 기본키·외래키 등은 따로 추가해야 한다(기본키 때문에 생긴 NOT NULL은 복사되지 않는다).
- 230.여러 권한을 하나로 묶어 이름을 붙이고, 사용자에게 한꺼번에 부여·회수할 수 있게 하는 DB 객체는?
- 1. ROLE
- 2. VIEW
- 3. SYNONYM
- 4. SEQUENCE
정답·해설 보기
정답: 1번. ROLE은 권한의 묶음이다. 권한을 ROLE에 부여해 두고 ROLE을 사용자에게 GRANT하면 관리가 쉽다.
- 231.INSERT 문에서 컬럼 목록을 지정하고 일부 컬럼을 생략했을 때, 생략한 컬럼에 저장되는 값은?
- 1. 항상 0
- 2. 항상 공백 문자
- 3. 직전 행의 값
- 4. DEFAULT 값이 정의되어 있으면 그 값, 없으면 NULL
정답·해설 보기
정답: 4번. 생략한 컬럼에는 기본값이 들어가고, 기본값이 없으면 NULL이 들어간다. 그 컬럼이 NOT NULL이면서 기본값이 없으면 오류가 난다.
- 232.빈 테이블 T에 대해 Oracle에서 자동 커밋 없이 다음을 차례로 실행했다. 최종적으로 T에 남은 행은 몇 개인가?
INSERT INTO T VALUES (1); SAVEPOINT A; DELETE FROM T; ROLLBACK TO A; INSERT INTO T VALUES (2); ROLLBACK;
- 1. 3개
- 2. 2개
- 3. 1개
- 4. 0개
정답·해설 보기
정답: 4번. ROLLBACK TO A로 DELETE만 취소되어 1이 다시 남고, 이어서 2를 넣는다. 그런데 마지막의 ROLLBACK은 저장점과 상관없이 마지막 COMMIT 이후 모든 작업을 취소하므로 빈 테이블로 돌아간다.
- 233.다음 MERGE 문을 실행한 뒤 SELECT SUM(V) FROM TGT의 결과는?
[TGT] ID V [SRC] ID V 1 10 2 99 2 20 3 30MERGE INTO TGT T USING SRC S ON (T.ID = S.ID) WHEN MATCHED THEN UPDATE SET T.V = S.V WHEN NOT MATCHED THEN INSERT (ID, V) VALUES (S.ID, S.V);
- 1. 60
- 2. 129
- 3. 159
- 4. 139
정답·해설 보기
정답: 4번. ID 2는 일치하므로 V가 99로 바뀌고, ID 3은 일치하는 행이 없어 새로 입력된다. TGT는 (1, 10), (2, 99), (3, 30)이 되어 합계 139다.
- 234.Oracle에서 서브쿼리가 3행을 반환할 때 다음 INSERT ALL 문으로 입력되는 행은 모두 몇 개인가?
INSERT ALL INTO T_A VALUES (ID, NAME) INTO T_B VALUES (ID, NAME) SELECT ID, NAME FROM SRC;
- 1. 2개
- 2. 3개
- 3. 5개
- 4. 6개
정답·해설 보기
정답: 4번. 조건 없는 INSERT ALL은 서브쿼리의 행마다 모든 INTO 절을 실행한다. 3행 × INTO 2개 = 6개 행이 입력된다(T_A에 3개, T_B에 3개).
- 235.뷰를 통해 데이터를 수정(UPDATE)할 수 없는 경우로 옳은 것은?
- 1. 하나의 테이블에서 일부 컬럼만 선택한 뷰인 경우
- 2. 뷰 정의에 WHERE 조건이 있는 경우
- 3. 뷰의 컬럼에 별칭을 붙인 경우
- 4. 뷰 정의에 GROUP BY와 집계 함수가 포함된 경우
정답·해설 보기
정답: 4번. 집계 함수, GROUP BY, DISTINCT 등이 들어간 뷰는 결과 행이 원본 테이블의 어느 행인지 알 수 없어 수정할 수 없다. 단일 테이블의 일부 컬럼·행만 고른 단순 뷰는 수정할 수 있다.
- 236.뷰를 만들 때 뷰의 WHERE 조건을 벗어나는 데이터로는 그 뷰를 통해 INSERT·UPDATE하지 못하게 막는 옵션은?
- 1. WITH READ ONLY
- 2. OR REPLACE
- 3. WITH CHECK OPTION
- 4. FORCE
정답·해설 보기
정답: 3번. WITH CHECK OPTION은 뷰 조건을 만족하는 데이터만 입력·수정되게 한다. WITH READ ONLY는 뷰를 통한 변경을 모두 막고, OR REPLACE는 같은 이름의 뷰를 바꾸며, FORCE는 기본 테이블이 없어도 뷰를 만든다.
- 237.GRANT SELECT ON EMP TO U1 WITH GRANT OPTION;의 의미로 옳은 것은?
- 1. U1이 EMP의 모든 권한을 받는다
- 2. U1이 EMP 조회 권한을 받지만 다시 부여할 수는 없다
- 3. U1에게서 EMP 조회 권한을 회수한다
- 4. U1이 EMP 조회 권한을 받고, 그 권한을 다른 사용자에게 다시 부여할 수도 있다
정답·해설 보기
정답: 4번. WITH GRANT OPTION을 붙이면 권한을 받은 사용자가 그 권한을 다른 사용자에게 줄 수 있다. 권한 회수는 REVOKE로 한다.
- 238.다음 EMP 테이블에 UPDATE EMP SET SAL = (SELECT MAX(SAL) FROM EMP) WHERE DEPTNO = 30을 실행한 뒤 SELECT SUM(SAL) FROM EMP의 결과는?
[EMP] EMPNO ENAME DEPTNO SAL MGR COMM 1 KIM 10 300 NULL NULL 2 LEE 10 200 1 50 3 PARK 20 250 1 NULL 4 CHOI 20 150 3 30 5 JUNG 30 100 3 NULL 6 KANG NULL 180 1 NULL- 1. 1480
- 2. 1380
- 3. 1280
- 4. 1180
정답·해설 보기
정답: 2번. 서브쿼리로 구한 최고 급여 300이 부서 30의 JUNG에게 들어간다. 원래 합계 1180에서 JUNG의 100이 300으로 바뀌어 1380이다.
- 239.CHECK (SAL > 0) 제약조건만 있는 컬럼 SAL에 NULL을 입력할 때의 결과로 옳은 것은?
- 1. 제약조건 위반 없이 NULL이 그대로 입력된다
- 2. CHECK 제약조건 위반 오류가 발생한다
- 3. NULL 대신 0이 자동으로 입력된다
- 4. NULL 대신 기본값 1이 입력된다
정답·해설 보기
정답: 1번. NULL > 0은 UNKNOWN이다. CHECK 제약은 조건이 FALSE인 값만 거부하고 TRUE나 UNKNOWN은 통과시킨다. NULL을 막으려면 NOT NULL 제약을 함께 걸어야 한다.
- 240.PRIMARY KEY 제약조건에 대한 설명으로 옳지 않은 것은?
- 1. 한 테이블에 여러 개를 만들 수 있다
- 2. 해당 컬럼에 NULL을 입력할 수 없다
- 3. 여러 컬럼을 묶어 하나로 만들 수 있다
- 4. 해당 컬럼의 값은 중복될 수 없다
정답·해설 보기
정답: 1번. 기본키는 UNIQUE와 NOT NULL을 함께 만족하며 테이블당 하나만 만들 수 있다. 여러 컬럼을 묶은 복합 기본키는 가능하다. Oracle은 기본키를 만들면 고유 인덱스를 자동으로 만든다.