フォローアップweb/JS、SQLの解釈順

uchiumiです。
今日のフォローアップはjsの「ド○クエ風メニューバーを作る」の続きと、sqlの解釈順序についてでした。
詳しい内容は「ディノオープンラボラトリ」にて公開予定ですので、そちらをご覧下さい。

.each()の引数の扱いが変わる不思議

今回のjsの講習では「メニューのli要素の中で一番横に長いものを探す」という処理をするため、each()文についてを主に学びました。

$('hoges').each(function(key, body) {
  console.log($(this));
  console.log(key + ':' + body);
});

こうすると、$(’hoges’)の中身をphpのforeach文みたいにまわして取得していじれます。
$(this)で取ることによって、中身(foreach($hoges as $hoge)でいう$hoge)がとれます。
便利ですね。
ちなみに配列をまわしたいときは、

var hoges = new Array(1,2,3,4,5,6,7,8,9);

$.each(hoges,function(key, body) {
  console.log($(this));
  console.log(key + ':' + body);
});

というように第一引数に配列を入れてやると同じ様にループさせることができます。
優秀ですね。

さてここで自分は配列を作るとき「new array()」と書いてはまりました。
しばらく書いてないと駄目みたいです;

each文は$(’hoge’).each()のような形でしかみたことがなかったので、とても勉強になりました。
これからもどんどん使って使いこなしていきたいと思います!

SQLはFROMから

SQLの解釈順序は以下のようになっているそうです。
FROM→WHERE→GROUP BY→HAVING→〜→SELECT

〜の部分にはORDER BYとかがはいったりしますが、
基本的にどのDBエンジンでもこのような解釈がされているとのことでいた。

なのでWHEREで削除されたものはGROUP BYの対象にならないなど、気をつけなければならないところがあるようです。
また複数のテーブルをWHEREの無い状態でジョインする(クロスジョインする)と、行数x行数という素敵な結果が返ってくるので、気をつけましょうとのことでした。

他にも、GROUP BYしていない値(集約関数は除く)をSELECTで指定するのは何故NGなのか、ということを学びました。
GROUP BY で指定する意味は「同じ値である保証をしてあげるため」だそうです。
確かに GROUP BYするidが同じだったとしても他の値まで一緒とは限りませんしね。
気をつけていきたいと思います。

今回の講習の内容を聞いて、研修時に演習問題として同じ様な問題があった事を思い出しました。
あの頃は少し難しいと感じましたが、今思うと本当に大切な事だったんだなと感じました。
SQLは未だにどう書けば良いのか悩む事が多いので、いろいろ試して理解していきたいと思います。

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree