【帰ってきた】SQL質疑応答スレ 2問目

このエントリーをはてなブックマークに追加
952950:2006/10/05(木) 00:55:24 ID:???
>>951
いあ、昔読んだ話でピタゴラスだか何だかが子供の頃に
思いついたアルゴリズムって事で覚えてただけなんよ…。
自分で思いついたんならえらいんだけどね('A`;)
953NAME IS NULL:2006/10/05(木) 01:15:01 ID:???
ガウスだろ
954950:2006/10/05(木) 02:02:58 ID:???
>>953
おおう。確かにwikipediaでガウス調べたら書いてたよー。
誰だったか思い出せなくて気持ちわるかってん。ありんこ('A`)ノ
955NAME IS NULL:2006/10/05(木) 09:24:18 ID:???
ちゅうか高校数学1じゃないのか?
956NAME IS NULL:2006/10/05(木) 11:35:43 ID:???
PostgreSQLなのですが、
・あるテーブルtable_aが存在していないとき、table_aの作成と初期データの
INSERTを行なう
・table_aがすでに存在するときは、table_aの作成と初期データのINSERTを
行なわない(初期データのINSERTをスキップする)
といったことを実現するにはどのように記述すればいいのでしょうか。
957NAME IS NULL:2006/10/05(木) 12:17:00 ID:???
>>956
なんでそんなことを、、、というのはともかく
PL/pgSQLを使えばできるかな?
SQLの範囲外なのでPosqgreSQLのスレで聞いてね
958NAME IS NULL:2006/10/05(木) 23:29:54 ID:???
>955
小学校のときの「たのしいさんすう」って算数のノートに載ってたよ。
959NAME IS NULL:2006/10/06(金) 10:06:47 ID:???
>>956
pg_tables だったか、そういう名前のシステムテーブルをselectしてtable_aの存在確認を行うといい。
960NAME IS NULL:2006/10/06(金) 21:13:06 ID:bDRzLVyV
すまんおしえてくれ。
テキストボックスが4つくらいあってその中に文字入れて
DBから抽出したいんだが。
WHERE〜ANDで結ぶとテキストボックスに全部入力値がないと
抽出できないじゃん。
空欄のテキストボックスはスルーして入力された単語のみで
抽出するにはどうすればいいの。。。
961NAME IS NULL:2006/10/06(金) 21:52:29 ID:???
世にある検索の複数指定の多くがラジオボタンとかプルダウンってところから
察しろって気がするが。
962674:2006/10/06(金) 21:55:20 ID:???
VBAでそういうの作ったけど、SQLと全然関係ないじゃん。
まぁSQLステートメントの部分がって無理やりなら言えなくも無いけど。
963NAME IS NULL:2006/10/06(金) 22:05:43 ID:bDRzLVyV
>>961
なるほど、自分で入力した文字列だと
確実じゃないしね。確かに言われてみるとプルダウンとかが多いですね。


いくら調べてもわからなくて。
やはりDBから、元から値を取得して選ばせたほうがいいのかな。

それでも複数テキストボックスから抽出ってできるんでしょうか?
964NAME IS NULL:2006/10/06(金) 22:10:02 ID:???
SQLにテキストボックスなんてないぞ
いったいなんの話をしておるのだ
965NAME IS NULL:2006/10/06(金) 22:11:12 ID:???
環境がわからんから答えにくいんだが、WEBアプリとかだと
テキストボックスに検索条件をユーザーに入力させるのは
セキュリティ上かなり、アレなんだが・・・。

出来る出来ないの話しなら、そりゃ動的にSQL生成するか、
非常に無駄っぽいサブクエリがテキストボックスの分だけ
走る様に組んどけば可能だろう。
966NAME IS NULL:2006/10/06(金) 23:34:14 ID:???
IF テキストボックス1.TEXT <> "" THEN
    SQL = SQL & " AND 項目1 = " & テキストボックス1.TEXT
ENDIF

IF テキストボックス2.TEXT <> "" THEN
    SQL = SQL & " AND 項目2 = " & テキストボックス2.TEXT
ENDIF

VBなんて10年ぶりだ。

967NAME IS NULL:2006/10/06(金) 23:48:00 ID:???
むかしこのスレで、似たような話題が出て
おもしろいSQL紹介している人がいたよ。
過去ログ調べたら出てきた。

↓の312あたりから。
http://2ch.dumper.jp/0005090373/

968NAME IS NULL:2006/10/07(土) 06:00:19 ID:???
>>967
参考になった
彼のスレの313がなんでまともに動くのかわからんけど
323ならなるほどって感じ
そういえば最近のCodezineに3値論理の記事が出てたね

ttp://codezine.jp/a/article/aid/532.aspx
969NAME IS NULL:2006/10/07(土) 06:21:58 ID:???
てかMySQLじゃ動かねえなこれ
理屈は(unknown AND age < 20) is not falseはたしかになるほど
970NAME IS NULL:2006/10/07(土) 08:56:51 ID:???
>>964
すみません、Webアプリかにあるテキストボックスです。

>>965
セキュリティー上では良くなのですか?
勉強になります。

>>966
それをクリックイベントのところに記述するんですね!
項目っていうのは列名ですよね。
やってみます。

>>967
それはわたくし当てですか?
見てみます。
971NAME IS NULL:2006/10/07(土) 19:18:08 ID:???
質問です。
状況によって特定のカラムだけ欲しい場合と、ほぼ全てのカラム(の情報)が欲しい
場合があると思います。このとき、selectに指定するカラムの数によって実行速度や
DB負荷などはどの程度違うものなのでしょうか?
1.) select foo from hoge;
2.) select foo, bar, baz, quux from hoge; (あるいは select * from hoge;)

