SQLは、「100点取るのは難しいけど、70点ならすぐに取れる言語」だと思う。
1ヶ月でいろいろわかることが出てきました。が先輩エンジニアに質問をすると、必ずと言っていいほど、「SQL難しいからなぁ」「わかるかなぁ」と言われます。
もちろん、JOINとかGROUP BYとかは最初概念を理解するのが難しかったけど、無理ではなかった。話を聞くとDBを扱ってくると、いろいろ絡み合ってきてカオスになる、そうです。
ここではカオスになる手前の人(初心者)のために、SQLをわかりやすく理解することを目的に一度インプットを整理してみます。
前提条件
・MySQL
・sequel proを使っています。
※くらいしかわからないほどまだ知識がありませんm(_ _)m
※今回はすでに何かしらのDBと接続していることを前提に説明をすすめていきます。
用語
・テーブル:各データが格納されているエクセルのシートみたいなもの
・カラム:1つのテーブルの縦のブロックのこと
・レコード:1つのテーブルの横のブロックのこと
LEVEL1 : 一つのテーブルのデータを全て出力する
※select文とfrom文を知る。
特定のテーブルのデータを全て表示させてみるのが、SQLを勉強する第一歩です。
sequelの上の「クエリ」タブをクリックします。
白いエディタ画面がでてくるので、ココにSQLスクリプトを書いていきます。
まずは以下の文を書いてみてください。
SELECT
*
FROM
table_1 /*ここは各DBのテーブル名を入力してください。*/
指定したテーブルを全て出力することがこれでできます。
- がFROMで指定したテーブルの全てを抽出するという処理をしてくれます。
これで、SQLの第一歩が達成しました。
LEVEL2: 特定のカラムのみを抽出する
※select文
LEVEL1では、 テーブルの全ての情報を抽出しましたが、今回はカラムを指定して、出力してみます。
以下のSQLを、sequel proのクエリに記載してください。
SELECT
table_1.col_a as ColumnA
FROM
table_1 /*ここは各DBのテーブル名を入力してください。*/
正しく1行だけ出力されれば、OKです!
今回は、select文(SELECTとFROMの間のこと)の中に 'as' という文言があります。
これは、「table_1のcol_aを出力してください。そして 'ColumnA' と命名してください」という意味になります。
複数のカラムを表示するには、以下のようにカンマ区切りにします。
SELECT
table_1.col_a as ColumnA, table_1.col_b as ColumnB
FROM
table_1 /*ここは各DBのテーブル名を入力してください。*/
カンマで複数のカラムを区切りますが、一番最後にはカンマをつけないように気をつけましょう。
(カンマをつけてしまうとsyntax errorと怒られてしまいます。)
LEVEL3: 複数のテーブルをJOINする
RDB(リレーショナル・データベース)の場合、複数のテーブルにより構成されています。
その複数の関連しているテーブルを一時的に両手つなぎで、連携しているようにしてデータを表示させます。
これは、管理を楽/シンプルにするためです。
ここで複数のテーブルを連携させることを、JOIN(ジョイン)といいます。
下の例を見てみましょう。
SELECT
*
FROM
table_1 JOIN table_2 ON table_1.id = table_2.association_id
この場合、table_1とtable_2をがっちゃんこした形で一時的に新たなテーブル(みたいなイメージ?)が作成されます。
このように、
(テーブル名) JOIN (連携したいテーブル名)ON (連携するカラム同士を=でつなぐ)
で、複数の関係のテーブルを正しく連携することができます。
図解でもっとわかりやすく説明してあるサイトがあったのでリンクを貼っておきます。
https://rfs.jp/sb/sql/s03/03_3.html
LEVEL4移行はまた別で掲載します!