Blank?=Falseスマートフォン用の表示で見るBlank?=False「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々Blank?=Falseこの広告は、90日以上更新していないブログに表示しています。今回は引き続きSQLのお勉強、述語を勉強していきます。検索CASE式おまけ述語とは?真理値を返す関数(真理値とは、TRUE,FALSEを指します。)たとえば、◯◯が条件▲▲にマッチするならTRUE,しなければFALSE...という戻り値になります。<>が述語と言われます。各述語の機能LIKE正規表現によるパターンマッチング検索を行います。,_の2つのワイルドカードのみを使用します。2つのワイルドカードの仕様は以下のようになっています。任意の文字1つ%はどのような文字列(0個以上)にもマッチし、_はどのような文字でも1文字だけマッチします。_を2つ続ければ、任意2文字となります。%_は使えますが意味はありません。%A_とすれば、A以前はどのような文字列でもOKで、Aの後は1文字のみ、という条件になります。Abcや1234Aにはマッチしません。今回は、こんなサンプルテーブルを用意します。sec)実際に使ってみます。sec)この場合、最後がddならその前は何でもいい、という条件になります。これを後方一致といいます。sec)とした場合、先頭がddならその後は何でもいい、という条件になります。このような条件を前方一致といいます。ところで、Google検索は検索文字列が真ん中にあってもヒットしますよね。いう検索方法を、中間一致といいます。sec)先頭がdd,真ん中がdd,最後がddとなるすべてのデータが出てきます。検索結果が多くなりやすい検索方法なので、様々な検索は中間一致がデフォルトになっている事が多いです。先頭が一致するもの、最後が一致するものを検索したい、というシチュエーションもあるので3つの検索方法を選択できるようになっているシステムもあります。おまけですが、正規表現を使うことで非常に柔軟な検索機能を作ることができます。インターネットのURLの文字列だけを取り出す、等様々なことができるので、ご興味あればググるとよし!(自分が正規表現好きなだけ)BETWEEN範囲検索を行います。個人的に一番わかり易いSQLの句じゃないかとおもったり。何年から何年までのデータを表示、といったシチュエーションで使われます。データベースは件数が多くなりやすいので、BETWEENでここ数ヶ月分だけ表示、という風によく使います。sec)BETWEENを使う時の注意点として、指定した値を含むということです。上の例の場合、2009-11-01から2009-11-30まで、となります。=>,=<と同じということです。'2009-11-29'とするかですね。個人的には前者のほうが読みやすいと思います。NULLはNULLでなければTRUEを返す述語です。NULLなレコードを抽出して一律UPDATE、等で使うことが有ります。INORの省略系で、1つの句複数の条件を設定できます。実際に使ってみた例が下です。sec)指定したVehicleとFurnitureのデータが表示されます。|+------+---------+---------+------------+-----------+1つ条件が増えるたびにORを追加していかないといけなくなりますね。INは、逆に指定したもの以外という条件になります。sec)さっきとは逆に、VehicleとFurniture以外のデータが表示されます。INの真価はサブクエリを使うときに出てきます。複数の条件ということは、スカラサブクエリではないサブクエリの結果を条件に含める事ができるようになるわけですね。試しにやってみました。sec)EXISTSレコードの存在チェックを行う述語。存在すればTRUE,存在しなければFALSEを返す。引数は必ず相関サブクエリになる。(相関ではなくても使えるけど、必要となるケースはたいてい相関サブクエリな感じ。EXISTS関数を使うSQL文は熟練のDBエンジニアでも即座に把握できないこともしばしばある使いこなすと非常に大きな力を発揮するとあり、このEXISTSがSQL中級者への登竜門のような扱いになっています。自分もあまり理解しきれていないですが、プログラミングで言うIsFileExistなどのイメージで合っていると思います。使うかというと、◯◯というものが▲▲テーブルにあれば表示というシチュエーションで使います。実際に、例を出してみます。いつものSampleテーブル、そしてカテゴリの一覧があるCategoriesテーブルです。sec)この2つのテーブルを使い、Categoriesテーブルにあるカテゴリのデータを表示する、というお題でやってみます。sec)と、このようにSampleテーブルのデータのカテゴリでCategoriesテーブルに登録されているのはVehicleだけですので、Vehicleのデータだけ表示される、という結果になりました。抽出条件に含まれなくなるわけですね。sec)Categoriesテーブルに存在しないカテゴリのデータが表示されます。本書ではこういったあたりを解説されていますが、より詳細を知りたいひとは達人に学ぶSQL徹底指南書(同じ作者の本)を呼んでみてください、とのことでした。条件分岐のSQL版、といえばわかるかな。(ちなみにMySQLはIFによる条件分岐も対応している。読みにくいので非推奨。)CASE式には2種類あり、単純CASE式と検索CASE式があり、文法が少し異なる。検索CASE式はIFの文法に近い、というイメージ。対象となる式が1つ、それに対して色々な条件での分岐です。IF~という感じです。WHEN~ごとに別々の条件を設定できます。Stationeryなら文房具,それ以外は未設定と表示する列を作る]というお題でやってみます。sec)おまけ本書ではCASE式は特にSELECT分の結果を柔軟に組み替えるときに、大きな威力を発揮します。例として本書には行列を入れ替えるものが紹介されていました。それは、以下の様な文です。sec)この例は、カテゴリごとの個数をそれぞれの列に出力するサンプルです。sec)こうなります。各関数について勉強していきます。VIEWについてOracleは放置(オイ)して、SQL本読書に戻ります。»Profile某製造業の社内Sler。今のお仕事のメインはAccessとVBA。元パッケージソフト開発者。VBA、そしてRDBやNoSQLを組み合わせたアプリケーション開発を得意としています。福岡県、もしくは熊本県へIターン転職に向けて、DB/NoSQLの業務に関われる会社を探しています。レベル1取得しましたリファクタリングの帽子をかぶるということ勉強は大変だが役に立つCUIなCentOS7にcinnamonを導入するLinuxのコマンドはMacOSXでそのまま動くとは限らない月別アーカイブTwitterGooglePocketはてなブログをはじめよう!stonebeach-dakarさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。