본문으로 바로가기

2026년을 위한 최고의 SQL 면접 질문 99선과 답변

구직자, 채용 담당자, 리크루터를 위한 필수 SQL 면접 질문과 답변을 한눈에 정리했습니다.
업데이트됨 2026년 4월 30일  · 15분 읽다

SQL 역량을 발휘할 새로운 기회를 찾는 구직자이든, 회사의 채용 공고를 위해 지원자를 평가하려는 채용 담당자이든, 흔히 나오는 SQL 면접 질문과 답변을 아는 것은 필수입니다.

이 글은 2026년 대비 SQL 면접 질문 99선과 답변을 정리했습니다. 준비와 학습, 효과적인 채용에 도움이 되는 핵심 SQL 주제를 다음과 같이 다룹니다.

  • 기초 지식: RDBMS, 키, SQL 방언의 명확한 정의
  • 기술 숙련: DDL vs. DML, 제약 조건, 인덱싱에 대한 심층 설명
  • 쿼리 로직: 조인, 서브쿼리, 집계 함수 설명
  • 실전 적용: n번째 최댓값 찾기, 중복 제거 등 실제 코딩 해법
  • 시나리오 기반 질문: 러닝 합계, 중복 탐지, 갭 분석 등 면접 스타일의 문제

 지식과 기술을 더 향상하고 싶다면, 저희의 종합 과정인 데이터 엔지니어링, 클라우드 기술, AWS를 살펴보세요.

SQL 면접 질문 한눈에 보기

SQL 면접은 대체로 사람들이 실제로 언어를 학습하는 방식과 닮아 있습니다.

초반에는 조인이 무엇인지, SELECT가 어떻게 동작하는지, DDL과 DML의 차이처럼 어휘와 문법이 중심입니다.

익숙해질수록 초점은 "쿼리를 쓸 수 있는가"에서 "올바른 쿼리를 쓸 수 있는가"로 옮겨갑니다. 언제 인덱스가 도움이 되는지, 정규화가 왜 중요한지, 그리고 DELETETRUNCATE 같은 미묘하게 다른 명령이 내부적으로 어떻게 동작하는지 이해하기 시작하죠.

시니어 단계에서는 문법은 이미 전제되며, 진짜 시험대는 문제 해결입니다. 윈도 함수와 CTE로 중복, NULL, 동점, 순위 로직을 다루고, 트랜잭션, 동시성, 성능을 논리적으로 파악하는 능력이 핵심입니다. 

중급 실무자를 위한 체크리스트

  1. SQL의 함수. 집계 함수와 스칼라 함수, 내장 함수와 사용자 정의 함수를 알아두세요.

  2. 고급 명령. 조인, 기본 키와 외래 키, 인덱스, SQL 관계 등이 질문에 포함될 수 있습니다.

  3. 데이터베이스 설계. 정규화와 비정규화, DELETE, TRUNCATE, DROP과 같은 다양한 SQL 문장의 차이에 대비하세요.

  4. 고급 쿼리. 중첩 및 상관 서브쿼리, 열에서 n번째 최댓값 찾기 같은 특정 작업 수행 방법을 물을 수 있습니다.

일반 SQL 면접 질문

기술 질문에 앞서, 면접관은 전반적인 SQL 경험에 대한 일반 질문을 할 수 있습니다.\

SQL 경험이 제한적이어도 걱정하지 마세요. 이는 이력서로 이미 파악했을 가능성이 큽니다. 그럼에도 대화를 진행한다는 것은 귀하의 프로필이 회사에 적합하다고 판단했기 때문입니다. 또, 한 가지 SQL 방언만 다뤄봤어도 괜찮습니다. SQL 방언은 대체로 매우 유사하므로, 하나에 익숙하다면 다른 방언도 충분히 배울 수 있는 탄탄한 기반이 됩니다.

1. SQL이란?

Structured Query Language의 약자로, 관계형 데이터베이스 관리 시스템(RDBMS)과 상호작용하기 위한 프로그래밍 언어입니다. 테이블에서 데이터 가져오기, 갱신, 삽입, 삭제 등을 포함합니다.

2. SQL 방언이란? 예를 들어보세요.

무료 및 유료를 포함한 다양한 SQL 버전을 SQL 방언이라고도 합니다. 모든 SQL 방언은 문법이 매우 비슷하며, 추가 기능에서만 약간 차이가 납니다. 예: Microsoft SQL Server, PostgreSQL, MySQL, SQLite, T-SQL, Oracle.

3. SQL의 주요 활용은?

SQL을 사용하여 다음을 수행할 수 있습니다.

  • 데이터베이스에서 테이블 생성, 삭제, 업데이트
  • 테이블의 데이터 접근, 조작, 수정
  • 하나 또는 여러 테이블에서 필요한 정보 조회 및 요약
  • 테이블에서 특정 행 또는 열 추가/제거

초보자를 위한 SQL 면접 질문 

면접관은 비교적 쉬운 질문부터 시작할 수 있습니다.

4. SQL 문이란?

SQL 명령이라고도 합니다. SQL 엔진이 유효한 명령으로 해석하고 실행하는 문자열입니다. 예: SELECT, CREATE, DELETE, DROP, REVOKE 등.

5. SQL 쿼리란?

데이터베이스의 데이터를 접근하거나 수정하기 위해 SQL로 작성한 코드 조각입니다.

SQL 쿼리는 데이터 조회용과 데이터 수정용 두 가지가 있습니다. 첫 번째는 필요한 데이터를 조회하는 데 사용되며(제한, 그룹화, 정렬, 다중 테이블 추출 등 포함), 두 번째는 데이터 생성, 추가, 삭제, 업데이트, 이름 변경에 사용됩니다.

6. SQL 서브쿼리란?

내부 쿼리라고도 하며, 다른 쿼리(외부 쿼리) 내부에 배치된 쿼리입니다. 서브쿼리는 SELECT, FROM, WHERE, UPDATE 등의 절에 위치할 수 있습니다. 서브쿼리 안에 또 다른 서브쿼리를 둘 수도 있습니다. 가장 안쪽 서브쿼리가 먼저 실행되고, 그 결과가 포함하는 쿼리(또는 서브쿼리)로 전달됩니다.

7. SQL 조인이란?

두 개 이상의 테이블에서 레코드를 결합하여 조회하는 절입니다. SQL 테이블은 해당 테이블의 열 간 관계에 따라 조인할 수 있습니다. 더 자세한 맥락은 SQL 조인 튜토리얼SQL 조인 면접 질문 가이드를 참고하세요. 

8. SQL 주석이란?

특정 코드가 무엇을 하는지에 대한 사람이 읽을 수 있는 설명입니다. SQL 주석은 한 줄 주석(더블 대시 --) 또는 여러 줄 주석(/*comment_text*/)일 수 있습니다. SQL 엔진은 실행 시 주석을 무시합니다. 주석의 목적은 코드를 나중에 읽을 사람들을 위해 더 이해하기 쉽게 만드는 것입니다.

