Railsを学ぶなら知っておきたいSQLについての基礎知識

どうも、YUTA@Yutaです。

Ruby on Railsを学習していると、途中で出現してくるSQL。Railsはdatabase.ymlを記述するだけで基本的に自動で処理してくれますが、エラーが出た際に直接生SQLを触ることがあるのではないでしょうか。

今回の記事ではRailsをはじめとしたフレームワークで開発する上で、最低限押さえておきたい基礎知識をまとめています。

基礎知識だけなら、覚えることはそこまで多くないので、今回の内容を知っておくだけでも開発時に頭の中を整理しやすいと思いますよ。

SQLについて

SQLとは?

SQLとは、リレーショナルデータベース(RDB:Relational Database)の管理や操作を行うための人工言語の一つ。業界標準として広く普及しており、様々なデータベース管理システム(DBMS:Databese Management System)で利用できる。
SQLとは-IT用語辞典 e-Wordsより

何やら難しい言葉が並んでいますが、ひとことで言えば、DB(データベース)を扱うためのプログラミング言語です。今はとりあえずこのように覚えておけばいいでしょう。

SQL命令の動作

SQLは次の命令文を記述することで、DBにあるデータ(=レコード)を操作することができます。

  • SELECT: レコードの内容を取得する
  • UPDATE: レコードの内容を書き換える
  • DELETE: レコードを削除する
  • INSERT: レコードを新規に作成する

SQL基本ルール

SQLを記述する際、次のようなルールがあります。

  • 文の途中に改行できる
  • 行の先頭や行の途中に半角に空白を入れることができる
  • 末尾にセミコロンを入れると文の終了を表わすことができる
  • SELECTやWHEREなどは予約語(keyword)と呼ばれる
  • 予約語は大文字と小文字を区別しない
  • テーブル名や列名に予約語を利用できない

特に覚えておいて欲しいのが、大文字と小文字を区別しないというルール。基本的には大文字でそろえるのが慣例ですが、参画するプロジェクトや製品によって基準が異なりますので、それに従った方がいいでしょう。

SQLのコメント方法

  • /*~*/」で囲まれた部分はコメントになる

=> 複数行のコメントアウトはこれでOK。CSS3などと共通しているので覚えやすいと思います。

  • 「–」から行末までもコメントになる
    => 1行でのコメントアウトはこっち。

リテラルとは

以下の文章はSQLを前提に解説していますが、他のプログラミング言語でも出てくる必須ワードなのでここで覚えちゃいましょう。

  • リテラルとは、SQL文の中に書き込まれたデータそのもの。
  • シングルクオーテーションで囲まれたリテラルは文字列として扱われ、囲まれなければ数値として扱われる
  • ’YYYY-DD-MM’ <= この形式の場合は日付として扱われる

データ型の種類

INTEGERはRailsでも出てきますね。

  • INTEGER…整数
  • DECIMAL,REAL…小数
  • CHAR…文字列(文字の長さ[=格納するバイト数]固定)
  • VARCHAR…文字列(文字の長さ[=格納するバイト数]が変わるもの)
  • DATETIME,DATE,TIME…日付と時刻

SQLとCRUDの関係

CRUDとは、データベースを扱う際に行う基本的な操作のこと。
MySQLにしろ、PostgreSQLにしろ、すべてのDB管理システムはCRUDが骨組みになっています。

まあ、SQLに限ったことではないんですが、何かのシステムやアプリを作るときには最低限CRUDは実装したほうがいいよってことですね。

わかりやすく、例をあげてみましょう。あなたはいま、Tシャツのネットショップを運営しているとします。
在庫・注文・顧客の情報をデータベースで管理するとき、CRUDに当てはめると次のようになるでしょう。

次の見出しからはSELECT・UPDATE・DELETE・INSERTについて一つずつ解説していきます。

SELECT文

  • SELECT文はデータを検索することができる命令文
  • 多くの製品でASの記述は省略されているし、OracleDBではASを付けてはいけない

CRUDのRead:読み取り(SELECT)

  • first…最初のrecordを取得

  • last…最後のrecordを取得

  • all…全部のrecordを取得

  • where…recordを検索する

  • find…recordをidで検索し、単体ならインスタンス(実体)のみ、複数ならインスタンスをarrayで返す

  • find_by…指定したキーで検索し、Recoredがない場合nilで返す

  • order…recordの並び替え


UPDATE文

  • UPDATEの直後に更新したいデータの存在するテーブル名を指定する
  • SETを使って更新したいカラムと更新したいリテラルを指定する
  • 特定の行だけ書き換えたい場合はWHEREを使って行を指定する

CRUDのUpdate:更新(UPDATE)

  • update…recordを上書きする

DELETE

  • すでにあるテーブルに存在するカラムを削除するための命令
  • 行をまるごと削除するという点に注意
  • WHEREを使って行を指定しないと、全データが削除されるので注意

CRUDのDestroy:削除(DELETE)

  • destroy…recordを削除する

INSERT

  • テーブルに新しいデータを追加するための命令
  • INTOを使ってテーブル名を指定し、()を使ってデータに追加する列名を指定
  • VALUEを使って列名に対応するデータの値を指定

Create:生成(INSERT)

  • create
  • new => save,save!


SQLを混乱せずに書く方法

SQLの基本構文はシンプルではあるものの、どれを使っていいのかが混乱しがち。記述する時には次の4つのポイントを意識するのがオススメです。

  • SELECTやINSERTから書き始める
  • WHEREなどを使ってテーブルの指定を行う
  • 指定したテーブルの中にある対応する列名のデータを指定
  • 指定したテーブルに対応する列名を指定(SELECTのみ)
    スッキリわかるSQL入門より