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 : 프로그래밍 언어로 작성한 응용 프로그램에 삽입
- SEQUEL(Structured English QUEry Language) 에서 유래
SQL의 분류
- 데이터 정의어 (DDL) : 테이블을 생성하고 변경, 삭제하는 기능을 제공
- CREATE, ALTER, DROP 등
- 데이터 조작어 (DML) : 테이블에 새 데이터를 삽입하거나 , 테이블에
저장된 데이터를 수정, 삭제, 검색하는 기능을 제공- SELECT, INSERT, DELETE 등
- 데이터 제어어 (DCL) : 보안을 위해 데이터에 대한 접근 및 사용
권한을 사용자별로 부여하거나 취소하는 기능을 제공- GRANT, REVOKE 등
SQL은 비절차적인 언어로 , 데이터를 조회하거나 조작하는 데 필요한 조건을 기술하지만 , 어떻게 데이터를
찾고 처리하는지와 같은 실행 절차를 직접 명시하지 않음

3. 데이터조작어 - 검색
(연습을 위해 샘플 코드로 테이블 완성)

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


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

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

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

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


- 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 테이블에서 고객 이름 찾기
- 예시: 도서를 구매한 적이 있는 고객의 이름을 찾는 경우
- 부속 질의문과 상위 질의문 연결: 연산자 필요
- 단일 행 부속 질의문: 비교 연산자 사용 가능(=, <>, >, >=, <, <=)
- 다중 행 부속 질의문: 비교 연산자 사용 불가
- 연산자 사용
- 부속 질의문(서브 질의문): 다른 SELECT문 안에 들어 있는 SELECT문

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

- EXISTS 와 NOT EXISTS
- 상관 부속질의문 형식으로 부속질의의 결과가 존재하는지 여부를 확인하는 연산자
- 부속질의 문이 한 행이라도 반환하면 True
- NOT EXISTS 는 반환행이 하나도 존재하지 않으면 True
'공부중 > 데이터베이스' 카테고리의 다른 글
| [데이터베이스] 5주차 실습 (0) | 2026.04.04 |
|---|---|
| [데이터베이스] 5주차 강의 요약 (0) | 2026.04.01 |
| [데이터베이스] 4주차 강의 요약 (0) | 2026.03.27 |
| [데이터베이스] 2주차 강의 요약 (0) | 2026.03.12 |
| [데이터베이스] 1주차 강의 요약 (0) | 2026.03.07 |