9. SQL 별칭이란?

특정 SQL 쿼리를 실행하는 동안 테이블(또는 테이블의 열)에 임시로 부여하는 이름입니다. 가독성을 높이고 코드를 간결하게 하기 위해 사용하며, AS 키워드로 도입합니다.

SELECT col_1 AS column
FROM table_name;

기술 SQL 면접 질문

이제 기술적 SQL 면접 질문과 이에 대한 몇 가지 가능한 답변으로 넘어가겠습니다.

기술 질문에 답할 때는 최대한 정확하게 답변하는 것이 좋습니다. 불필요한 여담처럼 보일 수 있고, 자신이 덜 자신 있는 추가 질문을 유발할 수도 있습니다.

결국 SQL은 데이터베이스를 여러 방식으로 조회할 수 있게 해 줍니다. 또한 SQL은 Python이나 R 같은 다른 프로그래밍 언어와 쉽게 통합되어 결합된 장점을 활용할 수 있습니다.

10. 알고 있는 SQL 명령 유형은?

  • 데이터 정의어(DDL) – 데이터베이스 구조를 정의하고 수정
  • 데이터 조작어(DML) – 데이터베이스의 데이터를 접근, 조작, 수정
  • 데이터 제어어(DCL) – 데이터베이스 데이터에 대한 사용자 접근을 제어하고 특정 사용자나 사용자 그룹에 권한을 부여/회수
  • 트랜잭션 제어어(TCL) – 데이터베이스의 트랜잭션을 제어
  • 데이터 질의어(DQL) – 데이터베이스에서 필요한 정보를 조회

11. 흔한 SQL 명령 예시는?

  • DDL: CREATE, ALTER TABLE, DROP, TRUNCATE, ADD COLUMN

  • DML: UPDATE, DELETE, INSERT

  • DCL: GRANT, REVOKE

  • TCL: COMMIT, SET TRANSACTION, ROLLBACK, SAVEPOINT

  • DQL:SELECT

12. DBMS란 무엇이며, 어떤 유형이 있나요?

Database Management System의 약자로, 데이터베이스에 저장된 데이터에 대해 접근, 업데이트, 정제, 삽입, 삭제 등의 다양한 작업을 수행하는 소프트웨어 패키지입니다. 관계형, 계층형, 네트워크형, 그래프형, 객체지향형 등 여러 유형이 있으며, 데이터가 시스템에서 어떻게 구성·구조화·저장되는지에 따라 구분됩니다.

13. RDBMS란? 예를 들어보세요.

Relational Database Management System의 약자입니다. 공유 키로 서로 연관된 여러 테이블의 데이터를 다루는 데 가장 흔히 사용되는 DBMS 유형입니다. SQL은 RDBMS와 상호작용하도록 설계된 언어입니다. 예: MySQL, PostgreSQL, Oracle, MariaDB 등.

14. SQL의 테이블과 필드란?

테이블은 관련 데이터를 행과 열의 표 형식으로 체계적으로 저장한 집합입니다. 필드는 테이블의 열을 뜻하는 다른 표현입니다.

15. 알고 있는 SQL 서브쿼리 유형은?

  • 단일 행 – 최대 한 행 반환
  • 다중 행 – 최소 두 행 반환
  • 다중 열 – 최소 두 열 반환
  • 상관 – 외부 쿼리의 정보를 참조하는 서브쿼리
  • 중첩 – 서브쿼리 안의 서브쿼리

16. 제약 조건이란? 왜 사용하나요?

테이블의 각 열에 입력될 수 있는 데이터 유형을 정의하는 조건 집합입니다. 제약 조건은 테이블의 데이터 무결성을 보장하고 바람직하지 않은 동작을 차단합니다.

17. 알고 있는 SQL 제약 조건은?

  • DEFAULT – 열의 기본값 제공

  • UNIQUE – 유일한 값만 허용

  • NOT NULL – NULL 불가

  • PRIMARY KEY – 유일하며 반드시 NULL이 아님(NOT NULL + UNIQUE)

  • FOREIGN KEY – 두 개 이상의 테이블 간 공유 키 제공

18. 알고 있는 조인 유형은?

  • (INNER) JOIN – 양(모든) 테이블에서 정의된 조인 조건을 만족하는 레코드만 반환. 기본 조인

  • LEFT (OUTER) JOIN – 왼쪽 테이블의 모든 레코드와, 오른쪽 테이블에서 조건을 만족하는 레코드 반환

  • RIGHT (OUTER) JOIN – 오른쪽 테이블의 모든 레코드와, 왼쪽 테이블에서 조건을 만족하는 레코드 반환

  • FULL (OUTER) JOIN – 양(모든) 테이블의 모든 레코드 반환. 좌/우 조인의 합으로 볼 수 있음

참고: FULL OUTER JOIN은 PostgreSQL, SQL Server, Oracle, MySQL 8.0 이상에서 지원되지만, MySQL은 UNION 패턴을 통해서만 사용 가능합니다. 한편 SQLite는 RIGHT JOIN을 지원하지 않으며, LEFT JOINUNION을 조합해 에뮬레이션할 수 있습니다.

19. SQL의 기본 키란?

테이블의 열(또는 여러 열) 중 PRIMARY KEY 제약을 적용해 유일하며 NULL이 아닌 값을 보장하는 열입니다. 즉, 기본 키NOT NULLUNIQUE 제약의 조합입니다. 기본 키는 각 레코드를 고유하게 식별합니다.

관련 개념 — 대리 키(Surrogate key): 대리 키는 실제 데이터 값과 무관하게 각 레코드에 부여되는 인공 식별자(일반적으로 순차 정수 또는 UUID)입니다. 자연 키(예: 이메일 주소)와 달리, 비즈니스 데이터가 변경되어도 안정적이므로 운영 DB의 기본 키로 많이 사용됩니다.

 각 테이블은 최대 하나의 PRIMARY KEY(복합 키일 수 있음)를 정의할 수 있습니다. PRIMARY KEY는 강력히 권장되지만 모든 엔진에서 필수는 아닙니다.

20. SQL의 고유 키(UNIQUE key)란?

테이블의 열(또는 여러 열) 중 UNIQUE 제약을 적용해 해당 열의 값이 중복되지 않도록 보장합니다. 단, NULL 값 하나는 허용됩니다.

참고

  • SQL Server: NULL은 필터 인덱스를 사용하지 않는 한 하나만 허용
  • PostgreSQL / Oracle / MySQL: 다수의 NULL 허용(NULL <> NULL로 취급)

21. SQL의 외래 키란? 

테이블의 열(또는 여러 열) 중 FOREIGN KEY(또는 UNIQUE 키) 제약을 적용해, 다른 테이블(들)의 기본 키와 연결하는 열입니다. 외래 키의 목적은 데이터베이스의 여러 테이블을 연결된 상태로 유지하는 것입니다.

