포스트

[SQL] SQL 개요 및 학습 전 준비사항

1. SQL 개요

고객이 ‘축구의 역사’ 도서의 출판사와 가격을 알고 싶어 할 때, 프로그래머는 어떻게 해야할까? 프로그래머는 DBMS에게 적절한 명령어를 내림으로써 목표를 달성할 수 있는데, 이 때 사용하는 데이터베이스 전용 언어SQL$^{\mathrm{Structured\;Query\;Language}}$이라고 한다.

고객이 원하는 정보를 SQL로 표현하면 다음과 같다.

1
2
3
SELECT  bookname, publisher, price
FROM    Book
WHERE   bookname LIKE '축구의 역사';

SQL은 1970년대 후반 IBM이 SEQUEL$^\mathrm{Structured\;English\;QUEry\;Language}$이라는 이름으로 개발한 관계형 데이터베이스 언어였는데, 이후 ANSI에 의해 관계형 데이터베이스의 표준 언어로 승격되었다.

SQL은 완전한 프로그래밍 언어는 아니지만, 데이터 부속어(data sublanguage)라고 부른다. 왜냐하면 DB의 데이터와 메타 데이터를 생성하고 처리하는 문법만 갖고 있기 때문이다.

다음은 SQL과 일반 프로그래밍 언어의 차이점을 정리한 것이다.

구분SQL일반 프로그래밍 언어
용도데이터베이스에서 데이터를 추출하여 문제 해결모든 문제 해결
입출력입력과 출력 모두 테이블1모든 형태의 입출력 가능
번역DBMS컴파일러

1.1. 기능에 따른 SQL 분류

SQL을 기능에 따라 분류하면 크게 DDL, DML, DCL로 나뉜다.

  • 데이터 정의어(DDL, Data Definition Language)
    • 테이블이나 관계의 구조를 생성하는 데 사용함
    • 예시: CREATE, ALTER, DROP
  • 데이터 조작어(DML, Data Manipulation Language)
    • 테이블에 데이터를 검색·삽입·수정·삭제하는 데 사용함
    • 예시: SELECT, INSERT, DELETE, UPDATE
      • 이 중 SELECT 문은 특별히 질의어(query)라고 부름
  • 데이터 제어어(DCL, Data Control Language)
    • 데이터의 사용 권한을 관리하는 데 사용함
    • 예시: GRANT, REVOKE

3.1. 기능에 따른 SQL 분류 데이터 정의어와 데이터 조작어의 주요 명령어

1.2. SQL의 예시

  • SELECT문의 문장 프레임워크
1
2
3
SELECT  -- 질의 결과 추출되는 속성 리스트를 열거한다.
FROM    -- 질의에 어느 테이블이 사용되는 지 열거한다.
WHERE   -- 질의 조건을 작성한다.

다음은 Customer 테이블에서 ‘김연아 고객의 전화번호를 찾으시오.’라는 질의를 SQL 문으로 표현한 것이다.

1
2
3
SELECT  phone
FROM    Customer
WHERE   name = '김연아';

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

하지만 위 SQL문은 내부적으로 DBMS에 의해 일정한 순서로 처리된다.

3.2. SQL의 예시 SQL 문의 내부적 실행 순서

2. 릴레이션 관련 용어 재정리

릴레이션과 관련된 용어는 관점을 어디에 두느냐에 따라 달라진다. 우리는 지금까지 2차원 데이터 구조를 릴레이션으로 불러왔지만, 실무 관점에서는 주로 테이블이라고 부른다. 이처럼 관점의 차이에 따른 용어의 차이를 다시 정리한다.

추가로 대응되는 파일 시스템에서의 용어도 정리한다.

릴레이션 용어실무에서 많이 사용되는 용어같은 의미의 파일 시스템 용어
릴레이션(relation)테이블(table)파일(file)
속성(attribute)열(column)필드(field)
튜플(tuple)행(row)레코드(record)

3. 예제 테이블 정리

앞으로의 SQL 학습에 사용될 예제 데이터베이스 테이블을 소개한다. 이 테이블들은 앞으로의 SQL의 대상이 될 테이블들이다.

3.1. Book 테이블

  • 테이블 이름
    • Book
  • 설명
    • 도서에 관한 데이터를 저장함
  • 속성
    • bookid${}^{\mathrm{도서번호}}$ :Primary Key
      • 각 도서를 식별하기 위해 임의로 만든 일렬번호 값을 사용함
    • bookname${}^{\mathrm{도서이름}}$
    • publisher${}^{\mathrm{출판사}}$
    • price${}^{\mathrm{정가}}$
  • 테이블 구조
    • Book(bookid, bookname, publisher, price)
bookidbooknamepublisherprice
1축구의 역사굿스포츠7000
2축구 아는 여자나무수13000
3축구의 이해대한미디어22000
4골프 바이블대한미디어35000
5피겨 교본굿스포츠8000
6배구 단계별기술굿스포츠6000
7야구의 추억이상미디어20000
8야구를 부탁해이상미디어13000
9올림픽 이야기삼성당7500
10Olympic ChampionsPearson13000

3.2. Customer 테이블

  • 테이블 이름
    • Customer
  • 설명
    • 고객에 관한 데이터를 저장함
  • 속성
    • custid${}^{\mathrm{고객번호}}$ :Primary Key
      • 각 도서를 식별하기 위해 임의로 만든 일렬번호 값을 사용함
    • name${}^{\mathrm{이름}}$
    • address${}^{\mathrm{주소}}$
    • phone${}^{\mathrm{전화번호}}$
  • 테이블 구조
    • Customer(custid, name, address, phone)
    • 밑줄된 속성은 기본키를 의미

속성값을 알 수 없는 경우 ‘값이 없음’을 나타내는 NULL로 표기하였음

custidnameaddressphone
1박지성영국 맨체스타000-5000-0001
2김연아대한민국 서울000-6000-0001
3김연경대한민국 경기도000-7000-0001
4추신수미국 클리블랜드000-8000-0001
5박세리대한민국 대전NULL

3.3. Orders 테이블

  • 테이블 이름
    • Orders
  • 설명
    • 고객의 주문 사항을 저장함
  • 속성
    • orderid${}^{\mathrm{주문번호}}$ :Primary Key
    • custid${}^{\mathrm{고객번호}}$ :Foreign Key
    • bookid${}^{\mathrm{도서번호}}$ :Foreign Key
    • saleprice${}^{\mathrm{판매가격}}$
    • orderdate${}^{\mathrm{주문날짜}}$
      • YYYY-MM-DD 형식으로 날짜를 저장함
  • 테이블 구조
    • Book(orderid, custid, bookid, saleprice, orderdate)
orderidcustidbookidsalepriceorderdate
11160002024-07-01
213210002024-07-03
32580002024-07-03
43660002024-07-04
547200002024-07-05
612120002024-07-07
748130002024-07-07
8310120002024-07-08
921070002024-07-09
1038130002024-07-10






각주

  1. 지금까지는 릴레이션(relation)으로 불려왔던 그 표를 의미한다. 밑에서 다시 설명한다. 

이 포스팅은 작성자의 CC BY-NC 4.0 라이선스를 준수합니다.