공부중/데이터베이스

[데이터베이스] 3주차 강의 요약

eooonion 2026. 3. 20. 12:37

1. SQL 학습 준비

마당서점을 예시로 들어보자! 

  • 마당서점의 시스템 환경

사용자, 고객, 도서 등이 있으며 사용자 그룹별로 원하는 정보도 다르다.

 

  • 대표적인 테이블들은 무엇일까?

Book 테이블 / Customer 테이블 / Order 테이블


2. SQL(Structured Query Language)

SQL 개요

  • SQL(Structured Query Language) 의 의미
    • 관계 데이터베이스를 위한 표준 질의어
    • 비절차적 데이터 언어
  •  발전 역사
    • SEQUEL(Structured English QUEry Language) 에서 유래
      • SEQUEL : 연구용 관계 데이터베이스 관리 시스템인 SYSTEM R 을 위한 언어
    •  미국 표준 연구소인 ANSI 와 국제 표준화 기구인 ISO 에서 표준화 작업을 진행
      • 계속 수정 및 보완되고 있음
    •  사용 방식
      • 대화식 SQL : 데이터베이스 관리 시스템에 직접 접근해 질의를 작성하고 실행
      • 삽입 SQL : 프로그래밍 언어로 작성한 응용 프로그램에 삽입

SQL의 분류

  • 데이터 정의어 (DDL) : 테이블을 생성하고 변경, 삭제하는 기능을 제공
    • CREATE, ALTER, DROP 등
  • 데이터 조작어 (DML) : 테이블에 새 데이터를 삽입하거나 , 테이블에
    저장된 데이터를 수정, 삭제, 검색하는 기능을 제공
    • SELECT, INSERT, DELETE 등
  •  데이터 제어어 (DCL) : 보안을 위해 데이터에 대한 접근 및 사용
    권한을 사용자별로 부여하거나 취소하는 기능을 제공
    • GRANT, REVOKE 등

SQL은 비절차적인 언어로 , 데이터를 조회하거나 조작하는 데 필요한 조건을 기술하지만 , 어떻게 데이터를
찾고 처리하는지와 같은 실행 절차를 직접 명시하지 않음

 


3. 데이터조작어 - 검색

(연습을 위해 샘플 코드로 테이블 완성)

SELECT 문

  • 기본 SELECT문
    • 데이터를 검색하는 기본 문장으로 검색한 결과를 테이블 형태로 출력함

 

  • WHERE(비교/범위 설정 후 테이블 보여줌)

가격이 20000원 미만인 도서를 검색

  • WHERE 사용 시 조건을 부여해 다양하게 검색할 수 있다.
    • 축구의 역사를 출간한 출판사 검색
SELECT bookname, publisher
FROM Book
WHERE bookname LIKE '축구의 역사';
  • WHERE 사용 시 와일드 문자를 이용해 여러 형태로 검색할 수 있다.
    • 도서의 이름에 '축구'가 포함된 출판사 검색
SELECT bookname, publisher
FROM Book
WHERE bookname LIKE '%축구%';

 

  • ORDER BY(정렬 기능)
    • 정렬 검색 : SQL 문의 실행 결과를 특정 순서대로 출력
      • 오름차순(기본): ASC / 내림차순 : DESC

도서를 이름 순으로 검색

 

집계함수와 GROUP BY

  • 집계함수
    • 집계함수는 열함수라고도 하며, NULL 값은 제외하고 계산된다.
    • WHERE절에서는 사용할 수 없고, SELECT나 HAVING 절에서만 사용가능
    • (참고: AS는 속성이나 테이블에 별칭을 부여한다. 가독성을 위해 사용을 권장)

custid가 2번인 고객이 주문한 도서의 총판매액을 구하고 이름을 총매출로 변경하기

  • GROUP BY: 특정속성의 값이 같은 튜플을 모아 그룹을 만든 후 검색

고객별로 주문한 도서의 총수량과 총판매액을 구하기(속성 이름은 도서수량, 총액 사용)

 