22. SQL 인덱스란?

데이터 검색 및 조회 속도를 높이기 위해 테이블의 중요한 부분을 저장하는 특수한 데이터 구조입니다. 특히 대규모 데이터베이스에서 쿼리 성능을 크게 향상시킵니다.

23. 알고 있는 인덱스 유형은?

  • 고유 인덱스 – 열의 중복을 허용하지 않아 데이터 무결성 유지에 도움
  • 클러스터형 인덱스 – 테이블 레코드의 물리적 순서를 정의하고 키 값 기반으로 검색 수행. 테이블당 하나만 가능
  • 비클러스터형 인덱스 – 디스크의 실제 데이터 물리적 순서와 다른 논리 순서를 유지. 데이터와 인덱스가 분리 저장되며, 여러 개 생성 가능

24. 스키마란?

테이블, 저장 프로시저, 인덱스, 함수, 트리거 등 데이터베이스 구조 요소의 모음입니다. 전체 데이터베이스 아키텍처를 나타내고, 데이터베이스의 다양한 객체 간 관계를 명시하며, 접근 권한을 정의합니다. 더 자세한 내용은 데이터베이스 스키마 가이드를 참조하세요.

25. SQL 연산자란?

특정 작업을 수행하기 위해 SQL 쿼리에서 사용하는 예약 문자, 문자 조합 또는 키워드입니다. 보통 WHERE 절과 함께 사용하여 데이터 필터링 조건을 설정합니다.

26. 알고 있는 SQL 연산자 유형은?

  • 산술 (+, -, *, / 등)

  • 비교 (>, <, =, >= 등)

  • 복합 대입 (+=, -=, *=, /= 등)

  • 논리 (AND, OR, NOT, BETWEEN 등)

  • 문자열 (%, _, +, ^ 등)

  • 집합 (UNION, UNION ALL, INTERSECT, MINUS(또는 EXCEPT))

27. 절(clause)이란?

원하는 결과를 얻기 위해 데이터를 필터링하도록 SQL 쿼리에 부여하는 조건입니다. 예: WHERE, LIMIT, HAVING, LIKE, AND, OR, ORDER BY

28. SELECT 쿼리와 함께 자주 쓰는 절은?

가장 흔한 것은 FROM, GROUP BY, JOIN, WHERE, ORDER BY, LIMIT, HAVING입니다.

29. SQL에서 테이블을 어떻게 생성하나요?

CREATE TABLE 문을 사용합니다. 예를 들어, 미리 정의된 데이터 타입의 세 열을 갖는 테이블을 생성하려면 다음 구문을 사용합니다.

CREATE TABLE table_name (col_1 datatype,
                         col_2 datatype,
                         col_3 datatype);

30. 테이블을 어떻게 업데이트하나요?

UPDATE 문을 사용합니다. 구문은 다음과 같습니다.

UPDATE table_name
SET col_1 = value_1, col_2 = value_2
WHERE condition;

31. 데이터베이스에서 테이블을 어떻게 삭제하나요?

DROP TABLE 문을 사용합니다. 구문: DROP TABLE table_name;.

32. 테이블의 레코드 개수를 어떻게 구하나요?

COUNT() 집계 함수를 별표와 함께 사용합니다: SELECT COUNT(*) FROM table_name;.

33. 테이블의 레코드를 어떻게 정렬하나요?

ORDER BY 절을 사용합니다.

SELECT * FROM table_name
ORDER BY col_1;

내림차순이 필요하면 DESC 키워드를 지정합니다. 지정하지 않으면 기본값은 오름차순입니다. 여러 열로 정렬하고 각 열에 대해 오름/내림을 개별 지정할 수도 있습니다. 예:

SELECT * FROM table_name
ORDER BY col_1 DESC, col_3, col_6 DESC;

34. 테이블의 모든 열을 어떻게 선택하나요?

*(애스터리스크)를 SELECT와 함께 사용합니다. 구문: SELECT * FROM table_name;.

35. 두 테이블의 공통 레코드를 어떻게 선택하나요?

다음을 사용합니다: INTERSECT

SELECT col1, col2 FROM table_1
INTERSECT
SELECT col1, col2 FROM table_2;

참고: INTERSECT는 동일한 열 개수와 호환 가능한 타입이 필요합니다.

36. DISTINCT란 무엇이며, 어떻게 사용하나요?

이 절은 SELECT와 함께 사용하여 중복을 제거하고 테이블의 열에서 유일한 값만 반환합니다. 구문:

SELECT DISTINCT col_1
FROM table_name;

37. 관계(relationship)란? 예를 들어보세요.

엔티티 간의 연결과 상관관계를 말하며, 본질적으로 데이터베이스의 두 개 이상 테이블이 서로 어떻게 연관되는지 의미합니다. 예를 들어, 판매 데이터 테이블과 고객 테이블에서 동일한 고객의 ID를 찾을 수 있습니다.

38. NULL 값이란? 0이나 공백과 어떤 차이가 있나요?

NULL 값은 테이블의 특정 셀에 데이터가 없음을 나타냅니다. 반면 0은 유효한 숫자 값이고, 빈 문자열은 길이가 0인 합법적 문자열입니다.

39. SQL과 NoSQL의 차이는?

SQL 데이터베이스는 관계형, 구조화되어 있으며 사전 정의된 스키마의 테이블을 사용합니다. 반면 NoSQL은 비관계형, 스키마리스이며 비정형/반정형 데이터를 처리하도록 설계되었습니다.

40. SQL 데이터베이스 작업 시 흔한 과제는?

대규모 데이터셋 성능 튜닝, 인덱싱 전략 관리, 제약 조건으로 데이터 무결성 보장, 동시 트랜잭션 처리, 쿼리 실행 최적화 등이 있습니다.

중급 SQL 면접 질문

41. 공통 테이블 식(CTE)이란?

공통 테이블 식(CTE)은 SELECT, INSERT, UPDATE, DELETE 문 내에서 참조할 수 있는 임시 이름 결과 집합입니다. CTE는 쿼리 가독성을 높이고 복잡한 쿼리를 더 단순하고 재사용 가능한 부분으로 나눌 수 있게 합니다. 구문은 WITH 키워드를 사용합니다.

WITH sales_summary AS (
  SELECT product_id, SUM(amount) AS total_sales
  FROM sales
  GROUP BY product_id
)
SELECT p.product_name, s.total_sales
FROM products p
JOIN sales_summary s ON p.id = s.product_id
WHERE s.total_sales > 10000;

CTE는 특히 재귀 쿼리(조직도 같은 계층 데이터)와 동일한 서브쿼리를 여러 번 참조해야 할 때 유용합니다.

42. 윈도 함수란 무엇이며, 집계 함수와 어떤 차이가 있나요?

