개주 훈련일지/🎰 SQLD 준비

SQLD SQL 기본

lshfood2 2026. 2. 15. 23:44

[ SQL 기본 ]

SQLD에서 SQL 파트는 결국 2가지를 묻는다. 

  1. 문법(키워드/형태)을 정확히 아는가
  2. 처리 순서와 예외 규칙(함정 포인트)을 이해했는가

특히 SELECT 처리 순서(FWG HSO),

별칭(ALIAS) 규칙, NULL 처리,

집계함수 + GROUP BY/HAVING,

ORDER BY에서 많이 걸린다.


1. 관계형 데이터베이스 개요

DBMS (DataBase Management System)

  1. 데이터베이스를 관리 및
    접근하기 위한 환경을 제공하는 시스템
  2. RDBMS (Relational DBMS)
  • 데이터를 테이블 형태로 저장하고,
    테이블 간 관계(PK, FK)를 활용해 관리하는 데이터베이스
  • 1970년 IBM의 Edgar F. Codd가 처음 제안한 모델

대표적인 RDBMS

  • ORACLE, SQL SERVER, MYSQL, POSTGRESQL 등
  • 시험은 주로 ORACLE 중심이고,
    SQL SERVER도 간간히 등장

기본 용어

  • 속성 = COLUMN = FIELD
  • 튜플 = ROW = RECORD
  • 컬럼 헤더 = 컬럼 이름이 표시되는 부분(조회 결과의 헤더)

2. SQL이란

SQL (Structured Query Language)

RDBMS에서 데이터를 생성(CREATE), 조회(SELECT),
수정(UPDATE), 삭제(DELETE)하기 위한 표준 언어

 

SQL 분류

1) DDL (Data Definition Language)
: 구조(테이블) 정의

  • CREATE, ALTER, DROP, RENAME, TRUNCATE

2) DML (Data Manipulation Language)
: 데이터 조작

  • SELECT, INSERT, UPDATE, DELETE

3) DCL (Data Control Language)
: 권한 제어

  • GRANT, REVOKE

4) TCL (Transaction Control Language)
: 트랜잭션 제어

  • COMMIT, ROLLBACK, SAVEPOINT

SQL은 언어라서 문제 유형이 거의 고정이다.

  • 단어/문법 암기
  • SQL ↔ 한글 치환(해석, 빈칸, 문법 오류 찾기)

3. 관계대수 연산자(이론 베이스)

관계대수는 SQL의 이론적 기초가 되는 수학적 언어다.

 

1) 단항 연산자

  • SELECTION(셀렉션): 행 선택(조건 필터)
  • PROJECTION(프로젝션): 열 선택(컬럼 선택)

2) 이항 연산자(집합 연산)

  • UNION (유니온)
  • INTERSECT (인터섹트)
  • DIFFERENCE(차집합)
    • ORACLE: MINUS
    • SQL SERVER: EXCEPT
  • CARTESIAN PRODUCT(카테시안 곱)
    • SQL에서는 CROSS JOIN으로 등장

3) 조인 연산자

  • JOIN (INNER JOIN, OUTER JOIN 등)

시험에서는 한글로 개념을 던져도,

SQL 키워드 형태로 바꿔서 고르는 경우가 많다.

  • 유니온
    → UNION
  • 인터섹트
    → INTERSECT
  • 차집합
    → MINUS(ORACLE) / EXCEPT(SQL SERVER)
  • 카테시안
    → CROSS JOIN

4. SELECT 문

SELECT는 데이터베이스에서

데이터를 조회할 때  사용하는

가장 기본적인 명령어다.

 

4-1. SELECT 구조(절의 구성)

  • FROM: 어떤 테이블에서 가져올지
  • WHERE: 조건에 맞는 행(ROW) 필터링
  • GROUP BY: 데이터를 그룹으로 묶기
  • HAVING: 그룹에 대한 조건 필터링
  • SELECT: 조회할 컬럼 선택
  • ORDER BY: 정렬 기준

4-2. 처리 순서(진짜 핵심)

공격수가 해써오!
FWG HSO

 

FROM → WHERE → GROUP BY

HAVING → SELECT → ORDER BY

이 순서를 외워야 함정이 정리된다.

  • WHERE는 SELECT보다 먼저 수행된다
    → WHERE에서 SELECT 별칭 사용 불가
  • 집계는 GROUP BY 이후에 의미가 생긴다
    → WHERE에서 집계함수 사용 불가, HAVING에서 가능
  • ORDER BY는 마지막
    → SELECT 별칭 사용 가능

