okinawa

ITと英語の勉強メモがメイン

WebセキュリティをPortSwiggerで学んだ

PortSwiggerのWeb Security Academyでセキュリティについて学びました。

Web Security Academyには複数のコースがありますが、私はその中のApprenticeコースを選択しました。

portswigger.net

Web Security Academy(Apprentice)で学んだこと

これら4つの用語は、攻撃者がWebアプリケーションを侵害するために悪用する、一般的なサーバーサイドの脆弱性を表しています。

  • SQLインジェクション (SQLi): これは重大なWeb脆弱性の一種であり、攻撃者がアプリケーションからデータベースに対して発行されるクエリを操作します。SQLiを悪用することで、攻撃者は隠されたデータを取得したり、認証を回避したり、通常であれば制御できないアプリケーションの動作を操作したりすることが可能になります。

  • サーバーサイド・リクエスト・フォージェリ (SSRF): この攻撃は、サーバーサイドのアプリケーションを操作し、意図しない場所へリクエストを送信させるものです。攻撃者は通常、SSRFを利用して、パブリックインターネットからはアクセスできない内部システムを標的にしたり、信頼されたサーバーからのリクエストであるかのように見せかけて外部システムと通信したりします。

  • パストラバーサル: ディレクトリトラバーサルとも呼ばれるこの脆弱性は、攻撃者が本来のWebルートフォルダの外部に保存されているファイルやディレクトリにアクセスすることを可能にします。悪用に成功すると、一般的なセキュリティ障壁を回避され、機密性の高いOSファイル、アプリケーションコード、または認証情報が漏洩する恐れがあります。

  • ファイルアップロードの脆弱性: これらは、アプリケーションのファイルアップロード機能が適切に保護されていない場合に発生し、単純な機能が深刻な攻撃の経路へと変わってしまいます。攻撃者は防御メカニズムを回避してWebシェルをアップロードする可能性があり、それによって脆弱性のあるWebサーバーを完全に制御できるようになる恐れがあります。

学んで良かったこと

ハンズオンで実際に攻撃を仕掛けられる点が良かった。

単にテキストを読むより理解が深まるし、楽しく学習できる。

普段の開発でも、ファイルアップロード用のバリデーションなどはよく書くが、その重要性を再確認した。

PHPファイルをアップロード→HTTP GETリクエストでPHPファイルを起動→サーバー内のファイル読み取り、という流れをハンズオンで行った。

こうやって自分でやってみると実行ファイルをアップロードされたらやりたい放題だなあ、というのが実感できる。

Guide to Defeating the Demon King Orgodemira(魔王オルゴデミーラ攻略)

I decided to write a guide for Dragon Quest Walk as a way to improve my English.

※Since the proper nouns in the game are translated by AI, they may contain errors.

Elemental Weaknesses

Pre-transformation: Hyad (1.1x), Bagi (1.1x)

Post-transformation: Mera (1.1x), Zaba (1.1x)

Party Setup

Equipment

Arch Mage: God Eater Greatsword (Support)

High Priest: Paw Rod (Support)

Demon Swordsman: Chronos Sword (DPS)

Guardian: Divine Bird Wing Axe & Rune Buckler (Tank / Support)

Essential Souls(Hearts)

Arch Mage: Hibabango & Mikazuchi

Demon Swordsman: Hibabango & Madaraichou

Note: Hibabango protects against tension reduction.

Mikazuchi provides the skill "Zazanpa," which advances the enemy’s turn count by 2.

I use it to remove the enemy’s "Protective Shield" and "All-Elemental Resistance" buffs.

Madaraichou have the skill "Charge".

Speed Order

Arch Mage = High Priest > Demon Swordsman > Guardian > Hero of Loto (Carriage)

Notes

The Guardian should have the highest defense.

Orgodemir targets the ally with the highest defense and uses a knockback attack on Turn 1.

The Demon Swordsman should have the highest Ice-element attack power.

When reaching Super High Tension, their highest elemental stat is further boosted.

Action Pattern


Turn 1

Arch Mage: Zazanpa
High Priest: Encore (on Demon Swordsman)
Demon Swordsman: Protective Shield → Time Reversal Blade
Guardian: Mirror Shield
Orgodemir: Tension Down / Knockback / Level Down Field


Turn 2

