본문으로 바로 가기

SQL 개발자 (SQLD) SQL 활용 핵심정리

26년 11월 1일 검사 완료

SQL 활용, 핵심정리

  • 단일행 서브쿼리에는 =·<·> 를, 여러 행이 나오는 서브쿼리에는 IN·ANY·ALL·EXISTS 를 씁니다.
  • UNION 은 중복을 없애고, UNION ALL 은 중복을 그대로 둡니다.
  • ROLLUP(A, B)는 (A, B)·(A)·전체 소계를, CUBE(A, B)는 가능한 모든 조합의 소계를 만듭니다.
  • 같은 값이 있을 때 RANK 는 1·1·3, DENSE_RANK 는 1·1·2, ROW_NUMBER 는 1·2·3 으로 매깁니다.
  • Oracle 의 ROWNUM 은 ORDER BY 보다 먼저 붙으므로 Top N 은 정렬한 인라인 뷰 바깥에서 ROWNUM 을 씁니다.
  • 계층형 질의(Oracle): START WITH 로 시작 행을, CONNECT BY PRIOR 로 부모·자식 방향을 정합니다.
중요도
★★★★★ (5 / 5)
출제 비중
SQL 기본 및 활용 40문항 중 약 16문항 (40%)

서브쿼리(단일행·다중행·상관 서브쿼리), 집합 연산자(UNION·UNION ALL·INTERSECT·MINUS), 그룹 함수(ROLLUP·CUBE·GROUPING SETS), 윈도우 함수, Top N 쿼리, 계층형 질의와 셀프 조인, PIVOT·UNPIVOT, 정규 표현식을 다룹니다.

📖 SQL 활용 개념 정리 더보기 →

SQL 활용 대표 문제 10개

예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 1. WHERE DEPTNO ___ (SELECT DEPTNO FROM DEPT WHERE LOC = '서울') 에서 서브쿼리 결과가 여러 행일 수 있을 때 빈칸에 쓸 연산자로 알맞은 것은?

  1. ① >
  2. ② <>
  3. ③ IN
  4. ④ =
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ③ IN

핵심: 서브쿼리 결과가 여러 행 → IN·ANY·ALL·EXISTS

서브쿼리가 여러 행을 돌려줄 수 있으면 =, >, <> 같은 단일행 비교 연산자를 쓰면 오류가 납니다. 이때는 IN(목록 중 하나와 같음), ANY, ALL, EXISTS 같은 다중행 연산자를 씁니다.

틀린 선지

  • >: 단일행 연산자라 여러 행과 바로 비교할 수 없습니다.
  • <>: 단일행 연산자입니다.
  • =: 서브쿼리가 한 행만 돌려줄 때 쓰는 단일행 연산자입니다. 여러 행이면 오류가 납니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 2. 두 SELECT 결과를 합치면서 중복된 행을 하나만 남기는 집합 연산자는?

  1. ① UNION ALL
  2. ② INTERSECT
  3. ③ UNION
  4. ④ MINUS
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ③ UNION

핵심: UNION=합집합(중복 제거), UNION ALL=중복 그대로

  • UNION: 합집합, 중복 행은 하나만 남김
  • UNION ALL: 합집합, 중복도 그대로 모두
  • INTERSECT: 교집합(양쪽에 다 있는 것)
  • MINUS(Oracle) / EXCEPT: 차집합(앞에만 있는 것)

틀린 선지

  • UNION ALL: 중복을 없애지 않고 모두 보여 줍니다.
  • INTERSECT: 양쪽에 모두 있는 행만 남기는 교집합입니다.
  • MINUS: 앞의 결과에서 뒤의 결과를 뺀 차집합입니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 3. [SCORE 테이블] NAME | PT 가 | 100 나 | 90 다 | 90 라 | 80 SELECT NAME, RANK() OVER (ORDER BY PT DESC) FROM SCORE; 에서 '라'의 순위는?

  1. ① 2
  2. ② 3
  3. ③ 4
  4. ④ 5
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ③ 4

핵심: RANK: 같은 값은 같은 순위, 다음 순위는 건너뜀 (1, 2, 2, 4)

RANK 는 같은 값에 같은 순위를 주고, 그만큼 다음 순위를 건너뜁니다.

  1. 가(100) → 1위
  2. 나(90)·다(90) → 공동 2위
  3. 라(80) → 2위가 두 명이므로 3위를 건너뛰고 4위

틀린 선지

  • 2: 공동 2위인 나·다의 순위입니다.
  • 3: DENSE_RANK 의 결과입니다. RANK 는 공동 순위 수만큼 건너뜁니다.
  • 5: 행이 4개뿐이라 5위는 나올 수 없습니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 4. [A 테이블] X 1 2 2 3 [B 테이블] X 2 3 4 다음 SQL 을 실행하면 몇 행이 나오는가? SELECT X FROM A UNION SELECT X FROM B;

  1. ① 3
  2. ② 4
  3. ③ 6
  4. ④ 7
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ② 4