4-3. SELECT DISTINCT

조회 결과에서 중복 행을 제거하고

유일한 값만 남긴다.

 

예시

SELECT DISTINCT DEPT
FROM EMP;

5. 별칭(ALIAS)

별칭은 조회 결과의 컬럼 헤더를

바꿔서 보여주는 기능이다.

 

예시

SELECT STUDENT_NO AS ID
FROM STUDENT;

 

별칭 주의 사항

  • AS는 생략 가능, FROM절의 테이블에도 별칭 지정 가능
  • 숫자나 특수문자만으로 별칭 구성은 불가
    (시험에서는 보통 불가로 처리)
  • 예약어 사용 금지
    (SELECT 같은 SQL 키워드)
  • 공백/특수문자 포함 별칭은 DBMS에서
    따로 인용 처리가 필요할 수 있음
  • 쌍따옴표 없이 사용 가능한 특수문자는
    보통 _, $, # 정도를 예로 든다

가장 많이 나오는 함정

  • WHERE절은 SELECT보다 먼저 수행되므로
    SELECT에서 만든 별칭을 WHERE에서 사용할 수 없다

틀리는 예시(문법 문제 단골)

SELECT STUDENT_NO AS ID
FROM STUDENT
WHERE ID = 101;

6. 문자열 연결(CONCAT)

문자열을 이어 붙이는 방식은 DBMS마다 자주 비교된다.

  • ORACLE: ||
  • SQL SERVER: +

예시(ORACLE)

SELECT LAST_NAME || FIRST_NAME AS FULL_NAME
FROM MEMBER;

설명

  • MEMBER 테이블에서 성(홍)과 이름(길동)을 연결해
    FULL_NAME이 홍길동 형태로 출력된다.

7. 함수

함수는 입력값에 대해 특정 연산을 수행하고

결과를 반환하는 약속된 코드 블록이다.

  • 단일행 함수: 1행 입력 → 1행 출력
  • 다중행 함수(집계함수): 여러 행 입력 → 1값 출력

ORACLE에서는 함수 테스트용

더미 테이블로 DUAL을 자주 사용한다.

  • FROM DUAL이 보이면 실제 테이블 없이
    함수 결과만 확인하는 용도라고 보면 된다.

예시

SELECT SYSDATE
FROM DUAL;

8. 문자 함수

8-1. LOWER(문자열)

  • 문자열을 전부 소문자로 변환한다.
  • 대소문자 섞인 데이터를 같은 기준으로
    비교할 때 자주 사용한다.
SELECT LOWER('AnIMaLe')
FROM DUAL;
-- animale

 

8-2. UPPER(문자열)

  • 문자열을 전부 대문자로 변환한다.
  • 코드값/이름 비교에서
    대소문자 이슈를 줄일 때 유용하다.
SELECT UPPER('AnIMaLe')
FROM DUAL;
-- ANIMALE

 

대소문자 무시 비교 패턴

SELECT *
FROM MEMBER
WHERE UPPER(NICKNAME) = 'HONG';

 

 

8-3. SUBSTR(문자열, 시작, 길이)

  • 문자열의 일부를 잘라서 반환한다.
  • 시작 위치가 양수면 앞에서부터, 음수면 뒤에서부터 센다.
  • 길이는 생략 가능(생략하면 시작부터 끝까지)
SELECT
  SUBSTR('ANIMALE', 1, 3)  AS A,   -- ANI
  SUBSTR('ANIMALE', 4, 3)  AS B,   -- MAL
  SUBSTR('ANIMALE', -3, 3) AS C    -- ALE
FROM DUAL;

 

8-4. TRIM / LTRIM / RTRIM

  • TRIM: 양쪽 공백 제거(기본)
  • LTRIM: 왼쪽(앞) 공백 제거
  • RTRIM: 오른쪽(뒤) 공백 제거
  • TRIM은 특정 문자를 지정하면
    그 문자도 양쪽에서 제거된다.
SELECT TRIM('   hello   ')
FROM DUAL;
-- hello

SELECT TRIM('x' FROM 'xxABCDxx')
FROM DUAL;
-- ABCD

 

8-5. LENGTH(문자열)

  • 문자열 길이를 반환한다.
SELECT LENGTH('ANIMALE')
FROM DUAL;
-- 6

 

8-6. REPLACE(문자열, 찾을문자, 바꿀문자)

  • 문자열에서 특정 부분을 찾아 치환한다.
