この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回は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年版/三好康之/翔泳社
- おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社
- こども六法/山崎聡一郎/弘文堂
コメント