1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

👑SQLの世界へようこそ!〜プリンセスのクエリ入門〜

Last updated at Posted at 2025-05-29

👑 はじめてのSQL!プリンセスと学ぶクエリ💫

こんにちは、ごきげんよう🌷
プリンセスエンジニアのかえちゃんです💻👑

今日は、SQLの基本のキ!
「SELECT文」を中心に、魔法みたいに使える条件指定や絞り込みの呪文を
プリンセス目線で解説していきます🌟

「SQLって、いきなり記号とか単語が多くて引いちゃう…」
そんなあなたも安心して読み進められるように、
パフェを選ぶくらい軽い気持ちでいきましょう💖


🍰 SELECT FROM 〜データベースからデータを取り出す魔法〜

SELECT カラム名 FROM テーブル名;

📌 SELECT は「どの情報がほしいか"」
📌 FROM は「どこから取るか」

例:「お姫様一覧」テーブルから名前だけほしいときは…

SELECT name FROM princesses;
name
Luna
Lily
Mira

こんな感じでプリンセスたちの名前が取得できるの!!

💎 DISTINCT 〜かぶってるデータを1つにまとめる魔法〜

SELECT DISTINCT name FROM princesses;

同じ名前のプリンセスが何人も登録されてたら、1人ずつでいいよね?ってときに使う魔法✨

name
Luna
Luna
Lily

→SELECT DISTINCT name を使うと…

name
Luna
Lily

こんな感じで重複無いデータがGETできちゃうの!!

🌙 WHERE 〜条件で絞り込む魔法〜

SELECT * FROM princesses WHERE age > 18;

おとなプリンセスだけ見たいときは、WHEREで条件をつけちゃう💫
*←これは全カラム指定してるのよ!!

name age
Luna 17
Lily 19
Mira 21

→ 18歳より上だけ見ると…

name age
Lily 19
Mira 21

こんな感じでおとなプリンセスたちのnameと普段は秘密にしているageまで取得できちゃうの!!

🌹 AND / OR 〜さらに条件を組み合わせる魔法〜

SELECT * FROM princesses WHERE age > 18 AND kingdom = 'Rose';

ANDは「どちらも満たす」

ORは「どちらかでOK」

って意味なの!!叩き込んでね💖

name age kingdom
Luna 20 Rose
Lily 17 Rose
Mira 21 Moon

→ ANDで絞ると…

name age kingdom
Luna 20 Rose

こんな感じで絞り込んだデータ取得できちゃうの!!

📏 BETWEEN 〜この範囲に入ってるか見る魔法〜

SELECT * FROM dresses WHERE price BETWEEN 100 AND 300;

お小遣いの範囲(100〜300)でドレスを探すときに便利💸

dress_name price
Pink Silk 120
Blue Lace 300
Gold Sparkle 400

→ 範囲内のドレスは…

dress_name price
Pink Silk 120
Blue Lace 300

お得なドレスも探せちゃうわあ💖

💌 IN / NOT IN 〜リストから選ぶ魔法〜

SELECT * FROM castle WHERE location IN ('North', 'South');

IN:リスト内のものだけ

NOT IN:リスト外のものだけ

意味も叩き込んでねええ💖

castle_name location
Aurora North
Belle South
Eliza East

→ INで絞ると…

castle_name location
Aurora North
Belle South

💫 LIKE 〜あいまい検索の魔法〜

SELECT * FROM fairy WHERE name LIKE 'L%';

%は「あとに何が来てもOK」というあいまい検索記号✨
このSQLは「Lから始まる名前」が対象💖

name
Luna
Lily
Mira

→ Lから始まるのは…

name
Luna
Lily

これならmyFriendたちもすぐに探せちゃうわあ💖

🫧 IS NULL / IS NOT NULL 〜空っぽかどうかの魔法〜

SELECT * FROM tiaras WHERE owner IS NULL;

IS NULL:空っぽなものだけ

IS NOT NULL:持ち主がいるものだけ

少し、難しくなってきたわね、でも叩き込むのよ💖

tiara_name owner
Rose Gold NULL
Crystal Luna
Ruby Star Mira

→ IS NULLだと…

tiara_name owner
Rose Gold NULL

🧺 LIMIT 〜見たい数だけに絞る魔法〜

SELECT * FROM carriages LIMIT 3;

全部見なくていいよってときは、LIMITで優雅に閲覧🎀

carriage_name
Crystal One
Golden Wing
Silver Moon
Dream Cloud

→ LIMIT 3だと…

carriage_name
Crystal One
Golden Wing
Silver Moon

優雅だわねえ💖

🧁 GROUP BY 〜グループにまとめて見る魔法〜

SELECT kingdom, COUNT(*) FROM princesses GROUP BY kingdom;

「王国ごとに何人いるか知りたい」そんなときに✨

name kingdom
Luna Rose
Lily Rose
Mira Moon

→ GROUP BYすると…

kingdom COUNT(*)
Rose 2
Moon 1

こんな簡単に特定できちゃうのね💖

でも、GROUP BYの注意点があってね

たとえば、こんなプリンセステーブルがあるとするよ👇

name kingdom
Luna Rose
Lily Rose
Mira Moon

これに対して

SELECT kingdom, name FROM princesses GROUP BY kingdom;

❌ こんな書き方はエラーになっちゃう…

kingdomごとにグループ化してるけど、その中に複数のnameが混ざってると、どのnameを表示すればいいか決められないからエラーになるの!!!
「ローズ王国に何人もプリンセスがいるけど、誰の名前を出せばいいの…?」ってコンピューターくんが混乱しちゃう!

✅ 解決策①:集計関数を使う魔法🪄

SELECT kingdom, COUNT(*) FROM princesses GROUP BY kingdom;
kingdom COUNT(*)
Rose 2
Moon 1