Arch Mage: Hyadain
High Priest: Encore (on Demon Swordsman)
Demon Swordsman: Time Reversal Blade → Charge
Guardian: Swap Demon Swordsman with Hero of Loto → Holy Rush
Orgodemir: Disruptive Wave → Zam AoE Spell (high damage)


Turn 3

Arch Mage: Swap Hero of Loto with Demon Swordsman → Sap
High Priest: Encore (on Demon Swordsman)
Guardian: Ouen (on Demon Swordsman)
Demon Swordsman: Guaranteed Critical → Force Blast


Detailed Explanation

You don't need to read the following text.

I wrote it to practice writing in English.

Turn 1


Arch Mage: Zazanpa
Used to remove the enemy’s Protective Shield and elemental resistance buffs.
Time Reversal Blade cannot reduce the enemy’s level unless Protective Shield is removed first.

High Priest: Encore (on Demon Swordsman)
The Chronos Sword activates multiple buffs on the 6th action.
Therefore, the High Priest needs to use Encore to increase the Demon Swordsman’s number of actions.

Demon Swordsman: Protective Shield → Time Reversal Blade
Orgodemir uses debuffs on Turn 1.
Protective Shield prevents debuffs.
Time Reversal Blade reduces the enemy’s level.

Guardian: Mirror Shield
Orgodemir targets the ally with the highest defense using a knockback attack.
Mirror Shield reflects one spell back to the enemy.


Turn 2


Arch Mage: Hyadain
The Arch Mage is equipped with the God Eater Greatsword.
This weapon raises the user’s tension to maximum against ??? enemy types.

At maximum tension, the user can reliably activate Force Break and Echo.
As a result, Hyadain applies a 2-stage Ice-element Force Break in a single action.

High Priest: Encore (Demon Swordsman)
No special notes.

Dark Swordsman: Time Reversal Blade → Charge
About the question of whether Charge will last until the 6th action when used here:
The Chronos Sword extends buffs every 3 actions.

  • 4th action: Charge
  • 5th action: Guaranteed Critical (Charge icon remains active in a flashing state)
  • 6th action: Buff extension activates → Force Blast

Guardian: Swaps the Demon Swordsman with the Hero of Loto. → Holy Rush
Orgodemir uses Disruptive Wave, which removes all allies' buffs.
To avoid losing buffs, swap out the Demon Swordsman.
Holy Rush reduces the enemy's tension.

Orgodemir: Disruptive Wave → Zam AoE Spell
This AoE Zam spell deals very high damage.
You should equip Zam resistance gear.


Turn 3

Arch Mage: Swap Hero with Demon Swordsman → Sap
Sap reduces the enemy's defense.

High Priest: Encore (on Demon Swordsman)
No special notes.

Guardian: Ouen (on Demon Swordsman)
Ouen increases an ally's skill damage by 80%.

Demon Swordsman: Guaranteed Critical → Force Blast
Guaranteed Critical ensures a critical hit.

The Chronos Sword activates multiple effects on the 6th action:

  • Attack +3 stages
  • Skill damage +2 stages
  • Critical damage +2 stages

Force Blast increases all elemental damage by 125%.

Translation of in-game proper nouns

Boss & Characters

  • Orgodemir = 魔王オルゴ・デミーラ
  • Hero = ロトの勇者
  • Arch Mage = 大魔道士
  • High Priest = 大神官
  • Demon Swordsman = 魔剣士
  • Guardian = 守り人

Weapons & Equipment

  • God Eater Greatsword = 神喰らいの大剣
  • Paw Rod = にくきゅうロッド
  • Chronos Sword = クロノスソード
  • Divine Bird Wing Axe = 神鳥の翼斧
  • Rune Buckler = ルーンバックラー

Hearts

  • Hibabango = ヒババンゴ
  • Mikazuchi = 迅雷天ミカヅチ

Skills & Spells

  • Zazanpa = ざざんぱ
  • Hyadain = ヒャダイン
  • Sap = ルカニ
  • Ouen = おうえん
  • Force Blast = フォースブラスト
  • Guaranteed Critical = 会心必中・刻
  • Charge = 気合ため
  • Encore = アンコール
  • Holy Rush = ホーリーラッシュ
  • Time Reversal Blade = 時戻しの刃
  • Protective Shield = 守りの盾
  • Mirror Shield = ミラーシールド