もちろんテーブル構造やDB規模によって異なってくるとは思いますが、指定した
カラム数によってDBの動きがどうなるのかが知りたいのです。
数が少ないほどメモリの消費量が少ないとか、転送量が減るとか、あるいは
テーブルのデータはメモリ上に載るのでカラム数が増えてもあまり気にするほどの
差はでないとかそういう感じで。。。

972NAME IS NULL:2006/10/07(土) 19:34:21 ID:???
>>971
そんなことよりインデクスが効いてるかどうかの方が重要
200倍くらい速度が違う場合もある
973NAME IS NULL:2006/10/08(日) 02:21:01 ID:???
>>971
そりゃ 出たviewのトータルバイト数が少ない方が、
全てにおいてメリットばかりっすわ。
逆にデメリットはないんじゃないの。プログラマの手間増えるぐらいか。
974NAME IS NULL:2006/10/08(日) 06:59:08 ID:1t6iDKSI
ここで質問してる人は実は仕事で行き詰ってる人?
975NAME IS NULL:2006/10/08(日) 12:16:30 ID:???
そりゃそうだろう、他に何の用途がある
976NAME IS NULL:2006/10/08(日) 13:39:19 ID:???
>975
パズル好き
977NAME IS NULL:2006/10/08(日) 14:00:39 ID:???
答えてるのはほぼ間違いなく暇人だがな
978NAME IS NULL:2006/10/08(日) 16:03:44 ID:???
質問させてください。
Windows 2000 に SQL Server 2000 をインストールして使っていました。
OSのホスト名を変更したのですが、SQL Server に昔のホスト名が残ってしまいます。
(レジストリを検索しましたが、ヒットしませんでした。)

SQL Server は、ホスト名をどこで管理しているのでしょうか?
また、変更するにはどうすればよいのでしょうか?
979NAME IS NULL:2006/10/08(日) 17:09:15 ID:???
>>978
つ Microsoft SQL Server 総合スレ 4
980NAME IS NULL:2006/10/08(日) 18:07:57 ID:???
MySqlが多いみたいだが仕事で使うのか?暇人は同意。
981978:2006/10/08(日) 19:04:37 ID:???
>>979
そちらで質問させてもらいました。
誘導ありがとうございます。
982NAME IS NULL:2006/10/08(日) 19:53:17 ID:???
ウチのサーバはMySQL。でも何故か3.0
983NAME IS NULL:2006/10/08(日) 22:02:02 ID:???
素敵やん
984NAME IS NULL:2006/10/09(月) 02:07:53 ID:???
SQLとはちょっと違うのだが一つ質問。
プロセス間通信のかわりにデータベースをメッセージパッシングのためのキューとして使うのってなんか問題あるのかな?
アプリ同士のメッセージ交換にActiveMQとかCORBAを使わずに簡単にできる方法としていいのかなと思うのだが。
そもそもデータベースってシステム内のスケールがものすごく広いグローバル変数だよな?
985NAME IS NULL:2006/10/09(月) 06:33:31 ID:???
>>984
AS/400(今はiSeriesか)でも使っとけ。
システム(OS)がDB以外にもDTAQ,OUTQ,MSGQ,SYSLOG等の
数々のキューが用意されている。

DB使うのは悪くはないと思うけどプロセスの数が増えて
メッセージの応答やらセマフォとか考え出すと、
自前でDB部に対してコーティングするのが
ウザくなってくるので、メッセージキューなんかはOSまかせに
した方がプログラミングが楽だ罠。
986984:2006/10/09(月) 14:55:26 ID:???
>>984
×スケール
○スコープ
..................................org
987NAME IS NULL:2006/10/10(火) 02:50:06 ID:0dcODXjr
下記の条件で商品数を集計したいと考えています。

