⇧『爆縮』『圧壊』のどちらが適切かはさておき、
探索ツアーの価格は25万ドル(約3500万円)。
「全員死亡」となった「タイタニック探索ツアー」事故。潜水艇内部の詳細が明らかに(BuzzFeed Japan) - Yahoo!ニュース
⇧ 3500万円、もっと有意義な使い道あっただろうに...ご冥福をお祈りいたしますか...
Oracle DatabaseのDUALテーブルとは?
Oracleさんの公開しているドキュメントによりますと、
DUAL
は、データ・ディクショナリとともにOracle Databaseによって自動的に作成された表です。
DUAL
は、ユーザーSYS
のスキーマにありますが、すべてのユーザーがDUAL
という名前でアクセスすることができます。VARCHAR2(1)
として定義されているDUMMY
列を持ち、X
値を持つ行を含みます。DUAL
表から選択することは、定数式をSELECT
文で計算する場合に便利です。 DUAL
には行が1つしかないため、定数が返されるのは1回のみです。一方で、任意の表から定数、疑似列または式を選択できますが、値は表の行の数のみ戻されます。DUAL
から定数値を選択する例は、「SQLファンクション」を参照してください。
⇧ とあるように、1行だけのデータを取得できるってことらしいのだけど、DUALとは関係なく、普通のテーブルでも固定値をSELECTできるってのは知らなんだ...
Oracle Databaseで、from DUALテーブルしなくても固定値がSELECTできるのを知る
ということで、実際にやってみた。
⇧ 上記の記事の時のテーブルを利用してます。
■普通にDUALテーブルから固定値をSELECT
SELECT '0001' as id , '0000000000001' as code , '札幌グランドホテル' as name FROM dual;
■DUALテーブルから固定値をSELECT。固定値をDUALテーブルからSELECTするを混ぜる
SELECT '0001' as id ,(SELECT '0000000000001' FROM dual) as code ,(SELECT '札幌グランドホテル' FROM dual) as name FROM dual;
■普通のテーブルから固定値をSELECT。普通のテーブルのカラムも取得できる。
SELECT '0001' as id ,(SELECT '0000000000001' FROM dual) as code ,(SELECT '札幌グランドホテル' FROM dual) as name , FACILITY_CODE FROM W_M_FACILITY facility WHERE NOT EXISTS( SELECT * FROM W_M_FACILITY WHERE FACILITY_CODE = '99999' ) AND facility.FACILITY_CODE = '0000000000001';
■普通のテーブルから固定値をSELECT。普通のテーブルのカラムも取得できる。行数を絞らない。
SELECT '0001' as id ,(SELECT '0000000000001' FROM dual) as code ,(SELECT '札幌グランドホテル' FROM dual) as name , FACILITY_CODE FROM W_M_FACILITY facility WHERE NOT EXISTS( SELECT * FROM W_M_FACILITY WHERE FACILITY_CODE = '99999' ) -- AND facility.FACILITY_CODE = '0000000000001' ;
確かに、条件絞らないと複数行取得できますね。DUALテーブルからのSELECTだと必ず、1行しか取得できなかったけど。
ちなみに、
⇧ 上記サイト様によりますと、副問い合わせなどを組み合わせて、間接的にDUALテーブルとJOINすることはできても、直接DUALテーブルとJOINするのは無理っぽい。
SELECT filter.code ,facility.* FROM ( SELECT '0000000000001' AS code FROM dual ) filter INNER JOIN W_M_FACILITY facility ON filter.code = facility.FACILITY_CODE;
中間テーブルっぽいのを作ってJOINするしかない感じなのかな?
とりあえず、固定値をSELECTするのに、DUALテーブルである必要はないということが分かった今日この頃です...
毎度モヤモヤ感が半端ない...
今回はこのへんで。