Systems & Effects

  • Tension = テンション
  • Super High Tension = スーパーハイテンション
  • Tension Down = テンションダウン
  • Force Break = フォースブレイク
  • Echo = やまびこ
  • Buff = 強化効果
  • Debuff = 弱体効果
  • Level Down = レベルダウン
  • Knockback = 吹き飛ばし
  • Disruptive Wave = 凍てつく波動

Elements & Damage

  • Ice = ヒャド属性
  • Wind = バギ属性
  • Fire = メラ属性
  • Zam = ドルマ属性

Miscellaneous

  • AoE (Area of Effect) = 全体攻撃
  • Bench = 馬車仲間
  • Action Count = 行動回数
  • Turn = ターン

ドクターDイングリッシュ動画コースを1ヶ月やってみた感想

ドクターDイングリッシュの動画コースを1ヶ月間やった感想を書いていきます。

dr-d.jp

どの程度練習したの?

1ヶ月間ほぼ毎日、1~2時間程度で動画を見ながら発声練習をしました。

1ヶ月では足りなく、少なくとも3ヶ月は続ける必要があると感じています。

どんなことやるの?

動画を見ながら、一緒に発声練習をするだけ。

特に難しく考える必要はなく、勉強に疲れたら気分転換にやる感じでもよかったのでやりやすかった。

効果を感じたところ

機能語の発音方法がちょっとわかった

ネイティブ発音は機能語の発音が速すぎて、どう発音しているのか謎だったけど、ストレス部分の余波で発音しているというのがわかった。

ネイティブスピードについていけるようになった

機能語の発音方法がわかってきて、ネイティブに近いスピードでオーバーラッピングができるようになってきた。

リスニング力が上がった?

海外ドラマの聞き取りが少ししやすくなった。

ただし、これに関してはディクテーションや英語動画リスニングもやっているので、ドクターDイングリッシュの効果だけとは言えないところ。

良かったところ

喉発音以外も色々知れる

喉発音だけでなく、母音や子音の発音方法も細かく丁寧に教えてくれる。

無意識に発音しているような音も言語化しくれるので納得感がある。

知らないことも多かったので、やってよかった。

また、知識だけでなく、レッスンも必ずセットで付いているので練習しやすい。

大変なところ

根気がいる

同じレッスンを何十回も繰り返すので、根気が必要。

個人的には、それほど苦もなく続けられたが、きついと感じる人もいると思う。

物足りないところ

正しく発音できているかわからない

誰かに聞いてもらうわけではないので、自分の発音が正しいか結局のところわからない。

そこは発音コースを受けてね、ということなのだろうが、お高いのでそのうち受けれたらいいなあと。

向いている人

発音に関するまとまった知識が欲しい人

私のように発音を書籍(英語耳)とYoutubeでチラチラと学んだような人は向いていそう。

本だけではどうしても伝わりづらい部分や、Youtubeで扱わないような細かい部分を丁寧に説明してくれているので、足りない知識を補える。

無料コースもあるよ

これ、今発見したのだけど、無料で最初の方の動画だけ見れるコースがあった。

dr-d.jp

英語イマージョン学習を500時間やってみた振り返り

イマージョン学習を約500時間やったので、振り返ってみようと思う。

学習内容

学習時間:0~30時間
  1. TEDトークでリスニング&発音練習
  2. 中学英語をひとつひとつわかりやすく、という本でスピーキング練習。
  3. ChatGPTでスピーキング練習。
  4. Youtube&Netflixでリスニング練習。

上記のことを試したけど、なかなか続けられず迷走してた。

・学習の成果
特になし。この時期はけっこう辛かった。

学習時間:30~100時間

この時期はNetflixで字幕あり0.75倍速で色々見てた。

はじめの一歩・アバター・Stranger Thingsという作品を見て、英語で視聴して楽しむという経験ができて少し自信が付く。

・学習の成果
この時期から、英語が聞き取れないということに慣れてきた。

それまでは、聞き取れない部分があると気になって一時停止してたが、あまり気にせず流せるようになった。

これは意外と大きくて、英語で視聴することへのストレスがかなり減ったと思う。

学習時間:100時間~500時間

Netflixでアニメとドラマをひたすら見た。

英語字幕を表示して、アニメを見ることが多い。繰り返し見ることは少なく、大体は1回見て終わり。

たまに字幕なしにもチャレンジしたけど、2~3割程度しか聞き取れないことがほとんど。

また、散歩中にYoutubeを流して、英語音声を聞くようにした。

これは同じ動画を何度も繰り返し聞いて、たぶん50回以上は聞いている。

・学習の成果
英語字幕を読むスピードが上がって、一時停止が必要なくなった。

ただ、Netflixで色々なアニメ・海外ドラマを見ていたが、あまり成長を感じられなくなってきた。

逆に50回以上聞いたYoutubeに関しては、かなり聞き取れるようになった。

ゲーム実況動画で、実況の声とゲーム内の音声が重なっていて、聞き取り難易度は高いのだけど6割くらいは聞き取れる。

何度も聞いていた動画↓

www.youtube.com

500時間の成果

  1. 英語を聞き取れないことに慣れる
  2. 英語字幕を読むスピードが速くなる。
  3. 脳内で日本語に翻訳せず、英語のまま意味がわかる。(簡単な文の場合のみ)

成果を感じた順番はこんな感じ↑

現状では、Netflixで初見アニメを見る場合、字幕無しで2~3割くらい聞き取れるようになった。

学習前はほとんど聞き取れず、1割程度しかわからなかったので一応成長はしている。

ただ、かけた時間に見合った成果かというと、ちょっと物足りない。。。

ちなみに海外ドラマの難易度はアニメよりも高く、字幕なしではとても見れないものが多い。

学習前とのギャップ

・めっちゃ時間かかる
1000時間もイマージョン学習をやれば海外ドラマを字幕無しで見れるんじゃないかと思っていたが、全然そんなことはなさそう。

1万時間以上かかるんじゃなかろうか。

・思ったより楽しめない
最初はアニメやドラマを見て勉強できるなら、めっちゃ楽しいじゃんと思っていた。

でも、実際にやってみると、細かいニュアンスとかがわからなくてもやもやする。

面白い作品ほど日本語で見て全力で楽しみたいという欲にかられる。

一度日本語で見てから英語に切り替えてもいいかも。

・聞き流しも少しは効果がありそう
初見では全然聞き取れない動画があったんだけど、ずっと同じ動画を流し続けてから再度ちゃんと聞いてみたら少し聞き取りやすくなったことがある。

ゲーム中やご飯中、日本語のYoutube視聴中など、とにかく裏でずっと同じ英語動画を流し続けていた。

それを3日くらい続けてから、ちゃんと集中して聞いてみたら意外と聞き取れるなあ、ということがあったのでほんの少しは効果がありそう。

・聞き取れるものと聞き取れないものの差が激しい
Enna Alouetteという人のゲーム実況動画を繰り返し聞いて、かなり聞き取れるようになった。

なので同じ人の動画なら聞き取れるんじゃないか?と思って他の動画を見てみたら、全然聞き取れなくて絶望した。

1つの動画を聞き取れるようになるくらいでは足らなかった。

同じ人の動画を複数見て徐々に範囲を広げていくのが良いかなあ。

イメージとしては下記のように範囲を広げるとよさそう。

  1. 同じ人の同じ動画
  2. 同じ人の違う動画
  3. 他の人の動画

今後の方針

ここのところ成長が感じられなくなってきたので、やり方を変えようと思う。

これまでは色々なアニメやドラマを見ていたが、1つの作品を繰り返し見るようにするつもり。

イマージョン学習のブログみてると、そうやって上達した人が多いみたいなので真似してみようかなと。

あとは、英語でスカイリムというゲームを始めた。全てのセリフが音声付きのため、リスニングによさそう。

・参考にしたイマージョン学習のブログ

【EW】私のリスニング能力習得プロセス|雲行末

ポッドキャストの流し聴きでリスニング力が大幅UP!コツを伝授するよ|あっこ通信 | これからの豊かな暮らしを考える

累計リスニング時間と成長の記録(0〜100時間)|5000時間リスニングした人

英語学習の成果には個人差がある

当たり前なんだけど、学習速度が速い人もいれば遅い人もいる。

Youtube見てると3~6ヶ月で聞き取れるようになった!という人も見かける。

そういうのを見て焦らないようにしよう。

↓この動画で英語学習の成果は、耳の良さで左右されるという話をしている(第二言語習得論)

