SQLを勉強した方が良い理由とおすすめの勉強方法

こんにちは。システム開発は順調でしょうか。システム開発で欠かせない技術の1つにSQLがあります。ご存じの通り、SQLはデータベースを操作する技術ですが、システム開発を行っていると、このSQLの壁にぶち当たる日が来ると思います。

「SQLが分からない」

「SQL勉強しないとやばいな」

新人エンジニアの多くがプログラミング言語(いわゆるJavaやPHP)は勉強するものの、SQLを定期的に勉強しているエンジニアは少ないと思います。
優先順位はプログラミング言語より劣るような印象がありますから。
しかしながらSQLはシステム開発で超重要です。個人的にはプログラミング言語の勉強よりも優先して勉強すべきだと思っています。これはシステム開発経験をしてSQLのやばさを感じないとなかなか理解できませんが、それでは手遅れなのでなぜSQLを勉強しないとマズイのかご説明しましょう。

システム開発にSQLは必須である

Webシステムはプログラムコードを書くことで画面表示やデータ処理を構築します。しかしそのデータを保存する処理はSQLが担います。

例えばログインユーザーが画面からデータを入力して、次回ログイン時にそのデータを閲覧できる処理を実現する場合を考えると、画面で入力したデータをサーバー側に持っていく処理はプログラム側で行えますが、そのデータをデータベースに保存する処理はSQLしかできません。(次回ログイン時にそのデータを閲覧する処理を実現するためには、データをデータベースに登録する必要があります。)

ホームページのような静的なWebサイトであればSQLは不要なのですが、Webシステムやスマートフォンアプリになるとデータベースが必須なので、SQLも必須になります。つまり、システム開発をするためには最低一人はSQLを理解しているエンジニアがいないと
システムは作れません。

SQLはシステムの質を左右する

SQLの書き方の善し悪しはシステムの質を大きく左右します。不必要にSQLを書いてしまうとその度にデータベースに接続しに行くためデータベース操作が遅くなり、システムの質が落ちます。また、複数テーブルを対象にデータをSELECTする際にwhere句なしでテーブル結合をしてしまうとテーブルに存在するすべてのデータを結合してしまうため、データ取得に時間がかり、システムの使い勝手が悪くなります。SQLでデータベースのデータを取得しに行くと、その処理が完結するまでは次の処理に進めないため、質の悪いSQLを書くとフロント側までデータを渡すのに数十秒かかってしまいます。
SQLはシステムの性能面で大きな影響を及ぼします。
1つの画面を表示する度に20秒近くかかってしまうシステムがもしあったとしたら、あなたは使いたいと思いますか。

SQLは真似しづらい

プログラミングコードの記述は参考となるべき参考書が販売されていたり、またgoogle先生で検索すれば、必要な書き方が見つかったりしますので、それらを上手に流用すればシステム構築はできるようになります。またeclipseなどの開発環境でプログラム開発をするなら、デバック機能でデータの状態を見られますので、思うようにシステムが動かなかった時でも原因を探り当てるのは比較的簡単です。

しかしSQLは違います。
SQLはテーブル名やカラムのデータ型、制約などデータベースによって異なります。もちろん、SQL構文や結合の仕方は、参考書やgoogle先生から参考情報を得られますがそれらの書き方を真似したところでうまく行かないことが多いです。
参考書ではAテーブルのuserID(number型)とBテーブルのpersonaiID(number型)を等価結合していたとしても、もしあなたがXテーブルのyourID(varchar2型)とYテーブルのmyID(number型)を結合したい場合は事情が異なります。
参考書の結合方法は参考になりません。

このようにSQLは結合の仕方などの基本的な構文は参考書やgoogle先生から入手できるのですが、実際の結合方法はそれぞれ事情が異なるため、本質の部分を理解していないと先に進めません。
おそらくそこでストップして、二進も三進も(にっちもさっちも)いかなくなります。SQLでストップしてしまうと解決方法が分からないまま時間だけが過ぎ、そのまま納期に間に合わず試合終了となってしまいます。

大規模システムほどSQLが要となる

規模が大規模になればなるほどSQLはシステムの要となります。
大規模システムとは一般的にユーザー数が何万単位で存在しているシステムであり、ユーザー数を考えると、それに紐づくデータの数は何百万件にも上ります。
規模が大きいほどデータベースに登録されるデータが多いのでその分、SQLのSELECT文の書き方が大規模システムの評価を大きく左右します。
また大規模になる前、つまりユーザー数が少なかった頃には問題とならなかったSQLもユーザーが増えたことでデータ取得に時間がかかるようになり、効率的な書き方に書き変える必要がでてきます。(これをSQLチューニングと言います。)
システムは大規模になると様々な問題が顕在化しますが、その中でもSQLに関連する問題は頻繁に発生します。大規模システムを上手に運用するにはSQLが要となります。