윈도 함수는 현재 행과 관련된 행 집합을 대상으로 계산을 수행하지만, 집계 함수처럼 결과를 단일 행으로 축약하지 않습니다. OVER() 절로 행 창(window)을 정의합니다.

주요 윈도 함수:

  • ROW_NUMBER() – 각 행에 고유한 순번 부여
  • RANK() – 동점에 동일 순위를 부여하되 순위 번호 건너뜀
  • DENSE_RANK() – 동점에 동일 순위를 부여하며 건너뜀 없음
  • LAG() / LEAD() – 이전/다음 행의 데이터 접근
  • SUM() OVER(), AVG() OVER() – 러닝/누적 계산

예: 매출 누적 합계 계산

SELECT 
  order_date,
  amount,
  SUM(amount) OVER (ORDER BY order_date) AS running_total
FROM orders;

43. RANK(), DENSE_RANK(), ROW_NUMBER()의 차이는?

모두 순위 매김 윈도 함수지만 동점을 처리하는 방식이 다릅니다.

  • ROW_NUMBER() – 동점이어도 항상 고유한 순번(1, 2, 3, 4...)
  • RANK() – 동점은 같은 순위, 다음 순번은 건너뜀(1, 2, 2, 4...)
  • DENSE_RANK() – 동점은 같은 순위, 건너뜀 없음(1, 2, 2, 3...)
SELECT 
  name, 
  score,
  ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num,
  RANK() OVER (ORDER BY score DESC) AS rank,
  DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;

동점이 같은 위치를 공유해야 하는 "n번째 최댓값" 구할 때는 DENSE_RANK()를 사용하세요.

이 섹션에서는 가장 인기 있는 중급 SQL 질문과 답변을 살펴봅니다. 어떤 질문이 나올지 감을 잡을 수 있을 것입니다.

44. SQL에서 함수란?

특정 작업에 자주 사용하는 SQL 문 집합을 나타내는 데이터베이스 객체입니다. 함수는 입력 매개변수를 받아 계산이나 조작을 수행하고 결과를 반환합니다. 함수는 가독성을 높이고 같은 코드 조각의 반복을 줄여 줍니다.

45. 알고 있는 SQL 함수 유형은?

  • 집계 함수 – 제공된 열의 다수(보통 그룹) 레코드에 대해 동작하고 단일 값(보통 그룹별)을 반환
  • 스칼라 함수 – 각 개별 값에 대해 동작하고 단일 값을 반환

또한 SQL 함수는 시스템이 정의한 내장 함수와 사용자가 필요에 따라 만든 사용자 정의 함수로 나눌 수 있습니다.

46. 알고 있는 SQL 집계 함수는?

  • AVG() – 평균값 반환

  • SUM() – 합계 반환

  • MIN() – 최솟값 반환

  • MAX() – 최댓값 반환

  • COUNT() – NULL 포함 행 개수 반환

47. 알고 있는 SQL 스칼라 함수는?

  • LEN()(다른 방언에선 LENGTH()) – 공백 포함 문자열 길이 반환

  • UCASE()(다른 방언에선 UPPER()) – 대문자로 변환

  • LCASE()(다른 방언에선 LOWER()) – 소문자로 변환

  • INITCAP() – 타이틀 케이스로 변환(각 단어의 첫 글자를 대문자로)

  • MID()(다른 방언에선 SUBSTR()) – 부분 문자열 추출

  • ROUND() – 지정 소수점 자리로 반올림

  • NOW() – 현재 날짜와 시간 반환

48. SQL의 대소문자 변환 함수란?

문자 함수의 하위 집합으로, 텍스트 데이터의 대소문자를 변경합니다. 대문자, 소문자, 타이틀 케이스로 변환할 수 있습니다.

  • UCASE()(다른 방언에선 UPPER()) – 대문자 변환

  • LCASE()(다른 방언에선 LOWER()) – 소문자 변환

  • INITCAP() – 타이틀 케이스 변환

49. SQL의 문자 조작 함수란?

문자 함수의 하위 집합으로, 텍스트 데이터를 수정하는 데 사용됩니다.

  • CONCAT() – 두 개 이상의 문자열을 연결

  • SUBSTRING()/SUBSTR() – 시작/끝 지점에 맞는 부분 문자열 반환

  • LENGTH()(다른 방언에선 LEN()) – 공백 포함 문자열 길이 반환

  • REPLACE() – 지정된 부분 문자열의 모든 발생을 다른 문자열로 교체

  • INSTR() – 문자열 내 지정된 부분 문자열의 위치 반환

  • LPAD(), RPAD() – 우/좌측 채우기

  • TRIM() – 왼쪽/오른쪽/양쪽 끝의 지정 문자 및 공백 제거

50. 지역 변수와 전역 변수의 차이는?

지역 변수는 선언된 함수 내부에서만 접근할 수 있습니다. 전역 변수는 함수 외부에서 선언되어 고정 메모리 구조에 저장되며 프로그램 전체에서 사용할 수 있습니다.

51. SQL과 PL/SQL의 차이는?

SQL은 관계형 데이터베이스를 질의하고 관리하기 위한 표준 언어로, 주로 데이터 조작과 조회에 사용됩니다. PL/SQL(Procedural Language/SQL)은 Oracle 데이터베이스에서 사용하는 SQL의 확장으로, 루프, 조건문, 예외 처리 같은 절차적 프로그래밍 구문을 포함하여 복잡한 비즈니스 로직을 데이터베이스 내부에 구현할 수 있습니다. Oracle에 대한 지식을 질문받을 예정이라면 참고할 만한 Top 20 PL/SQL Interview Questions and Answers 글도 있습니다. 

52. LEFT JOIN과 LEFT OUTER JOIN의 차이는?

LEFT JOIN과 LEFT OUTER JOIN은 차이가 없습니다. 서로 바꿔 쓸 수 있습니다. SQL에서는 OUTER 키워드가 선택 사항이므로 LEFT JOINLEFT OUTER JOIN의 축약형일 뿐입니다. 둘 다 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 매칭 레코드를 반환합니다.

53. SQL의 인덱싱이란 무엇이며, 성능을 어떻게 개선하나요?

인덱싱은 데이터 검색을 빠르게 하기 위한 특수 데이터 구조를 생성해 데이터베이스가 행을 더 효율적으로 찾도록 합니다. 최적화된 조회표처럼 동작해 전체 테이블 스캔을 줄여 줍니다. 다만 인덱스가 과도하면 인덱스 유지 때문에 INSERT, UPDATE, DELETE가 느려질 수 있습니다.

54. 저장 프로시저란 무엇이며, 함수와 어떻게 다른가요?