www.youtube.com

イマージョン学習を続けてきた感想

最初はけっこう大変だった。

初心者でも聞き取りやすくて、大人でも楽しめる英語作品というのはあまり無く、色々な作品をちょっと見てはやめてを繰り返していた。

ある程度慣れてからは、ストレスなく英語で見れるようになってきたので、そこそこ楽しみながら学習も続けられている。

とは言っても面白い作品は日本語で見たいなあと思うんだけども。

500時間かけた割にはいまいちリスニング力が上がってないので、今後の方針に書いたように、少し学習方法を変えてやっていこうと思う。

SQL勉強メモ

SQL関連で勉強したことのまとめ記事。
長くなってきたのでリンク集として使っていきたい。

SQL実行順序

FROM
JOIN
WHERE
GROUP BY
SUM, MAXなど
HAVING
SELET,DISTINCT
ORDER BY
LIMIT

ちなみにサブクエリは内側から最初に実行される。

小技集

select 1

select 1 from table~という謎のSQLに出会った。

exists文で使われるものらしい。

存在するかどうかだけがわかればよくて、データは要らないよって時に使う。

ただ、select 1 より select * のほうが早いらしい↓
COUNT(*)とCOUNT(1)の処理速度検証結果

もっと言うとexistsよりjoinのほうが早いらしい↓
EXISTSとSQLの高速化について - 猫好きモバイルアプリケーション開発者記録

-- A.name = B.nameである行だけ抽出
select * from Atable AS A
where
exists(
    select 1 from Btable AS B
    where
    A.name = B.name
    )
-- -- A.name = B.nameではない行だけ抽出
select * from Atable AS A
where
not exists(
    select 1 from Btable AS B
    where
    A.name = B.name
    )

where 1 = 1

where はtrueかfalseかで判定している。

1 = 1なら常にtrue。

使い所はwhere句かand句かの分岐の時。

よく複数単語検索なんかで使う。

検索条件が増える度にAND句で追加したいんだけど、最初はWHERE句じゃないといけないのでめんどくさい。

そこで WHERE句を1=1にして、AND句の追加だけで良いようにする。

select * from
where 1= 1
and~ // ここに追加していく

・参考サイト
「WHERE 1=1」は条件付きSQL文が書きやすくなる魔法の言葉 | キノコログ

OFFSET FETCH

MySQLのLMIT OFFSETと同じで取得する行数を指定できる。

OFFSETでスキップする行数を指定。
FETCH NEXT ○ ROWS ONLYで何行取得するかを指定。

select user_id, name from account_table
order by user_id
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY;

11行~15行を取得。

・参考

sql-oracle.com

count(*)over()

window関数。

ページングの時にとても便利!

selectで総レコード数を取得しつつ、1ページ分のselect結果も欲しいときに使える。

secect count(*)over() , account_name
from account
limit 0 rows
fetch 100 rows

・参考記事

resanaplaza.com

テーブルデータ増殖技(Insert Select)

増殖テーブル

・SQL
id = A を id = B にしてそれ以外の列はそのままで増殖する。

insert into increse
select 
name,
'B'
from increse
where
id = 'A'

増殖後

イメージとしては下記SQLを実行している感じ。
INSERT INTO table (name, id) VALUES (SELECT文)

insert into increse
(name, id)
values
(select name, 'C' AS 'id' from increse
where 
id = 'B')

GROUP BY句にないカラムも表示させたい

Group By句にないカラムを表示させたい - okinawa

テーブル同士の比較

【SQL】テーブル同士の比較 - okinawa

ファイル取り込み(bulk insert)

テキストやCSVファイルをDBにインポートするときに使う。

SQL Server で BULK INSERT をつかってcsvなどのデータを取込む方法 #DB - Qiita

テーブルコピー(select * into)

SELECT * INTO コピー先テーブル名 FROM コピー元テーブル名;

基礎知識

GROUP BYってなんなの?

部分集合に切り分ける。
GROUP BYってなんなの? - okinawa

NULLとの四則演算は必ずNULLになる

1 + NULL = NULL
5 * NULL = NULL

集合指向言語と手続き型言語の違い

集合指向言語:まとめて処理
手続き型言語:1件ずつ処理
集合指向言語と手続き型言語の違い - okinawa