SELECT REPLACE('010-1234-5678', '-', '')
FROM DUAL;
-- 01012345678

 

8-7. ASCII(문자)

  • 문자 1개의 ASCII 코드 값을 반환한다.
SELECT ASCII('A'), ASCII('a')
FROM DUAL;
-- 65, 97

9. 숫자 함수

  • ABS: 절댓값
  • MOD: 나머지
  • ROUND: 반올림

반올림은 자리수 1이면 소수점 첫째 자리까지
남기기 위해 둘째 자리에서 반올림

자리수가 음수면 정수부에서 반올림 위치가
앞으로 간다(예: -1이면 십의 자리 기준)

SELECT
  ROUND(123.456, 1)  AS R1,  -- 123.5
  ROUND(123.456, -1) AS R2   -- 120
FROM DUAL;
  • TRUNC: 버림(절삭)
  • FLOOR: 내림
  • CEIL: 올림
  • SIGN: 음수(-1), 0(0), 양수(1)
  • POWER: 거듭제곱

10. 날짜 함수

  • ORACLE: SYSDATE
  • SQL SERVER: GETDATE()

11. 변환 함수

데이터 타입은 보통 숫자형/문자형/날짜형이 핵심이다.
변환 함수는 타입을 바꿔준다.

  • TO_NUMBER(문자형)
  • TO_CHAR(숫자/날짜형, 형식)
  • TO_DATE(문자형, 형식)

포인트

  • 날짜형과 문자형은 겉으로 형식이 같아 보여도
    내부 데이터는 완전히 다르다.
  • 비교/정렬/계산에서 차이가 난다.

12. 집계 함수(다중행 함수)

집계함수 특징

  • 다중행 함수(N → 1)
  • NULL 제외 계산이 원칙
  • WHERE 절에서 사용 불가
  • HAVING 절에서는 사용 가능

집계함수 종류

  • COUNT, SUM, AVG, MIN, MAX

COUNT 관련 포인트

  • COUNT(*)는 행 수 자체를 세므로 NULL 포함
  • COUNT(컬럼)은 해당 컬럼이 NULL이면 제외하고 센다
  • COUNT(1), COUNT(0)도 표현식이
    항상 NULL이 아니라서 결과적으로
    전체 행 수를 세는 용도로 자주 등장한다
SELECT
  COUNT(*)   AS ROW_CNT,
  COUNT(SAL) AS SAL_CNT
FROM EMP;

13. NULL 관련 함수

  • NVL(컬럼, 대체값)
  • NULLIF(컬럼1, 컬럼2)
  • COALESCE(컬럼1, 컬럼2, 컬럼3, ...)

예시

SELECT NVL(NICKNAME, 'guest')
FROM MEMBER;

SELECT COALESCE(PHONE, MOBILE, 'no-contact')
FROM MEMBER;

14. CASE / DECODE

CASE

  • 조건에 따라 값을 분기 처리한다.
  • CASE 시작, END 끝
SELECT
  SCORE,
  CASE
    WHEN SCORE >= 90 THEN 'A'
    WHEN SCORE >= 80 THEN 'B'
    ELSE 'C'
  END AS GRADE
FROM EXAM;

 

중복을 줄이기 싫을 경우(비교 대상이 동일하면)

SELECT
  SUBJECT_CODE,
  CASE SCORE
    WHEN >= 90 THEN 'A'
    WHEN >= 80 THEN 'B'
    ELSE 'C'
  END AS GRADE
FROM EXAM;

 

DECODE(ORACLE)

  • ORACLE에서는 CASE를 더 줄여서
    DECODE로 쓰기도 한다.
SELECT
  SUBJECT_CODE,
  DECODE(SUBJECT_CODE, '201', '수학', '202', '과학', '기타') AS SUBJECT_NAME
FROM SUBJECT;

15. WHERE 절

WHERE는 특정 조건에 부합되는
튜플(행) 데이터만 조회할 때 사용한다.

 

기본 비교 연산자

  • =
  • !=, <>, ^= (DBMS에 따라 표현이 다르게 소개되는 경우가 있음)
  • >
  • <
  • >=
  • <=

조건 표현 연산자

  • AND
  • OR
  • IN
  • BETWEEN A AND B
  • NOT

날짜 조건 조회

  • 날짜도 비교가 가능하다.

예시

