データベース初心者質問スレッド

このエントリーをはてなブックマークに追加
878NAME IS NULL:04/05/19 00:21 ID:???
>>877
マニュアル無いんかよ。
FETCH IN カーソル名;
でいけると思うが。
879NAME IS NULL:04/05/19 02:16 ID:???
すいません、SQL質疑応答スレにも書いたんですが、こっちの方が人が居るみたいなんで…
マルチですいません。
oracle9iで1つのカラムに入っているレコードを全て1行で取得したいのですが。
例えば、

id
----
1
2
3


id
----
1,2,3
の様にSQLのみで1行で取得するにはどうすればいいでしょうか?
レコードの数は不定です。
よろしくお願いします。
880NAME IS NULL:04/05/19 02:23 ID:???
>>879
マルチ
881NAME IS NULL:04/05/19 02:23 ID:???
>>879
SQL質疑応答スレでも見たがOracle使っていないのでスルーした。
SQLのみだと多分無理。
882NAME IS NULL:04/05/20 21:14 ID:MDqr7Awj
テーブルXから10行、10列からできた値を取り出して、
他のテーブルYに取ってきた値を加算してやりたいのですが、

TABLE X
A|B|C|D|E|F|G|H|I|J
---------------------
1|2|3|4|5|6|7|8|9|10
1|2|3|4|5|6|7|8|9|10
1|2|3|4|5|6|7|8|9|10
....................
1|2|3|4|5|6|7|8|9|10

TABLE Y
A|B|C|D|E|F|G|H|I|J
---------------------
1|2|3|4|5|6|7|8|9|10
1|2|3|4|5|6|7|8|9|10
1|2|3|4|5|6|7|8|9|10
....................
1|2|3|4|5|6|7|8|9|10

下のようなテーブルYを作りたいんですが、

A|B|C|D|E|F|G|H|I|J
---------------------
2|4|6|8|10|12|14|16|18|20
2|4|6|8|10|12|14|16|18|20
2|4|6|8|10|12|14|16|18|20
....................
2|4|6|8|10|12|14|16|18|20

このようなDo Until EOF LOOPというのを
使ってSQLをつくらないといけないのですが
どうやって加算してSQL文をつくってやればいいのか
わかりません。ご教授お願いします。
883NAME IS NULL:04/05/20 22:40 ID:???
>>882
主キーが無いどころか、行を見分けることもできへんがな。
884初心者です。:04/05/21 00:18 ID:gInREXze
linuxで、データベースを学びたいです。
どのようにすれば良いか教えていただければ教えてください。
お願いします。
885NAME IS NULL:04/05/21 00:52 ID:???
2chなんかうろついてないで、本でも買いなさい。
886NAME IS NULL:04/05/21 02:14 ID:???
>>882
エクセルの串刺しで十分。
887NAME IS NULL:04/05/21 07:57 ID:???
table(id serial, in text, out text)
inはmd5hash文字列、outは普通の文字列
つまり
1, aaa, xxx
2, aaa, yyy
3, bbb, xxx
4, ccc, zzz
などというテーブルを作ったのですが、selectすると結果が返ってくるまでに
かなり時間がかかってしまいます。(1分ほど?)
データは100万行単位で、だいたい500万行ほどだと思います。
Debian woodyとPostgreSQL1.42で作っています。
テーブルの構成など、どこかおかしい点があるでしょうか?
リアルタイムで結果が返ってきて欲しいのですが、こんなに時間がかかるものなのでしょうか?
どうかよろしくお願いします。
888NAME IS NULL:04/05/21 08:51 ID:???
>>887
主キーやインデックスの設定は?取得件数は?
全件を取得するならそれなりにかかるだろう。
889NAME IS NULL:04/05/21 10:27 ID:???
>>888
ええっと、主キーは一個目の要素のidで、取得件数は上限無しです。
ただしselectの条件は、where in = aaaみたいに、一つに固定です。
aaaとbbb両方とかは無いです。
インデックスの設定ってのはどういう事でしょうか…。
890NAME IS NULL:04/05/21 11:03 ID:???
ちょっと質問した事後になっちゃうんですが、調べてきました。
CREATE INDEX tableindex
    ON table(in);
としてインデックスを作っておくと、inを条件として検索するときに高速になる
という解釈であってるのでしょうか?
けど、調べてみると、頻繁にデータの挿入がある場合はインデックスの更新の方に
時間を取られるから、インデックスを使わない方が良いとありました。
かなり頻繁にデータの挿入があるのですが、そこのところどうでしょうか…。
891NAME IS NULL:04/05/21 15:50 ID:???
現在の更新速度に不満が無いなら、とりあえずインデックス貼ってみて
実用に耐えられないほど、パフォーマンスが落ちるようならあきらめたら?
あとは、idで検索できるようにがんがる。

でも、PostgreSQLって、インデックスが糞って聞いたけど本当なのかな。
892NAME IS NULL:04/05/21 16:28 ID:???
>>891
とりあえずinのindexを作ってはみたんですが…。
なんというか、早い時は早いんですが、作ってない時と差がないほど遅い時もありますね。

>あとは、idで検索できるようにがんがる。
これは例えばどういう方法でしょうか?
idはただの番号で、inの中身とは何の関連性も無いのですが…。
893 ◆sybase.d.c :04/05/21 19:21 ID:???
>>892
7.2の頃まではインデクスの使い方が下手
(ちうか評価関数がいいかげんだった?)だが、
最近はいい感じだぞ、と、Postgresスレで読んだ。

最近鬱で読んでないので、pgスレ読まずにカキコ
894NAME IS NULL:04/05/21 19:32 ID:???
>>892
VACUUM ANALYZE; したのか?
895NAME IS NULL:04/05/21 21:06 ID:???
>>894
やってないです…。
vacuumdb --analyze dbname
ですよね?
896NAME IS NULL:04/05/21 21:17 ID:???
>>895
それでもいいし、>>894で示した文をSQLとして発行すればよい。
897NAME IS NULL:04/05/21 21:28 ID:???
で、vacuum analyzeして来たのですが…。
多少早くなったかな〜?って程度で、やはり遅い時には結果が返ってくるまで
1分くらいかかります。
pg_dumpしても100M程度のさほど大きくないDBなんだけどなぁ…。
こんなもんなんでしょうか。
他のもっと大規模なDBとかどうするだろう…。
898NAME IS NULL:04/05/21 22:22 ID:???
>>897
ってことは、text inは重複が多くてIndex Scanされてないんだろ。
EXPLAIN して確認しる。
899NAME IS NULL:04/05/21 22:58 ID:???
exeplain analize selece を適当な条件で何度かやってみました。

Seq Scan on table (cost=0.00..47667.09 rows=13682 width=34)
(actual time=2716.98..62269.67 rows=18703 loops=1)
Total runtime: 62738.51 msec
Seq Scan on table (cost=0.00..47667.09 rows=13682 width=34)
(actual time=3039.36..61721.74 rows=18703 loops=1)
Total runtime: 62142.23 msec
Index Scan using tableindex on table (cost=0.00..23.40 rows=5 width=34)
(actual time=62.77..62.77 rows=0 loops=1)
Total runtime: 99.44 msec
Index Scan using tableindex on table (cost=0.00..23.40 rows=5 width=34)
(actual time=52.05..52.06 rows=1 loops=1)
Total runtime: 52.67 msec
Seq Scan on table (cost=0.00..47667.09 rows=137412 width=34)
(actual time=3103.91..61569.79 rows=148918 loops=1)
Total runtime: 62922.27 msec

Index ScanじゃなくてSeq Scanてなってるのはインデックスを使わずに実表を
直接探してるって事ですよね、多分。
で、その時に時間が滅茶苦茶かかって、ヒットした行も桁違いですね。
898さんの仰った通りのようです。
これはどうやって解決すれば良いんでしょうか?
in-outが1対n関係なのはどうしようもないし、データを減らすわけにも行かないし…。
900NAME IS NULL:04/05/21 23:25 ID:???
>>899
の前に
数万行から十数万行を抽出して、その後どうするんだ?
901NAME IS NULL:04/05/21 23:29 ID:???
>>900
ランダムで一行選ぶだけ…。
なので上限をつけても良いし、一番良いのはなんらかの評価関数を使って
一行選べればいいのですけど。
けど上限を例えば10にしたとして、返される結果はいつも同じデータにはならないのでしょうか?
その10個のデータ以外のデータがいつも選外になって無駄になると言うか。
902NAME IS NULL:04/05/22 00:21 ID:???
>>901
そりゃまた...
1発でって案がうかばねぇな。
事前にゴニョゴニョして、ナニならごにょごにょ、なになら後如後如...
しかし更新頻度を考えるとごにょゴニョもあてにならねぇし。
903NAME IS NULL:04/05/23 01:26 ID:???
おまいら、よろしくお願いいたします。

