SQL 시험 범위 정리 노트


✅ 1차 시험 (6월 23일 월요일)

DML 전체 훑어보기

  • DML (Data Manipulation Language, 데이터 조작어): 데이터를 조회(SELECT), 추가(INSERT), 수정(UPDATE), 삭제(DELETE)하는 명령어들을 총칭합니다. 시험 전반에 걸쳐 가장 기본이 되는 개념.

📖 3장. SQL 기본 문법

3-1. DML + 서브쿼리 (⭐⭐)

  • DML: SELECT, INSERT, UPDATE, DELETE 4가지 명령어의 기본 사용법을 완벽히 숙지해야 합니다.
  • 서브쿼리 (Subquery): 쿼리문 안에 또 다른 쿼리문이 들어가는 것입니다. '괄호()' 안에 작성하며, 바깥쪽 메인 쿼리가 실행되기 전에 한 번 실행됩니다.
    • 사용 위치: WHERE, SELECT, FROM, HAVING 절 등 다양한 곳에서 사용됩니다.
    • 핵심: "어떤 조건"을 다른 테이블이나 복잡한 계산을 통해 가져와야 할 때 주로 사용됩니다.
    • 예시: '개발부'에 속한 모든 직원을 조회하시오. (직원 테이블과 부서 테이블이 분리된 경우)
      -- '개발부'의 부서 ID를 서브쿼리로 먼저 찾고,
      -- 그 ID를 조건으로 직원 테이블을 조회
      SELECT *
      FROM employees
      WHERE department_id = (SELECT id FROM departments WHERE name = '개발부');

3-2. SELECT문

  • SELECT: 테이블에서 데이터를 조회하는 가장 기본적인 명령어입니다.
  • ORDER BY: 결과를 특정 열(column)을 기준으로 정렬할 때 사용합니다.
    • ASC: 오름차순 (기본값, 생략 가능)
    • DESC: 내림차순
    • 예시: 직원들을 급여(salary)가 높은 순서대로 조회
      SELECT name, salary FROM employees ORDER BY salary DESC;
  • GROUP BY: 특정 열을 기준으로 그룹화하여 집계 함수(통계)를 적용할 때 사용합니다.
    • 짝꿍 함수: COUNT()(개수), SUM()(합계), AVG()(평균), MAX()(최대값), MIN()(최소값)
    • 예시: 각 부서별 직원 수를 조회
      SELECT department_id, COUNT(*) AS '직원 수'
      FROM employees
      GROUP BY department_id;

3-3. 데이터 변경을 위한 SQL문

  • INSERT: 테이블에 새로운 행(row)을 추가합니다.
    • INSERT INTO 테이블명 (열1, 열2) VALUES (값1, 값2);
  • UPDATE: 기존 행의 데이터를 수정합니다.
    • UPDATE 테이블명 SET 열1 = 값1 WHERE 조건;
    • 주의: WHERE 절을 빠뜨리면 모든 행이 수정되므로 반드시 포함해야 합니다.
  • DELETE: 기존 행을 삭제합니다.
    • DELETE FROM 테이블명 WHERE 조건;
    • 주의: WHERE 절을 빠뜨리면 모든 행이 삭제되므로 반드시 포함해야 합니다.
  • 대용량 테이블의 삭제:
    • DELETE는 한 행씩 삭제하고 로그를 남겨서 매우 느립니다.
    • TRUNCATE는 테이블 구조만 남기고 모든 데이터를 한 번에 삭제하여 훨씬 빠릅니다. (단, 복구가 거의 불가능)
    • 차이점: DELETE는 DML(롤백 가능), TRUNCATE는 DDL(롤백 불가)

📖 4장. SQL 고급 문법

4-1. MySQL 데이터 형식 & 형변환 (❗ 형변환 꼭 나옴! ❗)

  • MySQL 데이터 형식 (나올 수 있음):
    • 숫자: INT(정수), DECIMAL(고정소수점, 금액 등), FLOAT(부동소수점)
    • 문자열: VARCHAR(가변길이 문자열), TEXT(긴 텍스트)
    • 날짜/시간: DATE(날짜), DATETIME(날짜와 시간), TIMESTAMP(타임스탬프)
  • 데이터 형변환 (Data Type Conversion):
    • 암시적 형변환: MySQL이 알아서 타입을 바꿔 계산 (SELECT '100' + 200; -> 300)
    • 명시적 형변환: 개발자가 함수를 사용해 직접 타입을 변경. CASTCONVERT 함수가 핵심!
    • 예시: 문자열 '2023-06-23'을 날짜 타입으로 변환
      SELECT CAST('2023-06-23' AS DATE);
      -- 또는
      SELECT CONVERT('2023-06-23', DATE);