핵심: UNION 은 합친 뒤 중복 제거, UNION ALL 은 그대로

  1. 두 결과를 합치면: 1, 2, 2, 3, 2, 3, 4 (7행)
  2. UNION 은 중복을 없앰 → 1, 2, 3, 4
  3. 결과 4행

UNION ALL 이었다면 7행입니다.

틀린 선지

  • 3: 4 를 빠뜨린 값입니다. B 에만 있는 4 도 합집합에 들어갑니다.
  • 6: 중복을 일부만 없앤 값입니다.
  • 7: 중복을 없애지 않는 UNION ALL 의 결과입니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 5. [EMP 테이블] EMPNO | ENAME | DEPTNO | SAL | COMM 101 | 김철수 | 10 | 300 | NULL 102 | 이영희 | 20 | 250 | 50 103 | 박민수 | 10 | 400 | 0 104 | 최지은 | 30 | 200 | NULL 105 | 정우성 | NULL | 350 | 100 [DEPT 테이블] DEPTNO | DNAME 10 | 총무 20 | 영업 30 | 개발 40 | 연구 다음 SQL 을 실행하면 몇 행이 나오는가? SELECT D.DNAME FROM DEPT D WHERE NOT EXISTS (SELECT 1 FROM EMP E WHERE E.DEPTNO = D.DEPTNO);

  1. ① 0
  2. ② 1
  3. ③ 2
  4. ④ 3
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ② 1

핵심: NOT EXISTS = 서브쿼리 결과가 한 행도 없을 때 참

EXISTS 는 서브쿼리 결과가 한 행이라도 있으면 참, NOT EXISTS 는 하나도 없으면 참입니다. 서브쿼리는 바깥의 D.DEPTNO 를 쓰는 상관 서브쿼리라 부서마다 따로 확인합니다.

  1. 10, 20, 30: 소속 사원이 있음 → NOT EXISTS 거짓
  2. 40(연구): 소속 사원 없음 → 참

결과 1행 (연구)

틀린 선지

  • 0: 부서 40 에는 사원이 없으므로 NOT EXISTS 가 참이 되어 한 행이 나옵니다.
  • 2: DEPTNO 가 NULL 인 정우성을 따로 센 값입니다. 결과는 DEPT 의 행이므로 정우성은 상관없습니다.
  • 3: 사원이 있는 부서 수로, EXISTS 의 결과입니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 6. [SALES 테이블] REGION | PRODUCT | AMT 서울 | A | 10 서울 | B | 20 부산 | A | 30 부산 | B | 40 다음 SQL 을 실행하면 몇 행이 나오는가? SELECT REGION, PRODUCT, SUM(AMT) FROM SALES GROUP BY ROLLUP(REGION, PRODUCT);

  1. ① 4
  2. ② 6
  3. ③ 7
  4. ④ 9
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ③ 7

핵심: ROLLUP(A, B) = (A, B) + (A) 소계 + 전체 합계

ROLLUP(REGION, PRODUCT) 은 오른쪽부터 하나씩 빼며 묶습니다.

  1. (REGION, PRODUCT): 서울A, 서울B, 부산A, 부산B → 4행
  2. (REGION) 소계: 서울, 부산 → 2행
  3. 전체 합계: 1행

4 + 2 + 1 = 7행

틀린 선지

  • 4: 소계와 전체 합계를 빼고 일반 GROUP BY 만 센 값입니다.
  • 6: 전체 합계 행을 빠뜨린 값입니다.
  • 9: PRODUCT 별 소계(2행)까지 만드는 CUBE 의 결과입니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 7. [SCORE 테이블] NAME | PT 가 | 100 나 | 90 다 | 90 라 | 80 SELECT NAME, DENSE_RANK() OVER (ORDER BY PT DESC) FROM SCORE; 에서 '라'의 순위는?

  1. ① 2
  2. ② 3
  3. ③ 4
  4. ④ 5
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ② 3

핵심: DENSE_RANK: 같은 값은 같은 순위, 다음 순위를 건너뛰지 않음 (1, 2, 2, 3)

DENSE_RANK 는 같은 값에 같은 순위를 주지만 다음 순위를 건너뛰지 않습니다.

  1. 가(100) → 1
  2. 나(90)·다(90) → 2
  3. 라(80) → 바로 다음 순위 3