しかし、原価のフィールドがNULLの場合、3つ全ての条件にヒット
しないため集計対象となりません。

原価フィールドにNVL関数を使用すると集計できますが、
もっといい方法がないでしょうか?

「NOT」の使用方法に問題があるのでしょうか?

商品A.原価=100円
商品B.上記以外 かつ 原価=1円以上 かつ 売値=300円
商品C.上記以外

商品A>商品B>商品C(商品A、商品B以外の全て)


SELECT
SUM(CASE WHEN 原価 = 100 THEN 1 ELSE 0 END) AS 商品A,
SUM(CASE WHEN (原価 > 1 AND 売値 = 300) AND NOT 原価 = 100 THEN 1 ELSE 0 END) AS 商品_B,
SUM(CASE WHEN NOT (原価 > 1 AND 売値 = 300) AND NOT 原価 = 100 THEN 1 ELSE 0 END) AS 商品C
FROM
商品管理表


988987:2006/10/10(火) 03:09:06 ID:0dcODXjr
>>987の質問に関連して

下記条件では原価がNULLのレコードが
ヒットできませんでした。

WHERE NOT 原価 = 100


下記条件だとヒットします。
WHERE NOT NVL(原価,0) = 100

データがNULLの際には特別な扱いが必要なのでしょうか?
989NAME IS NULL:2006/10/10(火) 03:12:16 ID:wLuxOSg2
>>987
T−SQL、PL/SQLなら、
AND ISNULL(原価, 0) <> 100

DB2なら、
AND IFNULL(原価, 0) <> 100

考え方はいいね。こういう部下なら教えても意味がある。OTZ
990NAME IS NULL:2006/10/10(火) 03:14:58 ID:wLuxOSg2
>>988
あれ?分ってるじゃん。
NULLは何に対しても偽になるよ。
逆に言うと計算をキャンセルさせるロジックとしても利用できる。
991987:2006/10/10(火) 03:23:38 ID:0dcODXjr
>>989 >>990
回答ありがとうございました。
参考にさせていただきます。
992NAME IS NULL:2006/10/10(火) 03:32:55 ID:wLuxOSg2
>>991
どうしても0に変換したくないなら
AND (原価 <> 100 OR 原価 IS NULL)
って方法もあるけど、データ量が多い時にOR入れると遅くなるよ。
993NAME IS NULL:2006/10/10(火) 11:58:04 ID:???
TABLE A
+---------------------+----+--------+
| time | name |
+---------------------+----+--------+
| 2006-05-27 14:01:07 | apple
| 2006-05-27 14:01:07 | apple
| 2006-05-27 14:01:12 | banana
| 2006-05-27 14:01:00 | orange
+---------------------+----+--------+

TABLE B
+---------------------+----+--------+
| time | rw | name |
+---------------------+----+--------+
| 2006-05-27 14:01:05 | w | apple
| 2006-05-27 14:01:07 | r | apple
| 2006-05-27 14:01:09 | w | orange
+---------------------+----+--------+

というテーブルがあり、Bのrwをtimeの値が大きいものから抽出し、Aの同じnameのデータを持つ行に追加した結果を得たいのですが、どうすればよいでしょうか?
よろしくお願いします。
994NAME IS NULL:2006/10/10(火) 14:05:45 ID:???
次スレテンプレ

【帰ってきた】SQL質疑応答スレ 3問目

参考リンク
http://www.atmarkit.co.jp/fnetwork/rensai/sql01/sql1.html
http://oraclesqlpuzzle.hp.infoseek.co.jp/
http://www.techscore.com/tech/sql/

前スレ:【帰ってきた】SQL質疑応答スレ 2問目
http://pc8.2ch.net/test/read.cgi/db/1141622643/l100
995NAME IS NULL:2006/10/10(火) 14:31:03 ID:???
サンキュー、そのままたてた

【帰ってきた】SQL質疑応答スレ 3問目
http://pc8.2ch.net/test/read.cgi/db/1160458216/
996NAME IS NULL:2006/10/10(火) 14:33:19 ID:???
>>993
よくわからん、追加した結果がどうなるかも書いてみて
997小倉優子 ◆en0rG2J.f6 :2006/10/11(水) 06:07:26 ID:???
998小倉優子 ◆en0rG2J.f6 :2006/10/11(水) 06:08:27 ID:???
999小倉優子 ◆en0rG2J.f6 :2006/10/11(水) 06:08:57 ID:???
1000小倉優子 ◆en0rG2J.f6 :2006/10/11(水) 06:09:28 ID:???
1000ならジュースでも飲むか
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。