WHERE ORDER_DATE < '2024-12-15'
WHERE ORDER_DATE BETWEEN '2024-12-01' AND '2024-12-31'

 

LIKE 연산자(조커 카드)

  • %: 0개 이상의 문자를 의미
  • _: 정확히 1개의 문자를 의미

패턴 예시

  • '%라면%': 라면 앞뒤로 뭐가 붙든 가능(포함)
  • '%라면': 라면으로 끝나는 값
  • '_라면%': 라면 앞에 정확히 1글자만 있어야 함

ESCAPE

  • % 혹은 _를 와일드카드가 아니라
    문자 자체로 찾고 싶을 때 사용한다.

예시

WHERE NAME LIKE '%/_라면' ESCAPE '/'
-- '/_'는 '_' 문자 자체를 의미
-- 즉 '_라면'이 문자 그대로 포함된 값을 찾는 형태

 

NULL 비교 연산자

  • IS NULL: 값이 NULL인 경우
  • IS NOT NULL: 값이 NULL이 아닌 경우(값 존재)

주의

  • = NULL, != NULL 같은 표현은 오류/무의미
    (정상 비교가 아니다)

16. 연산자 우선순위

아래로 내려갈수록 후순위

  1. 괄호 ()
  2. 곱셈 *
  3. 나눗셈 /
  4. 나머지 연산 %
  5. 비교 연산자(<, >, = 등)
  6. LIKE
  7. BETWEEN
  8. IN
  9. IS NULL
  10. IS NOT NULL
  11. NOT (필기에는 NNOT로 적어뒀지만 의미는 NOT)
  12. AND
  13. OR

헷갈리면 괄호로 의도를 고정하는 게 제일 안전하다.


17. GROUP BY 절

GROUP BY

  • 특정 컬럼을 기준으로 데이터를 그룹화하여
    집계함수 결과를 산출한다.

18. HAVING 절

HAVING

  • 그룹화된 결과에 대한 조건
  • WHERE는 행 단위 조건,
    HAVING은 그룹 단위 조건
  • WHERE에서는 집계 함수 사용 불가,
    HAVING에서는 사용 가능

예시

SELECT DEPT, AVG(SAL) AS AVG_SAL
FROM EMP
GROUP BY DEPT
HAVING AVG(SAL) > 1000;

 

성능 포인트

  • GROUP BY는 리소스 소모가 크므로
    WHERE로 먼저 필터링 후 수행하는 것이 유리하다.
SELECT DEPT, AVG(SAL) AS AVG_SAL
FROM EMP
WHERE DEPT != '기획'
GROUP BY DEPT
HAVING AVG(SAL) > 1000;

19. ORDER BY 절

ORDER BY

  • 결과를 정렬할 때 사용한다.
  • ASC: 오름차순(기본값, 생략 가능)
  • DESC: 내림차순
  • 리소스를 많이 먹는 편이라 항상 마지막에 실행된다
    (처리 순서의 O)

활용)

두 가지 이상 기준 정렬 가능

ORDER BY SAL DESC, BONUS ASC;

 

컬럼 번호로 정렬 가능

ORDER BY 2 DESC, 3 ASC;

 

GROUP BY 결과도 정렬 가능(집계함수 기준 정렬)

SELECT DEPT, AVG(SAL) AS AVG_SAL
FROM EMP
GROUP BY DEPT
ORDER BY AVG(SAL) DESC;

 

ORDER BY 특징

SELECT보다 나중에 수행되므로

SELECT에서 선언한 별칭 사용 가능

ORDER BY AVG_SAL DESC;

GROUP BY보다 나중에 수행되므로 집계함수 사용 가능


20. 데이터 타입에 따른 정렬 순서(오름차순 기준)

  • 숫자형: 작은 수 → 큰 수
  • 문자형: 사전 순
  • 날짜형: 과거 → 미래
  • NULL 정렬 차이 (꼭 기억해두자)
    • ORACLE: NULL을 최대값처럼 취급
    • SQL SERVER: NULL을 최소값처럼 취급

마무리 요약

공격수가 해써오!
FWG HSO

 

FROM → WHERE → GROUP BY

HAVING → SELECT → ORDER BY

 

이거 하나로 별칭 함정, 집계함수 위치,

HAVING 존재 이유가 한 번에 정리된다.

'개주 훈련일지 > 🎰 SQLD 준비' 카테고리의 다른 글

SQLD 데이터 모델과 SQL  (0) 2026.02.13
SQLD 데이터 모델링의 이해  (0) 2026.02.08