Railsエンジニアが最低限知っておくべきSQLコマンドまとめ

スポンサーリンク

 

こんにちは、Railsエンジニアにょけんです。

Rails勉強中の方に向けて、「最低限これは抑えとこう!」というSQL関連の知識をまとめました。

 

スポンサーリンク

データベースの基礎

まず、データベースの基礎用語が以下。

  • テーブル→表全体
  • レコード→データ1行
  • カラム→データ1列

例えば、「rails g model Product name:string price:integer category:string」を実行して適当にデータを登録したと仮定します。

  • テーブル→赤枠の中
  • レコード→緑色の部分
  • カラム→青枠の中(nameカラム)
Product_Table
id name price category
1 シャーペン 150 文房具
2 コーラ 200 飲み物
3 ボールペン 100 文房具

 

こんな感じ。

で、「SQL」は、このデータベースを操作するための言語です。

 

スポンサーリンク


まずはこの3つ!
覚えとかなきゃ話にならんSQLコマンド

必須の3つが以下。

タイトル
  • SELECTカラムを指定
  • WHERE→レコードを指定
  • FROM→テーブルを指定

例えば、Productsテーブルで、categoryが「文房具」である商品の「name」「price」を取得する場合は、

SELECT name, price FROM products WHERE category = “文房具”;

日本語にすると、Poductテーブルの中から、categoryが文房具であるnameとpriceを取得しろ

つまり、結果として、以下緑色の部分が取得できるわけです。

Product_Table
id name price category
1 シャーペン 150 文房具
2 コーラ 200 飲み物
3 ボールペン 100 文房具

 

基本はこの3つで、あとはこれにいろんなオプションを突っ込んでいく感じですね。

 

「〜以外」を指定する「NOT」

SELECT name, price FROM products WHERE NOT category = “文房具”;

とすると、さっきの逆なので「コーラ」「200円」というデータが取れます。

つまり、結果として、以下緑色の部分が取得できるわけです。

Product_Table
id name price category
1 シャーペン 150 文房具
2 コーラ 200 飲み物
3 ボールペン 100 文房具

NOTの入れる位置が感覚的にわかりにくいので注意!

 

複数の条件を指定するときは「AND」「OR」

条件は複数指定することができます。

どちらも満たしてほしい場合は「AND」

categoryが「文房具」で、かつ、priceが150以上のレコードを取得したければ、

SELECT * FROM products WHERE category = “文房具” AND price >=150;

Product_Table
id name price category
1 シャーペン 150 文房具
2 コーラ 200 飲み物
3 ボールペン 100 文房具

 

どちらかを満たす場合は「OR」

categoryが「文房具」で、または、priceが150以上のレコードを取得したければ、

SELECT name, price FROM products WHERE category = “文房具” OR price >=150;

Product_Table
id name price category
1 シャーペン 150 文房具
2 コーラ 200 飲み物
3 ボールペン 100 文房具

 

「任意の文字を含むデータ」を取得したいときは、「LIKE」と「ワイルドカード(%)」

「全データの中で、nameに『ペン』という文字を含むモノだけ欲しい!」って場合に便利なのが、LIKEとワイルドカードです。

SELECT * FROM products WHERE name LIKE”%ペン%”;

Product_Table
id name price category
1 シャーペン 150 文房具
2 コーラ 200 飲み物
3 ボールペン 100 文房具

このようにあいまいな指定をする場合は、「=」ではなく「LIKE」を使うので気をつけましょう。

 

値がnullのモノを取得するには、「NULL」

priceが「NULL」のカラムを取得したい場合は、

SELECT * FROM products WHERE price IS NULL;

 

priceが「NULL」以外のカラムを取得したい場合は、

SELECT * FROM products WHERE price IS NOT NULL;

 

並び替えは、「ORDER BY」

昇順・降順で並べるには「ORDER BY」を使います。(ASC→昇順、DESC→降順)

priceが高い順に並び替える場合は、

SELECT * FROM products ORDER BY price DESC;

Product_Table
id name price category
1 コーラ 200 飲み物
2 シャーペン 150 文房具
3 ボールペン 100 文房具

昇順は、DESCを「ASC」にするだけ。

 

取得する件数を指定するには「LIMIT」

例えば、priceが1番高いものだけ取得したければ

SELECT * FROM products ORDER BY price DESC LIMIT(1);

Product_Table
id name price category
1 コーラ 200 飲み物
2 シャーペン 150 文房具
3 ボールペン 100 文房具

 

重複データを省くには「DISTINCT」

categoryカラムが「文房具」のものが2つありますが、「1つだけしか使わない」みたいなときにDITINCTを使います。

SELECT DISTINCT(category) FROM products;

Product_Table
id name price category
1 シャーペン 150 文房具
2 コーラ 200 飲み物

 

 

スポンサーリンク