七転び八起き ~別に飽きてないよブログ~ -12ページ目

七転び八起き ~別に飽きてないよブログ~

人生浮きっぱなしの俺が綴るクソ日記。
たまには有意義な情報が垂れ流せるようアンテナ張って生きたい。

資格対策。略してしかたい。奥歯痛い。
四六時中奥歯(親知らず)痛いです。
どうせ抜くしなぁ。

Oracle Bronze SQL基礎 7,8,9章 副問い合わせ、集合演算子、データ操作

さくっとー

☆副問い合わせ
・「単一行副問い合わせ」と「複数行副問い合わせ」がある。

単一行比較条件
・データが複数行戻されるとエラー

副問い合わせにから戻る行の値にnullが1つでも有る場合
 -> 比較条件が「is [not] null」以外の場合は常に偽となる。

☆集合演算子
基本は
・重複を排除(NULLは1つの値)
・SELECT句の第1列で昇順にソートされる。(NULLは無限大)
※UNION ALLのみ重複を排除せず、ソートもされない。
・優先順位は全て等しい
・ORDER BYは最後に一回だけ指定する。
 -> 最初の問い合わせ文の列名、列別名、位置番号を用いる。

UNION
・和

UNION ALL
・和
・重複排除無し
・ソート無し

INTERSECT
・積

MINUS
・差

☆時間指定について
SYSDATE 'YYYY/MM/DD HH24:MI:SS'
SYSTIMESTAMP 'RR-MM-DD HH24:MI:SSXFF'

TO_DATEでの指定省略時の返り値
・年 = 現在
・月 = 現在
・日 = 1
・時 = 0
・分 = 0
・秒 = 0

最近やっと基本構文を体が覚えてくれたので実際にSQLを書きながらでもサクサク進むようになってきた。
情報処理のほうでイマイチ理解できなかった相関副問い合わせをこっちでバリバリやりたかったがSQL基礎では出てこないみたいっすね・・・

この問題集も残すところあと100ページ今週中には終わらせたいところ。
去年の末に作り始めて放置していたISO9660準拠の.isoファイルを吐くためのプログラムの作成を再開。
ちなみに言語はC++。
データ構造自体はできた(多分)のでテストも兼ねて適当な値を代入し構造に従ってファイルにfwriteで書き出す。
が、なぞの値が挿入されてしまいデータサイズがおかしい。というのが前回のあらすじ(?)。

まぁあまりに凡ミスだったので結論からのべてしまうとfopenの段階でテキストモードで開いてたため改行文字「0x0A」が「0x0D0A」に変換されていたというだけのお話。

そんな事に気付けなかった30分ぐらい前の自分は地道にコメントアウトしながら原因を探りました(泣)。

どうやら問題はココで起きている模様。
書き込む値は「0x0A」
七転び八起き~やりなおしブログ~-fwrite00

本来「0x0A」が入るべきアドレス0x88に謎の「0x0D」が入り「0x0A」はうしろに1つずれて書き込まれている。
(画像内上のウィンドウが現在テストとして作成中のファイルのバイナリ。下が見本としている適当なisoファイルのバイナリ)
七転び八起き~やりなおしブログ~-fwrite02

書き込む値を「0x0A」から「0x0B」に変えてみる。
七転び八起き~やりなおしブログ~-fwrite01

あれっ?ちゃんと書き込めてる・・・。
七転び八起き~やりなおしブログ~-fwrite03

そんな訳で「fwrite 0xa ミス」と愚直にググった先でファイルのモードの事を思い出す。
あぁそんなのあったなと。

fopenの第二引数に"b"を足してリベンジ。
$七転び八起き~やりなおしブログ~-fwrite04
無事「0x0A」でも出力できた。

切ない・・・。
さてさて、2日前に期末試験を終了し昨日から春休みに突入したので改めて休みの間にやるべきことをまとめる。
目標としては
・数学 高校範囲の基礎学習の完了。現在数Ⅱ学習中。
・英語 中学範囲の基礎学習の完了と演習。現在中3程度学習中。
・「OS自作入門」「CPUの創り方」実施と読了。現在「OS自作入門」のさわりのみ。
いまの進行速度だと数学がきびしめかなぁ。
本に関しては夏ぐらいまでに終わればいいかー。
あとは資格勉強もあるから効率よくやらねばー。

いつものことだけれど大体15時前後はすごくやる気をそがれる時間。
こうしてブログを書いてどうにかモチベーションを維持する。
あるいはプログラミングだとか座学意外の事で乗り切る。

あー
煩悩退散煩悩退散!
悩んだ末選択するのは壁紙無しなんですけどね・・・
まっくろさいこー
目にやさしー

Javaでのコンソール風アプリケーションを細々更新。
やっとこさコマンドが入力できるようになってひとくぎりしたのでこっちにあげといた。
とりあえずJavaの勉強をかねた製作は一旦終了。

JDBCも触る予定だったんだけどなー
意外と予定がこみこみ+俺のガッツが足りない。により一切できず。

いまは来る期末・資格試験ラッシュに備えねば!
それを超えれば春休みじゃー
春じゃー春を起こせー
春休みはOS自作入門とCPUのつくりかたの両方を実践しながら読破する予定。
でもデータベーススペシャリストも申しこんでしまって全て中途半端に終わる悪寒。

さてさてお勉強する時間にて候。
もやし卒業したいよー
ごぼうくらいにはなりたいよー
下ネタじゃないよ?
単純に体調を案じておるのみです。

はいー

Oracle Bronze SQL基礎 第6章
結合とは何ぞやー

結合は結合です。
ポイントだけ抑えていこー

自然結合(NATURAL JOIN)
・共通列で勝手に結合される。
・共通列は1列のみ戻される。共通列には表修飾不必要。むしろあるとエラー。
・ON句、USING句は利用できない。
・共通列がない場合デカルト積(直積)になる。

等価結合・非等価結合(JOIN)
・USING句を用いて結合するかON句(WHERE句)で結合条件を記述して結合する。これが無ければエラー、両方あってもエラー。どちらか一方のみ。
・USING句を用いた場合、共通列は1行のみ戻される。表修飾不可。
・ON句(WHERE句)での結合を用いた場合、共通列はすべて戻される。表修飾必須。

んーいまいちワカラヌ(´・ω・)
せっかくなので実際に問題集に掲載されているテーブルを作ってやってみる。
あ、ちなみにORACLE DATABASE EXPRESS EDITION 10gです。

...

できたZE☆
途中経過をスクショで取りながらやってたけどめんどくさくなったので割愛。
結果のみ報告。

上記の項目を全て実行しながらチェックしてみたがすべて記述通り正しい模様。
まとめると
・基本的に共通列を指定するには表修飾が必要。
・自然結合かUSING句を用いた結合なら共通列が1列になって戻されるので表修飾をしてはいけない。
・それ以外の列に関して表修飾はしてもしなくても良い。(した方がパフォーマンスは上昇する)
って感じか。

なぞは全て解けた!