CASE式・結合JOIN・統合UNIONで同じ結果を表示させる

結合と統合はほぼ同じ意味ですが、SQLの場合は結合はJOIN、統合はUNIONを使い結果が異なります。 一般的には左テーブルを優先して右テーブルの主キー(プライマリーキー)と合致することを結合条件として左テーブルに列を追加する左外部結合LEFT (OUTER) JOINを使いますが、右テーブルを優先して左テーブルの主キーと合致することを結合条件として右テーブルに列を追加する右外部結合RIGHT (OUTER) JOIN、そして左右両方のビューのどちらかに1個でも主キーがあれば結合する完全外部結合FULL OUTER JOINもありますが、実際に使う機会はほぼありません。 完全外部結合FULL OUTER JOINは、主キー以外の情報列の並び順が合致しない左右のビューを統合UNION ALLして主キーでグループ化するのと同じです。

昔も今も変わらぬバッチファイルのお作法

ローカルWindows環境の外にあるインターネットの世界では、サーバーのほとんどがUNIXであり、Windowsで使える「端末エミュレータ(ターミナル+シェル)」=「UNIX(カーネル)に繋いでCUI(Character-based User Interface)ターミナル上で操作するもの」という意味になります。 エミュレーションとはWindows上のターミナルから打ち込んだシェルコマンドでUNIXカーネルを操作することであり、操作対象となるUNIXはインターネット上のサーバーにあったり、ローカルPC内の仮想マシンにあったりします。 Unixのカーネル(核)を操作するシェルコマンドはcygwinのようなターミナル(端末)から入力しますが、Windowsのカーネルを操作するコマンドプロンプト(cmd.exe)はコンソール(ターミナルではない)から入力します。 MacはもともとUNIXベースなのでデフォルトでターミナルというUNIX端末エミュレータが付いていますが、Windows7にはデフォルトの端末エミュレータとしてPowerShellというのがありますが、コマンドがWindows専用でUNIX互換コマンドライン環境はありません。

Oracleスキーマを操作するSQL PlusコマンドとOracleパラメータファイル

Oracle ClientはOracel Serverに「サーバー→リスナー→データベース」の順番に接続し、PCにOracleサーバーとクライアントを両方インストールすると、サーバーのNet Configuration AssistantやNet Managerは無効になり、構成パラメータファイルはクライアントのものを使用し、サーバーのもの(dbhome_1フォルダ内のもの)は使用しません。 tnsnames.oraファイルの構成パラメターをローカルネーミングパラメター、listener.oraファイルの構成パラメターはリスナーパラメーター、sqlnet.oraファイルの構成パラメータをネーミングメソッドパラメータと呼びます。

何も存在しないというNULLと存在すべきところに存在しない空文字とゼロ

数学的にいうと「何もない(NULL)に対してゼロという数字を与えた」ということになり、ゼロの持つ意味は数学的に位取りができること、哲学的にない状態があるという事実を表現することの2点になります。 例えば気温0度(ゼロ)に対して観測値なし(Null)、フォーマット済みのハードディスクの中身(空文字)に対して、ハードディスク自体が抜かれた状態(Null)になります。 SQLでは0除算はエラーですがNULL除算はNULLが返されエラーにならないため、値が0だったらNULLに置き換えます。

Database Configuration AsistantによるOracleインスタンス作成手順

仮にバージョンの異なる2つのOracle(例えば10gと11g)のインスタンスを共存させる場合は、バイナリ自体を分ける必要があるためバージョンごとにDBソフトウェア自体を別々にインストールを行なう必要がある(Oracleクライアントも同じ)が、同じバージョンのOracleインスタンスを2つ起動させるにはDBCAから新規にインスタンスとリスナー(サーバ側で接続を待ち受けるための機能)を別SIDで作成する。

Oracle 11g R2のインストール手順を粛々とまとめてみた。

生産管理ではOracle, 会計システムではSQL Serverを使用するため僕のPCにはOracel11gとSQLServer2012が常時起動しているわけだが、世間一般で言われるほどメモリを食いつぶす感じはしない。せいぜい時折「メモリー過大に消費してますよー」というWindowsの警告メッセージが表示されるくらいである。

SQLによる外部結合と内部結合

LEFT JOINは左のテーブルをすべて抽出した上で、これを基準としてON以下の外部結合条件に合致すれば右テーブルのレコードを結合し、INNER JOINはWHEREと同じ完全内部結合であり、ON以下の内部結合条件が両方のテーブルに合致する場合のみレコードを結合します。 WHEREによる結合条件の場合、テーブルを先に並べて結合条件は最後のWHEREで一箇所にまとめる違いがあります。 業務システムの実績データを分析する際にLEFT JOINを使うケースが多いのは、実績(左)に含まれない不足情報をマスタ(右)から追加する、というニーズが多いからです。 ON以下の結合条件はマスタ(右)のプライマリーキーであるはずはずですから、外部結合レコード件数は実績(左)と同じになり、実績のないマスタがレコードを作ることはありません。レコードが増えたら結合条件が不足しているかキーが重複しているかのどちらかです。 集計関数AVG, COUNT, MIN, MAX, SUM以外の値はすべてGROUP BYに含まれている必要があります。 普通のCASE式は値の置き換えに使い、集合関数MAXと併用すると縦並びテーブルを横並びテーブルに変換できますが、考え方はCASEで条件指定で値を取得し、GROUP化で統合することにより条件に合わないとき空データが消えます。

PHP・JavaScript・VBの違いの比較整理

プログラムのコードは変数、値(リテラル)、式、制御文の4つから構成され、制御文の書き方には順次処理、分岐処理、繰り返し処理の3種類があります。 言語によってこの4要素の表現方法が異なり、しかもコード内部に書かれるSQL文も、接続するデータベースによって多少の差異がある、複数のプログラム言語を扱うときに何となくモヤッとした曖昧感が残る原因の正体がここにあります。