データベーススペシャリスト資格|2022年10月挑戦ログ 5月20日|SQLによる仮想テーブルの利用(サブクエリの基本②)

高度IT・基礎知識

この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。

今回はSQLによる仮想テーブルの利用(サブクエリの基本②)について書く。

※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。

サブクエリでリストを取得する(1列n行)

前回振り返り

  • SQLについて。現在は「仮想テーブル」を扱う操作を学んでいる。今回は最も柔軟に仮想テーブルを作成・利用できる「サブクエリ」の基本について学んだ。それはクエリ(命令)の入れ子構造であり、マトリョーシカのようなイメージだ。
  • 前回はサブクエリの基本①として、サブクエリがどのようなものかと、1つの値を取得する方法を学んだ。
  • 今回はサブクエリの基本②として、リストを取得する方法と、複数の入れ子構造を学ぶ。

サブクエリの考え方(復習)

  • より柔軟に仮想テーブルを作成・利用できるSQLの概念
  • イメージは「SQLの入れ子構造」。例えばマトリョーシカのようなもの(ロシアのお土産。人形の中にまた小さな人形が入っている)

サンプルの紹介

  • 今回も以下のように北海道・東京・千葉の年度ごとの最低賃金を管理する9行のテーブルを使用。

サブクエリの戻り値で絞り込む(前回復習)

  • さて、SQLで絞り込みをするには、where句で指定すればよかった。
  • そして、サブクエリの戻り値は()で括った入れ子構造にすればよかった。
  • よって例えば、「最低賃金が、(テーブル全体の)最低賃金の平均値より高いデータを抽出」するSQLは以下。
  • ここまでは、「クエリの中に1つのサブクエリがある」「サブクエリでは1つの値を求める」なので、前回の振り返り。

