1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

これだけは抑えておく! SQL【基本】

Posted at

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 テーブル名
    
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?