4-2. 조인 (내부 조인만 나옴)

  • 조인(JOIN): 두 개 이상의 테이블을 특정 조건(공통된 열)을 기준으로 연결하여 하나의 결과처럼 보여주는 기능입니다.
  • 내부 조인 (INNER JOIN): 두 테이블에 모두 공통으로 존재하는 데이터만 합쳐서 보여줍니다. (교집합)
    • 예시: 직원 정보와 부서 정보를 합쳐서 조회
      SELECT e.name, d.name
      FROM employees AS e
      INNER JOIN departments AS d ON e.department_id = d.id;
      -- employees 테이블의 department_id와 departments 테이블의 id가 일치하는 행만 결합

📖 5장. 가상의 테이블 : 뷰(VIEW)

  • 뷰의 개념:
    • 실제 데이터를 저장하지 않는 가상의 테이블입니다.
    • 자주 사용하거나 복잡한 SELECT 쿼리문을 '뷰'라는 이름으로 저장해두고, 진짜 테이블처럼 간단히 조회할 수 있게 만든 것입니다.
    • 장점: 보안(중요한 데이터 숨김), 편의성(복잡한 쿼리 단순화)
  • 뷰의 실제 작동:
    • 뷰는 데이터를 가지고 있지 않습니다.
    • 사용자가 뷰를 조회(SELECT * FROM my_view;)하면, 그 순간 데이터베이스는 뷰에 저장된 원래의 SELECT 쿼리문을 실행하여 결과를 보여줍니다. 즉, 실시간으로 원본 테이블의 데이터를 가져옵니다.

✅ 3번째 시험 범위

📖 7장. 스토어드 프로시저

  • 스토어드 프로시저 (Stored Procedure):
    • 여러 SQL 쿼리문들을 하나로 묶어 데이터베이스에 저장해두고, 필요할 때마다 함수처럼 호출해서 사용하는 기능입니다.
    • 장점: 성능 향상(미리 컴파일), 보안 강화, 재사용성 증가.
  • 스토어드 함수 (Stored Function)와 커서 (Cursor):
    • 함수: 프로시저와 비슷하지만, 반드시 하나의 값을 반환(return)해야 하며 SELECT문 안에서 직접 사용 가능합니다.
    • 커서: 결과 집합(여러 행)을 한 행씩 순회하며 처리할 때 사용하는 포인터입니다. 프로시저나 함수 내에서 복잡한 로직을 처리할 때 사용됩니다.
  • 트리거 (Trigger):
    • 테이블에 INSERT, UPDATE, DELETE 같은 이벤트가 발생했을 때 자동으로 실행되도록 설정된 프로시저입니다.
    • 예시: '주문' 테이블에 새 주문이 INSERT되면, '재고' 테이블의 수량을 자동으로 UPDATE하는 트리거.

✅ 4번째 시험 범위

📖 6장. 인덱스 (Index)

  • 인덱스의 개념:
    • 책의 '찾아보기'와 같은 역할입니다.
    • 테이블의 특정 열(column)에 인덱스를 생성하면, 해당 열을 조건으로 데이터를 검색(SELECTWHERE절)할 때 조회 속도를 획기적으로 향상시킵니다.
  • 장단점:
    • 장점: SELECT 쿼리의 성능을 크게 개선합니다.
    • 단점:
      • INSERT, UPDATE, DELETE 시 인덱스도 함께 수정해야 하므로 데이터 변경 속도는 오히려 느려질 수 있습니다.
      • 인덱스를 저장할 추가적인 공간이 필요합니다.

'SQL' 카테고리의 다른 글

세번째 시험준비  (0) 2025.06.30
SQL 공부 (2번째)/+ 문제  (0) 2025.06.23
*두 번째 시험 예상 문제  (0) 2025.06.20
공부용 시험문제  (0) 2025.06.18
6/18 SQL 시험 범위 요약표  (0) 2025.06.16