この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回はSQLによる仮想テーブルの利用(サブクエリの基本①)について書く。
※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。
サブクエリとは
前回振り返り
- SQLについて。今までは「実態のあるテーブル」の操作(列、行、グループ化、複数テーブルの結合と集合演算)を想定してきたが、現在は「仮想テーブル」を扱う操作を学んでいる。前回は復習として「with句」の確認ドリルを行った。
- 仮想テーブルを扱う操作は「with句」「ビュー」「サブクエリ」の3つがある。
- 今回はサブクエリの基本①について学ぶ。
サブクエリの考え方
- より柔軟に仮想テーブルを作成・利用できるSQLの概念
- イメージは「SQLの入れ子構造」。例えばマトリョーシカのようなもの(ロシアのお土産。人形の中にまた小さな人形が入っている)
実際の利用
- 例えば「1月の販売テーブル(small_jan)」から、「販売個数(qty)全体の平均値より多く売れた商品」を取得するSQLについて。
- with句を用いると以下のようになる。
- これは「販売個数全体の平均」を一度仮想テーブルに保管し、1月の販売テーブルに結合して、そのあと行を絞り込むというステップを踏んでいる。
- しかし、同じ内容をサブクエリを使うと以下のとおりとなる。
- 「販売個数の平均を求める」クエリを、where句の中に入れ込んでいるイメージだ。
- このようにサブクエリを使うと、複雑な式もよりシンプルに作れる。
- SQLにおいてselectが複数用いられている場合、サブクエリが使われていると考えられる。
サブクエリで1つの値のみ取得する
サンプルの紹介
- さて、先ほどの例は「販売個数全体の平均」として、サブクエリで1つの値のみ取得した例。
- サブクエリで1つの値のみ取得する例を、今までの振り返りも兼ねて実践する。
- 今回は以下のように北海道・東京・千葉の年度ごとの最低賃金を管理する9行のテーブルを使用。
サブクエリの戻り値で列を作成する
- さて、SQLで列を作成するには、select句で指定すればよかった。
- そして、サブクエリの戻り値は()で括った入れ子構造にすればよかった。
- よって例えば、「最低賃金の平均値をテーブル(small_wage)に追加する」SQLは以下。
サブクエリの戻り値で演算する
- さて、SQLで演算をするには、select句で演算すればよかった。
- そして、サブクエリの戻り値は()で括った入れ子構造にすればよかった。
- よって例えば、「最低賃金から、最低賃金の平均値を引いた値をテーブル(small_wage)に追加する」SQLは以下。
サブクエリの戻り値で絞り込む
- さて、SQLで絞り込みをするには、where句で指定すればよかった。
- そして、サブクエリの戻り値は()で括った入れ子構造にすればよかった。
- よって例えば、「最低賃金が、最低賃金の平均値より高いデータを抽出」するSQLは以下。
考察
- SQLについて。現在は「仮想テーブル」を扱う操作を学んでいる。今回は最も柔軟に仮想テーブルを作成・利用できる「サブクエリ」の基本について学んだ。それはクエリ(命令)の入れ子構造であり、マトリョーシカのようなイメージだ。
- 考察。新しい価値観に触れると、視界が大きく広がり感動に打ち震えることがある。例えば書籍「父が娘に語る経済の話」の一節「支配者たちはどうやって、自分たちのいいように余剰を手に入れながら、庶民に反乱を起こさせずに、権力を維持していたのだろう?」から始まる国家と宗教の話などだ。
- 続きの一部は「支配者だけが国を支配する権利を持っていると庶民に固く信じさせればいい。自分たちが生きている世界こそが最高なのだという考えを植え付ければいい。」だ。人を鎖で縛るのでなく、鎖があるように思いこませるのだ。だから私は学ぶ。自分を「思い込み」という鎖から解放するために。
抽象化×英語学習×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)」
- 日本語の並び替え例(カッコ内は用いた”型”)。「社会は、縛れない、私を」「しかし、社会は、する、私に、考える、鎖があると」「だから、私は、学ぶ」「ために、私を、開放する、から、思い込み」
- 自力で英訳。「the society can not chain me. 」「but, the society makes me think chain. 」「so, I learn. 」「for I unchain myself from thinking. 」
(実践③)Google翻訳での添削
- Google翻訳での和訳のコツ。「長い文は区切る」「コンマや5つの接続詞(before,after,but,when,if)前で区切る」「英文の文末にはピリオドとスペースを入れる」
- Google翻訳で「自力の英訳」を和訳。「社会は私をつなぐことができません。」「しかし、社会は私に連鎖を考えさせます。」「私は学ぶ。」「なぜなら、私は自分自身を思考から切り離すからです。」
- 振り返り(意図した意味になっているか)。全体的に少しニュアンスが異なる。もう少し日本語をシンプルに入れ替えたい。
(実践④)google翻訳との対比
- 次に、実践①でプリエディットした日本語をGoogle翻訳で英訳する。
- Society cannot chain me.
- But society makes me think that there is a chain.
- So I learn. To free yourself from the chain of “belief.”
- 振り返り。自力英訳と比較し、汎用的に使えそうな単語は意識しておく。「think that~」は使えそうだ。
(実践⑤)よりシンプルな表現に整理する
- twitterで練習として投稿することも考えると、より抽象的でシンプルな表現が良い。
- 日本語を再整理。社会は私を縛れない。しかし鎖があると思わせる。だから私は学ぶ。
- society can not bind me. but, society makes me think that there is a chain. So I learn. for free myself from the “invisible chain”.
参考書籍
- 集中演習 SQL入門/木田和廣/株式会社インプレス
- データベーススペシャリスト2022年版/三好康之/翔泳社
- おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社
- 父が娘に語る経済の話/ヤニス・バルファキス/ダイヤモンド社
コメント