8delp***
2022-02-23

SQL에 대한 매우 실용적인 접근 방식을 적용하여 대용량 데이터 저장소를 생성하고 조작하는 방법을 소개한다. 실제 사례를 기반으로 한 오라클, DB2, SQL 서버, MySQL, PostgreSQL 등 다양한 SQL 버전에서의 해결책과 실행 가능한 예제로 구성하여 업무에 도움이 되는 틀을 제공한다.
■ "SQL 기초를 마쳤다. 그 다음은?" 이라는 질문에 답해 줄 SQL 고급 해결서
요즘 'SQL'만을 주제로 다루는 SQL 단독 학습서들의 수가 늘어났다. 그렇다면 SQL은 어떤 방식으로 배울 수 있었을까? SQL 이라는 것은 보통 특정 데이터베이스를 배울때, 이를 활용하기 위한 목적으로 부차적인 부분에 그치고 있었다. 예를 들어 오라클 데이터베이스 서버를 공부하다보니 오라클을 사용해보기 위해서는 SQL을 자연스럽게 익히게 되는 것이다. 그러다보니 SQL이 주인공인 것이 아니라 특정 DBMS에 초점이 맞춰지는 부분이 많아질 수 밖에 없었다. 주로 DBMS 학습서들은 Oracle, MySQL, MS SQL Server(이하 MSSQL) 등 세가지 제품을 중심으로 사용법을 다루는 책이 주류였다는 것이다. 그런 책에는 해당 DB에 대해 소개하는 내용이 많고 DB의 특징, 내부구조, 설치 방법, 접속 클라이언트 도구 사용법이 꽤나 높은 비중으로 자리를 차지하고 있었다는 것이다. MariaDB는 MySQL과 아직도 거의 유사하기 때문에 넘어간다고 하더라도 다른 DBMS를 활용하기 위한 목적에서의 SQL 학습서는 참 드물었던것 같다. 글로벌 전체 뿐만 아니라 국내에서도 많이 사용하고 있는 PostgreSQL, DB2의 경우에는 마땅한 학습서가 나와있지 않은 것이다. 게다가 이 두 DBMS의 쿼리는 다소 상이한 점이 많다.
이 책에서는 어느 하나의 DBMS에 초점을 맞춘 SQL 학습서가 아니다. 구체적으로 말하자면 이 교재에서 다루는 DBMS는 Oracle, MSSQL, DB2, PostgreSQL, MySQL(MariaDB) 등 최소 6개의 DBMS 제품에 적용이 가능하다. 여기서 다루는 SQL만 잘 익히더라도 웬만한 DBMS에서 쿼리를 사용하는데에는 크게 어려움이 없을 것이다. 그렇다고 해서 이 6개의 DBMS 마다 각각 다른 SQL문을 따로따로 보여주지는 않는다. 대략 본 책에서 해법으로 제시된 SQL문은 두 그룹으로 나누어져 있다. 제품들이 서로 다른 점이 많고 구조적인 문제나 보안, 기능 등의 부분에서 차이가 있지만 결국 SQL도 국제 표준이 있기 때문에 여러 부분을 서로 공유하고 있다. 그래서 각 문제 상황마다 1개의 쿼리로 이루어져 있거나 2~3개의 쿼리만으로도 여기에 나오는 DBMS 제품에 SQL문 적용이 가능하다. 그래서 문제에 대한 답이라고 볼 수 있는 해법 부분에서는 쿼리 위에 어떤 DBMS에게 적용가능한지 명시되어 있다. 어떤 SQL문은 MSSQL, DB2에 적용 가능하고 나머지 하나의 SQL문은 나머지 PostgreSQL, MySQL, Oracle에 적용 가능하다는 식으로 두 개의 SQL문이 나와있는 것이다. 보통 이렇게 구성되어 있다고 보면 된다.
책 본문의 구조는 "문제 → 해법 → 설명"으로 이루어져 있다고 보면 된다. 문제 부분에서 특정 결과를 도출해야한다는 것을 나타내고 이에 대한 DB 그룹별 SQL 작성 해법, 그리고 해법에 나온 SQL 문의 자세한 세부 설명을 해주는 식으로 학습하도록 설계되어 있다.
이 책은 이러한 DBMS들을 실무에 사용함에 있어서 아주 다양하고 까다로운 조건을 갖춘 결과로 데이터를 처리해야 하는 상황에서 SQL문을 어떻게 작성해야 할지 매우 자세한 가이드가 되어준다. 사실 나는 SQL을 꽤 잘 이해하고 있다고 생각했는데 이 책의 68Page를 보고나서 내 자신이 겸손하지 못하고 그간 자만했다는 것을 느꼈다. 구체적으로 말하자면 "3.4절 한 테이블에서 다른 테이블에 존재하지 않는 값 검색하기" 라는 부분이었는데 내가 생각했던 결과와 실제 쿼리 결과가 달라서 적잖이 당황했었다. 이 상황은 조건에 Null이 들어간 경우에서 벌어지는 것이었는데 T,F로 나누어진 Boolean 값으로 각 조건을 계산해야 책에서 제시한 결과대로 나올 수 있었다. 이렇게 그간 깊게 알고 있었다고 생각했던 것이 꼭 그렇지 않았음을 이 책을 통해 깨달은 것이다. 실무에서도 개발자가 전혀 예상하지 못한 결과를 목격할 수도 있는 것이다. 그래서 본문의 쿼리를 직접 쳐보는 것도 중요하지만 결과가 왜 이렇게 나오는지에 대한 '해법' 부분을 보고 완전히 이해를 해야 한다. 이렇기 때문에 이 책을 <"SQL 기초를 마쳤다. 그 다음은?" 이라는 질문에 답해 줄 SQL 고급 해결서>라고 맨 앞에서 언급한 것이다.
Cookbook이라는 제목 답게 SQL로 데이터를 다루는 아주 다양한 방법을 수록하였다. 문자열 다루기, 숫자로 여러 통계 값을 계산하기, 범위 작업하기 등과 같은 많은 상황에서 갑자기 필요하게 될 SQL문의 작성을 도와줄 비법들을 담은 것이다. 저자가 의도하기에 독자들이 모든 DBMS의 SQL을 다 따라해보고 SQL 마스터가 되도록 하기 위해 이 책을 세상에 내놓은 것은 아닌 것 같다. 필자의 경우에도 이중 PostgreSQL이라는 특정 DBMS를 선택하고 PostgreSQL에 호환 되는 SQL만을 직접 따라해 실습하였다. 다른 제품에서 사용되는 SQL문은 차후에 해당 DB를 다루게 될때 백과사전처럼 필요한 부분을 보도록 저자가 의도한 것이라 나는 생각했다. 제목과 같이 요리책처럼 그때그때 필요할때마다 해당하는 부분을 찾아보는 것이다. 저자 또한 실제적인 문제를 해결하는 실용적인 쿼리에 중점을 두고 설명을 했다고 책 서두에서 밝히고 있다. 그리고 사전에 SQL의 기본 문법을 알거나 동 출판사에서 번역 출간된 <러닝 SQL>라는 책을 읽어본 독자가 중심 독자라고도 적었다. 만약 SQL 실력을 높이기 위해 이 책을 구입하여 공부하는 도중에 내용이 너무 어렵고 막히는 곳이 많다면 <러닝 SQL>이라는 책으로 가서 미리 익히고 오라는 뜻도 된다. 그리고나서 이 책에 다시 도전하는 것도 괜찮은 방법인 것 같다. 기초가 정 부족하다면 말이다. 이 책의 아쉬운 점도 언급해야겠다. 처음에 등장하는 테이블과 샘플데이터가 있는데 이 데이터를 얻고 실습 전에 준비하는 방법이 나와있지 않아 약간 아쉬웠다. 그러나 유명 샘플데이터라서 인터넷 검색을 통해 금방 찾을 수는 있었다. 이렇게 이 책은 SQL 그 자체에 집중하느라 각 DBMS의 설치방법, 샘플데이터 입력 등의 과정은 내용에서 과감히 생략하였다. 이 책을 공부할만한 선수지식이 있는 독자라면 쉽게 샘플데이터를 구성할 수 있을 것이다.
개인적으로는 날짜데이터를 다루는 부분이 유용했다. 나도 데이터베이스 관련 실무 일을 하면서 날짜 데이터를 가공해서 결과에 보여주어야 할때 난감할 때가 많았다. 날짜형 데이터는 다른 일반적인 문자열, 숫자형 데이터와 활용법이 완전히 다르기 때문이다. 이렇게 여러 데이터형마다 정말 다양하고 무궁무진한 응용 방법을 다루고 있기 때문에 실무에 적용이 어렵지 않을 것이다.
이 리뷰를 읽는 분들도 DBMS 도구를 이용해 SQL이라는 요리를 맘껏 만들어보시기를 바란다.