サブクエリで「1列n行」のリストを取得する

  • それでは更に進めて、「上で示したSQL自体をサブクエリにする」ことはできるのだろうか。
  • 結論として、できる。これにより「クエリの中に2つのサブクエリがある」「一番内側の(小さい)サブクエリでは1つの値を求める」「外側の(大きい)サブクエリでは1列n行のリストを求める」と複数の入れ子構造ができる。
  • 例えば、「最低賃金が、最低賃金の平均値より高い都道府県(上で求めたとおり、東京と千葉)」について、最低賃金の平均値を求めたい場合、以下のSQLとなる。
  • IN演算子の比較対象に、サブクエリで取得した「1列n行のリスト」が使えることはとても重要なので、覚えておくとよい。(IN演算子の基本構文はこちら

サブクエリでリストを取得する(m列n行)

考え方

  • さて、ここまでで「複数の入れ子構造」と「1つの値を取得」「1列n行を取得」を学んだ。
  • 最後は、今までの延長で「m列n行を取得」を学ぶ。
  • 「m列n行を取得」は、それを仮想テーブルとして用いて「集計の集計」を行うのに使う。

実践

  • 例えば、上述で求めたテーブル(東京と千葉それぞれの平均値)をサブクエリとしてまとめ、都道府県の数を数えるなどだ。
  • SQLは以下のとおりであり、前のSQLを()で囲んだだけのものを、from句でテーブルに指定していることが分かる。

サブクエリの読み方とメリット

  • サブクエリは小さなクエリを積み重ねるので、間違いが少なく、何をしているか分かり易いメリットがある。
  • 自分がサブクエリを作る時は、他人が見やすくする工夫をするとよい。たとえば上のSQLのように「内側のクエリを始めるときは2文字分インデント」「開始カッコと終了カッコのインデントを揃える」など
  • 他人のサブクエリを読むときは、一番内側のクエリから見ることが基本となる。例えば上のSQL例であれば、水色⇒緑色⇒オレンジ色と読んでいく。

考察

  • SQLについて。現在は「仮想テーブル」を扱う操作のうち、最も柔軟に利用できる「サブクエリ」について学んでいる。今回はサブクエリの基本②として、リストを取得する方法と、複数の入れ子構造を学んだ。
  • 考察。学びは視野を広げ、生きるための武器になる。例えば書籍「こども六法」の一部「ケガをさせなくても暴行だよ。当たらないように石を投げたり、水をかけたりするだけでも暴行だよ(刑法208条)」は小学生でも使える武器だ。学びが楽しくなり、更に学ぶという良いサイクルが理想だ。

抽象化×英語学習×AI,IT活用

取り組み概要

  • 目的は、「IT,AIを実際に使いこなし」かつ「英語を学び、視野を広げる」こと。それにより選択肢を増やし、自分と家族を守ること。
  • ポイントは、学びを楽に、楽しく、続けられる工夫をすること。抽象化で本質を学び、Google翻訳でスピーディなインプットとアウトプットを実現し、ブログの1文のみと低いハードルで習慣化する。
  • 詳細は別の記事に整理。

(実践①)日本語のプリエディット

  • 基本。日本語は特殊なので直訳困難。下準備(加工)が必要。
  • コツ1:文は短くシンプルに。長い文は区切る。敬語は使わない。
  • コツ2:省略は避けてハッキリと。『誰が・誰の・何を・いつ』を補う。『略語・略称・比喩表現』は使わない。
  • コツ3:翻訳しやすい表記に。ひらがなより漢字(例:あめ⇒雨)。漢数字よりアラビア数字(例:百⇒100。数え方は個で統一。特殊記号は使わない。
  • 原文例。「学びは視野を広げ、生きるための武器になる。学びが楽しくなり、更に学ぶという良いサイクルが理想だ。」
  • プリエディット例。「一旦そのまま」

(実践②)自力での英訳

  • 基本。プリエディットをもう1歩進めて「日本語を並び替える」と、自力の英訳が可能になる。
  • コツ1:短文の連続にする(意味が伝われば良い)。
  • コツ2:語順の”型”は絞る。具体的には基本の3つ。「A=B(例:I am happy)」「主+動+A=B(例:I feel you happy)」「主+動+A+B(例:I give you present)」
  • コツ3:使う単語も絞る。日本語側の表現を変えれば手持ちの単語で対応できる。さらに単語を増やす工夫を使う。「in・un・disをつけて反対の意味(例:unhappy)」「動詞にing・edをつけて形容詞を作る(例:exciting)」「前置詞+名詞で形容詞を作る(例:on business trip)」
  • 日本語の並び替え例(カッコ内は用いた”型”)。「学びは視野を広げ、生きるための武器になる。学びが楽しくなり、更に学ぶという良いサイクルが理想だ。」
  • 自力で英訳。「learning make my sight wide. and it is weapon for survive. I believe learning is fun and useful. So it makes me learning continue. 」

(実践③)Google翻訳での添削

  • Google翻訳での和訳のコツ。「長い文は区切る」「コンマや5つの接続詞(before,after,but,when,if)前で区切る」「英文の文末にはピリオドとスペースを入れる」
  • Google翻訳で「自力の英訳」を和訳。「学ぶことは私の視野を広げます。そしてそれは生き残るための武器です。学ぶことは楽しくて役に立つと思います。ですから、それは私に学習を続けさせます。」
  • 振り返り(意図した意味になっているか)。全体的にニュアンスは近い。もう少し日本語をシンプルに入れ替えたい。

(実践④)google翻訳との対比

  • 次に、実践①でプリエディットした日本語をGoogle翻訳で英訳する。
  • Learning broadens your horizons and becomes a weapon for living.
  • The ideal cycle is to make learning fun and to learn more.
  • 振り返り。自力英訳と比較し、汎用的に使えそうな単語は意識しておく。「ideal(理想の)」は使えそうだ。

(実践⑤)よりシンプルな表現に整理する

  • twitterで練習として投稿することも考えると、より抽象的でシンプルな表現が良い。
  • 日本語を再整理。学びは生きるための武器だ。学びの楽しさは私を更に学ばせる。その理想のサイクルは重要だ。
  • learning is the weapon to survive. and the fun of learning make me more learn. I believe this ideal cycle is important.

参考書籍

  • 集中演習 SQL入門/木田和廣/株式会社インプレス
  • データベーススペシャリスト2022年版/三好康之/翔泳社
  • おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社
  • こども六法/山崎聡一郎/弘文堂

コメント

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