postgresql7.3を使っています。、yyyy/mm/dd hh:mm:ssというフォーマットで日付が格納されているレコードから
hh:mmだけを抜き取りたい場合はどうすればよろしいでしょうか。
904NAME IS NULL:04/05/23 01:37 ID:???
>>903
timestamp形式で格納されているのか、string型で格納されているのか、どっちよ。

前者なら to_char(timestampカラム ,'HH24:MI')
後者でもそのままtimestamp型に変換できそうだから、
to_char(stringカラム::timestamp,'HH24:MI')
でいけるだろ。
905NAME IS NULL:04/05/23 01:38 ID:???
timestampす。どうもありがとう
906もっと初心者用の質問板は?:04/05/27 03:27 ID:4G2IqA87
高1のPC初心者です。たぶん小学生レベルです。どこで聞けばいいのかわからないので教えて下さい。
A5とかB6のカードに一枚あたり200字程度の文字を書いたのをたぶん数千枚ぐらい書き溜めていくんですが、あとで書き足したり修正したりし易いようにと思って手書きをあきらめてPCを使うことにしました。
その数千枚を作って整理して管理していきたいんですけど、作った情報はたとえば次のような感じです(ツリー状)。
一.・・・
 1.・・・
  @・・・
  A・・・
 2.・・・
  @・・・
  A・・・
  B・・・
 3.・・・
二.・・・
 1.・・・
  @・・・
  A・・・
  B・・・
  C・・・
 2.・・・
  @・・・
  A・・・

データベースとかいう言葉を見たり聞いたりすることがあるんですけ、こういうなのをそう呼ぶんですか?全然ちがうのかなぁ?(汗)
こういう何千枚ものカード(単なる文章)を作って管理するのって、そもそもPCのどこでするんですか?フォルダとかいう言葉も聞いたことありますが、ワードでやっていくんですか?ワードの中のどこでやっていくんですか?
907NAME IS NULL:04/05/27 08:42 ID:???
>>906
立派なデータベース。

個人で管理するならAccessかExcel。
908906:04/05/27 09:12 ID:1qJEJa+z
>>907
ありがとうございます。
そうなんですか? マイドキュメントとかなんとかに、って人に教えられたような・・・。
それってワードじゃなかったんですか〜。。。

Accecc? Excel?
すいません、初歩的なことを全然知らないので。
909 ◆sybase.d.c :04/05/27 11:17 ID:???
>>908
Accessはキミにちと荷が重いような気がするし
安いものでもないので、

その手の情報を管理する「データベースソフト」はないかどうか、
他の板で尋ねてこい。もしかするとこの板他スレにその手の
話題があるかも知れんが知らん。
で、バイトするなり親にねだるなりして買ってもらうといいだろう。
そういう用途には、マトモな親は喜んで出資してくれるはずだ。

ちなみに俺は本職なのでむしろパーソナルユースには詳しくない。

で、DBでいろいろできるんだなと感じたら、またこのスレに遊びに来い。


…ていうか、その手の作業は、Microsoft Wordの
「アウトライン」モードを使えば容易なような希ガス
910NAME IS NULL:04/05/27 11:26 ID:???
>>908
っ[ http://www.junlab.com/tips.html ]
っ[ http://pc5.2ch.net/test/read.cgi/pcqa/1085559202/ ]

キーワード語群
・Microsoft Word
・Microsoft Access
・Microsoft Excel
・Microsoft office
・データベース

このヒントで判らなかったら今の君には無理。
911NAME IS NULL:04/05/27 12:15 ID:???
>>906
とりあえず学校にいる情報の先生と相談してみなさい。
情報の先生にやりたいことを説明したら、君にあったアドバイスが貰えるかも。

個人的には、「カード型データベース」を使うのがいいと思うんだけど。
ただ、ちょっと板違いかもね。
http://search.vector.co.jp/search?query=%83J%81%5B%83h%8C%5E%83f%81%5B%83%5E%83x%81%5B%83X
912907:04/05/27 12:50 ID:???
>>908
フォルダをカテゴリ別に分けてファイルごとに管理したいんなら
それでも構わんよ。

自分のわかりやすいように管理したらいい。

漏れがさっき言ったのは、
君の持ってる数千枚のカードを、一つのファイルで管理する方法。
913NAME IS NULL:04/05/27 14:45 ID:???
昔のWindowsにはcardfileってのがついてたなあ。
あれ、いつから無くなったんだろう。
914NAME IS NULL:04/05/27 18:38 ID:???
アウトラインプロセッサ使えば?
915NAME IS NULL:04/05/28 05:29 ID:xjrgd4AW
Oracle や Microsoft SQL Server をウェブアプリケーションの
バックグラウンドで使用する場合 どのライセンスの物を
買うのがお得なのでしょうか?

1プロセッサ などプロセッサ数でのライセンスはわかりやすいのですが
クライアント数でのライセンスがよくわかりません
例えば5クライアントと10クライアントの場合だと具体的にどのような
違いがあるのでしょうか?
必要なクライアントの数え方がよくわからなくて困っています

宜しくお願い致します
916NAME IS NULL:04/05/28 05:46 ID:???
NATURAL JOIN句に関して質問します。
某教科書には、
「両方の表で同じ名前とデータ型を持つ列に関してのみ結合が行われる。」
と書かれているのですが、
実際に試してみたところ、
同じ名前でデータ型の異なる列でも結合されて実行されるのですが、
どうなんでしょうか?宜しくお願いします。
917NAME IS NULL:04/05/28 09:16 ID:S3LYW/Qg
メールフォームには写真が添付出来ないので、
フォームのHTMLソースを調べてアドレスを探そうと思ったのですが、
HTMLの中にメールアドレスらしきものがありませんでした・・・。
どうやったらフォームから相手のメール(受信)アドレスを知ることが出来ますか?
918NAME IS NULL:04/05/28 09:19 ID:???
>915
Q. SQL Server 2000 には Internet Connector ライセンスはありますか?
また、インターネット環境で不特定多数のユーザー向けのサービスを提供するような場合、
どのようなライセンスが用意されていますか?

A. SQL Server 2000 をインターネット環境で使用し、不特定多数のユーザーからアクセスを
受ける場合、プロセッサ ライセンスを使用してください。 プロセッサ ライセンスは、Enterprise
Edition、Standard Edition で提供されており、インターネット/イントラネットを問わず無制限の
アクセスが許諾されます。 ただし、プロセッサ ライセンスは、SQL Server が稼動するサーバーに
搭載されるプロセッサ数分購入する必要があります。

ttp://www.microsoft.com/japan/sql/evaluation/license/license_qanda.asp
919NAME IS NULL:04/05/28 13:23 ID:???
>>917
?
920916:04/05/28 14:34 ID:???
自己解決しました。バージョンによって違うようです。
921NAME IS NULL:04/05/28 23:26 ID:b02UD6X2
異なる親テーブルを持つ子テーブルって作成することができないんですか?

たとえば親テーブルを table1 table2 子テーブルを table3 とすると

table1 table2    table3
A B C D E A C
------ ------- ----------
0 あ 0 か 0 0 0
1   い  1    き   1 1 1
2 う 2   く 2 2 2

こんな構造にしてアプリ側で必要に応じて、親子関係の作成をしたいのです。
実際にやってみると table3 のA Cに適切なデータ型と値を割り振ってるのに
外部キーの制約違反だとエラーがかえります。
また最初の1行のみ(つまり行がないとき)まともに動くので
(select update insert deleatがちゃんと使える)、
不可能ではないようなのですが?
回答よろしくお願いします。.mdbです。
922NAME IS NULL:04/05/28 23:29 ID:b02UD6X2
>>>921

table1

A B
--------
0 あ
1  い
2 う

table2
c d
-------
0 か
1 き
2  く

table3

E A C
--------
0 0 0
1 1 1
2 2 2

ですすみません
923NAME IS NULL:04/05/29 06:22 ID:rioq5SCg
count関数について質問なのですが、列RETUに
各フィールドA A B B C C D D E E F F F G G G G
というデータが入っていたとして、この時countを行うと、16
というふうにカウントされてしまうのですが、
これをAなら2 Bなら2 Fなら3というふうに、各項目ごとに
カウントしたいのですがどうすればいいでしょう?グループ化を
するのですか?

924NAME IS NULL:04/05/29 06:27 ID:???
>>921
できるよ。

>>923
SELECT retu,count(retu) FROM table GROUP BY retu;
925915:04/05/30 05:17 ID:???
>>918 さん

ありがとうございます. 参考になりました.
返信遅くなってしまってすみません.
926NAME IS NULL:04/05/31 09:49 ID:???
>>917
スレ違いだが…。

そのメールフォームからcgi等を呼び出してメールを送ってるはず。
従ってhtmlからaddressを取得するのは不可能。

大人しくメールフォームでaddressを聞くのが正しいかと。
927NAME IS NULL
SQLServer2000を使用しています。

「警告:NULL値は集計またはその他のSET演算で削除されました」ってエラー
が出力されたのですが、原因がわかる方、教えていただけないでしょうか?

また、T-SQLのエラーメッセージがわかるHPがあれば教えていただきたいので
すが・・・