book

SQL Cookbook(쿡북)

영쓰keep 2022. 2. 16. 18:51
SQL은 어디까지 해야 할까요?
이책의 부제는 "모든 SQL사용자를 위한 쿼리 완벽 가이드" 라고 적혀있습니다.

 

책의 두께 : p.668 로 실물은 생각보다 두껍습니다.

책의 연혁 

2005년에 초판이 출간되었고, 2020년에 2판이 새롭게 만들어 진 책이라고 합니다. 초판은 우리나라에 번역이 되지 않아서 출간되지 않았습니다.

역자분이 현재 Oracle에서 컨설턴트로 근무하고 계셔서 가장 DataBase를 많이 알고 계시는 전문가라고 생각이 듭니다.

 

Database 타입 (각 DB타입별로 SQL 제공합니다.)

  → DB2 11.5

  → Oracle Database 19c

  → PostreSQL 12

  → SQL Server 2017

  → MySQL 8.0



 

 

 

 

책의 목차를 통해, 예상해보기 (나에게 어떠한 도움이 될지? 실제 그 내용이 있는지 확인해보기)
    ☞ 기대감/복기는 개인적인 의견입니다.

목차 예상 기대감 복기
Ch.1 레코드 검색
select 관련 조회 정보(기본이지만, 제일 활용도가 높을것 같다.)  
Ch.2 쿼리 결과 정렬
order by관련 (정렬에 어떠한 tip있을까? index에서 정의된것 사용?)  
Ch.3 REST 다중 테이블 작업
join을 의미하는것 같다 (REST라는 표현을 쓴 이유가 있을까?)  
Ch.4 삽입, 갱신 및 삭제하기
insert / update / delete관련 (뒤에 where절에 대한 것일까?)  
Ch.5 메타 데이터 쿼리
예상이 안된다. (메타가, database초기 설치시, 기본값을 의미?)  
Ch.6 문자열 작업
문자열을 합치고, 자르고, 분리하고 등등 이지 않을까?  
Ch.7 숫자 작업
숫자 계산 sum, avg등을 이야기 할까?
Ch.8 날짜 산술
이것도 중요, 날짜 차이, 몇달뒤, 날짜를 이용해서 조건걸기 등등 필수!!
Ch.9 날짜 조작기법
8장의 날짜가 있는데, 얼마나 중요했으면 날짜 Chapter가 1개 더!!
Ch.10 범위 관련 작업하기
where조건절은 성능 튜닝의 1단계!! 제일 중요
Ch.11 고급 검색
이 책의 노하우 아닐까? 고급이라는 단어에 관심이 매우 간다.
Ch.12 보고서 작성과 재구성하기
DB의 꽃?인 통계, group by의 절정판일까? 모르면 엄청 복잡해지는 통계 쿼리, 도움되는 것이 많았으면 좋겠다.
Ch.13 계층적 쿼리
이거는 Oracle에만 있는 계층형 connect by ~ start with??
오, 그럼 다른 DB에서도 사용가능한 계층형에 대해서 언급이 되는건가
Ch.14 기타 다양한 기법들
너무 다양하면 잘 안쓸거 같은데, 진흙속에 보석을 만날수 있을까?  

 

 

책에 리뷰를 적다가 SQL에 대해서 몇가지 생각을 정리해봤습니다.

SQL을 한번 생각해보면..

SQL은 언어입니다. SQL의 L은 Language입니다. 프로그래밍 언어와 다르지 않습니다.

  • SELECT쿼리는 대부분 기본적으로 작성하며, 이해하기 쉽다고 생각합니다.
  • 중요 데이터는 안전성/무결성등이 확보된 RDBMS를 사용한다. 
  • Query작성은 개인의 능력에 따라서 천차 만별입니다.
    • 그 차이는 Data가 많이지면, 극명하게 나타납니다.
    • 같은 결과이지만, 실행되는 쿼리는 매우 다양하게 작성됩니다. (쉽게 작성할수도, 어렵게 작성될수도 있습니다.)
    • excute-time, cpu, memory의 증가는 쿼리의 실행계획에 따라서 많은 차이가 나타납니다.
  • 요즘에는 ORM기술이 많이 사용되어서, 예전에 비해서 직접 쿼리 사용하는 빈도가 줄어 들었을 것으로 생각됩니다.
  • 전통적인 DBMS가 아닌, DB(Mogodb, Elastic Search, Redisemd)의 활용도 많아지고 있습니다.
  • 기타 테이터 분석을 위한 Pandas등을 통해서도, 기본적인 조회 및 기본 Sql에 비해서 Group by등의 장점등, 차별적인 기술들이 많아졌습니다.
  • 하지만, SQL에서만 가능하고 편한것이 많으며, 다른 기술들이 커버하지 못하는 영역이 매우 많습니다.
    DataBase를 이용하는 엔지니어와 SQL은 숙명과 같은 존재라고 생각합니다.
    troubleshooting이나, 성능튜닝등을 처리하기 위해서는 SQL을 잘 알아야 합니다.
  • 다양한 SQL의 기능을 대체하는 기법들(ORM, Pandas등)이 SQL의 문법을 각 필요에 따라서 변경이 된것이고,
    개발자의 직군에서 SQL학습은 필수라고 생각이 듭니다.

 

 

요즘 ORM기술이 많이 사용되어서, 정리를 해보고 싶어서 SQL대신에 ORM을 왜 사용하고 있는지 생각을 정리해 보았습니다.

 

