FC2ブログ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
SQLだけでデータを操作するときの戦略
グループ関数などを使って、テーブルのデータを扱いるとき、「うおー、変数にいったん代入したい!」という衝動に駆られることが多い。

SQLで、このような衝動に駆られたときの解決策として、次の2つのパターンがあるように思える。(なお、雰囲気勝負の見た目だけ載せる)

パターン1
SELECT
*
FROM
(SELECT
カラム1, COUNT(カラム1)
FROM
A
)
SELECT したものをから、SELECT でさらに絞り込むような感じ。


パターン2
同じテーブル(ここではAとする)に何度も、グループ関数を施し、
多くのカラムとの関連性が見たいときのパターン。
小さくした自分自身(A)と、別の条件で小さくした自分自身(A)を連結しまくる。
SELECT
*
FROM
(SELECT
カラム1, MAX(カラム2)
FROM
A
) miniA
JOIN
(SELECT
カラム1, カラム3, カラム4
FROM
A
) other_miniA
ON ( miniA.カラム1 = other_miniA.カラム1 )

なお、同じテーブルを小さくしたものの連結となるので、NATURAL JOINで結合できることがしばしばである。
\G  Oracleにはないの!!??
Oracle には、ないのか!!??
どこなんだ??

Oracleというか、どちらかというと SQL*Plus か。
そもそも SQL と Plus の間の * がなにかわからん。


mysql のメタコマンド『\G』 : おまえのログ

mysql> select * from a;
+--------+------+------+
| c | hoge | b |
+--------+------+------+
| 123abc | NULL | NULL |
+--------+------+------+
1 row in set (0.00 sec)


mysql> select * from a\G
*************************** 1. row ***************************
c: 123abc
hoge: NULL
b: NULL
1 row in set (0.00 sec)



意外に便利なのにぃ


レコード指向とセット指向
リレーショナルなデータベースは「セット指向」であって、テーブルとしてまとまったデータを取ってくるという話。

それに対して、CSVファイルみたいなものは1行ずつ取り出してくるので、「レコード指向」だという話。


でもJavaやPerlでデータベースに問い合わせた結果返ってきた「結果セット」はどうやって扱うかというと「レコード指向」。
pack と unpack
固定長幅のデータを作りたいときに pack が使える。
元に戻すなら unpack だ。

use strict;

my $packed = pack( "A32", "Bingo_Nakanishi" );

print "$packed" . "<--" . "\n";

my $unpacked = unpack( "A32", $packed );

print "$unpacked" . "<--" . "\n";

出力結果は次のようになる。
Bingo_Nakanishi                 <--
Bingo_Nakanishi<--

"A32" は 32の部分が、32バイトにしてね。という意味であり、頭のAが、足りないところはスペースで埋めるASCII 文字列に変換。 という意味である。


参考資料:
入門Perl DBI
とほほのperl入門(リファレンス編)
pack Perl講座
超絶眠い
やっと、早く帰れるようになった。

今日は、Oracleのマニュアルを読んだり、なんだり。

誰だよ。プログラムとデータ分けたのは。とか思いつつも。だから、俺らは飯が食えるんだと。思って、資料を漁りまくる。

3層スキーマやっと理解した。なんだ、簡単なことじゃないか。気づくのおそ!


それにしてもOracleのマニュアル非常に勉強になる。
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

07 | 2018/08 | 09
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

ブロとも申請フォーム

この人とブロともになる

前のページ | ホーム | 次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。