んーでは簡単なとこからいくよーただし整数に限る・・・はウソ!
単一行関数の SUBSTR なんかには数値を入れるところがあります。
SUBSTR(abcde, 1, 2)
abcde の中の1番目の文字から2文字取り出す関数。
オイラの編み出した うまい覚え方は ここでは伝授しないお。
んで、1 と 2 が入っているところは整数だ! と本に書いてあったりするが、これはウソ。
俺が見たところ、有理数 a を整数で処理すべきところに代入した場合、次の値が引数として使われる。
a [|a|] / |a|
|| は絶対値、[] はガウス記号。
要するに、a の絶対値を超えない最大の整数に、a と同じ符号をつけたものだ。
この式で正しいかどうかはともかく、整数でなくてもおkなのである。
ついでに、単一行関数 LPAD 等についても、本には書かれていないことがある。
LPAD(abc, 20, 'あ')
こういうときはどーなるんですか?
えー、やったけどわすれました。
あと、パディング文字に2文字以上入っている場合とか。
予約語をテーブル名にしたテーブルは作れない・・・はウソ
create table "SELECT" (col1 number);
というSQLを実行してみてください。
正常終了します。
ただし、これを SELECT 文 などで扱うときには注意が必要です。
SELECT は予約語なので、
SELECT * FROM SELECT;
なんてやってもエラーです。
SELECT * FROM "SELECT";
とすればおk。
まぁ、そこまでして使いたくないけどな。
実際、どんなテーブルができているのかというと・・・
USER_OBJECTS を覗いてみまーす。
OBJECT_NAME を見てみると・・・・・・SELECT とあります。
"SELECT" ではないです。(二重引用符は含まない)
OBJECT_NAMEの型は VARCHAR2 なので、これでおkなわけです。
そう、VARCHAR2。ってことは?
select という名前のテーブルも同時に作ることができます。
呼び出すときは二重引用符で囲んでくださいね。
では、ABC というテーブルと、abc というテーブルがあった場合、
select * from abc;
ではどちらが呼び出されるのでしょうか。
ABC が呼び出されます。SQL の中の文字は、全て大文字として扱われるようです。
だから、ABC を削除して、abc だけ存在する状態だと、上のSQL はエラーです。
小文字のヤツを使いたければ二重引用符で囲んでください。
実験はしてないですが・・・数字や特殊文字から始まるテーブルもおkってことじゃね?
USING だと動けなくなることがある!
USING は、2つ以上のテーブルをつなげるときに使います。
それはこ~んな場合に起こります。テーブルを3つ考えてください。列の型は全部 number にします。
table1 :列名は col1, col2
table2 :列名は col1, col2, col3
table3 :列名は col2, col3
ハイ、table1 と table2 を col1 で結合します。
table1 と table3 を col2 で結合します。
使うのは USING。
SELECT * FROM table1
JOIN table2 USING(col1)
JOIN table3 USING(col2);
3行目で「列の定義が未確定です。」と出ます。
col2 は全てのテーブルにあるので、どこかわからないんですよね。
でも USING ですから、修飾子はつけられません。
table1.col2 や table3.col2 とすると、「ここでは修飾された列名は使用できません。」というエラーが出ます。
USING は、保守が面倒のようですね。
こういう細かい仕様的なところは、参考書・問題集にはありません。
Oracle の問題集・参考書は、上に載せた3種類しかないと思っているんですが・・・売ってないからね・・・ほかにもあるよ!という方いらっしゃいましたら是非おしえてください。
安くていいのがあればそっちのほうがいいからね。