SQLとは
クエリ(データベースに送る命令)を書くための言語
Ruby on Rails
でモデルを介してDBからデータを取得した際などに、SQL文がターミナル上に出力される
基本形
- (どのテーブルのどのカラムのデータを呼び出すかを指定)
sample.sql
SELECT "カラム名"
FROM "テーブル名";
/* 実際のカラム指定はクォーテーション無し */
- 具体例
sample.sql
/* 基本形 */
SELECT name
FROM users;
/* 複数指定 */
SELECT name, email
FROM users;
/* 全てのカラムを指定 */
SELECT *
FROM users;
特定のデータの取得( WHERE カラム名 = 値の指定 )
性別やカテゴリーなどの一意でないカラムから特定のデータを抜き出す
例:男性のみを指定
id | name | address | sex | |
---|---|---|---|---|
1 | ... | ... | ... | 男性 |
2 | ... | ... | ... | 女性 |
3 | ... | ... | ... | 男性 |
4 | ... | ... | ... | 男性 |
5 | ... | ... | ... | 女性 |
SELECT *
FROM users
WHERE sex = "男性";
/* 文字列型のデータは""で囲む */
特定の範囲のデータ取得( WHERE + 比較演算子)
SELECT *
FROM products
WHERE price > 1000;
/* 値段が1000円より高いのデータを取得 */
SELECT *
FROM posts
WHERE created_at <= "2020-12-01";
/* 2020/12/01より前に投稿されたデータを取得 */
特定の情報の含まれるデータの取得( WHERE + LIKE )
id | name | price |
---|---|---|
1 | ショートケーキ | ... |
2 | チョコレートケーキ | ... |
3 | チーズケーキ | ... |
4 | チョコレートアイス | ... |
5 | 生チョコレート | ... |
SELECT *
FROM products
WHERE name LIKE "%ケーキ%";
/* 文字列"ケーキ"が含まれる(id:1,2,3)データが取得 */
SELECT *
FROM products
WHERE name LIKE "チョコレート%";
/* 文頭に文字列"チョコレート"が含まれる(id:2,4)データが取得 */
SELECT *
FROM products
WHERE name LIKE "%チョコレート";
/* 文末に文字列"チョコレート"が含まれる(id:5)データが取得 */
特定の条件に該当しないデータの取得( WHERE + NOT)
SELECT *
FROM products
WHERE NOT name LIKE "%ケーキ%";
/* (文字列"ケーキ"を含む)に該当しないデータの取得 */
SELECT *
FROM products
WHERE NOT price >= 1000;
/* (値段が1000円以上)に該当しないデータの取得 */
SELECT *
FROM users
WHERE NOT created_at <= "2020-12-1";
/* (登録日が2020/12/01より前)に該当しないデータの取得 */
カラム =(NULL or NOT NULL)のデータの取得
SELECT *
FROM users
WHERE introduction IS NULL;
/* introductionがnull(空)のデータを取得 */
SELECT *
FROM users
WHERE image_id IS NOT NULL;
/* image_idがnull(空)でないデータを取得 */
複数条件の指定(WHERE + AND / OR )
SELECT *
FROM users
WHERE address LIKE "%東京都%"
AND age >= 20;
/* (addressカラムに文字列"東京都"を含む)かつ (ageカラムが20以上)のデータの取得 */
/* 東京都に住んでいる20歳以上の人のデータ */
SELECT *
FROM users
WHERE address LIKE "%千葉県%"
OR address LIKE "%茨城県%";
/* 住所が(千葉県 あるいは 茨城県)の人のデータの取得 */
取得したデータの並び替え(ORDER BY 昇順 or 降順)
SELECT *
FROM users
ORDER BY age ASC;
/* 昇順:年齢が若い(ageの値が小さい)データから順に並べ替え */
SELECT *
FROM products
ORDER BY price DESC;
/* 降順:値段が高い(priceの値が大きい)データから順に並べ替え */
SELECT *
FORM products
WHERE price <= 1000
ORDER BY calorie ASC;
/* 複数指定 + 並べ替え:1000円以下でカロリーが低いものから順に並べ替え */
取得するデータ個数の制限(LIMIT)
SELECT *
FROM posts
WHERE user_id = 1
LIMIT 5;
/* user_idが1のユーザーの投稿を5件のみ取得 */
SELECT *
FROM orders
WHERE user_id = 2
ORDER BY charge DESC
LIMIT 10;
/* (user_idが2のユーザー) &(注文金額が高いものから順に)10件のみ取得 */
補足
SQL文はRudy on Railsアプリケーションでのデータ取得の際、ターミナル上にて目にすることが多い為、基本文法を理解するだけでもターミナルの標準出力を理解し易くなるかと思います。
記載内容に間違い等ございましたらご連絡頂けると幸いです。