DB
HAVING句の力(SQL, HAVING, 関係除算)
HAVING 句はSQLの重要な機能のひとつですが、その真価は十分に知られていません。しかし、HAVING句もまた、集合指向というSQLの本質を理解するための重要な鍵であり、幅広い応用が可能です。本稿では、HAVING句の使い方を学びながら、「集合単位の操作」という集合指向言語の第二の特性を理解します。
恥ずかしながらHAVING句って、group by した後の結果を集計、条件で絞り込んだりするものでしょ?と思っていたのですが、
昔のSQLでは、HAVING句はGROUP BY句と併用しなければならなかったので、今でも時々そう勘違いされていることがありますが、現在の標準SQLではHAVING句を単独で使えます。
時代は変わりましたね!
はるか昔に受けた研修から知識の更新をしていませんでした(^^;
例えばHAVING句の便利な活用法として、次のような例が掲載されていました。
今夜分かるSQLインジェクション対策
Webアプリケーションに対する攻撃手法の1つであるSQLインジェクションの存在は、かなり広く知られるようになった。しかし、その対策はまだ本当に理解されていないように思える。フォームから渡された値の特殊文字をエスケープしたり、PHPのmagic_quotes_gpcといった自動エスケープ機能をオンにするだけで対策したつもりになっていないだろうか。
「SQLインジェクション(injection)」とは、例えば入力フォームなどで特殊な文字列を入力することで、データベースに記録される内容を取り出したり、パスワードを知らずとも不正なログインが可能なセキュリティホールのこと。
その基本的な対策方法について説明されています。基本的に文字コードはEUC、特殊な文字などはきちんとエスケープをしていれば原則、OKです。Perlの場合はbindを用いていれば比較的かんたんに回避できちゃいます。
次の通り。
[開発]かんたんテーブル設計ツール // DBDesigner
テーブル設計がかんたんに出来るツールをコチラのサイトで発見。しかもFree!
DBDesigner 4
http://www.fabforce.net/dbdesigner4/
![]()
このレベルの文書が作れるのはスゴイですねぇ。見た目のデザインもいい感じ。上記画像のようにPNGで吐き出せたりするので、インストールしてない人にも見せることが出来ますね。
MySQL用なのでデータ型なんかが多少違う場合もありますが、基本的な部分は同じなのであまり問題ないかと。
他のツールもいくつか教えてもらいました。









