CodeGym /コース /SQL SELF /配列( ARRAY)の使い方

配列( ARRAY)の使い方

SQL SELF
レベル 16 , レッスン 2
使用可能

今日はちょっとだけ配列について話すよ。配列はPostgreSQLの強力なツールの一つで、同じ型の値のリストを1つのカラムに保存できるんだ。もっと詳しい話は次のレベルでやるから、今回は基本だけね。

「配列」と聞くと、すぐにリストを思い出すよね。買い物に行く前にリストを書くときみたいな感じ。例えば:りんご、バナナ、牛乳、パン。PostgreSQLの配列は、こういうリストのイメージで、1つのフィールドに複数の値を保存できるんだ。しかも全部同じデータ型じゃないとダメ。例えば、数字の配列、テキストの配列、日付の配列とかね。

いくつか例を挙げてみるよ。

数字の配列:

{1, 2, 3, 4}

文字列の配列:

{"apple", "banana", "cherry"}

日付の配列:

{2024-10-01, 2024-10-02, 2024-10-03}

配列を使うと、たくさんの値を1つのフィールドにまとめて保存できるから、テーブルのスペースも節約できるし、クエリも柔軟になるよ。

なんで配列が必要なの?主なメリット

データをコンパクトに保存: 複数の値を1つのフィールドに保存できる。特に、論理的に関連してるデータに便利。例えば、記事のタグリストとか、学生の成績リストとか。タグ2つのために別テーブル作る?

取り出しがラク: 配列なら1つのフィールドからリスト全体を一気に取り出せるし、配列の要素ごとに操作も簡単。

パフォーマンス: 場合によっては、関連データのために追加テーブルを作らなくて済むから、DB設計がシンプルになるし、開発も早くなる。これは嬉しいよね。

PostgreSQLで配列をどう使う?

SELECTで配列を作る

配列を作るにはARRAY[]コンストラクタを使うよ。例えば:

-- 数字の配列の例
SELECT ARRAY[1, 2, 3, 4];

-- 文字列の配列の例
SELECT ARRAY['apple', 'banana', 'cherry'];

めっちゃ簡単でしょ。じゃあ、テーブルを作って実際に何か選んでみよう。

配列付きテーブルの作成

まずは、カラムの1つが配列になってるテーブルを作るよ。

id name - VARCHAR(50) subjects - TEXT[]
1 Alex {数学,物理}
2 Maria {化学,生物,英語}
3 Peter {情報科学}

どんな感じになったか見てみよう:

SELECT * FROM students;
id name subjects
1 Alex {数学,物理}
2 Maria {化学,生物,英語}
3 Peter {情報科学}

配列からデータを取り出す

配列からデータを取り出すために、PostgreSQLはいくつかの関数や演算子を用意してるよ。

配列の要素を取り出す

配列の要素をインデックスで取り出すには、角カッコ[]を使うよ。注意:インデックスは1から始まる(PythonやJavaScriptみたいに0からじゃないよ)。

-- 各学生の最初の科目を取得
SELECT name, subjects[1] AS 最初の科目 FROM students;

結果はこんな感じ:

name 最初の科目
Alex 数学
Maria 化学
Peter 情報科学

配列全体を取り出す

配列の全要素を取り出すには、普通にSELECTを使うだけ:

SELECT name, subjects FROM students;

配列内の値を検索する

たまに、配列が特定の値を含んでるか調べたいときがあるよね。そのときはANY演算子を使うよ。

-- 「数学」を勉強してる学生を選ぶ
SELECT name
FROM students
WHERE '数学' = ANY(subjects);

クエリの結果:

name
Alex

PostgreSQLには配列操作用の関数や演算子がめっちゃたくさんあるけど、それはまた次のレベルで教えるね :P

配列でよくあるミス

インデックスの0と1を混同しがち。

PostgreSQLの配列は1から始まるよ。PythonやJavaScriptに慣れてると、ここで混乱しやすい。

空の配列。

空の配列{}NULLはPostgreSQLでは別物。配列を比較するときは、この違いに注意してね。

大きな配列の扱い。

めっちゃ大量のデータを配列に入れると、クエリの処理が遅くなることがある。配列は小さいデータ量に使うのがオススメ。

2
タスク
SQL SELF, レベル 16, レッスン 2
ロック未解除
配列内の値の検索
配列内の値の検索
2
タスク
SQL SELF, レベル 16, レッスン 2
ロック未解除
配列の最初の要素を抽出する
配列の最初の要素を抽出する
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION