【入門編】 配列型(Array Types) – PostgreSQL

PostgreSQLの配列型、知らなきゃ損!「あの~、ちょっと聞いてもいいですか?」って聞きたくなるくらい、実は便利なんです!

こんにちは!ブログを読んでくださってありがとうございます!

さてさて、今日はPostgreSQLの「配列型」について、お話ししたいな~と思ってます。

「配列型?何それ?なんか難しそう…」って思いました? 大丈夫、大丈夫! 私も最初はそう思ってましたから(笑)。でも、これ、知ってるとすっごく便利なんですよ。まるで、普段使っている「あれ」が、実はもっとすごい機能を持っていた、みたいな発見の連続なんです。

今回は、IT初心者の方にも「なるほど!」って思ってもらえるように、できるだけ専門用語を避けて、日常の出来事に例えながら、優しく解説していきたいと思います。

そもそも「配列型」って、何者?

皆さんは、料理をするとき、冷蔵庫に色々な食材が入っていますよね? 例えば、「野菜」というグループの中に、「トマト」「キュウリ」「ナス」とか、色々入っていると思います。

PostgreSQLの「配列型」も、これと似ているんです。
例えば、「好きな果物」という一つの「箱」の中に、「りんご」「バナナ」「みかん」という複数の「もの」を入れておける、そんなイメージです。

しかも、この「箱」に入れられる「もの」は、果物だけじゃありません。

  • 数字: 10点、20点、30点…みたいに、テストの点数をまとめて入れておくとか。
  • 文字列: 「東京」「大阪」「名古屋」みたいに、都道府県名をまとめて入れておくとか。
  • 日付: 2023-01-01、2023-02-15…みたいに、イベントの日付をまとめて入れておくとか。

どんなデータ型でも、それらをまとめて一つの「箱」に入れて、管理できるようになるのが、この配列型なんです。

多次元配列?何それ、立体的な箱?

「え、箱の中に箱って入れられるの?」って思ったあなた、鋭い!
実は、PostgreSQLでは、箱の中にさらに箱を入れることもできるんです。これを「多次元配列」と呼んだりします。

例えば、こんなイメージです。

  • 1次元配列(普通の箱):
  • 好きな果物: [りんご, バナナ, みかん]
  • 2次元配列(箱の中に、さらに箱):
  • クラスのテスト結果(1組、2組):
  • 1組: [80点, 90点, 75点]
  • 2組: [85点, 70点, 95点]
  • これを配列で表すと、

[[80, 90, 75], [85, 70, 95]]
みたいな感じになります。

ちょっと複雑に聞こえるかもしれませんが、これも「表」をイメージすると分かりやすいかもしれませんね。行と列があって、それぞれにデータが入っている。そんなイメージです。

配列型、こんな時に役立つんです!

「でも、わざわざ箱に入れなくても、普通にデータ別々に入れておけばいいんじゃない?」って思いますよね。
そうなんです、簡単な場合はそれでもいいんです。でも、配列型を使うと、こんな時にすごく便利になります。

1. 関連するデータをまとめて扱いたいとき

例えば、ある商品の「色」が複数ある場合。
「赤」「青」「緑」…という色を、一つの商品情報に紐づけて管理したいですよね。
これを配列型で「colors: [‘赤’, ‘青’, ‘緑’]」のようにしておけば、商品の色情報をスッキリまとめられます。

2. データのリストを管理したいとき

「よく使うタグ」とか「関連キーワード」とか、リスト形式で管理したいデータってありますよね。
これも配列型で「tags: [‘データベース’, ‘PostgreSQL’, ‘配列’]」のようにしておけば、後で検索する時なんかも楽になります。

3. データの集計をしたいとき(array_agg関数)

ここで、ちょっと魔法のような関数のお話。
「array_agg」っていう関数があるんですが、これは、バラバラにあるデータを、一つの配列にまとめてくれるんです。

例えば、こんな風に、色々な商品の「色」のデータがバラバラにあったとします。

| 商品名 | 色 |
| :—– | :— |
| Tシャツ | 赤 |
| Tシャツ | 青 |
| パンツ | 黒 |
| パンツ | グレー |

これを `array_agg` でまとめると、
「Tシャツ」には「[‘赤’, ‘青’]」、「パンツ」には「[‘黒’, ‘グレー’]」みたいに、商品ごとに色のリストを作れるんです!
これは、まるで、レジでお客さんが持ってきた商品を、種類ごとに「これはTシャツ、これはパンツ」って仕分けしてくれるみたいで、とっても効率的ですよね。

4. 配列をバラバラにして、一つずつ処理したいとき(unnest関数)

逆に、配列に入っているものを、一つずつバラバラにして、別々の行として扱いたい時もあります。
そんな時に活躍するのが「unnest」関数です。

例えば、さっきの「Tシャツ: [‘赤’, ‘青’]」という配列があったとして、
`unnest` を使うと、

| 商品名 | 色 |
| :—– | :— |
| Tシャツ | 赤 |
| Tシャツ | 青 |

のように、一つずつバラバラにしてくれるんです。
これは、まるで、おもちゃ箱から出したブロックを、一つずつ手に取って遊ぶような感覚ですね。
この「unnest」関数と、さっきの「array_agg」関数を組み合わせることで、データの加工がすごく柔軟にできるようになるんですよ。

配列の便利な操作方法

配列型には、他にも色々な便利な機能があります。いくつかご紹介しましょう!

  • 配列の連結:

「りんご、バナナ」と「みかん、ぶどう」という二つの配列があったとして、これらをくっつけて「りんご、バナナ、みかん、ぶどう」みたいに、一つの配列にしちゃうことができます。まるで、二つのリストを合体させるようなイメージですね。

  • 配列のスライス(一部分を取り出す):

「りんご、バナナ、みかん、ぶどう」という配列の中から、「バナナ、みかん」だけを取り出したい!なんてこともできます。欲しい部分だけを、ピンポイントで取り出せるんです。

  • 要素の検索:

「この配列の中に『バナナ』は入ってる?」って、特定の要素があるかどうかを調べることもできます。これは、宝探しで「この中に金貨は隠されてるかな?」って探すのに似ていますね。

まとめ:配列型、もっと使ってみよう!

どうでしたか? PostgreSQLの配列型、意外と身近なものに例えると、そんなに難しくないですよね。

もちろん、初めて使うときは「あれ?どうやるんだっけ?」ってなることもあるかもしれません。でも、今回お話ししたような基本的な考え方や、便利な関数を知っておくと、きっとあなたのデータベース操作がもっと楽しく、もっと効率的になるはずです。

もし、「うちのデータベースでも、こういう使い方できるかも!」って思ったら、ぜひぜひ試してみてください。
そして、もし分からないことがあったら、いつでも気軽に声をかけてくださいね!

これからも、皆さんのデータベースライフがもっと豊かになるような情報をお届けしていきたいと思います!
また次のブログでお会いしましょう!

コメント

タイトルとURLをコピーしました