HAVING句を理解すると集合志向が理解できるらしい

HAVING句をマスターすると集合志向が理解できるらしい - okinawa

3値論理

普通は TRUE/FALSEの2つ
SQLは TRUE / FALSE / UNKNOWN の3つ
真理値の優先順位は下記↓

  • AND:FALSE > UNKNOWN > TRUE
  • OR: TRUE > UNKNOWN > FALSE

【SQL】3値論理とは - okinawa

バッファプールとログバッファ

  • バッファプール:ストレージ(HDD)にあるRDBのデータの一部を保持している。
  • ログバッファ:更新処理のときに更新情報をログバッファ上にためて、コミット時にまとめて行うための領域。

バッファプールとログバッファ - okinawa

豆知識

COUNT(*)とCOUNT(列名)の違い

  • COUNT(*):NULLも含む全行カウント
  • COUNT(列名):NULLではない行数カウント

ちなみにAVG()はNULLの行はカウントしないで計算する。

相関名(AS~)の有効範囲

()内の名前は()の内側のみで使用可能。
外側では使用不可。

これは実行順序の問題。
サブクエリは内側から実行される。
実行された後は実行結果しか残らないので名前はもう残っていない。。。
なんかかっこいい。

ほかにもSELECT句でつけたAS名がWHERE句で使えないのもSELECT句の方が実行順序が後だから。

UNIONの使い所

異なるテーブルをまとめて集計したいとき。
UNIONの使い所 - okinawa

CASE式のELSE句は必ず書くべし!

ELSEは省略するとNULLが入ってしまうので。
SQL CASE式について - okinawa

サブクエリの実行順序と相関サブクエリ

サブクエリは内側から実行される。
SQL サブクエリについてのメモ - okinawa

特性関数とは

ある値が集合に含まれるか調べる関数。
集合に対する条件判定や集計に便利な関数です。
【SQL】特性関数とは - okinawa

SQLチューニング

実行計画の見方。

  • MySQLはSQL文の頭に explain を付けるだけ。
  • SQLServerはSQL文の頭に SET STATISTICS PROFILE ON を付ける。

GUIで見る方法もある↓

実際の実行プランの表示 - SQL Server | Microsoft Learn

チューニングについては過去記事も参照↓

GMOのDBチューニング課題やってみた - okinawa

インデックスって何なの?

DB勉強メモ - okinawa

SQLチューニング方法一覧

SQLチューニングの一覧 - okinawa

統計情報とは

実行計画を練るためのネタ元。
統計情報を更新するだけでパフォーマンス改善する場合もあり。

統計情報とは - okinawa

一時テーブル

大量データを持つテーブルを何回も読み込むとパフォーマンスが悪化する。

そのため一部データを取り出して、一時テーブルを作り、一時テーブルを読み込む。

一時テーブルに主キーを設定してやると尚良し。

テーブル結合関連

inner join と outer joinの違いはベン図で表すとわかりやすい

ベン図

・参考記事
SQL Joinサンプル集 Joinで遅いSQLの原因を調べる方法 | ポテパンスタイル

Isn't SQL A left join B, just A? - Stack Overflow

on句が一部合致するとどうなるの?

下記の2テーブルをleft outer joinで実験。

Shohinテーブル

Zaikoテーブル

select * from Shohin
left outer join Zaiko
on Zaiko.name = Shohin.shohin_mei
and Zaiko.category = Shohin.shohin_bunrui;

・結果

on句が全部合致した行だけ値が入って結合されている。1行目と3行目。

on句が一部合致した行は全部nullで結合されている。4行目。

すべて合致した行のみ結合され、それ以外はNULLで出力されるということ。

結果

on句をwhere句っぽく使うときの注意点

・torihikijiyuテーブル

取引事由テーブル

・haishi_kouzaテーブル

廃止口座テーブル

・SQL文(right outer join)

select * from haishi_kouza
right outer join
torihikijiyu as tor
on
tor.torihikijiyumei = '契約' --where句っぽいところ

結合後2

上記のように取引事由が「契約」以外の行も出力されてしまう。
right joinの場合は右側のテーブルは結合条件に合致しなくても全て出力される。
そのためtorihikijiyuテーブルの行はすべて出力。

この場合は、leftかinner joinにすれば取引事由が「契約」の行のみ出力される。