SQLは案件が変わってもSQL

SQLの良い点は主なプログラミング言語が変わろうともSQLはSQLです。あるシステムをJavaで開発していましたが、その後は別のシステムをPHPで開発する必要があったとします。プログラミング言語は言語によって書き方も考え方も異なるため、勉強し直さねばなりませんが、SQLは基本的に変わりません。(細かい書き方の違いはありますが、おおむね同じです。)そのため一度しっかり身に付けるとどの開発案件でも活用できます。開発案件が変わり、主なプログラミング言語が変わろうともSQLの技術は変わらず活かせます。

おすすめのSQLを勉強する方法

このようにシステム開発にはSQLは不可欠です。
SQLを身に付けると開発の幅や任される業務も拡大すること間違いなしでしょう。しかしながら、開発現場で使えるレベルまで到達するのは簡単ではありません。まずはSQLの基本的な構文を習得したうえで徐々にレベルアップしていきましょう。
最初が一番大変だと思いますが、ベースをしっかり身に付ければ後はラクに知識を上乗せしていけます。

①DMLを身に付ける

SQL構文の中で最もよく使うSQLがDMLです。ここをしっかり理解しないと応用のSQL文は書けませんし、次のステップに進んでも意味がありません。まずは時間をかけてDMLを習得しましょう。DMLで抑えておくべきは以下の4つです。

SELECT文

データベースに登録したデータを検索するためのSQLです。このSELECT文がすべてのDML、いやすべてのSQL文の中で一番使います。データベースに登録したデータを条件付き検索やテーブル結合して検索など方法は様々。(条件付きやテーブル結合は後述します)またSQLのチューニングを行う対象もSELECT文なので、一番深く理解する必要があるSQLです。

SELECT文はSELECTの対象が*(アスタリスク)の場合とカラムの場合で取得できるデータが変わります。*はすべてのデータを取得、カラム名の場合は記述したカラムのデータのみ取得します。まずはコマンドやツールでSELECT文を実行してみて、対象によって取得できるデータが違う点を理解してください。

INSERT文

データベースに新しいデータを登録するためのSQLです。具体的な例で言うと、ユーザーの新規会員登録のシーンで使います。画面でユーザーがデータを入力した後、送信ボタンを押すと入力データがINSERT文に組み込まれそのままデータベースに書き込まれます。SNSの新規投稿なども同じくINSERT文で実行されます。新しいデータを書き込む動作はすべてINSERT文で実行します。

UPDATE文

データベースに登録されている情報を更新するためのSQLです。画面上でデータを修正するシーンなどはUPDATE文を実行しています。UPDATEはWHERE句で正確に条件指定をしないと更新してはいけないデータまで誤って更新してしまうので、慎重に実行する必要があります。

DELETE文

データベースに登録されている情報を削除するためのSQLです。投稿したSNSをやっぱり削除したいときなどはDELETE文を実行しています。UPDATE文同様、削除したいデータをWHERE句で正確に条件指定しないと削除してはいけないデータまで誤って削除してしまうので、慎重に実行する必要があります。

②肉付け句を身に付ける

DMLが最低限理解できるようになったら次は肉付け句の理解です。
・SELECT * FROM TABLE _A;
・INSERT INTO TABLE_A (ID,Name,Address,Number) VALUES(‘1’,’佐藤大輔’,’福岡県福岡市中央区天神4-5’,’09012345678’);
・UPDATE TABLE_A SET Number =’09011111111’;
・DELETE FROM TABLE_A:

上記の4つのSQLが何をしているか理解できればDMLが最低限理解できたと判断して良いと思います。ではそのDMLをより精密に実現するための肉付け句です。肉付け句とは僕が勝手に命名しているのですが、ザックリ言うとWHERE句やGROUP BY句、ORDER BY句などのDMLをより細かく扱うためのSQLです。この肉付け句正確に理解できれば、SQLのミスが大幅に減ります。

WHERE句

肉付け句の中で多用するSQLがWHERE句です。WHERE句で条件を指定して正確なデータを特定するのはSQLの真骨頂です。SELECT文やUPDATE文、DELETE文とはセットで使います。

ORDER BY句

SELECT文を実行する時に決まった順でデータ取得をしたいときに使うSQLがORDER BY句です。ASCとDESCどちらかをしています。ASCは昇順取得、DESCは降順取得します。

GROUP BY句

SELECT文でグループデータを扱うときに使うのがGROUP BY句です。グループ分けしたデータの平均値やグループの中の最大値を求めたいときに使います。

③テーブル結合を身に付ける

肉付け句は理解できたでしょうか。DMLと肉付け句が理解できれば、データ操作に自信を持ち始められる頃です。しかしまだ正確なSQLを書くには勉強がいります。次はテーブル結合です。DMLを実行する際に1つのテーブルを対象に実行するSQLを書くことは少なく、半分以上のSQLは複数テーブルを結合したデータを対象にDMLを実行します。

SELECT * FROM TABLE_A a JOIN TABLE_ B b ON a.ID = b.userID WHERE b.Country = ‘JPN ‘;

④サブクエリを身に付ける

SQL技術をワンランク上に押し上げるためにはサブクエリ(副問い合わせ)の勉強はとても大切です。DMLを実行する際の条件は固定値ではなく、特定の検索結果を対象にしたい場合があります。例えば、「TABLE_Bの中にあるデータでCountryが’JPN’でAgeが’90’以上のデータのuserIDとIDが一致するTable_Aの中から見つけたい。」という場合、

SELECT * FROM TABLE_A a WHERE a.ID IN (SELECT b.userID FROM TABLE_B b WHERE b.Country = ‘JPN’ and b.Age >= ‘90’);

と書きます。

理解できましたか。

サブクエリまでできるようになると、十分活躍できるエンジニアになれると思います。

⑤データベース管理ができるようになる

いよいよ最後です。DB管理ができるようになれば、頼りにされるエンジニアになれると思います。データベースにはデータベースを管理するための技術も必要です。テーブル作成やカラムの変更(CREATE文、ALTER文など)、セキュリティ上、管理者以外はデータベースを操作できないようにする設定も重要です。ViewやSynonym設定も欠かせません。これらはユーザーがデータベースを快適に利用するためにデータベースを直接的に操作する技術(データを操作するのではない)です。データベース管理を任されれば、もう一人前と言えます。

SQLの資格

せっかく勉強するなら資格を取りたいという方にはオラクルマスターかIPAデータスペシャリスト試験をおすすめしています。基本情報技術者試験にも一部はSQL問題が出題されますが、SQLをしっかり勉強したい方にはオススメできません。僕の一番オススメはオラクルマスターのBronzeです。これはORACLEデータベースを操作するためのSQL試験ですが、SQL全体の勉強になりますので、普段はMySQLやPostgresqlを使うエンジニアにとってもオススメの資格です。

オラクルマスター

オラクルマスターはレベル順にBronze、Silver、Gold、Platinumに分かれています。Bronzeでも難易度は高いですが、「自身を持ってSQLが得意」と言うためにはSilverまで取得したいところです。GoldやPlatinumまでいけば、一目置かれる存在になります。ちなみに1年間の間に同じ試験は4回までしか受けられません。

オラクルマスターBronze

Bronzeは、「SQL基礎」と「DBA」の2つで構成されていて、それぞれ合格してはじめてBronze資格を取得できます。SQL基礎は基本的なDMLから難易度高めのSQLまでまんべんなく出題されます。75問を120分以内に回答しないといけないのですが、しっかり勉強していないと時間が全く足りません。似たような選択肢の中から選ぶので、SQLを正確に理解していないと回答できないと思います。DBAはORACLEデータベース管理に必要な内容になっています。ORACLE製品のインストール方法からデータベースバックアップ、表領域やリスナー、Viewなどに関する問題が出題されます。
SQL基礎とDBAはそれぞれ別のタイミングで受けるので、「まずはSQL基礎に合格した後、DBAを受ける」というように順番に受験ができます。

オラクルマスターSilver

Silverは、Bronzeに合格後に受験できます。つまり、応募資格はBronze合格者であることです。
SilverはDBAのみでSQLはありません。DBAに合格すればSilverを取得できます。BronzeのDBAを難易度高めにして、主に大規模データベース関連の内容が出題されます。

オラクルマスターGold

Goldになってくると、もはやデータベースエンジニアやインフラエンジニアを目指す方が受験対象になるレベルです。一般のエンジニアは取得しなくても問題なしです。内容はチューニングやリカバリ、バックアップなどの専門知識が求められます。

オラクルマスターPlatinum

Platinumは、オラクルマスターの最高峰です。これに合格すれば、もはや神レベル。オラクルの構築からトラブルシューティングなどトータル的な運用を要求されます。実技試験もあります。具体的には、ネットワークと端末が用意されたところで「オラクルの製品が接続できないがどうすればよいか。解決せよ」という課題を与えられ、頭と体を使って解決します。

IPAデータスペシャリスト試験

オラクルマスターはORACLE社が実施している試験ですが、IPAデータスペシャリスト試験は国が実施している国家試験です。オラクルマスターと異なり、問題数は少なめで1問当たりの問題文が長い傾向にあります。難易度は高めですが、国家試験合格と箔がつきます。

SQLを習得できれ仕事の幅は大きく広がる

以上、SQLの勉強について紹介しましたが、SQLはシステム開発には欠かせない技術です。プログラミング言語だけを勉強していると、いずれ必ずSQLの壁にぶち当たりますので、少しずつでも今からSQLの勉強をし始めましょう。自由自在にデータベースが操作できるようになると、だんだんSQLが面白くなってきますよ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です