👉 これはOK!「王国ごとの人数」を出してるから、魔法が正しく動く✨

✅ 解決策②:GROUP BY の軸を増やす魔法🧙‍♀️

SELECT kingdom, name FROM princesses GROUP BY kingdom, name;
kingdom name
Rose Luna
Rose Lily
Moon Mira

👉 「王国+名前」の組み合わせでグループにするから、もう混乱しない!

🎀 まとめ:GROUP BYでの魔法のルール

GROUP BYしていないカラムをSELECTで出そうとすると、
グループの中で値がバラバラな場合にエラーになることがあるよ💥

すべて同じ値だったら通る場合もあるけど、基本はセットでグループ化しよう!
または COUNT() や MAX() などの集計魔法をかけてあげてね🪄
※COUNT() や MAX()はあとで教えるよ💖

補足(ちょっとテクニカルな人向け)
MySQLでは、ONLY_FULL_GROUP_BY が 無効 のとき、グループ化してないカラムも通っちゃうことがある(非推奨)
PostgreSQL や BigQuery は厳格モード!
👉 SELECTに書くカラムは 全部GROUP BYに含めるか、集計関数で包むのが必須だよ

ONLY_FULL_GROUP_BY が無効な場合に関する記述は、以下の公式ドキュメントに記載あるからみてね
If ONLY_FULL_GROUP_BY is disabled, a MySQL extension to the standard SQL use of GROUP BY permits the select list, HAVING condition, or ORDER BY list to refer to nonaggregated columns even if the columns are not functionally dependent on GROUP BY columns. This causes MySQL to accept the preceding query. In this case, the server is free to choose any value from each group, so unless they are the same, the values chosen are nondeterministic, which is probably not what you want. Furthermore, the selection of values from each group cannot be influenced by adding an ORDER BY clause. Result set sorting occurs after values have been chosen, and ORDER BY does not affect which value within each group the server chooses. Disabling ONLY_FULL_GROUP_BY is useful primarily when you know that, due to some property of the data, all values in each nonaggregated column not named in the GROUP BY are the same for each group.


🧁 集計関数について 〜まとめて数える魔法〜

プリンセスの世界でも、「人数を数えたり」「平均を出したり」する場面はよくあるよね?
そんなときに使えるのが 集計関数(Aggregation Functions) という魔法✨

🎀 COUNT() 〜何人いるか数える魔法〜

👉 登録されてるプリンセスの人数を数えてくれるの!

SELECT COUNT(*) FROM princesses;
name kingdom
Luna Rose
Lily Rose
Mira Moon

→ このクエリの結果は…

COUNT(*)
3

👗 SUM() 〜ドレスの合計金額を出す魔法〜

SELECT SUM(price) FROM dresses;
dress_name price
Pink Silk 120
Blue Lace 300
Gold Sparkle 350

→ このクエリの結果は…

SUM(price)
770

👉 すべてのドレスの価格をぜ〜んぶ足してくれる魔法💸
パーティー準備の予算チェックにぴったり✨

🌸 AVG() 〜平均金額を出す魔法〜

SELECT AVG(price) FROM dresses;
dress_name price
Pink Silk 120
Blue Lace 300
Gold Sparkle 350

→ このクエリの結果は…

AVG(price)
256.67

👉 お姫様のファッション予算、ちょうどよくするにはこの魔法🌷
※結果は小数になることもあるよ!

👑 MAX() / MIN() 〜いちばん高い or 安いアイテムを探す魔法〜

SELECT MAX(price) FROM dresses;
SELECT MIN(price) FROM dresses;
dress_name price
Pink Silk 120
Blue Lace 300
Gold Sparkle 350

→ MAX(price) の結果:

MAX(price)
350

→ MIN(price) の結果:

MIN(price)
120

👑 いちばんリッチなドレス or お得なドレスを一瞬で探せちゃう魔法🎀

🧁 ORDER BYについて(昇順・降順の魔法)

プリンセスたちが着るドレスを、値段が安い順や高い順で見たいときに使えるのが
ORDER BY という並び替えの魔法✨


📈 昇順(安い順に並べる)〜 ASC の魔法

SELECT * FROM dresses ORDER BY price ASC;
dress_name price
Blue Lace 300
Gold Sparkle 350
Pink Silk 120

→ price を昇順(小さい順)に並べると…

dress_name price
Pink Silk 120
Blue Lace 300
Gold Sparkle 350

👉 ASC は Ascending(昇順) の略だよ🌷
プリンセスのお財布にやさしい順番で見れる魔法💰

🎀 補足:デフォルトは ASC

SELECT * FROM dresses ORDER BY price;

👉 これは ORDER BY price ASC と同じ意味になるよ!
昇順がデフォルトだから、書かなくてもOKなときもある💡

📉 降順(高い順に並べる)〜 DESC の魔法

SELECT * FROM dresses ORDER BY price DESC;

→ price を降順(大きい順)に並べると…

dress_name price
Gold Sparkle 350
Blue Lace 300
Pink Silk 120

👉 DESC は Descending(降順) の略👑
一番豪華なドレスからチェックしたいときにぴったりな魔法🎀

🌷 おわりに

今回は、プリンセスらしくやさしく、でもちゃんと理解して使えるSQLを紹介しました✨
「クエリって難しそう…」って思っていた方も、
ちょっと使ってみたいかも💖って思ってもらえたらとってもうれしいです!

次はね、

  • 条件によって表示を変える CASE式
  • クエリの中でさらに別のクエリを書く サブクエリ

このあたりを紹介していく予定!

ひとつずつできることが増えていくのって、ちょっと楽しいよね。
このまま一緒に、もっともっっっと進んでいこ〜💖

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?