SQLについて解説した記事のアイキャッチ画像。

【SQL】SELECT・WHERE・ORDER BY・COUNTを理解する

プログラミング学習をはじめて、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';

文字列を条件にする場合は必ずシングルクォート(')で囲みます。

WHERE句のポイント

  • イコール(=)で一致するデータを絞り込む
  • 文字は ' '(シングルクォート)で囲む
  • データを正確に取ってくるための「検索フィルター」のようなもの
  • WHERE がないとデータを絞れず、全件取得してしまう

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 ASC

ASCと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の違い

    INORの短縮版です。

    通常、複数の一致条件を書くとき、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データの更新

    -SQL, 未分類
    -, ,

    Translate »