[SQLD 요약노트] 2과목: SQL 기본 – 핵심 내용 총정리
안녕하세요! 오늘은 SQLD 시험의 2과목 중 첫 번째 파트인 'SQL 기본'을 공부하고 핵심 내용을 정리해봤습니다. SQL 기본 파트는 실무에서도 매우 자주 쓰이는 만큼, 개념과 흐름을 꼭 정확히 이해하고 넘어가는 것이 중요합니다.
1. 관계형 데이터베이스와 SQL 개요
- DBMS: 데이터베이스를 관리하는 시스템
- RDBMS: 관계형 DBMS (예: Oracle, MySQL 등)
- SQL(Structured Query Language): 관계형 데이터베이스를 다루는 표준 언어
분류
|
용도
|
주요 명령어
|
DDL
(데이터 정의어) |
테이블 생성, 변경, 삭제
|
CREATE, ALTER, DROP, RENAME, TRUNCATE
|
DML
(데이터 조작어) |
데이터 조회, 삽입, 수정, 삭제
|
SELECT, INSERT, UPDATE, DELETE
|
DCL
(데이터 제어어) |
권한 관리
|
GRANT, REVOKE
|
TCL
(트랜잭션 제어어) |
트랜잭션 제어
|
COMMIT, ROLLBACK, SAVEPOINT
|
※ SELECT는 DML에 속하지만, 때때로 DQL(데이터 조회어)로 따로 분류되기도 함.
2. SELECT 문 구조 & 실행 순서
SELECT 문은 SQL에서 가장 기본이자 중요한 명령
SELECT 컬럼명 -- [5] 조회하고자 하는 컬럼을 선택
FROM 테이블명 -- [1] 어떤 테이블에서 데이터를 가져올지 결정
WHERE 조건 -- [2] 조건에 맞는 행을 필터링
GROUP BY 컬럼명 -- [3] 데이터를 그룹으로 묶음
HAVING 그룹조건 -- [4] 그룹에 대한 조건을 필터링
ORDER BY 컬럼명 -- [6] 정렬 기준 설정
👉 암기 팁: 공격수(FW)가해써오!
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- AS 별칭 생략 가능
- WHERE에서는 SELECT에서 정의한 별칭 사용 불가
3. SQL 함수 정리
함수는 입력(Input)에 대한 특정 연산을 수행한 후, 결과(Output)를 반환하는 약속된 코드 블록
함수 유형
- 단일행 함수: 입력 1개 → 결과 1개
- 다중행 함수: 여러 값 → 하나의 결과 (예: 집계함수)
주요 함수
구분
|
특징
|
예시
|
문자함수
|
문자열 데이터는 작은 따옴표(' ')로 표현, 숫자는 그대로 사용
|
UPPER(), LOWER(), LENGTH(), SUBSTR(), TRIM(), REPLACE() 등
|
숫자함수
|
숫자 계산
|
ROUND(), CEIL(), FLOOR(), ABS(), TRUNC(), MOD() 등
|
날짜함수
|
날짜 연산
|
SYSDATE, CURRENT_DATE, EXTRACT, ADD_MONTHS(), MONTHS_BETWEEN()
|
변환함수
|
데이터형 변환
|
TO_CHAR(), TO_DATE(), TO_NUMBER()
|
집계함수
|
그룹 연산 (NULL 제외)
WHERE절 사용 불가 |
COUNT(), SUM(), AVG(), MIN(), MAX()
|
NULL 함수
|
NULL 처리
|
NVL(), NULLIF(), COALESCE()
|
조건 함수
|
조건에 따라 값을 분기 처리할 때 사용
|
CASE WHEN, DECODE()
(DECODE는 Oracle 전용) |
-- CASE 문 예시
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 결과3
END
-- DECODE 함수 예시 (Oracle 전용)
DECODE(컬럼, 값1, 반환1, 값2, 반환2, ..., 기본값)
4. WHERE 절 & 조건 연산자
WHERE 절은 특정 조건에 부합하는 튜플(행), 데이터들을 조회할 때 사용
- 비교 연산자: =, !=, <>, <, >, <=, >=
- 논리 연산자: AND, OR, NOT
- LIKE연산자
- 와일드카드 문자
- % : 0개 이상의 임의 문자열
- _ : 1개의 임의의 문자
- 와일드카드 문자
-- 이름이 '김'으로 시작하는 모든 사람
SELECT * FROM 직원 WHERE 이름 LIKE '김%';
-- 이름이 3글자이고 가운데 글자가 '지'인 사람
SELECT * FROM 직원 WHERE 이름 LIKE '_지_';
- NULL 비교: IS NULL, IS NOT NULL
※ =NULL 혹은 !=NULL 사용은 오류가 발생
- 연산자 우선순위:
괄호() > 산술(*, /, %) > 비교(=, !=, <>, <, >, <=, >=) > 논리 (NOT → AND → OR)
5. GROUP BY & HAVING 절
- GROUP BY: 그룹 단위로 데이터 집계
SELECT 부서, COUNT(*) 직원수, AVG(급여) 평균급여
FROM 직원
GROUP BY 부서;
- HAVING: 집계된 결과 조건 필터
- WHERE은 개별 행(튜플) 필터
- HAVING은 그룹 조건 필터
SELECT 부서, COUNT(*) 직원수, AVG(급여) 평균급여
FROM 직원
GROUP BY 부서
HAVING AVG(급여) > 3000000;
- 집계 함수는 WHERE에서는 사용 불가, HAVING에서는 가능
- GROUP BY 절은 리소스 소모가 크므로, WHERE 절로 먼저 필터링 후 수행하는 것이 성능상 유리
6. ORDER BY 절
- 결과 정렬을 위한 절 (기본: ASC 오름차순 / DESC 내림차순)
SELECT 이름, 급여, 보너스
FROM 직원
ORDER BY 급여 DESC, 보너스 ASC;
- 컬럼명, 컬럼 번호, 별칭으로 정렬 가능
- ORDER BY는 SELECT, GROUP BY보다 나중에 수행되므로 별칭(Alias)와 집계함수 사용 가능
- 데이터 형에 따른 정렬 순서 (오름차순 기준)
- 숫자형: 작은 수 → 큰 수
- 문자형: 사전 순
- 날짜형: 과거 → 미래
- NULL 정렬: Oracle은 NULL을 최댓값으로, SQL Server는 NULL을 최솟값으로 처리
7. 조인(Join)
두 개 이상의 테이블을 연결하여 데이터를 조회
조인의 종류
조인 종류
|
설명
|
EQUI JOIN
|
Equal(=) 연산자(등호)를 사용해서 같은 값인 경우 조인
|
NON-EQUI JOIN
|
비교 연산자(BETWEEN, >, <, !=)를 사용하는 조인
|
표준 조인
DBMS마다 조인 방식이 다르므로, ANSI/ISO SQL 표준으로 정립한 조인
조인 종류
|
설명
|
INNER JOIN
|
JOIN 조건에서 동일한 값이 있는 행만 반환
|
NATURAL JOIN
|
두 테이블 간에 동일한 이름을 갖는 모든 컬럼에 대해 EQUI JOIN을 수행
|
CROSS JOIN
|
두 테이블의 모든 행을 조합해서 출력 (카테시안 곱)
|
OUTER JOIN
|
한쪽 테이블에만 데이터 있어도 출력
|
# 1. INNER JOIN
-- USING 예시
SELECT e.사원명, d.부서명
FROM 직원 e INNER JOIN 부서 d
USING (부서코드);
-- ON 예시
SELECT e.사원명, d.부서명
FROM 직원 e INNER JOIN 부서 d
ON e.부서코드 = d.부서코드;
# 2. NATURAL JOIN
SELECT e.사원명, d.부서명
FROM 직원 e NATURAL JOIN 부서 d;
# 3. CROSS JOIN
SELECT e.사원명, d.부서명
FROM 직원 e CROSS JOIN 부서 d;
# 4. OUTER JOIN
-- LEFT OUTER JOIN 예시
SELECT e.사원명, d.부서명
FROM 직원 e LEFT OUTER JOIN 부서 d
ON e.부서코드 = d.부서코드;
오늘의 학습 핵심 요약
- SQL 문장 구조를 익히고 실행 순서를 이해하자
- 함수는 단일행 vs 다중행으로 구분해서 외우자
- SQL 문장 구조와 실행 순서(FW가해써오! - FWGHSO)를 기억하자
- GROUP BY와 HAVING은 꼭 비교해서 암기!
- JOIN은 INNER, OUTER, NATURAL 구분 포인트 기억하기
마무리하며
오늘은 SQLD 2과목의 첫 번째 파트인 SQL 기본에 대해 정리해봤습니다. 이론적인 부분도 중요하지만, 실제 쿼리를 작성해보면서 개념을 확실히 이해하는 것이 좋습니다.
SQLD 시험에서는 이 파트에서 문법 오류 찾기나 실행 결과 예측하기 같은 문제가 자주 출제되므로, 각 절의 실행 순서와 특징을 정확히 알고 있어야 합니다.
다음에는 2과목의 나머지 부분인 SQL 활용과 관리 구문에 대해 정리해 볼 예정입니다. 함께 공부해요 😊