プログラミング学習をはじめて、SQLに触れる機会が増えてきました。
今回は備忘録として、学んだ内容を漫画データベースを題材として簡単にまとめます。
この記事でわかること
- SELECT(データの取得)
- WHERE(条件検索)
- ORDER BY(並び替え)
- COUNT(件数取得)
- IN / BETWEEN(条件指定)
- UPDATE(データの更新)
SELECT文の基本構文
SELECT文の最も基本となるのがSELECT文。
基本構文は次のとおりです。
SELECT [取得したい列] FROM [テーブル名];特定のカラムだけ取得する
漫画(comics)テーブルから漫画のタイトル(title)だけを取得する
SELECT title FROM comics;複数カラムを「,」で取得する
漫画(comics)テーブルから漫画のタイトル(title)と作者(author)を同時に取得する
SELECT title,author FROM comics;テーブルのすべての要素を取得する:(*)
*を使うとテーブルの全てのカラムをまとめて取得できます。
SELECT * FROM comics;ASでカラムに別名をつける
AS句を使用すると、取得したカラムに別名(エイリアス)をつけることができます。
SELECT title AS comic_title FROM comics;このように書くと、titleカラムをcomic_titleという名前で出力できます。
WHEREで条件検索
WHEREは「どのデータを取得するか絞り込む」ための句。
基本構文
基本構文は次のとおりです。
SELECT [取得したい列] FROM [テーブル名] WHERE [条件文];データベースから必要なデータだけをとってくれます。
例:idが3の漫画タイトルを取得
comicsテーブルの中からidが3のレコードだけを取り出して、その中のtitleカラムを表示する場合
SELECT title FROM comics WHERE id = 3;例:作者が"Oda"の漫画のidを取得
comicsテーブルの中から、作者(author)が"Oda"の漫画のidを取得したい場合
SELECT id FROM comics WHERE author = 'Oda';文字列を条件にする場合は必ずシングルクォート(')で囲みます。
COUNTで件数を取得
COUNTはデータを数えるための集計関数です。
条件に合うレコード(列)の数を数えてくれます。
COUNTの基本構文
SELECT COUNT(*)
FROM テーブル名
WHERE 条件;例:作者が"Oda"の漫画が何冊あるかを数える
comicsテーブルの中から作者が"Oda"の漫画が何冊あるかを数える場合:
SELECT COUNT(*)
FROM comics
WHERE author = 'Oda';COUNT(*)とCOUNT(カラム名)の違い
COUNT(*)とCOUNT(カラム名)の違いを混同しがちなので以下にまとめます。
COUNT(*):
- 条件に合った行を「すべて」数える
- NULLも含めて1行としてカウントされる
COUNT(カラム名):
- カラムが NULL ではない場合のみ数える
- NULL はカウントされない
なお、カウント結果は名前をつけた方が扱いやすいため、comic_countという名前をつける場合は次の通り。
SELECT COUNT(*) AS comic_count
FROM comics
WHERE author = 'Oda';UPDATE文でデータ更新
UPDATEはすでに存在しているデータ(レコード)の内容を変更するためのSQL文です。
基本構文
UPDATE テーブル名
SET カラム1 = 値1, カラム2 = 値2
WHERE 条件文;UPDATE… どのテーブルを更新するかSET… どのカラムをどの値に変更するかWHERE… どのレコードを更新するか指定(これが超重要)
複数カラムの更新もカンマでつなぐだけです。
例:idが5の漫画のタイトルと作者名を変更
comicsテーブルの中でidが5のレコードを探して、title を「新タイトル」、author を「新しい作者」に変更する場合
UPDATE comics
SET title = '新タイトル', author = '新しい作者'
WHERE id = 5;ANDで複数条件指定をする
AND は 「両方の条件を満たすデータだけを取得する」 ためのキーワードです。
SQL の条件指定では、
- 1つの条件だけでは足りない場合
- より正確にデータを絞り込みたい場合
に使います。
例:タイトルが"NARUTO"で作者が"Kishimoto"の漫画のidを取得
comicsテーブルの中から、title が "NARUTO" でauthor が "Kishimoto"の両方に当てはまるレコードを探し、その id を取り出す場合
SELECT id FROM comics
WHERE title = 'NARUTO' AND author = 'Kishimoto';ORDER BYで並び替え
ORDER BYは取得したデータの並び順を変更することができます。
- 昇順(ASC:小さい順→大きい順)
- 降順(DESC:大きい順→小さい順)
例:発売年が 2010 年以降の漫画のタイトルを、売上の降順で3件取得
comicsテーブルの中から、発売年(release_year)が2010年以上で、売上(sales)が高い順に並び替えて、1番売れている3冊だけ取得したい場合
SELECT title
FROM comics
WHERE release_year > = 2010
ORDER BY sales DESC
LIMIT 3;ORDER BYの使用例:
人気順に表示:
ORDER BY sales DESC新着順で記事を表示:
ORDER BY created_at DESC古い順に履歴を表示:
ORDER BY created_at ASCASCとDESCの違い
ASC(昇順)とDESC(降順)が理解しにくいのでまとめます。
| 並び順 | 読み方 | 方向 | 具体例 | よく使う場面 |
|---|---|---|---|---|
| ASC | 昇順 | 小 → 大 古い → 新しい 低い → 高い A → Z | ・価格が安い順 ・日付が古い順 ・IDの小さい順 | 「安い順」「古い順」「番号順」など |
| DESC | 降順 | 大 → 小 新しい → 古い 高い → 低い Z → A | ・売上が高い順 ・評価が高い順 ・新着順 | 「人気順」「ランキング」「新着順」など |
NULL の数を数える
SQLにおける NULL は 「値が入っていない」ことを表す特別な値 です。
漫画のレンタルを例にすると、「まだ返却されていない」などの状態がNULLにあたります。
NULLを比較するときはふつうの比較演算子(=や!=)が使えないため、IS NULLを使います。
反対に、NULLではないデータを探すときはIS NOT NULLを使います。
例:返却日(return_date)が NULL の漫画レンタル数を取得
comic_rentalsテーブルの中のreturn_dateがNULL(返却日未入力)の件数をrental_countとして取得したい場合
= まだ返却されていないレンタルが何件あるか?
SELECT COUNT(*) AS rental_count
FROM comic_rentals
WHERE return_date IS NULL;IN 句で複数条件をまとめて書く
IN 句は、「〇〇の中のどれかに一致しているデータを取得したい」という場合に使える、とても便利な条件指定です。
ORとINの違い
INはORの短縮版です。
通常、複数の一致条件を書くとき、ORを使います。
name = 'Action' OR name = 'Comedy'INを使うとこれをひとまとめにできます。
name IN ('Action', 'Comedy')例:ジャンルが "Action" または "Comedy" の漫画を取得
genresテーブルの中から、nameカラムが"Action" または "Comedy" に一致するレコードを取得する場合
=ActionとComedyのどちらかにあてはまるジャンルをまとめて検索
SELECT * FROM genres
WHERE name IN ('Action', 'Comedy');BETWEEN で範囲指定する
BETWEEN は、数値・日付などの範囲を簡潔に指定するための構文 です。
基本構文
最小値〜最大値のあいだのデータを取得するときの構文:
カラム名 BETWEEN 最小値 AND 最大値例:価格が 500〜1,000 円の漫画タイトルを取得
comicsテーブルから価格(price)が500円以上1,000円以下の漫画を絞り込み、そのtitleを表示する場合
SELECT title
FROM comics
WHERE price BETWEEN 500 AND 1000;BETWEENを使わない通常の書き方は次のとおりですが、BETWEENの方がコードが短く、読みやすいですね。
WHERE price > = 500 AND price < = 1000まとめ
以上、SQLについて学んだことをまとめました。
最初は覚えるのが難しいですが、数をこなして身につけたいですね。
SQL の基本操作まとめ:
| 操作 | 内容 |
|---|---|
| SELECT | データ取得 |
| WHERE | 条件指定 |
| ORDER BY | 並び替え |
| LIMIT | 取得件数 |
| COUNT | 件数取得 |
| IN | 条件の集合指定 |
| BETWEEN | 範囲検索 |
| UPDATE | データの更新 |