diff --git a/_posts/Computer-Science/DB/2024-04-19-sql-prerequisite-and-introduce.md b/_posts/Computer-Science/DB/2024-04-19-sql-introduce-and-prerequisite.md similarity index 86% rename from _posts/Computer-Science/DB/2024-04-19-sql-prerequisite-and-introduce.md rename to _posts/Computer-Science/DB/2024-04-19-sql-introduce-and-prerequisite.md index b1ba5bd..5f48019 100644 --- a/_posts/Computer-Science/DB/2024-04-19-sql-prerequisite-and-introduce.md +++ b/_posts/Computer-Science/DB/2024-04-19-sql-introduce-and-prerequisite.md @@ -1,5 +1,5 @@ --- -title: "[DB] SQL 학습 전 준비사항과 SQL 개요" +title: "[DB] SQL 개요 및 학습 전 준비사항" date: 2024-04-19 11:35:00 +0900 categories: [Computer-Science, DB] tags: ['DB', 'SQL'] @@ -7,7 +7,82 @@ tags: ['DB', 'SQL'] -## 1. 릴레이션 관련 용어 재정리 +## 1. SQL 개요 + +고객이 '축구의 역사' 도서의 출판사와 가격을 알고 싶어 할 때, 프로그래머는 어떻게 해야할까? 프로그래머는 **DBMS**에게 적절한 명령어를 내림으로써 목표를 달성할 수 있는데, 이 때 사용하는 **데이터베이스 전용 언어**를 **SQL**$^{\mathrm{Structured\\;Query\\;Language}}$이라고 한다. + +고객이 원하는 정보를 SQL로 표현하면 다음과 같다. + +```sql +SELECT bookname, publisher, price +FROM Book +WHERE bookname LIKE '축구의 역사'; +``` +{: .nolineno} + +SQL은 1970년대 후반 IBM이 SEQUEL$^\mathrm{Structured English QUEry Language}$이라는 이름으로 개발한 관계형 데이터베이스 언어였는데, 이후 ANSI에 의해 관계형 데이터베이스의 표준 언어로 승격되었다. + +SQL은 완전한 프로그래밍 언어는 아니지만, 데이터 부속어(data sublanguage)라고 부른다. 왜냐하면 DB의 데이터와 메타 데이터를 생성하고 처리하는 문법만 갖고 있기 때문이다. + +다음은 SQL과 일반 프로그래밍 언어의 차이점을 정리한 것이다. + +| 구분 | SQL | 일반 프로그래밍 언어 | +| ------ | -------------------------------------------- | ----------------------- | +| 용도 | 데이터베이스에서 데이터를 추출하여 문제 해결 | 모든 문제 해결 | +| 입출력 | 입력과 출력 모두 테이블[^table] | 모든 형태의 입출력 가능 | +| 번역 | DBMS | 컴파일러 | + +[^table]: 지금까지는 릴레이션(relation)으로 불려왔던 그 표를 의미한다. 밑에서 다시 설명한다. + +### 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` + +{% assign img_path = "/assets/img/posts/DB/2024-04-19-sql-introduce-and-prerequisite.md" %} +![3.1. 기능에 따른 SQL 분류]({{ img_path }}/1.1. 기능에 따른 SQL 분류.png){: width='430'} +_데이터 정의어와 데이터 조작어의 주요 명령어_ + +### 1.2. SQL의 예시 + +- **SELECT문의 문장 프레임워크** + +```sql +SELECT -- 질의 결과 추출되는 속성 리스트를 열거한다. +FROM -- 질의에 어느 테이블이 사용되는 지 열거한다. +WHERE -- 질의 조건을 작성한다. +``` +{: .nolineno} + +다음은 Customer 테이블에서 '김연아 고객의 전화번호를 찾으시오.'라는 질의를 SQL 문으로 표현한 것이다. + +```sql +SELECT phone +FROM Customer +WHERE name = '김연아'; +``` +{: .nolineno} + +SQL은 비절차적인 언어로 데이터를 조회·조작하는 데 필요한 조건을 기술하지만, 어떻게 데이터를 찾고 처리하는지와 같은 실행 절차를 직접 명시하지 않는다. + +하지만 위 SQL문은 내부적으로 DBMS에 의해 일정한 순서로 처리된다. + +![3.2. SQL의 예시]({{ img_path }}/1.2. SQL의 예시.png){: width='430'} +_SQL 문의 내부적 실행 순서_ + + + +## 2. 릴레이션 관련 용어 재정리 릴레이션과 관련된 용어는 관점을 어디에 두느냐에 따라 달라진다. 우리는 지금까지 2차원 데이터 구조를 **릴레이션**으로 불러왔지만, 실무 관점에서는 주로 **테이블**이라고 부른다. 이처럼 관점의 차이에 따른 용어의 차이를 다시 정리한다. @@ -21,11 +96,11 @@ tags: ['DB', 'SQL'] -## 2. 예제 테이블 정리 +## 3. 예제 테이블 정리 앞으로의 SQL 학습에 사용될 예제 데이터베이스 테이블을 소개한다. 이 테이블들은 앞으로의 SQL의 대상이 될 테이블들이다. -### 2.1. Book 테이블 +### 3.1. Book 테이블 - **테이블 이름** - Book @@ -55,7 +130,7 @@ tags: ['DB', 'SQL'] --- -### 2.2. Customer 테이블 +### 3.2. Customer 테이블 - **테이블 이름** - Customer @@ -83,7 +158,7 @@ tags: ['DB', 'SQL'] --- -### 2.3. Orders 테이블 +### 3.3. Orders 테이블 - **테이블 이름** - Orders @@ -114,73 +189,8 @@ tags: ['DB', 'SQL'] -## 3. SQL 개요 - -고객이 '축구의 역사' 도서의 출판사와 가격을 알고 싶어 할 때, 프로그래머는 어떻게 해야할까? 프로그래머는 **DBMS**에게 적절한 명령어를 내림으로써 목표를 달성할 수 있는데, 이 때 사용하는 **데이터베이스 전용 언어**를 **SQL**$^{\mathrm{Structured\\;Query\\;Language}}$이라고 한다. - -고객이 원하는 정보를 SQL로 표현하면 다음과 같다. - -```sql -SELECT bookname, publisher, price -FROM Book -WHERE bookname LIKE '축구의 역사'; -``` -{: .nolineno} - -SQL은 1970년대 후반 IBM이 SEQUEL이라는 이름으로 개발한 관계형 데이터베이스 언어였는데, 이후 ANSI에 의해 관계형 데이터베이스의 표준 언어로 승격되었다. - -SQL은 완전한 프로그래밍 언어는 아니지만, 데이터 부속어(data sublanguage)라고 부른다. 왜냐하면 DB의 데이터와 메타 데이터를 생성하고 처리하는 문법만 갖고 있기 때문이다. - -다음은 SQL과 일반 프로그래밍 언어의 차이점을 정리한 것이다. - -| 구분 | SQL | 일반 프로그래밍 언어 | -| ------ | -------------------------------------------- | ----------------------- | -| 용도 | 데이터베이스에서 데이터를 추출하여 문제 해결 | 모든 문제 해결 | -| 입출력 | 입력과 출력 모두 테이블 | 모든 형태의 입출력 가능 | -| 번역 | DBMS | 컴파일러 | - -### 3.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` - -{% assign img_path = "/assets/img/posts/DB/2024-04-19-sql-prerequisite-and-introduce" %} -![3.1. 기능에 따른 SQL 분류]({{ img_path }}/3.1. 기능에 따른 SQL 분류.png){: width='400'} -_데이터 정의어와 데이터 조작어의 주요 명령어_ - -### 3.2. SQL의 예시 - -- **SELECT문의 문장 프레임워크** - -```sql -SELECT -- 질의 결과 추출되는 속성 리스트를 열거한다. -FROM -- 질의에 어느 테이블이 사용되는 지 열거한다. -WHERE -- 질의 조건을 작성한다. -``` -{: .nolineno} - -다음은 Customer 테이블에서 '김연아 고객의 전화번호를 찾으시오.'라는 질의를 SQL 문으로 표현한 것이다. - -```sql -SELECT phone -FROM Customer -WHERE name = '김연아'; -``` -{: .nolineno} - -SQL은 비절차적인 언어로 데이터를 조회·조작하는 데 필요한 조건을 기술하지만, 어떻게 데이터를 찾고 처리하는지와 같은 실행 절차를 직접 명시하지 않는다. - -하지만 위 SQL문은 내부적으로 DBMS에 의해 일정한 순서로 처리된다. - -![3.2. SQL의 예시]({{ img_path }}/3.2. SQL의 예시.png){: width='450'} -_SQL 문의 내부적 실행 순서_ \ No newline at end of file +--- +#### 각주 +{: data-toc-skip=''} \ No newline at end of file diff --git "a/assets/img/posts/DB/2024-04-19-sql-prerequisite-and-introduce/3.1. \352\270\260\353\212\245\354\227\220 \353\224\260\353\245\270 SQL \353\266\204\353\245\230.png" "b/assets/img/posts/DB/2024-04-19-sql-introduce-and-prerequisite.md/1.1. \352\270\260\353\212\245\354\227\220 \353\224\260\353\245\270 SQL \353\266\204\353\245\230.png" similarity index 100% rename from "assets/img/posts/DB/2024-04-19-sql-prerequisite-and-introduce/3.1. \352\270\260\353\212\245\354\227\220 \353\224\260\353\245\270 SQL \353\266\204\353\245\230.png" rename to "assets/img/posts/DB/2024-04-19-sql-introduce-and-prerequisite.md/1.1. \352\270\260\353\212\245\354\227\220 \353\224\260\353\245\270 SQL \353\266\204\353\245\230.png" diff --git "a/assets/img/posts/DB/2024-04-19-sql-prerequisite-and-introduce/3.2. SQL\354\235\230 \354\230\210\354\213\234.png" "b/assets/img/posts/DB/2024-04-19-sql-introduce-and-prerequisite.md/1.2. SQL\354\235\230 \354\230\210\354\213\234.png" similarity index 100% rename from "assets/img/posts/DB/2024-04-19-sql-prerequisite-and-introduce/3.2. SQL\354\235\230 \354\230\210\354\213\234.png" rename to "assets/img/posts/DB/2024-04-19-sql-introduce-and-prerequisite.md/1.2. SQL\354\235\230 \354\230\210\354\213\234.png"