📚Read

MySQL로 배우는 데이터베이스 개론과 실습 2판: Chapter 03 SQL 기초

limdaeil 2025. 11. 24. 14:28

🔖Contents

🔥학습목표
    1. SQL의 개념과 주요 명령어를 알아본다.
    2. SELECT 문으로 질의를 처리하는 방법을 알아본다.
    3. 집계 함수와 GROUP BY 문으로 질의를 처리하는 방법을 알아본다.
    4. 두 개 이상의 테이블을 조회하여 질의를 처리하는 방법을 알아본다.
    5. DDL로 테이블의 구조를 정의하고 변경하는 방법을 알아본다.
    6. DML로 데이터를 삽입 · 수정 · 삭제하는 방법을 알아본다.

PREVIEW

SQL은 크게 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 나뉜다. 데이터 정의어는 테이블의 구조를 만들 때, 데이터 조작어는 저장된 데이터를 검색 · 삽입 · 수정 · 삭제할 때, 데이터 제어어는 데이터에 대한 접근 권한을 제어할 때 사용된다. 이 장에서는 데이터 정의어와 데이터 조작어의 문법을 알아보고 MySQL DBMS에서 직접 연습해 본다. 데이터 제어어는 9장에서 자세히 알아본다.

 

01 SQL 학습을 위한 준비

마당서점의 데이터베이스

마당서점의 데이터베이스는 도서(Book), 고객(Customer), 주문(Orders)에 관한 데이터를 저장하는 세 개의 테이블로 구성되어 있다.

릴레이션 용어 실무에서 가장 많이 사용되는 용어 같은 의미의 파일 시스템 용어
릴레이션(relation) 테이블(table) 파일(file)
속성(attribute) 열(column) 필드(field)
투플(tuple) 행(row) 레코드(record)
  • Book(bookid, bookname, publisher, price)
  • Customer(custid, name, address, phone)
  • Orders(orderid, custid, bookid, saleprice, orderdate)

 

02 SQL 개요

SQL은 기능에 따라 데이터 정의어(DDL, Data Definition Language), 데이터 조작어(DML, Data Manipulation Language), 데이터 제어어(DCL, Data Control Language)로 나뉜다.

  • 데이터 정의어(DDL) : 테이블이나 관계의 구조를 생성하는 데 사용하며 `CREATE, ALTER,  DROP` 문 등이 있다.
  • 데이터 조작어(DML) : 테이블에 데이터를 검색, 삽입, 수정, 삭제하는 데 사용하며 `SELECT, INSERT, DELETE, UPDATE` 문 등이 있다. 여기서 SELECT 문은 특별히 질의어(query)라고 한다.
  • 데이터 제어어(DCL) : 데이터의 사용 권한을 관리하는 데 사용하며 `GRANT, REVOKE` 문 등이 있다.

 

03 데이터 조작어 - 검색

SQL의 SELECT 문은 데이터를 검색하는 기본 문장으로, 특별히 질의어(query)라고 부른다.

SELECT 문

 

 

 

 

 

WHERE 조건

WHERE 절은 조건에 맞는 검색을 할 때 사용한다. 조건으로 사용할 수 있는 술어(predicate)는 비교, 범위, 집합, 패턴, NULL로 구분할 수 있다.

 

 

 

ORDER BY

SQL 문의 실행 결과를 특정 순서대로 출력하고 싶으면 ORDER BY 절을 사용한다.

집계 함수와 GROUP BY

집계 함수는 테이블의 각 열에 대해 계산하는 함수이다.

 

GROUP BY

SQL 문에서 GROUP BY 절을 사용하면 속성값이 같은 값끼리 그룹을 만들 수 있다. 예를 들어 Orders 테이블을 사용하는 SELECT 문에 GROUP BY custid라고 명시하면, DBMS는 custid가 같은 값끼리 그룹으로 묶는다. 결과 테이블에는 custid가 서로 다른 값들에 대하여 그룹이 만들어진다.

 

 

여기서 잠깐! GROUP BY 절이 포함된 SQL 문의 실행 순서

SQL 문은 실행 순서가 없는 비절차적인 언어지만 내부적으로는 실행 순서가 있다. 다음 예를 보면서 GROUP BY, HAVING, ORDER BY 절이 포함된 SQL 문의 실행 순서를 이해해 보자.

SELECT 	    custid, COUNT(*) AS 도서 수량 -- 5
FROM        Orders                       -- 1
WHERE       saleprice >= 8000            -- 2
GROUP BY    custid                       -- 3
HAVING      COUNT(*) > 1                 -- 4
ORDER BY    custid;                      -- 6

 

 

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

조인(join)은 한 테이블의 행을 다른 테이블의 행에 연결하여 두 개 이상의 테이블을 결합하는 연산이다. 

 

 

부속질의

SELECT 문의 WHERE 절에 또 달느 테이블 결과를 이용하기 위해 다시 SELECT 문을 괄호로 묶는 것을 부속질의(subquery)라고 한다. 부속질의는 질의 가 중첩되어 있다는 의미에서 중첩 질의(nested query)라고도 한다.

 

 

상관 부속질의

상관 부속질의(correlated subquery)는 상위 부속질의의 투플을 이용하여 하위 부속질의를 계산한다. 즉, 상위 부속질의와 하위 부속질의가 독리적이지 않고 서로 관련을 맺고 있다.

집합연산

SQL 문의 결과는 테이블로 나타난다. 테이블은 투플의 집합이므로 테이블 간의 집합 연산을 이용하여 합집합, 차집합, 교집합을 구할 수 있다. 이 중 합집합을 UNION으로 나타낸다.

EXISTS

EXISTS는 상관 부속질의문 형식이다. EXISTS는 원래 단어에서 의미하는 것과 같이 조건에 맞는 투플이 존재하면 결과에 포함시킨다. 즉, 부속질의문의 어떤 행이 조건에 만족하면 참이다. 반면 NOT EXISTS는 부속질의문의 모든 행이 조건에 만족하지 않을 때만 참이다. EXISTS와 NOT EXISTS는 상관 부속질의문의 다른 형태다.

 

 

04 데이터 정의어

CREATE 문

 

주의해야 할 점은 외래키 제약조건을 명시할 때는 반드시 참조가 되는 테이블(부모 릴레이션)이 존재해야 하며 참조되는 테이블의 기본키여야 한다.

 

데이터타입의 종류

 

ALTER 문

ALTER 문은 생성된 테이블의 속성과 속성에 관한 제약을 변경하며, 기본키 및 외래키를 변경한다.

DROP 문

DROP 문은 테이블을 삭제하는 명령이다. DROP 문은 테이블의 구조와 데이터를 모두 삭제하므로 사용할 때 주의해야 한다. 데이터만 삭제하려면 DELETE 문을 사용한다.

 

05 데이터 조작어 - 삽입, 수정, 삭제

INSERT 문

INSERT 문은 테이블에 새로운 투플을 삽입하는 명령이다.

 

UPDATE 문

UPDATE 문은 특정 속성값을 수정하는 명령이다.

 

DELETE 문

DELETE 문은 테이블에 있는 기존 투플을 삭제하는 명령이다.

 

요약

이번 장에서 다루는 내용이 상당히 많기 때문에 요약 정리를 한다.

 

SQL은 기능에 따라 데이터 정의어(DDL, Data Definition Language), 데이터 조작어(DML, Data Manipulation Language), 데이터 제어어(DCL, Data Control Language)로 나뉜다.

  • 데이터 정의어(DDL) : 테이블이나 관계의 구조를 생성하는 데 사용하며 `CREATE, ALTER,  DROP` 문 등이 있다.
  • 데이터 조작어(DML) : 테이블에 데이터를 검색, 삽입, 수정, 삭제하는 데 사용하며 `SELECT, INSERT, DELETE, UPDATE` 문 등이 있다. 여기서 SELECT 문은 특별히 질의어(query)라고 한다.
  • 데이터 제어어(DCL) : 데이터의 사용 권한을 관리하는 데 사용하며 `GRANT, REVOKE` 문 등이 있다.

WHERE 조건: WHERE 절에서 조건으로 사용할 수 있는 술어에는 비교, 범위, 집합, 패턴, NULL 등이 있다.

집계 함수: 테이블의 각 열에 대해 계산하는 함수로 SUM, AVG, MIN, MAX, COUNT 다섯 가지가 있다.

GROUP BY: 속성의 공통 값에 따라 그룹을 만드는 데 사용하는 명령이다.

HAVING: GROUP BY 절의 결과에 나타나는 그룹을 제한하는 역할을 한다.

조인: 한 테이블의 행을 다른 테이블의 행에 연결함으로써 두 개 이상의 테이블을 결합하는 연산이다.

동등조인: 동등조건에 의하여 테이블을 조인하는 것을 말한다. 조인이라고 하면 대부분 동등조인을 말한다. 동등조인은 내부조인이라고도 한다.

부속질의: SELECT 문의 WHERE 절에 또 다른 테이블 결과를 이용하기 위해 다시 SELECT 문을 괄호로 묶는 것을 말한다. 부속질의는 질의가 중첩되어 있다는 의미에서 중칩 질의라고도 한다.

상관 부속질의: 상위 부속질의와 하위 부속질의가 독립적이지 않고 상위 부속질의의 투플을 이용하여 하위 부속질의를 계산하는 질의를 말한다.

투플 변수: FROM 절의 테이블 이름 뒤에 테이블의 다른 이름을 붙여주는 것을 투플 변수라고 한다.

집합 연산: SQL에서 집합 연산은 합집합을 UNION으로 나타낸다. MySQL에는 MINUS, INTERSECT 연산자가 없다. MINUS 연산자는 NOT IN, NOT EXISTS, LEFT OUTER JOIN으로 대신 나타내고, INTERESECT 연산은 JOIN 또는 IN 연산으로 대신할 수 있다.

EXISTS: 원래 단어에서 의미하는 것과 같이 조건에 맞는 투플이 존재하면 결과에 포함시킨다. EXISTS는 부속질의문의 어떤 행이 조건에 만족하면 참이다. 반면 NOT EXISTS는 부속질의문의 모든 행이 조건에 만족하지 않을 때만 참이다.

CREATE: 테이블을 구성하고, 속성과 속성에 관한 제약을 정의하며, 기본키 및 외래키를 정의한다.

ALTER: 생성된 테이블의 속성과 속성에 관한 제약을 변경하며, 기본키 및 외래키를 변경한다.

DROP: 테이블의 구조와 데이터를 삭제한다.

INSERT, UPDATE, DELETE: 테이블에 새로운 투플을 삽입하고, 수정하고, 삭제한다.