あれ?どゆこと? where句と同じことになると思ってたけどそうじゃないようで。
どうやらouter側のテーブルは全部返ってくる。
でも inner joinの時はwhere句みたいな動きをしている。(SQL1)
ま、where句みたいに使いたいならwhere句を使いましょう。
→where句よりjoin句で絞り込んだほうが処理が早いらしい。

・SQL文1(left join)

select * from haishi_kouza
left join
torihikijiyu as tor
on
tor.torihikijiyumei = '契約'

結合後

結果は廃止口座テーブルの全ての行に取引事由テーブルの「契約」の行だけが結合される。

ここのまとめ

結合の向きに注意する。

・tableA left join tableB
tableB.columnB = '契約' にすると「契約」の行のみ結合して出力。

・tableA right join tableB
tableB.columnB = '契約' にすると「契約」以外の行も全て出力されてしまう。

テーブル結合ってなんなの?(重要)

無条件テーブル結合をやってみたらわかりやすかった。

・torihikijiyuテーブル

取引事由テーブル

・haishi_kouzaテーブル

廃止口座テーブル

・SQL(無条件結合)

select * from haishi_kouza
inner join
torihikijiyu as tor
on
1 = 1

・結果

結合後

テーブル結合ってのは
列は、tableA + tableB
行は、tableA × tableB
になるんだなあ。

外部結合ミスの見つけ方

外部結合が上手くいってなくて不要な行が出力されたり、nulで出力されて困った時に。

  • nullではないはずのカラムがnullだったら外部結合ミスを怪しもう。ON句の結合ができない行はnullを含んで出力される。
  • 妙なところにMAXやMINが使われていたら外部結合ミスを取り繕っている可能性あり

テーブル結合で行を増殖させないポイント

ON句の条件を

  • 1対1で結合
  • 1対多で結合

【SQL】テーブル結合で行を増殖させないポイント - okinawa

集合演算をテーブル結合でやってみる

SQLの集合演算をテーブル結合でやってみる

テーブル結合ハマったこと

テーブル結合でハマったこと - okinawa

論理と集合

分配法則

掛け算と同じ。

A & (B or C) == (A & B) or (A & C)

A or (B & C) == (A or B) & (A or C)

ドモルガンの法則

!(A & B) == !A or !B

!(A or B) == !A & !B

対偶とごっちゃになるので注意。

SQLを読むときのポイント

  • 最初にSELECT行を見て何を取得するか把握する
  • 最初のFrom句のテーブルがメインテーブル
  • group byやsumなどの集約関数を見ると何を集計したいのかわかる
  • ネストの深いところから見ていくと割とわかりやすい

SQLテストサイト

ブラウザでSQLを実行できる便利サイト↓
sqlfiddle.com

UPDATE文

SELECT結果を使ってUPDATEする

【SQL】SELECT結果を使ってUPDATEする - okinawa

その他

DISTINCTとNOT EXISTSでハマった話

NOT EXISTSとDISTINCTでハマった話 - okinawa

自分なりのイマージョン学習のやり方

便利ツール

Language Reactor(Chrome拡張機能)

イマージョン学習には必須と言っていいくらい便利なツール。

Youtube・Netflixの字幕にマウスカーソルを合わせると、日本語翻訳が表示される。

単語の意味を詳しく調べたいときは、単語をクリックするだけ。

英語字幕で視聴しつつ、今のところ意味がわからなかったなあと思ったら、すぐに意味を調べることができる。

聞き取りやすい動画の探し方

子供向け動画

子供向け動画は使われる単語が簡単で聞き取りやすいものが多い。

キッズ設定に変えて動画検索すると探しやすい。

ただし、子供向け動画は聞き取りやすいが、大人が楽しめるものは少なめ。

子供向けから始めて、慣れてきたら大人向け動画に移行していく。

英語吹き替え

元々英語の動画よりも、英語吹き替え動画の方が聞き取りやすい傾向にある。

なので、Netflixで動画を探すときは英語吹き替え動画を探すと良い。

探し方↓

子供が主人公

子供が主人公だと難しい単語を使わないので聞き取りやすい。

子役は発音も比較的はっきりしている傾向にある気がする。

動画の見方

最初にあらすじを見る

動画視聴前にあらすじを見ておくと、リスニングの助けになる。

