1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【0から始めるDB入門 Part1】SQLトライアル編

Posted at

はじめに

これはSQLabさんの問題を解いていきながら,ステップバイステップでSQLについて学んでいこうと思います。

トライアル編

1

  • 問題
    出版年(release_year)が不明の書籍一覧を取得してください。
解答・解説
  • 解答
    SELECT * FROM books
        WHERE release_year IS NULL;
    

  • 解説

    SELECT * FROM books
    

    booksテーブルからすべての列を取得します。

        WHERE release_year IS NULL;
    

    release_yearNULLである行を条件として指定します。

ポイント

  • 条件検索はWHERE句を使います。
  • NULL値の判定にはIS NULLを使用します。
  • =!=ではNULL値の比較ができないため注意が必要です。

2

  • 問題
    書籍一覧をページ数が多い順に並び替えてください。
    出力項目はname(書籍名)total_page(総ページ数)です。
解答・解説
  • 解答
    SELECT name, total_page FROM books
        ORDER BY total_page DESC;
    

  • 解説

    SELECT name, total_page FROM books
    

    booksテーブルからnametotal_pageの列を取得します。

        ORDER BY total_page DESC;
    

    total_pageを基準に降順(大きい順)で並び替えます。

ポイント

  • 特定の列を選択する際はSELECT句でカラム名を指定します。
  • 並び替えにはORDER BY句を使用します。
  • 降順に並び替える場合はDESCを指定します。昇順(小さい順)はASCまたは省略可能です。
  • ASC→ascending(昇順)、DESC→descending(降順)みたいですが、わたしはAdd(増えていく)とDecrease(減っていく)と覚えています。以下のものも覚えやすいと思います


3

  • 問題
    書籍一覧をカテゴリー毎に集計して多い順に、カテゴリー名は昇順に並び替えてください。データの取得件数は先頭から3件のみにしてください。
    出力項目はname(カテゴリー名)とnum(書籍数)です。
解答・解説
  • 解答
    SELECT cat.name, COUNT(book.name) AS num FROM categories AS cat
        INNER JOIN book_categories AS book_cat
            ON cat.id = book_cat.category_id
        INNER JOIN books AS book
            ON book_cat.book_id = book.id
        GROUP BY cat.name
        ORDER BY num DESC, cat.name ASC
        LIMIT 3;
    

  • 解説

    SELECT cat.name, COUNT(book.name) AS num FROM categories AS cat
    
    • categoriesテーブルをcatと別名を付け、そのname列と、book.nameの数をカウントしたものをnumとして選択します。
        INNER JOIN book_categories AS book_cat
            ON cat.id = book_cat.category_id
    
    • categoriesテーブルとbook_categoriesテーブルをcategory_idで内部結合します。book_categoriesテーブルをbook_catと別名を付けています。
        INNER JOIN books AS book
            ON book_cat.book_id = book.id
    
    • book_categoriesテーブルとbooksテーブルをbook_idで内部結合します。booksテーブルをbookと別名を付けています。
        GROUP BY cat.name
    
    • cat.nameでグループ化し、カテゴリーごとに集計します。
        ORDER BY num DESC, cat.name ASC
    
    • numを降順に、同じnumの場合はcat.nameを昇順に並び替えます。
        LIMIT 3;
    
    • 先頭から3件のみ取得します。

ポイント

  • テーブルを結合する際にはJOIN句を使用し、結合条件をONで指定します。
  • 別名(エイリアス)はASを使って付けられます。
  • 集計関数(例:COUNT)を使用する際には、GROUP BY句でグループ化します。
  • 取得件数を制限するにはLIMIT句を使用します。

4

  • 問題
    idが1のデータを削除後、イベント一覧を取得してください。
解答・解説
  • 解答
    DELETE FROM events
        WHERE id = 1;
    SELECT * FROM events;
    

  • 解説

    DELETE FROM events
    
    • eventsテーブルからデータを削除します。
        WHERE id = 1;
    
    • idが1の行を削除対象として指定します。
    SELECT * FROM events;
    
    • eventsテーブルの全データを取得し、削除が正しく行われたか確認します。

ポイント

  • データを削除する際はDELETE FROM文を使用します。
  • 削除条件はWHERE句で指定し、条件を明確にすることで誤ったデータ削除を防ぎます。
  • データ操作後に結果を確認するためにSELECT文を使います。

おわりに

今回はトライアル編の問題の解き,解説を行いました。これらの問題を通して、SQLの基本的な操作であるデータの取得、並び替え、集計、削除について学ぶことができました。

今後も引き続き、より高度なSQLの機能や実践的なクエリの書き方について学んでいく予定です。


次回Part2 SQL初級編を待て...

1
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?