SQL教えて〜!! <2>
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG前スレ
SQL教えて〜!!
http://pc3.2ch.net/test/read.cgi/tech/1000116969/l50
関連スレは>>2-3
0153デフォルトの名無しさん
NGNGつうか、実行プランは調べたんでしょ。だったら、どこがネックになってるか
わかってるんじゃないの。そのネックをどうやって解消するべきか考えたら。
Oracleはあまり詳しくないんだけど、Oracle8ってルールベースとコストベース
両方できたっけ? コストベースになってるならAnalyzeはしてるよね?
それからOracleはデフォルトでfrom句に書くテーブルの順番って関係あるん
だっけ? 関係あるのなら絞り込みしたい順番にテーブルを書く必要があるで
しょう。
まずは理解できなくてもチューニングマニュアルを読むことから始めましょう。
0154デフォルトの名無しさん
NGNGあと、パーティションテーブルだったらパーティションキーをちゃんと結合条件に入れないと全然だめぽ。
>153
コストベースでテーブルの評価順序を規定する場合はヒント文でなんとかできます。
select /*+ orderded */ 〜って感じで。
でもあくまでオプティマイザへのヒントなんで、オプティマイザが考えたコストが低い場合は却下されまふ。
と、これは>153ではなく>152へ言うべきだったな。スマソ。
0155デフォルトの名無しさん
NGNG0157144=148=152
NGNGきてしまいました。
今度パフォーマンスチューニングのマニュアルを読んで出直
してきます。もっとちゃんとした質問ができるようになったら
またよろしくお願いします。ありがとうございました。
0158デフォルトの名無しさん
NGNGあのね、この場合は完全に本屋へ足を運んだり(あるいは本屋の検索を使う)
ググールで検索したほうが早いから敢えて誰も突っ込まないだけだよ。
今はSQL92が主流だからそれ関係で調べてみるといいかもね。
0159デフォルトの名無しさん
NGNG0160108
NGNG>>158
もちろん、反応を待つよりGoogleや2ch検索を使うほうが早いのでそちらを
試したあとで書いています。書いたあとも何度か別のキーワードを試しました。
Googleで検索した結果、大部分は「SQL9x準拠」という文字がひっかかっている
ようです。それらのほとんどはMySQLやPostgreSQLやDB2やOracleや……の
ドキュメントのコピーが検索されているものです。あとはWebチュートリアル
もありました(が、入手法は書いていない)。
要点はこの二つです:
- 購入するしかないのかどうか (「ない」ことを調べるのは難しい)
- 電子化されている資料があるのかどうか
>>159
宿題終わってないんですね?
0161デフォルトの名無しさん
NGNG環境はWindows2000、SQL Plus9.0です。
0162デフォルトの名無しさん
NGNGOracle だったらuser_cons_columns,user_constraints
から引き出せば。プライマリだったら
user_constraints.CONSTRAINT_TYPE='P'で。
0163161
NGNGどうもです。
0164デフォルトの名無しさん
NGNGオラクル8.1.7からサイベースDBを参照することは出来ますか?
0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNGSyBaseじゃなくてか?
0167デフォルトの名無しさん
NGNG7,8年くらい前は結構メーカの異なるDBへの接続製品が話題になってたけど、
最近は全然聞かないなあ。あんまり需要がなかったのかな。
Googleで「Oracle Sybase 異機種 接続」で検索したらいくつか出てきたぞ。
>>165
おそらくSybase ASEのことでしょ。
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNGうん。sybaseASEのことでございます。
ともあれ>>167氏thx
>>168
オラクル側にASE上のテーブルのビューを作りたいのさ。
0170デフォルトの名無しさん
NGNGhttp://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&q=SQL99+%8BK%8Ai%8F%91+%93%FC%8E%E8&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0172デフォルトの名無しさん
NGNGどっかでまったく同じ質問見たような気がする
0173108
NGNGそうか、「規格書」なんですね…… なんで気づかなかったのだろう。
さっそく読んでみます。ありがとうございます。
>>172 UNIX板のMySQL/PostgreSQLスレじゃないかと思います。
0174デフォルトの名無しさん
NGNGなんというか、まっ先にANSIのWEBサイト見に行こうと思わなかったのかなぁ?
電子文書化されているのか、はたまた有料なのか、それらの疑問は一発で
解決しただろうに・・・
最近はSQL92 & Core SQL99のリファレンス・ハンドブック(日本語で解説)が
\3,000程度で出版されているよん(題名忘れたけど・・・)
0175デフォルトの名無しさん
NGNGまぁ、そのなんだ、、、「マルチですよ」って宣言した時点で放置は決定していると思うが?
0177デフォルトの名無しさん
NGNGネタか釣り決定放置
↓ネタではないですよ
0178デフォルトの名無しさん
NGNG> www.ansi.orgにいって検索してみましたが一件もみつかりませんでした。
ネタだよな?
マジだと"私は上っ面しか見てません"と公言しているようなもんだよ
0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNGなんでだろう? 気合が足りないとか♪
0181デフォルトの名無しさん
NGNG>179 だから詳しく状況を(略
0182デフォルトの名無しさん
NGNG1)コンセントは刺さっていますか?
2)コンピュータの電源は入っていますか?
(正面のランプが緑色に点灯していますか?)
3)ディスプレイ(テレビのような画面のことです)は電源が入っていますか?
0183デフォルトの名無しさん
NGNG違うよ。足りないのは、きっと愛だよ。
0184デフォルトの名無しさん
NGNGかなり釣れたなw
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG釣られたのは君だYO!
0187デフォルトの名無しさん
NGNGレス4個程度で>>184のように"かなり"という表現を使うあたり相当おめでたい
ハッピーハウスにでも逝ったら? ショボイ奴はとことんショボイな(藁
・・・って、ここはネタスレだったっけ?
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG最近まではここもマターリしてたよ。
0190108
NGNGsearchのリンクから検索ページにいって「SQL92」だと0件。
「SQL」だと求職っぽい内容のを含めて13件。そのうちに
目的の情報なし。
>>177
- まったく同じメッセージを複数のスレッド/板にまたがって貼っている宣伝業者と、
- 情報収集の進捗を書きつつ、より適切と思った板に移動して質問した人
を同じふうに「マルチ」と書いていた(ようだった)ので、どういう意味に
使っているのか確認しようとしたわけです。
>>187 ネタとか煽り(と他の人がいっている)メッセージがあるから
といって、自分が何でも書いていいという理由にはならないこと
ぐらい理解できないのかな?
0191デフォルトの名無しさん
NGNG結局何? Webで読めるところを探してて、見つからなそうなら書籍を買うってこと?
サーチに手間取ったりするなら買ったほうが明らかに安いし、
Web探してる時間を勉強に充てられるんだから効率いいよ。
これ以上は荒れるだけだからもうやめてほすぃ。
0192デフォルトの名無しさん
NGNGpublic/search.aspで検索したってことなのかな?
そこの断り書きをちゃんと読んでるのかね
規格を探すためのポインタが示されてなかったか?
0193デフォルトの名無しさん
NGNG少なくとも「閲覧」は無料でできる。
というか、>>191さんに同意。
0194デフォルトの名無しさん
NGNGとあるスレに投げかけた質問/問題が放置されたからといって
己の主観でマルチポストしていいという理由にはならないこと
ぐらい理解できないのかな?
宣伝、情報収集等その目的を問わず、マルチポスト(=複数投稿)という
行為には変わりはないゆえに同類として扱われる
# 板/スレ住人に適切なスレへの誘導をされた場合を除く
0195デフォルトの名無しさん
NGNG実りある人生をおくれるとおもうよ。
本気で。
0196デフォルトの名無しさん
NGNG接続に使うプロトコルはWIN98にもあるか?
例えばSQL2000のサーバがTCP/IPでWIN98がNetbiosだけとか間違ってね−か?
0197デフォルトの名無しさん
NGNGuid name
1 a
2 b
3 c
t2
uid name
1 ab
3 cc
3 cc
というデータがありまして、t2.uidにデータが存在するt1.*(この場合は
uid1と3のみ)を取得したいと思うのですが、
select t1.* from t1,(select uid from t2 group by uid) as t2 where t1.uid=t2.uid;
と現在考えているのですが、もっとスマートな方法をどなたかご教授頂けないでしょうか?
0198デフォルトの名無しさん
NGNGスマートって何よ? 他に方法ないじゃん。
変えてもexists使うとかinを使うとかしかできないよ。
これくらいのクエリでスマートさを求めるより、
インデックスの張り方とかを考えたほうがいいとオモワレ
0199197
NGNGいえ、全く速度面とかに問題があるのではなくて、何かやりたいことに
ぴったしはまった結合があったように思えて夜に寝てしまいました。
select t1.* from t1 include join t2;
くらい短く書く方法が・・・あったような気がするだけな気がしてきました。
無いという答えが自分の中に明確に無かったので、
言って貰えて助かりました。ありがとうございました。
0200198
NGNG>199
なるほどね。コードに疑念を持つことは良いことだよ。
でも疑心暗鬼にならないようにほどほどでキリをつけるのも一考だね。
0201デフォルトの名無しさん
NGNGexists
0202デフォルトの名無しさん
NGNG文字列の引用符として’を使っている構文で文字列の中に’があった場合、どうやって記述すればよいのでしょう??
よろしくおながいします。
0203デフォルトの名無しさん
NGNGガイシュツ
0204デフォルトの名無しさん
NGNG死ね
0205デフォルトの名無しさん
NGNG怖い人たちだなぁ...
>>202
DBエンジンによって違うよ。
'⇒''って変更してみたり、'⇒\'って変更してみたりしてみそ
0206デフォルトの名無しさん
NGNGどうやればできるのでしょうか?
やっぱり無理なのかな。
0207デフォルトの名無しさん
NGNG興味があったんで調べたが、非常に難しいらしい。
つーか純粋にシェルを呼び出す事はできないみたい。
ttp://members12.cool.ne.jp/~yoshi0915/oracle/000831/20437.html
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGシェルのコマンド叩ける方法があったような気がしたが
なんだっけか?
#なんか急に知りたくなった。。。。
0210デフォルトの名無しさん
NGNG!
0211209
NGNGエクスクラメーションじゃ出来なかったぞな。
気になってマニュアルまで調べてしまったが
host ダタヨー
ちなみに、Win2kでOra817な環境ね。
SQL*PlusはGUIなヤシ
0212デフォルトの名無しさん
NGNGUNIXのsqlplusは!だね、今でも。
oracle9iでそうだった。
0213デフォルトの名無しさん
NGNGって
pricetableからidが12のpriceを取得する
ということですよね?
0214デフォルトの名無しさん
NGNG入門書嫁。
つか試した方が早い。
0215デフォルトの名無しさん
NGNGFROM weatherReports
ORDER BY location, time DESC;
PostgreSQLのマニュアルにある例なんだけど、
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/sql-select.html
この例だとLocationの重複を取り除いた天気Reportが
Locationのアルファベット順に出てきますよね。
これをLocationの重複を取り除いて、timeが新しい順に
取得したい場合はどうすればいいのですか?
0216デフォルトの名無しさん
NGNGAccessのクエリって勝手に改行消すからいちいち改行して解読するんですが。
フリーのソフトも探してみたのですがイマイチしっくり来なくて。。
ちなみに見つけたモノです↓
ttp://www.cypress.ne.jp/iceprobe/sqlice/
ttp://www2.freejpn.com/~az0652/softwares/splcnv.htm
0217582
NGNGなんでそんな回りくどい、アホなqueryしてんだ?
group byなんてそんなんで使うか?普通。
>198
>199
無くねーよ。
select * from t1
where
uid in (select distinct uid from t2)
でええやん?
>197 の仕様なら。
0218デフォルトの名無しさん
NGNGORDER BY句からlocation引いて、「ORDER BY time DESC;」
でだめなの??
0219デフォルトの名無しさん
NGNG0220219
NGNG0221デフォルトの名無しさん
NGNGselect * from tab
と
desc
を教えてください。
0222デフォルトの名無しさん
NGNG話はそれからです。
0223そもそも…
NGNG1000以上"って条件じゃだめなのかな?
'最大値'っていうのがクセモノだな・・・。
そいつはもしかして、値が指定されたらその値で、指定されなかったら
最大値でってことかな?。(ホスト言語からSQLを発行するような場合
渡河) であれば、状況によってSQL文を切り替えることも出来るはず。
BETWEENにこだわる理由は何かな?
0224そもそも…
NGNG解決してるジャン。あほでした。m(__)m
0225221
NGNG0226デフォルトの名無しさん
NGNG>225
初等教育受けなおしてきた方がいいんでない?(w
0227コンパイル成功!?
NGNG『Oracleにおいて、SQL文「select * from tab」を発行
すると得られる情報と同様の情報を、SQL Serverで
得るにはどういうSQL文、或いは、コマンドを発行す
ればいいのでしょうか。 教えてください。』
しかし、私の実行環境(脳ミソ)ではコアを吐いてし
まいました。
お粗末でした。
以上です。
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGヒントはsp_・・・
0230デフォルトの名無しさん
NGNG必要な全てを抽出するのと、いったんレコード群1を抽出し、都度SQLでレコード群2を抽出する
ようプログラムを書くのとどちらがパフォーマンスがよいですか?
なほ、何件ヒットするかは不明です。数件かも知れないし数万かも
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNGきちんと実行計画みたらわかるんじゃん?
で、どちらでもきちんと適切と思われるINDEXを使用しているならば
たぶん1発の方が多少なりともコストは低いと思われ。
SQLの書き方にもよるが、複数回SQL文を発行すると
オプティマイザでの解析処理が複数回走ってしまう可能性があるので。
あと、何らかの言語でループさせて複数回SQL文を発行するんだろうけど
その分のコストもある死ね。
0233デフォルトの名無しさん
NGNGどうもです。
実行計画なるもにその情報があるわけですね。これはチト勉強が要りそうですね
「一発の方が多少なりともコストが低いと考えられる」ということですが大変参考になります。
ありがとうございます。
ちなみにアドバイス随時募集です(^^;
ちょ〜亀レスでも良いです。よろ。
0234デフォルトの名無しさん
NGNGちゃんとレス嫁。
>198にて、『変えてもexists使うとか「in」を使うとかしかできないよ。』
と書かれてる。
大体、distinctを使う時点で厨房なのに、口調だけ偉そうなのは止してくれ。
0235デフォルトの名無しさん
NGNGmysql並のsql文でやれることでもないやん。
で、君ならどんなquery書くの?
0236234
NGNG漏れはt1がユニークインデックスと前提にして考えて、
select * from t1
where
uid in (select uid from t2 group by uid)
と書くと思う。
ハッキリ言って、t1とt2のテーブルの規模が解らないからあくまでひとつの回答でしかないけど。
それにデータ量によってはオプティマイザによって、>197と同じ式に展開されて
サブクエリ側の結果表を先に作ってネステッドループさせるようになると思うし。
で、distinctとgroup byは結果表の作り方が異なるじはずだが、
少なくとも1000万件くらいのデータで実測して言ってるよね?
コストが少々高くてもアクセスバイト数やインデックスの使われ方によってはベラボーに速いはずだけど。
0237デフォルトの名無しさん
NGNGselect * from hoge where rownum>2 and rownum<8
のような意味合いなのですが、rownumをこういうふうには使えなかったので…
0238デフォルトの名無しさん
NGNGこのケース、そもそもdistinctもgroup byも必要ないけど。
サブクエリを先に評価するようオプティマイザを誘導する場合でも
俺はそうは書かないな。
> distinctとgroup byは結果表の作り方が異なる
まじ?
>>237
select *
from (select hoge.*, rownum num from hoge)
where num between 3 and 7
0239デフォルトの名無しさん
NGNG>少なくとも1000万件くらいの
(*´Д`*)Pu...
こんな厨房質問する奴がそんな案件携わったるわけないやん。
、と思いたい。
だいたいそんな大きいデータ量でネステッドループですか・・・
groupとuniqueでgroupの方が早いか?
DBなに使ってんの?ボラ駐っぽいな・・・
つーか、データ量が多けりゃindex使えなんて、何当たり前のこと
嬉しそうに言ってんだ・・・
distinct(unique)を使う時点で厨房だそうですYO!皆さん。
扱うデータ、スキーマによるとか(また当たり前のこと
言い出さないでね。
>238
joinしてis not nullでもする気?
取り合えず、書いて見れ。
0240デフォルトの名無しさん
NGNGjoinなら必要だけど、in(query)でしょ。exists(query)といっしょ。
0241デフォルトの名無しさん
NGNG#まぁ、query planが一緒かっつーと違うだろうけど。
で、!使わずに!考えてみたんだけど。
>238 == 240 ?
の言ってる効率のいいqueryみてみたいんで、
取り合えず、書いてミレ。
0242238,240
NGNGa) select * from t1 where uid in (select distinct uid from t2);
b) select * from t1 where uid in (select uid from t2 group by uid);
c) select * from t1 where uid in (select uid from t2);
d) select * from t1 where exists (select * from t2 where t2.uid = t1.uid);
この4つの結果が同じってのはおけ?
んで、効率かぁ。
existsを使った場合は必ずメインクエリから評価されるけど、
inだとオプティマイザが評価順序を選択できる。
俺習慣だと、
t2.uidにインデックスが切ってないとか、
t1のレコード数 >> t2のレコード数とか、
t2がリモートデーターベースにあるとかで、
サブクエリから評価して欲しい場合にしかinは使わないな。
その場合は、
select * from t1 where uid in (select uid+0 from t2);
って書いてる。残りは全部exists使ってる。
a)、b)みたいに書いたほうが効率がいいケースてのは…ある?
0243241
NGNGMiguel de Icazaの記事読んでて眠くなったので明日レスするぽ。
http://www.os-omicron.org/~takano/private/trans/bongo-bong_j.html
0244241
NGNG戻ってきたよ。
眠気眼なんですが、だいたい分かったポ。
>a) select * from t1 where uid in (select distinct uid from t2);
>b) select * from t1 where uid in (select uid from t2 group by uid);
>c) select * from t1 where uid in (select uid from t2);
上の2つはだいたいoptimizeされて一緒だろうけど、
#たぶん、データ量にもよるけど(;´ω`)
a>b>cの順になると思うぽ。cは無駄な比較がでる。
データ量が小さければuniqueさせるコストも低いし、大きい場合は
比較時に有利。a>bは実測からもわかる。
dは、nested loopされるっぽいけど、
t1*t2の行数回、比較が行われるので処理対象のデータ量多い場合
向かないと思うな。小さい場合はd > c > a ではないかな、と。
dとaの損益分岐点はどの辺にあるのかはわかりませんが。
0245242
NGNGcをt1から評価する場合はd、t2から評価する場合はaに
暗黙に変換してるんでないかと漠然と思ってたんだけど、
よくわからんw
c→aの変換が行われないとすると、t2.uidのユニークさ加減
によってc > aだったりa > cだったりするんかな?
> dは、nested loopされるっぽいけど、
> t1*t2の行数回、比較が行われるので
existsは条件に合致したレコードが見つかった時点で評価終了
でなかったけ?
例えばサブクエリのwhere節を外して、
select count(*) from 100万件なテーブル
where exists (select * from 100万件なテーブル);
とやってもかなりのスピードで帰ってこない?
なもんで、サブクエリの参照にインデックスが使える場合は
問答無用でexists使う習慣がついてる。
なんにせよもつかれ。続きは明日以降。
0246237
NGNG0247237
NGNG0248236
NGNGスマム。235がでかい口叩いたので釣られて基本事項を挙げてしまいますた。
元々の出題をしたほうは大きい案件に携わっているとは思ってないYO!
DBはOra。
テーブルでかくても(t1を)ユニークインデックスでスキャンするよう持っていければ
existsでサブクエリ側(t2)をインデックスレンジスキャンさせるよりは格段に速いっす。
0249デフォルトの名無しさん
NGNGどのように記述すれば良いでしょうか?
お願いします
insert into tableA select itemA,itemB,(ここにsysdateを入れたい) from tableB where id='1';
0250デフォルトの名無しさん
NGNG入れたいなら、入れろよ。
入れてエラーが出るなら、それを書け。
0251249
NGNGレスありがとうございます
記述のしかたがわからないんです・・・
insert into tableA select itemA,itemB,sysdate from tableB where id='1';
と書くと、
ERROR 1054: Unknown column 'sysdate' in 'field list'
0252そもそも
NGNGsysdateって、関数なのでは?
insert into tableA select itemA,itemB,sysdate() from tableB where id='1';
でどうでしょ?
■ このスレッドは過去ログ倉庫に格納されています