CodeGym /コース /SQL SELF /特定のカラムを選択する:カラム名でデータを抽出する方法

特定のカラムを選択する:カラム名でデータを抽出する方法

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

データベースからデータを引っ張るとき、全部のカラムが欲しいことってほとんどないよね。例えば、従業員テーブル employees には15個くらいカラムがあるかも。名前、苗字、生年月日、役職、給料、入社日とか色々。でも知りたいのは名前と役職だけだったりする。全部引っ張るのは無駄だし効率悪い。ここで「必要なカラムだけ選ぶ」テクが登場するってわけ!

例えるなら、オレンジ、リンゴ、バナナが入ったカゴからリンゴだけ取り出す感じ。イケてるでしょ?じゃあやってみよう!

シンタックス

ちなみに、SQLはめっちゃuser-friendlyに設計されてるよ。

まず、クエリの大文字小文字は気にしなくてOKSELECTでもSelectでもselectでも全部動く。それから、改行も気にしなくていい。DBMSは全部1行にまとめてくれるから、好きなように書いて大丈夫。

もう分かってると思うけど、SELECTFROMだけじゃSQLは終わらない。だからみんなSQLで盛り上がるんだよね。拡張版のSQLクエリはこんな感じ:

SELECT カラム
FROM テーブル
WHERE 条件
GROUP BY カラム
HAVING カラム
ORDER BY ソート

それぞれ:

  • カラム — 取得したいカラム名。
  • テーブル — データを取るテーブル名。
  • 条件 — 行を絞り込む条件。
  • ソート — 並び順やソート方法。

簡単そう?じゃあ実際の例で見てみよう。でもまずはシンプルな例から!

基本クエリの例

例えば、students っていう学生データのテーブルがあるとする。テーブルの構造はこんな感じ:

id first_name last_name age grade
1 Alex Lin 20 A
2 Anna Song 22 B
3 Otto Art 19 A

今度は全員のlast_name(苗字)とgrade(成績)だけ知りたいとする。

クエリはこうなる:

SELECT last_name, grade
FROM students;

実行結果:

last_name grade
Lin A
Song B
Art A

おめでとう!DBのリソースを節約できたし、結果も見やすくなった!

文字列の結合

データを選ぶのはもうできるから、ちょっと面白いことやってみよう。今のテーブルだと名前と苗字が別カラムになってる。じゃあ、フルネームのカラムを作るクエリを書いてみよう。

PostgreSQLで2つの文字列をくっつけるには||演算子を使う。SELECTクエリはこうなる:

SELECT first_name || last_name, grade
FROM students;

実行結果:

first_name || last_name grade
AlexLin A
AnnaSong B
OttoArt A

うーん。なんか足りないよね。例えば名前と苗字の間にスペースがない!これ直そう。

SELECT first_name || ' ' || last_name, grade
FROM students;

実行結果:

first_name || ' ' || last_name grade
Alex Lin A
Anna Song B
Otto Art A

いい感じ!テーブルの中身は気に入ったけど、ヘッダーがちょっと…。full nameとかnameって表示したいよね。first_name || ' ' || last_nameはちょっとダサいし実用的じゃない。これも解決できる!

エイリアス(別名)を使った選択

SQLクエリはエイリアスを使うともっと読みやすくできる。これはクエリ内だけでカラムに新しい名前をつける方法。エイリアスはASキーワードを使う(省略もできるけど、読みやすさのために書いた方がいいよ)。

例を見てみよう:

SELECT first_name AS "名前", last_name AS "苗字", grade AS "成績"
FROM students;

実行結果:

名前 苗字 成績
Alex Lin A
Anna Song B
Otto Art A

ここで:

  1. カラム名を日本語で分かりやすくリネームした。
  2. ASを使ってエイリアスを指定した。

上司やクライアントにユーザー情報を見せるとき、テーブルが分かりやすいと助かるよね。エイリアスはマジで便利!

じゃあ、フルネーム取得クエリももうちょい良くしよう。

SELECT first_name || ' ' || last_name  AS "フルネーム", grade  AS "成績"
FROM students;

実行結果:

フルネーム 成績
Alex Lin A
Anna Song B
Otto Art A

バッチリ!思った通り!

なぜ一部のカラムだけ選ぶの?

  1. パフォーマンス

例えば、何百万行・何百カラムもある巨大テーブルでSELECT *したら、何分も何時間もかかるし、サーバーのリソースも食う。でも必要なものだけ取れば超効率的!

  1. 読みやすさ

必要なカラムだけ抜き出すと、結果がめっちゃ分かりやすくなる。全部出すと金曜夜のニュースフィードみたいにゴチャゴチャになるよ。

  1. ミスの最小化

クエリで扱うデータが少なければ少ないほど、変なミスも減る。特にその後データを加工する場合は大事!

覚えておきたいこと

テーブルのエイリアス

テーブル名が長いときは、テーブルにもエイリアスを付けると便利。元のテーブル名に似てたり、内容に関連した短縮名にしよう。

SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05

この方法は、university_students_enrollments_recordsみたいな長いテーブル名のときに特に便利。usrusとかにできるよ。

特定カラム選択でありがちなミス

  1. カラム名のミス。カラム名を間違えると、ERROR: column "lastname" does not existみたいなエラーが出る。スペルをちゃんと確認しよう!

  2. 名前の衝突。複数テーブルを使うときは、どのテーブルのカラムか必ず指定しよう。例:students.first_name

  3. SELECT *の使いすぎは初心者の罠。確かに楽だけど、大きなプロジェクトではNG!本当に必要なカラムだけ選ぼう。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION