あなたのユーザーはSQLについてまったく知らないかも知れないが、その価値についてはしっている可能性が高い。SQLはあらゆる場所で使われており、学ぶのも簡単で、SQLを使ったソリューションは実装も簡単だ。SQLをあまり使わないにしろ、よく使うにしろ、SQLを賢く使えば、エラーを避け、性能を向上させることができる。
多くのSQLは各ベンダー独自の仕様を持っている。以下で紹介するヒントはJetとTransact-SQLで使えるものだが、ほとんどのSQL製品はこれに似ている。
1: AccessのSQLウィンドウでJet SQLを利用する
Accessユーザーは、クエリを作成するたびにSQLステートメントを作成している。ただ、彼らがそれを知らないだけだ。彼らが使っているクエリデザインウィンドウは、実際にはSQLを視覚的に表現したものだ。ほとんどのユーザーは、自分が必要とする適切なSQLステートメントを作ることはできないため、視覚的なインターフェースは助けになるが、これはあなたも便利に使えるものだ。もし頭の中だけでエラーのないSQLコードを作ることができないのであれば、このSQLウィンドウに助けてもらうといいだろう。
- クエリデザインウィンドウを使ってクエリを作成し、そのSQLウィンドウのコードを、VBAモジュールのコード内にコピーする。
- もしそのコードのクエリが、VBAの無意味なエラーメッセージを返すようであれば、そのSQLステートメントをSQLウィンドウにコピーして実行してみるとよい。Accessは通常、エラーに関してVBAよりもましな情報を返してくれる。
モジュールの中のSQLステートメントを、そのままSQLウィンドウにコピーしてはいけない場合もある。ステートメントに連結演算子や変数が含まれている場合、定義ステートメントの直後にDebug.Printステートメントを追加しておくとよい。そして、ステートメントのデバッグが必要な場合は、評価後のステートメントをイミディエイトウィンドウからコピーする。たとえば、次のコード中のステートメントには変数と連結演算子が含まれているため、そのままではSQLウィンドウで実行することはできない。
"SELECT * FROM " & tbl & " ORDER BY " & fld
しかし、このステートメントの後にDebug.Printステートメントを付けておけば、イミディエイトウィンドウから、次のような評価後の結果をコピーすることができる。
SELECT * FROM Employees ORDER BY HireDate
2: SQLの予約語
SQLにはキーワードなどのいくつかの予約語がある。カラム、テーブル、変数、あらゆるオブジェクトの名前には、これらの単語は使えない。SQLエンジンが予想していないコンテクストでこれらのキーワードが使われると、SQLエンジンは混乱しエラーになる -- あるいはもっとひどい場合には、正しくない結果が出る。
3: ALL、DISTINCT、DISTINCTROWの違い
SQLのSELECTステートメントは、ALL、DISTINCT、DISTINCTROWという3つの述語をサポートしている。デフォルトはALLで、指定された条件を満たすすべてのレコードを返す。DISTINCTは、返してくるカラムに含まれる値を1つだけに制限する。たとえば、次のステートメントを実行すると、LastNameの値1つにつき、1つのレコードしか返されない。
SELECT DISTINCT LastName
言い方を変えれば、もしJohn SmithとMary Smithにそれぞれ1つのレコードが存在する場合、上記のステートメントはSmithという名字(LastName)に関してどちらか1つのレコードしか返さない。ただし、DISTINCTは直後に指定されたカラムだけでなく、それ以降に指定されたすべてのカラムに対して適用される。つまり、次のステートメントを使った場合、John SmithとMary Smithのどちらについても1つのレコードを返す。これは、その2つのカラムを組み合わせれば、同じレコードは生成されないためだ。
SELECT DISTINCT LastName, FirstName
SELECT句で1つ以上のカラムが指定されている場合、返されたレコードの選択されたカラムの値の組み合わせは一意となる。
DISTINCTには、ユーザーが知っておくべき、いくつかの予想しにくい特徴がある。
- DISTINCTをアスタリスクと一緒に使ってはならない。カラムは名前で指定する必要がある。
- これは当然のことだが、DISTINCTを使ったクエリの結果は更新することができない。
DISTINCTがカラムに対して使われるのに対し、DISTINCTROWはレコードに対して使われる。(Transact-SQLではDISTINCTROWはサポートされていない)。この述語には、以下に挙げるようないくつかの独自の制約があり、これがトラブルシュートが困難なエラーの原因になる場合もある。
- クエリにテーブルが1つしかない場合、エンジンはDISTINCTROWを無視する。
- 使用するすべてのテーブルのすべてのカラムが指定された場合、エンジンはDISTINCTROWを無視する。
「IT業界を生き抜く秘密10箇条」 のバックナンバー
-
さまざまなプラットフォームが混在する環境のバックアップ戦略--チェック項目10選
さまざまなサーバプラットフォームが混在する環境におけるバックアップ戦略を立案するうえで考慮しておくべきことを10個紹介する。 -
上司に怒りを覚えたら--行うべき(あるいは行うべきではない)10のこと
-
Google Chromeのお勧め拡張機能10選
-
少なくとも夢見る価値はある?--2010年こそ読みたい、オープンソースにまつわるニュース10選
-
2010年を成功の年に!--リーダーシップにおける5つのティップス
- IT業界を生き抜く秘密10箇条 一覧へ »
企画特集

-
御社はまだフリーの転送サービスですか?
大容量ファイルの受け渡しに「ルール」と「安心」を -
事例 VMwareでデータセンターをクラウド化
富士通の開発環境を効率化したクラウドのノウハウ -
通販サイトのアクセス集中からの危機を救う
4つのケーススタディからWebシステムを徹底解説 -
アプリケーション仮想化 3つの課題
最新のCosminexus V8.5の知られざる実力 -
アンケートから見るセキュリティ対策の実態
8つの機能が中小企業の情報資産を守る -
DBのパフォーマンスに困ってませんか?
既存のデータベース環境に追加するだけで性能が2倍に -
身近な業務をCRMが変革!
実は、埋もれた情報が鍵だった -
レガシーアプリケーションの稼働どうしてる?
互換性の問題、あなたはどう考える?意見募集中! -
経営統合後の事業損益構造の見える化を実現
SAS Performance Managementの導入事例紹介!! -
新しい視点のレンタルサーバが誕生!
スタートアップ企業、開発者に最適なそのポイントとは? -
仮想化をダメにするストレージの実態
求められるストレージ正常化のキーワードとは? -
仮想環境のバックアップは難しいのか
効率的なバックアップへの2ステップを解説 -
利用者の理想を追求した最新レンタルサーバ
サイト制作事業者がその評価結果を徹底レポート! -
ビジネスを支えるWebシステム最前線
システムトラブルの6割が、ソフトウェアに原因あり
-
7. ホットスポットと同時並列性分析について
この3分間のビデオは、Intel Parallel Studioの一部であり、アプリケー... -
8. Valarray
この5分間のビデオでは、Intelコンパイラの1次元Valarrayデータ構造に対...
新着企業動向
-
EMC、ITガバナンス、リスク、コンプライアンス・ソフトウェアの先端企業Archer Technologies ...
EMCジャパン -
セールスフォースとスマートセミナーの双方向連携で実現する
マーケティングデータベース統合...
NTTソフトウェア -
【EMCジャパン Tech Communityサイト】ITの全体最適化はインフラから
EMCジャパン -
メールセキュリティSaaS『Mail Luck!セキュアタイプ』
NTTPCコミュニケーションズ(ネットワーク事業部) - 企業動向一覧へ»