저장 프로시저는 작업을 수행하기 위해 하나의 단위로 실행되는 사전 컴파일된 SQL 문 집합입니다. 프로시저는 데이터나 스키마 객체를 수정하고, 트랜잭션을 관리하며, 0개 이상의 결과 집합을 반환할 수 있습니다. 반면 함수는 일반적으로 SQL 식에서 사용되며 값을 반드시 반환(스칼라 또는 테이블 반환)해야 하고, 많은 데이터베이스에서 부작용이 제한됩니다. 데이터베이스별 동작은 다릅니다(예: T-SQL은 스칼라/테이블 반환 함수를 제공, PostgreSQL은 함수와 프로시저를 구분).

55. ORDER BY의 기본 정렬 순서는 무엇이며, 어떻게 변경하나요?

기본은 오름차순입니다(NULLS FIRST/LAST는 DB마다 다름). 열별로 ASC/DESC 키워드를 사용합니다:

SELECT * FROM table_name 
ORDER BY col_1 DESC;

56. SQL 집합 연산자는 무엇인가요?

  • UNION – 두 쿼리 중 하나 이상에서 얻은 레코드 반환(중복 제거)

  • UNION ALL – 두 쿼리 중 하나 이상에서 얻은 레코드 반환(중복 포함)

  • INTERSECT – 두 쿼리 모두에서 얻은 레코드 반환

  • EXCEPT(MySQL, Oracle에서는 MINUS) – 첫 번째 쿼리에서만 얻고 두 번째에는 없는 레코드 반환

57. 패턴 매칭에 사용하는 연산자는?

LIKE 연산자를 %, _ 와일드카드와 함께 사용합니다. %는 0개 이상의 임의 문자, _는 정확히 한 문자를 의미합니다.

58. 기본 키와 고유 키의 차이는?

둘 다 열의 값이 유일함을 보장하지만, 기본 키는 테이블의 각 레코드를 고유하게 식별하고, 고유 키는 해당 열의 중복을 방지합니다.

59. 복합 기본 키란?

여러 열을 기반으로 한 테이블의 기본 키입니다.

60. SELECT 문에서 SQL 절의 일반적 순서는?

SELECTFROMJOINONWHEREGROUP BYHAVINGORDER BYLIMIT

61. 인터프리터가 SELECT 쿼리의 공통 절을 실행하는 순서는?

SQL 실행 순서는 다음과 같습니다. 

FROMONJOINWHEREGROUP BYHAVINGSELECTORDER BYLIMIT/OFFSET (FETCH)

62. SQL의 뷰(view)란?

하나 이상의 테이블(또는 다른 뷰)에서 조회한 데이터의 부분 집합을 담는 가상 테이블입니다. 표준 뷰는 데이터를 저장하지 않고, 구체화 뷰는 데이터를 저장합니다. 뷰는 쿼리를 단순화하고 로직을 캡슐화하며, 권한과 결합해 특정 열/행을 제한할 수 있습니다. 여러 테이블을 조인/집계할 수도 있습니다.

63. 다른 뷰를 기반으로 뷰를 만들 수 있나요?

가능합니다. 이를 중첩 뷰라고도 합니다. 다만 여러 단계로 중첩하는 것은 읽기와 디버깅을 어렵게 하므로 지양하세요.

64. 원본 테이블이 삭제되면 뷰를 계속 사용할 수 있나요?

불가능합니다. 해당 테이블에 기반한 뷰는 무효화됩니다. 그런 뷰를 사용하려 하면 오류가 발생합니다.

65. 알고 있는 SQL 관계 유형은?

  • 일대일 – 한 테이블의 각 레코드가 다른 테이블의 한 레코드에만 대응
  • 일대다 – 한 테이블의 각 레코드가 다른 테이블의 여러 레코드에 대응
  • 다대다 – 양쪽 테이블의 각 레코드가 서로 여러 레코드에 대응

66. BOOLEAN 데이터 필드의 가능한 값은?

PostgreSQL과 같은 일부 방언에서는 BOOLEAN 타입이 명시적으로 존재하며 TRUE, FALSE, NULL 값을 가집니다. Microsoft SQL Server 같은 다른 방언에서는 BIT 타입을 사용해 정수 1(true) 또는 0(false)로 저장합니다.

67. SQL의 정규화란?

정규화는 데이터 중복, 종속성, 중첩, 불일치를 줄이도록 데이터를 조직·재구성하는 데이터베이스 설계 과정입니다. 이를 통해 데이터 무결성이 향상되고, 데이터베이스 내 테이블 수가 늘어나며, 데이터 접근과 보안 제어가 효율적이고, 쿼리 유연성이 커집니다.

68. SQL의 비정규화란?

비정규화는 정규화의 반대 과정으로, 데이터 중복을 도입하고 여러 테이블의 데이터를 결합합니다. 쓰기보다 읽기가 중요한 상황에서 조인 복잡도를 줄이고 쿼리 시간을 단축해 성능을 최적화합니다.

69. 열의 이름 변경과 별칭 부여의 차이는?

열 이름 변경은 원본 테이블에서 실제 이름을 영구적으로 바꾸는 것입니다. 별칭은 SQL 쿼리 실행 동안 일시적으로 이름을 부여해 코드를 더 읽기 쉽고 간결하게 만듭니다.

70. 중첩 서브쿼리와 상관 서브쿼리의 차이는?

상관 서브쿼리는 외부 쿼리의 값을 참조하여 실행되는 내부 쿼리로, 외부 쿼리에 의존합니다. 비상관 서브쿼리는 외부 쿼리의 데이터에 의존하지 않으며 독립적으로 실행될 수 있습니다.

71. 클러스터형과 비클러스터형 인덱스의 차이는?

클러스터형 인덱스는 테이블의 레코드 물리적 순서를 정의하고 키 값 기반으로 검색합니다. 비클러스터형 인덱스는 디스크의 실제 데이터 물리적 순서와 다른 논리 순서를 유지합니다. 클러스터형은 테이블당 하나, 비클러스터형은 여러 개 만들 수 있습니다.

72. CASE() 함수란?

SQL에서 if-then-else 로직을 구현하는 방법입니다. WHEN 절의 조건을 순차적으로 검사하여 처음 만족하는 조건의 THEN 값을 반환합니다. 어떤 조건도 만족하지 않으면 ELSE 값이 지정된 경우 그 값을, 없으면 NULL을 반환합니다. 구문:

CASE
    WHEN condition_1 THEN value_1
    WHEN condition_2 THEN value_2
    WHEN condition_3 THEN value_3
    ...
    ELSE value
END;

73. DELETE와 TRUNCATE의 차이는?

DELETE는 DML(데이터 조작어) 명령으로, WHERE 절의 조건에 따라 한 행 이상을 삭제합니다. 트랜잭션으로 감싸지면(ROLLBACK) 되돌릴 수 있습니다.

TRUNCATE는 DDL(데이터 정의어) 명령으로, 페이지 할당을 해제하여 테이블의 모든 행을 제거합니다. 더 빠르지만 일반적으로 되돌릴 수 없고, 외래 키로 참조되는 테이블에는 사용할 수 없습니다.

74. DROP과 TRUNCATE의 차이는?

DROP은 테이블 구조와 관련 제약, 다른 테이블과의 관계, 접근 권한까지 포함하여 데이터베이스에서 테이블을 완전히 삭제합니다. TRUNCATE는 테이블 구조와 제약은 유지한 채 모든 행을 삭제합니다.  둘 다 DDL입니다. DROP은 테이블과 메타데이터를 제거하고, TRUNCATE는 모든 행만 삭제하며 테이블 정의는 유지합니다. 성능과 트랜잭션 동작은 DB 엔진에 따라 다릅니다.

75. HAVING과 WHERE의 차이는?

HAVING은 그룹화된 집계 결과에 대해 동작하고, WHERE는 각 행을 개별적으로 검사합니다. 둘 다 포함될 때 순서는 WHEREGROUP BYHAVING 이며, SQL 엔진도 같은 순서로 해석합니다.

76. 테이블에 레코드를 어떻게 추가하나요?

INSERT INTO VALUES를 사용합니다. 구문:

INSERT INTO table_name
VALUES (value_1, value_2, ...);

77. 테이블에서 레코드를 어떻게 삭제하나요?

DELETE 문을 사용합니다. 구문:

DELETE FROM table_name
WHERE condition;

이 방식으로 조건을 만족하는 여러 레코드를 한 번에 삭제할 수 있습니다.

78. 테이블에 열을 어떻게 추가하나요?

ALTER TABLEADD를 사용합니다. 구문:

ALTER TABLE table_name
ADD column_name datatype;

79. 테이블 열의 이름을 어떻게 바꾸나요?

ALTER TABLERENAME COLUMN ... TO ...를 사용합니다. 구문:

ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;

80. 테이블에서 열을 어떻게 삭제하나요?

ALTER TABLEDROP COLUMN을 사용합니다. 구문:

ALTER TABLE table_name
DROP COLUMN column_name;

81. 테이블에서 짝수 또는 홀수 레코드만 선택하려면?

2로 나눈 나머지를 확인합니다. PostgreSQL과 MySQL 등에서는 MOD 함수를, Microsoft SQL Server와 SQLite 등에서는 나머지 연산자(%)를 사용합니다. MOD로 짝수 레코드 선택:

SELECT * FROM table_name
WHERE MOD(ID_column, 2) = 0;

%로 짝수 레코드 선택:

SELECT * FROM table_name 
WHERE ID_column % 2 = 0;

홀수 레코드는 두 경우 모두 동일하며, 비교 연산자를 <>로 바꾸면 됩니다.

82. 쿼리 시 중복 레코드를 어떻게 방지하나요?

SELECT와 함께 DISTINCT를 사용하거나, 해당 테이블에 고유 키를 생성합니다.

83. 테이블에 여러 행을 어떻게 삽입하나요?

INSERT INTOVALUES를 사용합니다. 구문:

INSERT INTO table_name
VALUES (value_1, value_2, ...),
      (value_3, value_4, ...),
      (value_5, value_6, ...),
      ...;

84. 테이블 열에서 n번째 최댓값을 어떻게 찾나요?

동점을 올바르게 처리하려면 윈도 함수를 사용합니다.

SELECT column_name
FROM (
  SELECT column_name, DENSE_RANK() OVER (ORDER BY column_name DESC) AS rnk
  FROM table_name
) t
WHERE rnk = :n;

행 번호 기준 n번째(동점 무시): ORDER BY column_name DESC OFFSET n-1 ROWS FETCH NEXT 1 ROW ONLY.

85. 특정 문자로 시작하는 텍스트 열 값을 어떻게 찾나요?

LIKE 연산자를 %, _ 와일드카드와 함께 사용합니다. 예를 들어 성이 "A"로 시작하는 모든 레코드를 찾으려면:

SELECT * FROM table_name
WHERE surname LIKE 'A_';

성이 최소 두 글자라는 가정입니다. 한 글자 성(A)도 허용한다면 다음과 같습니다.

SELECT * FROM table_name
WHERE surname LIKE 'A%';

86. 테이블에서 마지막 id를 어떻게 찾나요?

가장 간단한 방법은 집계 함수 MAX()를 사용하는 것입니다.

SELECT MAX(id) AS highest_id
FROM table_name;

ORDER BYLIMIT 또는 TOP을 사용하는 방법

SELECT id
FROM table_name
ORDER BY id DESC
LIMIT 1;

87. 테이블에서 무작위 행을 어떻게 선택하나요?

RAND() 함수와 ORDER BY, LIMIT를 사용합니다. PostgreSQL 등 일부 방언에서는 RANDOM()라고 부릅니다. 예를 들어 MySQL에서 임의 5행을 반환하려면:

SELECT * FROM table_name
ORDER BY RAND()
LIMIT 5;

시나리오 기반 SQL 면접 질문

시나리오 기반 질문은 SQL로 실제 비즈니스 문제를 해결하는 능력을 평가합니다. 면접관은 문법 지식뿐 아니라 문제 해결 접근 방식과 중복, NULL, 동점 같은 엣지 케이스 처리 능력을 함께 봅니다.

88. 테이블에서 중복 레코드를 찾고 제거하려면?

중복 찾기:

SELECT email, COUNT(*) AS duplicate_count
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

중복 제거(한 건만 유지):

WITH duplicates AS (
  SELECT id, 
         ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
  FROM users
)
DELETE FROM users 
WHERE id IN (SELECT id FROM duplicates WHERE rn > 1);

이 방법은 ROW_NUMBER()가 있는 CTE로 중복을 식별하고, 가장 낮은 ID를 가진 레코드를 유지합니다.

89. 누적 합계(러닝 토탈)를 어떻게 계산하나요?

ORDER BY와 함께 SUM() 윈도 함수를 사용합니다.

SELECT 
  transaction_date,
  amount,
  SUM(amount) OVER (ORDER BY transaction_date) AS running_total
FROM transactions;

카테고리별(예: 고객별) 누적 합계:

SELECT 
  customer_id,
  transaction_date,
  amount,
  SUM(amount) OVER (
    PARTITION BY customer_id 
    ORDER BY transaction_date
  ) AS customer_running_total
FROM transactions;

90. 부서 평균보다 급여가 높은 직원을 찾으려면?

고전적인 상관 서브쿼리 예시입니다.

SELECT e.name, e.department, e.salary
FROM employees e
WHERE e.salary > (
  SELECT AVG(salary) 
  FROM employees 
  WHERE department = e.department
);

또는 윈도 함수를 사용:

SELECT name, department, salary
FROM (
  SELECT 
    name, 
    department, 
    salary,
    AVG(salary) OVER (PARTITION BY department) AS dept_avg
  FROM employees
) t
WHERE salary > dept_avg;

91. 숫자 시퀀스의 누락 구간(예: 빠진 청구서 번호)을 찾으려면?

