SQLとは?
「SQL(エスキューエル)」は、データベース内のデータを操作するプログラム言語です。
データベースへのデータ挿入や参照の際は、SQLを介して行うのが一般的です。
Railsでは、SQLを意識することなく、データベースにデータを挿入したり参照できるように設計されています。
代わりにRails内部では、SQLを用いてデータベースへのデータ挿入や検索、削除などの操作を行っています。
クエリとは?
データベースに送る命令(クエリ)
-
USE
取得するために使うデータベース名を記述する
USE データベース名
-
SELECT
データベースから、データを取得するためには「SELECT」を用います。このSELECTを用いて、「どのカラムのデータを取得するか」を選びます。
SELECT name ;(カラム名)
,で複数カラムを指定できる
SELECT name, price;
*で全てのカラムからデータを取得する
SELECT *;
-
FROM
データベースには複数のテーブルが存在する場合があります。 そのため、「FROM」を用いて、SELECTで選んだカラムが「どのテーブルのカラムか」を指定する必要があります。
USE データベース名 (どのデータベースを使うのか) SELECT name (どのカラムのデータの?) FROM purchases;(どのテーブルの?)
*SQLは大文字と小文字を区別しないため、小文字で記述しても問題ありません。
絶対に覚えるべきSQL(暗記してでも覚える!)
1.WHERE
特定のデータを取得
するためには、「どこの」という意味を持つ「WHERE
」を用います。「SELECT」と「FROM」で「どのテーブルのどのカラムのデータを取得
するか」までは決まっていますので、「WHERE」が意味するのは、「どこのレコード(横の行)を取得するか
」になります。
SELECT name (どのカラムのデータの?)
FROM purchases;(どのテーブルの?)
WHERE category = "食費";(例「カテゴリーカラムが食費であるレコード」)
SELECT 項目名
FROM テーブル名
WHERE 条件;
WHERE句で条件を設定する際に利用できる代表的な演算子の種類
・「=」 等しい
・「>」 より大きい
・「>=」 以上
・「<」 より小さい
・「<=」 以下
・「<>」、「!=」 等しくない
・「in」 ある値が値のセット内に含まれているかどうか
・「not in」 値が値セット内に含まれていないかどうか
・「is null」 値がnullでない
・「is not null」 値がnullでない
・「like」 パターンマッチング(あいまい検索)
・「between...and...」 値が値の範囲内に含まれているかどうか
パターンマッチング
構文
select 項目名
FROM テーブル名
WHERE 列名
LIKE ワイルドカード文
ワイルドカード文字について
・ワイルドカード文字で文字列のパターンを指定します
1.'%'(パーセント)・・・0文字以上の任意の文字列
2.'_'(アンダースコア)・・・任意の文字
・例)
1.'中%'・・・'中'で始まる文字列
2.'%中%'・・・'中'を含む文字列
3.'%子'・・・'子'で終わる文字列
4.'__子'・・・何かしらの2文字から始まり、'子'で終わる文字列
取得件数を制限するLIMIT
句
構文
SELECT 項目名
FROM テーブル名
LIMIT[オフセット,]最大取得件数;
*オフセットは省略可能
例)
select * from products limit 10;
商品テーブルの全てのカラムから10件取得
select * from products limit 0,10;
商品テーブルの全てのカラムから1から10件取得
select * from products limit 10,10;
商品テーブルの全てのカラムから10から10件取得
データを並び替えるORDER BY
データを並び替えるためには、「〜順に並べる」という意味の「ORDER BY」
を用います。またデータを並び替えるためには、「(基準となる)並べ替えたいカラム名」と「並べ方」を指定します。
ORDER BY 並び替えたいカラム 並べ方;
「ORDER BY」の並べ方は、「昇順」か「降順」を指定します。
昇順」は「小さい数から大きい数へ向かう順序」、「降順」は「大きい数から小さい数へ向かう順序」です。SQLでは「昇順」は「ASC」、「降順」は「DESC」と指定します。
ASC(昇順):123.....100
DESC(降順):100....321
例)
select 項目名
from テーブル名
where 条件
order by price desc;
2.INSERT
テーブルにレコードを挿入
したいときはINSERTを使います。
INSERTとは「挿入する
」という意味です。
INSERT INTO students(id,name,couurse)
VALUES(4,'Kate','Jsva'); ⤴︎ 順番通りに挿入される
*多くの場合、id
カラムにはAUTO INCREMENT
という機能が使われます。
AUTOINCREMENT
とは「自動で増加する」といった意味で、データが作成されるときに自動で値が割り当てられます。
3.UPDATE
データを更新
したいときにはUPDATE
を使います。
複数変更したいカラムがある場合、コンマ(,)で区切ります。
UPDATE students
SET name='jordan',course='HTML'
→ 指定カラムを新しい値にする
WHERE id=6;
→ 更新するレコードをWHEREで指定する
*注意点
WHEREで更新するレコードを指定しないとカラム内の全データが更新されてしまいます。
UPDATE実行後はデータを戻すことができません。実行前に一度SELECTを実行して、操作するデータを確認する習慣をつけましょう。
4.DELETE
レコードを削除するときはDELETE
を使います。
UPDATEと同様にクエリ実行後はレコードを元に戻すことができないので、SELECTでレコードを確認してから削除を行いましょう。
DELETE FROM students
WHERE id=7;
→ 削除するレコードをWHEREで指定する
*注意点
WHEREで削除するレコードを指定しないとテーブル内の全レコードが削除されてしまいます。
まとめ
-
取得
SELECT カラムA,カラムB FROM テーブル名;
-
挿入
INSERT INTO テーブル名(カラムA,カラムB) VALUES(値1,値2);
-
更新
UPDATE テーブル名 SET カラムA=値1,カラムB=値2 WHERE 条件; ← 必ず指定する
-
削除
DELETE FROM テーブル名