틀린 선지

  • 2: 공동 2위인 나·다의 순위입니다.
  • 4: RANK 의 결과입니다. DENSE_RANK 는 건너뛰지 않습니다.
  • 5: 행이 4개뿐이라 나올 수 없습니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 8. Oracle 에서 SAL 이 높은 순서로 상위 3명을 바르게 구하는 SQL 은?

  1. ① SELECT * FROM (SELECT * FROM EMP WHERE ROWNUM <= 3) ORDER BY SAL DESC;
  2. ② SELECT * FROM (SELECT * FROM EMP ORDER BY SAL DESC) WHERE ROWNUM <= 3;
  3. ③ SELECT * FROM EMP WHERE ROWNUM <= 3 ORDER BY SAL DESC;
  4. ④ SELECT * FROM EMP WHERE ROWNUM BETWEEN 1 AND 3 ORDER BY SAL;
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ② SELECT * FROM (SELECT * FROM EMP ORDER BY SAL DESC) WHERE ROWNUM <= 3;

핵심: Top N: 인라인 뷰에서 먼저 정렬하고 바깥에서 ROWNUM

ROWNUM 은 ORDER BY 보다 먼저 붙습니다. 그래서 정렬한 결과에서 위 3행을 자르려면 인라인 뷰 안에서 먼저 정렬하고, 바깥에서 ROWNUM <= 3 을 걸어야 합니다.

틀린 선지

  • SELECT * FROM (SELECT * FROM EMP WHERE ROWNUM <= 3) ORDER BY SAL DESC;: 정렬하기 전에 3행을 자르므로 상위 3명이 아닐 수 있습니다.
  • SELECT * FROM EMP WHERE ROWNUM <= 3 ORDER BY SAL DESC;: 아무 3행을 먼저 뽑은 뒤 그 3행만 정렬합니다. 상위 3명이 아닐 수 있습니다.
  • SELECT * FROM EMP WHERE ROWNUM BETWEEN 1 AND 3 ORDER BY SAL;: 역시 먼저 3행을 뽑고, 정렬도 오름차순이라 맞지 않습니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 9. [EMP2 테이블] EMPNO | ENAME | MGR 1 | 대표 | NULL 2 | 김부장 | 1 3 | 이부장 | 1 4 | 박과장 | 2 5 | 최대리 | 4 6 | 정사원 | 3 Oracle 에서 다음 SQL 을 실행하면 몇 행이 나오는가? SELECT LEVEL, ENAME FROM EMP2 START WITH EMPNO = 2 CONNECT BY PRIOR EMPNO = MGR;

  1. ① 2
  2. ② 3
  3. ③ 4
  4. ④ 6
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ② 3

핵심: START WITH 행부터 그 아래 자식만 전개 (형제·상위는 제외)

  1. 시작 행: EMPNO 2 김부장 (LEVEL 1)
  2. PRIOR EMPNO = MGR → MGR 이 2 인 행: 박과장 (LEVEL 2)
  3. MGR 이 4 인 행: 최대리 (LEVEL 3)
  4. MGR 이 5 인 행: 없음 → 끝

결과 3행 (김부장, 박과장, 최대리). 이부장·정사원은 김부장 아래가 아니라 나오지 않습니다.

틀린 선지

  • 2: 시작 행인 김부장을 빼고 센 값입니다. START WITH 행도 결과에 들어갑니다.
  • 4: 대표까지 넣은 값입니다. 대표는 김부장의 위라 순방향 전개에서 나오지 않습니다.
  • 6: 모든 행을 센 값으로, START WITH MGR IS NULL 처럼 대표에서 시작했을 때의 결과입니다.
예상문제검수 완료SQL 기본 및 활용 › SQL 활용★★★★★

문제 10. [A 테이블] X 1 2 2 3 [B 테이블] X 2 3 4 다음 SQL 을 실행하면 몇 행이 나오는가? SELECT X FROM A INTERSECT SELECT X FROM B;

  1. ① 1
  2. ② 2
  3. ③ 3
  4. ④ 4
▼ 정답과 해설 보기▲ 정답과 해설 접기

정답: ② 2

핵심: INTERSECT = 양쪽에 모두 있는 값(중복 제거)

INTERSECT 는 두 결과에 모두 있는 값만 남기고 중복은 없앱니다.

  1. A: 1, 2, 2, 3 / B: 2, 3, 4
  2. 양쪽에 다 있는 값: 2, 3
  3. 결과 2행 (A 에 2 가 두 번 있어도 한 번만)

틀린 선지

  • 1: 2 와 3 가운데 하나만 센 값입니다.
  • 3: A 의 2 를 두 번 센 값입니다. INTERSECT 는 중복을 없앱니다.
  • 4: UNION(합집합)의 결과입니다.

직접 풀어서 확인해 보세요.

AI 작성 · 운영진 검수 전