先にあらすじ見たらつまらないじゃないか!と思っていたけど内容理解できないよりはマシ。

あらすじを知っていると、何について話しているのかある程度予想がつくため、聞き取りしやすくなる。

繰り返し視聴

私の場合は以下のように繰り返し動画を視聴しています。
1回目:字幕なし英語音声0.8倍速
↓ 1~2ヶ月後
2回目:字幕なし英語音声1倍速

2回視聴すると、不思議と1回目よりも聞き取れる単語が増えています。

これは主にモチベーションアップのためにやっていて「前回よりも聞き取れるようになったぞ!リスニング力アップしてる!」というを実感を得るためにやっています。

最初におすすめの動画

Extra English

英語学習者向けに作られた海外ドラマ。

簡単な単語のみでゆっくりはっきり喋ってくれるので、非常に聞き取りやすい。

日常生活を描いているため、日常会話が学べる。

古見さんは、コミュ症です。(Netflix)

コミュ症で喋ることが困難な主人公が、友人を作っていくアニメ。

主人公がほぼ喋らない設定でセリフが少ない&ゆっくりしゃべる&わかりやすい単語多い。

主人公の気持ちを日本語吹き出しで表現するアニメなのでわかりやすい。

あまり聞き取れなくても楽しめるため最初におすすめ。

TVアニメ『古見さんは、コミュ症です。』公式サイト

おさるのジョージ

子供向けの教育番組のような内容。

最初に見たときは、子供向けでこんなに速いの!?と驚いたけど、これでも聞き取りやすい方。

わかりやすい単語が多く、比較的はっきり発音するため聞き取りやすい。

www.youtube.com

他のおすすめ動画

リスニング難易度別におすすめコンテンツをまとめました↓

dodosu.hatenablog.jp

字幕は表示?非表示?

私の場合は、最初の2ヶ月は英語字幕を表示していました。

しかし、おさるのジョージを見て「ほぼすべての単語を知っているのに聞き取れない」ということに気付いたため、字幕は非表示にして「知っている単語なら聞き取れる」を目指すことにしました。

参考動画

私は下記の動画を見て、イマージョン学習のイメージを掴みました。

www.youtube.com

英語イマージョン学習記録(3ヶ月目)

視聴したもの

7Seeds

全24話を見終わった。

0.75倍速で字幕ありにしたりなしにしたり。

Podcast

ESL(English Second Learning)で検索すると色々出てくる。

おすすめはESLpodとpodcastenglish

ESLpodの方は有料化したので、あまり数がない。聞き取りやすさは抜群。

podcastenglishはレベル0~3まであって難易度がわかりやすい。

とりあえずレベル0から始めた。

ピアノの森

全話見た。

森に捨てられていたピアノを弾いて育った天才少年と、子供の時から英才教育を受けたピアノ少年の話。

ピアノの演奏が美しくてイイ!

音声と字幕は一致せず。

最初の3話くらいは聞き取りやすかった。その後は半分くらい聞き取れるかなあという感じ。

ダンジョン飯

音声と字幕一致。0.75倍速で字幕はあまり見ないようにした。

かなり聞き取りは難しい。

3割くらいしか聞き取れてなかった。

それでも楽しいからすごい作品。

アバター

全シーズン見た。

世界が火の国に支配されつつあったが、アバターが世界を救う話。

かなり聞き取りやすい。半分くらいは聞き取れた印象。

0.75倍速。字幕はできるだけ見ないようにした。

ゾンビになるまでにしたい100のこと

全12話見た。0.8倍速。

社畜だった主人公がゾンビによって崩壊した世界を満喫する物語。

けっこう聞き取りやすかった。

内容も社畜の話に共感できるところがあって良かった。

これはwikipediaであらすじを見てから視聴した。

雨を告げる漂流団地

その名の通り団地が漂流するアニメ。

子供が主人公なので聞き取りやすかった。

この時点のリスニング力

アバター・雨を告げる漂流団地・ゾンビになるまでにやりたい100のこと、は5割くらいは聞き取れた。

ただ、完全に字幕なしだと厳しいので、字幕をチラチラと見つつ視聴した。

学習時間

・10月前半~中旬
平日1時間。

休日2~3時間。

・10月中旬~
毎日3~4時間。

10月中旬から学習時間を増やした。