ORM에 대해서 간단히 정리

Backend개발에서 DataBase는 중요한 정보 저장의 역활을 합니다.

예전에는 쿼리를 조회하고 해당 resultSet정보를 가공하는 방식이 주로 사용되었지만

현재는 ORM(Object-Relational Mapping)으로 불리우는 기술을 많이 사용됩니다.

ORM : 객체(Object)와 관계형 데이터베이스(Relational Database)의 데이터를 매핑(Mapping)해주는 기술
- 장점이라고 생각되는것
  (TestCase Mock생성, 이종 DataBase 커버, 추후 DataBase교체시에도 쿼리작업 취소화등)

보통 Java를 사용시에는 JPA(Java Persistence API)를 많이 사용하고, Spring Framework와 함께 사용합니다.

Django Framework에서는 기본적으로 ORM을 제공합니다.

node에서는 시퀄라이즈(sequelize) ORM이 있고, 그밖에 ORM을 지원하는 많은 Library가 존재합니다. 

 

<샘플>

Table의 항목을 Entity로 정의하고, CRUD처리가 모두 가능합니다.

Table 정의
JPA 조회
장고 ORM

이렇게 쿼리의 select구문이 없어도 DataBase의 조회도 가능하고, 수정도 가능합니다.

하지만 이런 것이 결국 SQL로 변환되어서, Database에 질의되어서 결과를 가지고 옵니다.

(React, Vue등의 개발을 해도 결국 JavaScript로 변환되어서 서비스 되는 원리와 동일합니다.)

 

 

 

 

DataBase책 관련

제가 생각하는 DataBase의 책은 크게 3가지 구분이 되지 않을까 생각합니다.

1. 기본원리 (Database동작 원리, 학생부때 원리책)

2. Oracle,Mysql등 벤더사별 DB 원리

3. 그리고 잘사용하기 위한 각종 고급화 단계에 대해서 설명하는 책

 

 

 SQL-쿡북은 어떤 종류의 책일까요?

종류에서 3번에 해당하는 책이고, 초급자, 중급자를 대상으로 모두 다 편하게 보실수 있는 책입니다.

SQL은 평상시 아는 패턴만 사용하고, 알지 못하는 기법은 계속 사용 못하게 되는 참 신기한 언어입니다.

필요한 부분만 찾아서 기법을 학습하기 좋은 책입니다.

 

 

책 실습환경 / 대상독자

  • 실습환경
    책의 실습은 oracle에서 기본적으로 제공하는 dept, emp 테이블을 가지고 합니다.
    추가적인 Create테이블이 필요시 script가 제공됩니다.
    Oracle이 아닌 다른 DB를 사용시에는, 별도 환경구성이 필요합니다. 책에서 사용되는 쿼리는 한빛 자료실에서 제공합니다.
대상 독자
1. SQL을 배우고 싶은 모든 개발자를 대상으로 합니다.
    기본적인 것부터 설명을 하며, 초급 구문부터~ 고급구문까지 커버하고 있습니다.
2. 다른 DB를 사용해야 하는 분
    예를 들어 Oracle을 주로 사용하시다가 Mysql or PostreSQL or MSsql 등을 사용해야 하시는분
    동일 조회내용을 5종류의 DB로 모두 실행하기 때문에 구문의 차이를 확연하고, 쉽게 학습할 수 있습니다.
    ((예를 들어 책에서 나온 예시))
     SQL 수행시 필수적으로 사용하는 반환되는 행갯수에 대해서 아래와 같이 설명합니다.
    - DB2 (fetch fisrt), Mysql,PostreSQL(limit), Oracle (rownum), SqlServer(top) 키워드를 사용합니다.
       5가지 DB의 내용이 한번에 정리되어서 파악하고, 비교하기 좋았습니다.
    - 불가능한 부분은 안된다고 언급을 합니다.
3. 필요할때 마다 검색을 통해서 쿼리 작성에 도움을 받는분이라면, 쿡북으로 주요 사용쿼리를 익혀두시면 좋을거 같습니다.

 

 

책에 대한 소감

  • 기본에 충실한 도서라는 느낌을 받았습니다.
  • 내가 작성하고, 사용하는 SQL에 대한 검증하는 느낌도 들었습니다. (동일 패턴이 있는지, 외국저자분께 확인 받는 느낌)
  • 데이터베이스별로 SQL의 지원 여부가 바로 바로 비교되니, 쉽게 이해가 되고 흥미로웠습니다
    대상독자에도 설명을 하였는데, 다른 Database를 사용하게 되는경우 좋은 비교/참조가 될 것 같았습니다.
  • Oracle에 있는 Translate함수가 Mysql에 없을때, 가능한 방법 설명이 좋았습니다.
  • 문자열, 날짜등에 대해서 기본적으로 많이 사용하게 되는 조회조건에 대해서 좀더 세부적으로 알게 되었습니다.
  • 통계 및 보고서 관련 작성을 위해서 쿼리가 길어질수 밖에 없고,
    데이타 조회는 가능한데 이 쿼리가 최선인지 고민되시는 분들에게 좋은 가이드가 될거 같습니다.
  • 책의 전반적인 학습을 통해서, 해당 SQL이 패턴이나 처리할수 있는 함수의 존재만 인지하고 있다면, 
    추후 현업에서 필요시, 찾아서 SQL작성을 좀더 용이하게 도움을 받을수 있을것 같습니다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."