LEAD()로 각 값과 다음 값을 비교합니다.

SELECT 
  invoice_number,
  LEAD(invoice_number) OVER (ORDER BY invoice_number) AS next_invoice,
  LEAD(invoice_number) OVER (ORDER BY invoice_number) - invoice_number - 1 AS gap_size
FROM invoices
WHERE LEAD(invoice_number) OVER (ORDER BY invoice_number) - invoice_number > 1;

연속 값 사이의 차이가 1보다 큰 지점을 식별합니다.

92. 연속된 달에 구매한 고객을 찾으려면?

LAG()로 직전 행과 비교합니다.

WITH monthly_purchases AS (
  SELECT 
    customer_id,
    DATE_TRUNC('month', purchase_date) AS purchase_month,
    LAG(DATE_TRUNC('month', purchase_date)) OVER (
      PARTITION BY customer_id 
      ORDER BY DATE_TRUNC('month', purchase_date)
    ) AS prev_month
  FROM purchases
  GROUP BY customer_id, DATE_TRUNC('month', purchase_date)
)
SELECT DISTINCT customer_id
FROM monthly_purchases
WHERE purchase_month = prev_month + INTERVAL '1 month';

93. 행을 열로 피벗하려면?

CASE와 조건부 집계를 사용합니다.

SELECT 
  product_name,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 1 THEN amount ELSE 0 END) AS jan_sales,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 2 THEN amount ELSE 0 END) AS feb_sales,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 3 THEN amount ELSE 0 END) AS mar_sales
FROM sales
GROUP BY product_name;

일부 데이터베이스(SQL Server, Oracle)에는 이 작업을 위한 기본 PIVOT 구문이 있습니다.

94. 카테고리별 매출 상위 3개 제품을 찾으려면?

DENSE_RANK()PARTITION BY를 사용합니다.

WITH ranked_products AS (
  SELECT 
    category,
    product_name,
    SUM(sales_amount) AS total_sales,
    DENSE_RANK() OVER (
      PARTITION BY category 
      ORDER BY SUM(sales_amount) DESC
    ) AS sales_rank
  FROM sales
  GROUP BY category, product_name
)
SELECT category, product_name, total_sales
FROM ranked_products
WHERE sales_rank <= 3
ORDER BY category, sales_rank;

95. 데이터베이스 트랜잭션의 ACID 특성이란?

ACID는 신뢰할 수 있는 데이터베이스 트랜잭션을 보장하는 네 가지 핵심 특성의 약자입니다.

  • 원자성(Atomicity): 트랜잭션은 전부 수행되거나 전혀 수행되지 않음
  • 일관성(Consistency): 트랜잭션은 정의된 규칙과 제약을 유지하며 DB를 한 유효 상태에서 다른 유효 상태로 전환
  • 격리성(Isolation): 동시 트랜잭션이 서로 간섭하지 않으며 각 트랜잭션은 일관된 스냅샷을 봄
  • 지속성(Durability): 커밋된 트랜잭션의 변경사항은 시스템 장애가 발생해도 유지

예시 트랜잭션:

BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT;

96. 교착 상태(데드락)란 무엇이며, 어떻게 예방하나요?

두 개 이상의 트랜잭션이 서로가 보유한 락의 해제를 기다리며 순환 의존이 생겨 아무도 진행하지 못하는 상태입니다.

예시 시나리오: 트랜잭션 A는 테이블 X를 잠그고 Y를 기다리는 동안, 트랜잭션 B는 테이블 Y를 잠그고 X를 기다립니다.

예방 전략:

  • 일관된 락 획득 순서: 모든 트랜잭션에서 동일한 순서로 락을 획득
  • 트랜잭션을 짧게: 가능한 빨리 커밋 또는 롤백
  • 적절한 격리 수준: 낮은 격리 수준은 락 경합을 줄임
  • 필요한 데이터만 접근: 불필요한 행 잠금 피하기
  • 재시도 처리: 대부분의 DB는 데드락을 자동 감지하여 한 트랜잭션을 롤백

97. 느린 SQL 쿼리를 어떻게 최적화하나요?

핵심 최적화 전략:

  • 적절한 인덱스 추가: WHERE, JOIN, ORDER BY에 사용된 열에 인덱스 생성

  • 실행 계획 분석: 병목을 찾기 위해 EXPLAIN(PostgreSQL/MySQL) 또는 EXPLAIN PLAN(Oracle) 사용

  • SELECT * 지양: 필요한 열만 조회

  • 서브쿼리 대신 JOIN: 상관 서브쿼리보다 JOIN이 더 효율적인 경우가 많음

  • 결과 제한: 모든 행이 필요 없다면 LIMIT/TOP 사용

  • 인덱스 열에 함수 사용 회피: WHERE YEAR(date_col) = 2026은 인덱스를 사용하지 못할 수 있음. WHERE date_col >= '2026-01-01'처럼 작성

  • 파티셔닝 고려: 매우 큰 테이블은 날짜나 카테고리로 파티션

98. 계산과 비교에서 NULL을 어떻게 처리하나요?

NULL은 누락되었거나 알 수 없는 데이터를 의미하므로 특별한 처리가 필요합니다.

  • 비교: = NULL 대신 IS NULL 또는 IS NOT NULL 사용

  • COALESCE(): 첫 번째 NULL이 아닌 값을 반환: COALESCE(column, 'default')

  • NULLIF(): 두 값이 같으면 NULL 반환: NULLIF(a, b)

  • ISNULL() / NVL(): DB별 NULL 대체 함수

SELECT 
  name,
  COALESCE(phone, email, 'No contact') AS contact_info,
  CASE WHEN status IS NULL THEN 'Unknown' ELSE status END AS status
FROM customers;

99. 사용자의 연속 로그인 최장 기간을 어떻게 찾나요?

고급 "섬과 간극" 문제입니다.

WITH login_groups AS (
  SELECT 
    user_id,
    login_date,
    login_date - ROW_NUMBER() OVER (
      PARTITION BY user_id 
      ORDER BY login_date
    ) * INTERVAL '1 day' AS group_id
  FROM user_logins
)
SELECT 
  user_id,
  MIN(login_date) AS streak_start,
  MAX(login_date) AS streak_end,
  COUNT(*) AS streak_length
FROM login_groups
GROUP BY user_id, group_id
ORDER BY streak_length DESC
LIMIT 1;

핵심은 각 날짜에서 행 번호를 빼는 것으로, 연속 날짜는 동일한 "group_id"를 생성합니다.

팀의 SQL 역량 강화

SQL 면접 준비는 구직자와 채용 담당자 모두에게 중요하지만, 기업이 팀을 위한 지속적인 SQL 교육에 투자하는 것 또한 중요합니다. 데이터와 함께 일하는 능력은 그 어느 때보다 중요하며, 직원들이 탄탄한 SQL 역량을 갖추면 회사의 성공에 큰 차이를 만들 수 있습니다.