두 개 이상의 테이블을 이용한 SQL 질의

  • 조인 검색: 여러 개의 테이블을 연결하여 데이터를 검색하는 것
    • 연결하려는 테이블 간의 조인 속성 이름은 달라도 되지만, 도메인은 같아야 함
    • 일반적으로 외래키(Foreign Key)를 조인 속성으로 이용함
  •  FROM 절에는 검색에 필요한 모든 테이블을 나열함
  • WHERE 절에는 조인 속성의 값이 같아야 함을 의미하는 조인 조건을 제시함
  • 같은 이름의 속성이 서로 다른 테이블에 존재할 수 있기 때문에 속성 이름 앞에 해당 속성이 소속된 테이블의 이름을 표시함
    • 예시: 주문.주문고객, 고객.고객아이디
  • 조인
    • 한 테이블의 행을 다른 테이블의 행에 연결해 두 개 이상의 테이블을 결합하는 연산
    • 예 ) Customer 테이블을 Orders 테이블과 조건 없이 연결함 → 카티션 프로덕트가 됨

  • 세 개의 테이블을 이용한 SQL 질의

  • 외부 조인
    • 조인 조건을 만족하지 않는 투플에 대해서도 검색을 수행
    • LEFT | RIGHT | FULL OUTER JOIN 과 ON 키워드를 이용해 작성

 

  • 부속질의: SELECT문 안에 또 다른 SELECT문을 포함하는 질의
    • 부속 질의문(서브 질의문): 다른 SELECT문 안에 들어 있는 SELECT문
      • 괄호로 묶어서 작성, ORDER BY 절 사용 불가
      • 단일 행 부속 질의문: 하나의 행을 결과로 반환
      • 다중 행 부속 질의문: 하나 이상의 행을 결과로 반환
    • 실행 순서: 부속 질의문을 먼저 수행 → 그 결과를 이용해 상위 질의문 수행
      • 예시: 도서를 구매한 적이 있는 고객의 이름을 찾는 경우
        • 1단계: Orders 테이블에서 주문 내역 확인 → 주문한 고객의 고객번호 찾기
        • 2단계: 찾은 고객번호를 이용해 Customer 테이블에서 고객 이름 찾기
    • 부속 질의문과 상위 질의문 연결: 연산자 필요
      • 단일 행 부속 질의문: 비교 연산자 사용 가능(=, <>, >, >=, <, <=)
      • 다중 행 부속 질의문: 비교 연산자 사용 불가
        • 연산자 사용

  • 상관(correlated, 연결) 부속질의
    • 부속질의 간에는 상하 관계가 있으며, 상위 부속질의와 하위 부속질의가 독립적이지 않고 서로 관련을 맺고 있음.
    • 상위 쿼리와 하위 쿼리는 서로 의존적이며, 상위 쿼리의 특정 행 값이 하위 쿼리 조건에 사용된다.
    • 일반적인 부속질의와 달리 행 단위로 반복 실행 된다.
  • 집합 연산 - UNION, MINUS, INTERSECT
    • SQL 문의 결과는 테이블로 나타남
    • 테이블 간의 집합 연산을 이용하여 합집합, 차집합, 교집합을 구할 수 있음
  • UNION
    • 예) Customer 테이블에 대한민국에 거주하는 고객의 이름 집합과 도서를 주문한 고객의 이름 집합의 합집합 구하기
    • {고객 이름} = {대한민국에 거주하는 고객 이름} ∪ {도서를 주문한 고객 이름}
    • 대한민국에 거주하는 고객의 이름은 Customer 테이블에서 다음과 같이 구함

  • EXISTS 와 NOT EXISTS
    • 상관 부속질의문 형식으로 부속질의의 결과가 존재하는지 여부를 확인하는 연산자
    • 부속질의 문이 한 행이라도 반환하면 True
    • NOT EXISTS 는 반환행이 하나도 존재하지 않으면 True