팀장이나 사업주로서 팀 전체의 SQL 숙련도를 보장하고 싶다면, DataCamp for Business는 기초부터 고급까지 SQL 역량을 마스터하도록 돕는 맞춤형 교육 프로그램을 제공합니다. 다음을 제공할 수 있습니다.

  • 맞춤형 학습 경로: 팀의 현재 수준과 비즈니스 요구에 맞게 조정
  • 실습 중심 학습: 학습을 강화하고 기억을 돕는 실전 시나리오와 연습 문제
  • 진도 추적: 팀의 학습 목표 달성 여부를 모니터링하고 평가하는 도구

DataCamp 같은 플랫폼을 통한 SQL 업스킬링은 팀의 역량을 높일 뿐 아니라, 경쟁력을 유지하고 성과를 내는 데 필요한 전략적 우위를 제공합니다. 저희 팀과 상담하시고 지금 데모를 요청하세요. 

마무리

요약하면, 초급·중급·시나리오 기반의 필수 SQL 면접 질문 99선과 정답을 살펴봤습니다. 이 정보가 면접 준비에 도움이 되어, SQL 관련 직무를 찾거나 중급 SQL 포지션 채용을 진행할 때 더 자신감을 가질 수 있기를 바랍니다.

면접 준비에 더 많은 훈련이 필요하다고 느낀다면, 전체 SQL 과정 목록을 살펴보세요.

FAQs

SQL은 어떻게 시작하나요?

SQL을 시작하려면 데이터베이스 개념과 관계형 데이터베이스 관리 시스템의 기초부터 학습하세요. DataCamp에는 Introduction to SQL 과정, Data Analyst in SQL 커리어 트랙, SQL 치트시트 등 시작을 돕는 다양한 자료가 있습니다. 또는 SQL 과정 페이지에서 전체 리소스를 둘러보세요.

실무형 SQL 문제는 어디에서 연습할 수 있나요?

DataCamp 플랫폼에는 모든 수준에 맞는 SQL 프로젝트가 다수 있어 실력을 갈고닦을 수 있습니다.

초보자에게 흔한 SQL 면접 질문은 무엇인가요?

초보자는 흔히 SELECTINSERT 문의 차이, 데이터베이스에서 키(기본 키와 외래 키)의 목적, WHERE 절을 사용해 단일 테이블에서 조건부로 데이터를 조회하는 간단한 쿼리 등 기본 개념을 설명하도록 요구받습니다.

중급 실무자에게 흔한 SQL 면접 질문은 무엇인가요?

중급 실무자는 INNER, LEFT, RIGHT, FULL 조인, 서브쿼리, 집계와 데이터 그룹화(GROUP BY), 그리고 UNION, INTERSECT, EXCEPT 같은 집합 연산 사용 등 더 복잡한 개념에 대한 질문을 받을 수 있습니다. 또한 성능 최적화가 필요한 문제를 해결하도록 요청받을 수 있습니다.

SQL 면접은 어떻게 준비해야 하나요?

SQL 면접 준비 시 다음을 권장합니다.

  • SQL 기초와 고급 개념 복습
  • 일반 문제를 해결하는 쿼리 작성 연습
  • 데이터베이스 설계와 정규화 이해
  • 지원 기업이 사용하는 특정 SQL 방언(PostgreSQL, MySQL, SQL Server 등) 익히기
  • 온라인에 공개된 샘플 면접 질문과 문제 풀이

기술 SQL 면접에서 무엇을 기대할 수 있으며, 어떻게 역량을 가장 잘 보여줄 수 있나요?

기술 SQL 면접에서는 SQL 문법, 데이터베이스 설계, 쿼리 최적화, SQL로 문제를 해결하는 능력을 평가하는 질문이 나옵니다. 역량을 보여주려면 다음을 권장합니다.

  • SQL 문제를 푸는 사고 과정을 설명하는 연습
  • 화이트보드 또는 온라인 환경에서 오류 없는 SQL 작성 준비
  • 조인, 서브쿼리, 트랜잭션 같은 복잡한 개념을 예시로 설명
  • 데이터베이스 실무 경험이 있다면 해결한 과제나 수행한 최적화를 강조

특정 SQL 방언을 배우는 것이 얼마나 중요하며, 어떤 방언에 집중해야 하나요?

SQL의 핵심 문법은 다양한 RDBMS에서 일관적이지만, 각 시스템(MySQL, PostgreSQL, SQL Server, Oracle)은 고유의 기능과 함수를 갖춘 방언을 제공합니다. 특정 RDBMS를 사용하는 역할을 목표로 한다면 해당 방언 학습이 중요합니다. 본인의 커리어 목표나 업계에서 가장 흔히 사용하는 방언에 집중하세요. 다만 표준 SQL에 대한 탄탄한 기초가 있다면 필요할 때 다른 방언으로 쉽게 적응할 수 있습니다.

SQL 면접 대비를 위한 무료 리소스가 더 있나요?

예! 현재 대학의 교사나 학생이라면 DataCamp Classrooms를 통해 전체 프리미엄 카탈로그를 무료로 이용할 수 있습니다. SQL 트랙과 인증도 포함됩니다.

또한 무료 SQL Basics 치트시트도 확인해 보세요.

2026년 면접을 위해 가장 중요한 SQL 학습 주제는?

다음 핵심 영역에 집중하세요. (1) 조인과 서브쿼리 – INNER, LEFT, RIGHT, FULL 조인과 상관/비상관 서브쿼리; (2) 윈도 함수 – ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, 러닝 토탈; (3) CTE(Common Table Expressions) – 읽기 쉽고 유지보수 가능한 쿼리; (4) 집계와 GROUP BY – HAVING 절 포함; (5) 쿼리 최적화 – 인덱싱 전략과 실행 계획.

ROW_NUMBER, RANK, DENSE_RANK의 차이는?

세 함수 모두 순위 매김 윈도 함수지만 동점 처리가 다릅니다. ROW_NUMBER()는 동점이어도 고유한 연속 번호를 부여(1, 2, 3, 4), RANK()는 동점에 같은 순위를 주되 다음 번호를 건너뜀(1, 2, 2, 4), DENSE_RANK()는 동점에 같은 순위를 주며 건너뜀이 없음(1, 2, 2, 3). 동점이 같은 위치를 공유해야 하는 "n번째 최댓값"에는 DENSE_RANK를 사용하세요.

주제

이 과정들로 SQL을 더 알아보세요!

courses

SQL에서의 데이터 조작

4
318.1K
포스트그레SQL에서 다양한 데이터 과학 질문에 답하고 분석을 위한 견고한 데이터 세트를 준비하는 데 필요한 복잡한 SQL 쿼리를 숙달하십시오.
자세히 보기Right Arrow
강좌 시작
더 보기Right Arrow