X



トップページDB@2ch掲示板
1002コメント327KB
Microsoft SQL Server 総合スレ 11 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2016/05/29(日) 16:50:08.13ID:dqKJQypQ
Microsoft SQL Server (Transact-SQL) の総合スレッドです。

・Microsoft 公式サイト
http://www.microsoft.com/japan/sql/

過去スレとかめんどいから誰か適当に貼って
0647NAME IS NULL
垢版 |
2018/02/07(水) 21:05:34.23ID:???
>>646
ゼロはオーと打ち間違えやすいので避けたい
テンキーなら間違えないが
ノートパソコンだとゼロとオーは隣あっていて打ち間違えやすい
0648NAME IS NULL
垢版 |
2018/02/07(水) 22:14:15.01ID:nx8/8ate
>>647
見間違えるのはわかるけど打ち間違えってw
それおまえだけだからwwww
0649NAME IS NULL
垢版 |
2018/02/07(水) 22:38:55.94ID:???
配列がランダムに変わるキーボードか?
0650NAME IS NULL
垢版 |
2018/02/08(木) 06:50:41.49ID:???
そもそも[O] なんて名前つけないし
0651NAME IS NULL
垢版 |
2018/02/08(木) 07:38:34.47ID:???
where 1=1はsql文の慣例句みたいなものでgoogleで検索してもいっぱいでてくる。そんな事で悩む必要はない。
http://kinocolog.com/where11/
0652NAME IS NULL
垢版 |
2018/02/08(木) 11:53:55.72ID:???
100文字以内のデータしか入れない場合には
nvarchar(100)
で良いですよね?
質問1
全角文字で半角文字でも100文字入るんですよね?
質問2
nvarchar(max)
にすると無駄にメモリやハードディスクを使いますか?
0653NAME IS NULL
垢版 |
2018/02/08(木) 13:35:25.45ID:???
回答1
Yes
回答2
No
varcharは可変長だから入ってる分だけの消費
0654NAME IS NULL
垢版 |
2018/02/08(木) 19:08:59.93ID:???
>>653
ありがとうございました。
>varcharは可変長だから入ってる分だけの消費
では、カラムが10文字でも100文字でも
とりあえずnvarchar(max) を使っておけば良いのでしょうか?
どういう場合にnvarchar(100) などを使うのでしょうか?
0655NAME IS NULL
垢版 |
2018/02/08(木) 19:18:47.90ID:???
index張らないならMAXでもいい
張るなら900バイト以下でなければならない
0656NAME IS NULL
垢版 |
2018/02/08(木) 22:35:21.32ID:???
教えてください。

テーブルA に製品の情報がたくさん登録されています。
この中から、不特定多数の特定の文字列で始まらない名称の製品を検索したいと思います。
条件が固定であれば次のような SQL を書けます。

SELECT *
FROM [テーブルA]
WHERE NOT ( [NAME] LIKE 'A%' OR [NAME] LIKE 'B%' OR [NAME] LIKE 'C%' )

条件(先頭の文字)を動的に変更するとしたら、
上のをストアドにしてパラメータで与えるとか、
条件をテーブルに保存しておくなどがあると思うのですが、SQL の書き方がわかりません。
どうするのが一般的か、教えてください。
0658NAME IS NULL
垢版 |
2018/02/09(金) 14:55:37.85ID:???
テーブル型を引数にして

where not Left([NAME], 1) in (select [Word] from @引数)

みたいな風かな
ASCII しないといかんかもしれん
0659656
垢版 |
2018/02/11(日) 00:41:15.28ID:???
>>657,658
ありがとう。
どっちのやり方も知らなかったです。

とりあえず 658 さんの方法を発展させてやってみようと思います。
657 さんの動的 SQL は便利すぎ。
0661NAME IS NULL
垢版 |
2018/02/11(日) 04:44:52.94ID:iUCuMXup
>>659
動的SQLはできるだけ使わないように。条件の組み合わせが大量になければ、静的SQLで書く。動的SQLはSQLの組み立て方によっては、可読性、保守性がさがり、さらにコーディングミスをおこし、スペースを入れわすれた等おかしなSQLを簡単に仕込んでしまう。
0662NAME IS NULL
垢版 |
2018/02/11(日) 04:51:00.67ID:iUCuMXup
>>656
それ単にパラメータによって、LIKE用の文字列を作り分けておけばいいだけ。
0663656
垢版 |
2018/02/12(月) 00:49:37.83ID:???
>>660
ありがとう。
left join で like って使えるんですね。
その結果が null のモノだけって発想がありませんでした。
こちらをまず試してみます。

>>661,662
ありがとう。
うん、そう思って動的 SQL は最後の手段にしとこうかと。
0664NAME IS NULL
垢版 |
2018/02/12(月) 07:54:28.97ID:???
こうしてまたバカのバカによるバカのためのバカノウハウが広まるのであった
0665NAME IS NULL
垢版 |
2018/02/12(月) 09:52:09.80ID:???
スマートな解決策書けてりゃ格好いいんだけどなぁ...
>>664だとバカの遠吠えにしかなってない w
0666NAME IS NULL
垢版 |
2018/02/12(月) 11:51:24.82ID:tzC/U9n1
結局、RDBになるとSQLが魔法になってプログラムの見た目はシンプルでも、RDBMSの処理が複雑になるようなものを作るやつが多すぎる。

RDBの処理が汚なくなり、無意味に負荷がかかるようなプログラミムを書いても、RDBMSの処理がどう処理しているのか考えないから、珍妙なことを推奨する。
0667NAME IS NULL
垢版 |
2018/02/12(月) 12:19:14.11ID:???
>>665
そのスマートな解決策()が動的SQLなんよ
バカには難しいらしいけんどねw
0669NAME IS NULL
垢版 |
2018/02/12(月) 19:57:26.33ID:tzC/U9n1
データベース板はレベルが低い。リレーショナルデータベースに詳しくもないのにこうだ、これが正解だと言いはる人間ばかり。
0670NAME IS NULL
垢版 |
2018/02/12(月) 22:04:38.94ID:???
せめてどこがどう「無意味に」負荷がかかってるのか書けないのかね
0671NAME IS NULL
垢版 |
2018/02/13(火) 01:01:59.31ID:mpzcP+RA
>>670
検索結果が同じSQLでも、RDBMSではSQLの構文解析(ソフトパース、ハードパース)が行われ、実行プランも作り直しなることもあり、RDBMS側の処理が変化する。

プログラムだと結果は同じなのに、こうすると遅い、速いや、意味のないコードを書くと文句を言うくせにSQLになると、とたんにRDBMSもプログラムだということを忘れているか、理解していない。

SQLは魔法ではない。
0672NAME IS NULL
垢版 |
2018/02/13(火) 06:48:41.32ID:???
別にSQLでもこう書くべきとか言う議論は普通にやられてるしお前がそう言うのを見てないだけかと
0673NAME IS NULL
垢版 |
2018/02/13(火) 19:29:30.08ID:???
>>671
同じ結果の処理を同じ手間で書けるなら、負荷は軽い方がいいに決まってるけど
で、その説明でどこがどう負荷かってるの?
まさかクエリキャッシュ効かないでコンパイル時間がとか言う気?

>>672
まあしかし、理想はそのへん意識しないでRDBMSに任せる事なんだろうとは思う
オプティマイザの動作を予想して奇妙なSQL書くのは本末転倒だし
0674NAME IS NULL
垢版 |
2018/02/13(火) 20:13:55.26ID:0W+Ckc+y
久しぶりにアツいマウント合戦開幕したなw
どっちも負けろwwww
0675NAME IS NULL
垢版 |
2018/02/13(火) 21:30:57.57ID:0W+Ckc+y
どした?おい?w
ファイッッッ!!!wwwwww
0676NAME IS NULL
垢版 |
2018/02/13(火) 21:40:47.70ID:???
SQL SERVER2014Expressが動いているWindowsサーバーのOSをクリーンインストール
する予定なのですが、データベースを丸ごとバックアップしておいて、あとで戻すなどは
可能ですか?ヒントを教えて下さい。DBのサイズは500MB 程度です。
0677NAME IS NULL
垢版 |
2018/02/13(火) 22:07:12.29ID:???
>>676
データベースのデタッチとアタッチ
0678NAME IS NULL
垢版 |
2018/02/13(火) 23:35:26.82ID:???
リンクサーバー設定とかデータベースの設定とかもバックアップする方法ってないものか
ドライブごとバックアップするしかないのかな
0679NAME IS NULL
垢版 |
2018/02/14(水) 00:04:57.46ID:???
masterバックアップして戻せば戻ったような
0680NAME IS NULL
垢版 |
2018/02/14(水) 02:50:36.19ID:kUpzGWTP
>>673
根本的にリレーショナルデータベースを分かってないのになぜ知ったかぶりをするのか?

リレーショナルデータベースは重い処理をしてるんだぞ?

リレーショナルデータベースの内部処理が見えないから、自分のしょぼいプログラムと比較にならないことをしていることに気づかない。
0681NAME IS NULL
垢版 |
2018/02/14(水) 02:53:40.84ID:kUpzGWTP
>>673
そもそもあんたの用語がおかしい。データベースを知らないと思う。データベースを使うのが精一杯で、リレーショナルデータベースの構造も知らないと思われる。

クエリキャッシュなんて言葉はデータベースエンジニアは使わない。
0682NAME IS NULL
垢版 |
2018/02/14(水) 03:07:54.32ID:kUpzGWTP
>>673
同じ結果でもいつも速いわけではない。統計情報の取得タイミング、データの傾向の変化で実行プランが最適にならない可能性もあれば、コストが高くても速いこともある。

バッファキャッシュの有無、データファイル読み書きタイミング、速度、OSのキャッシュ、ストレージのキャッシュ、ありとあらゆる条件で性能は決まるのであって、そのなかからどう処理されているかのSQL Serverの情報を元にSQL Serverが言っている処理情報の誤りまで判断して決めることだ。
0683NAME IS NULL
垢版 |
2018/02/14(水) 07:51:44.92ID:???
定期的にわくよね。当たり前の一般論をすごいことのように語るID付いてるおっさん。
0685NAME IS NULL
垢版 |
2018/02/14(水) 10:24:40.03ID:4BYcg5RC
>>677
ありがとうございました。やってみます。
0687NAME IS NULL
垢版 |
2018/02/14(水) 18:45:38.91ID:???
>>679
知らなかった。今度からmaster もバックアップする
0688NAME IS NULL
垢版 |
2018/02/14(水) 20:48:54.39ID:???
masterリストアするのは簡単じゃないから、再生成するスクリプト作って流すほうが楽かもよ
0689NAME IS NULL
垢版 |
2018/02/15(木) 18:22:36.56ID:YBD93ntd
質問です。
顧客テーブルと売上テーブルがあり、顧客IDで紐付いています。
特定の条件の売上が無い(売上テーブルにレコードが存在しない)顧客のみを抽出するには、どのような方法が考えられるでしょうか?

仮テーブルに顧客テーブルの全レコードをコピーし「特定の条件の売上が有る」顧客を削除していく、という方法は思いつきましたが、SQL文のみで実現する方法はあるでしょうか?

無いものは抽出できない、とは思うのですが…
0691NAME IS NULL
垢版 |
2018/02/15(木) 19:10:24.66ID:L39WhMJw
>>689
自ら吐いた言霊に呪われとるやんw

無いのは売上
抽出するのは顧客

な?
0692NAME IS NULL
垢版 |
2018/02/15(木) 21:10:45.04ID:???
SELECT * FROM 顧客テーブル
WHERE NOT 顧客ID IN (SELECT 顧客ID FROM 売上テーブル)

みたいな風かな
0693NAME IS NULL
垢版 |
2018/02/15(木) 21:23:39.60ID:???
>>692
そういうINの使い方は悪手だよ
NOT EXISTSかLEFT JOINを使おう
0694NAME IS NULL
垢版 |
2018/02/15(木) 21:23:57.09ID:???
>>689
>>690で答え出てるけどないものを抽出するんじゃなくて、「売上に紐付かない顧客」を抽出するってこと
0695NAME IS NULL
垢版 |
2018/02/15(木) 21:31:33.97ID:???
>>694
そういうJOINの使い方は悪手だよ
NOT EXISTSを使おう
0697NAME IS NULL
垢版 |
2018/02/15(木) 23:18:27.60ID:???
>>696
NOT EXISTSをINNER JOINにするのは無理だし
MySQLはNested Loopしか使えないからね
他の一般的RDBとは事情が違うよ
0698NAME IS NULL
垢版 |
2018/02/15(木) 23:21:53.94ID:???
>>695
NOT EXISTSのほうがパフォーマンスいいことのほうが多いけど
LEFT JOINが悪手ってわけでもないと思うけどな

少なくとも質問者はLEFT JOINを理解してない風なので
そっちからはじめたほうがいい
0699689
垢版 |
2018/02/16(金) 00:03:31.60ID:???
みなさまありがとうございます。
LEFT JOINでできるとは思いませんでした…頭が硬いですね。
教えていただいたNOT EXISTSも調べたところまさにやりたいことでした。
何とかなりそうです。
ありがとうございました。
0700NAME IS NULL
垢版 |
2018/02/16(金) 00:31:27.89ID:???
>>695
環境、データ、インデックスとかによって違うからお前さんみたいに盲信してるのが一番ヤバイ
0701NAME IS NULL
垢版 |
2018/02/16(金) 01:49:40.19ID:nepixz1J
経験上LEFT JOIN でIS NULLのほうが速い場合がほとんど
0703NAME IS NULL
垢版 |
2018/02/16(金) 05:41:07.18ID:???
>>692さんみたいな書き方を良くするんですが、これは遅いのですか?
0704NAME IS NULL
垢版 |
2018/02/16(金) 05:43:00.22ID:???
あっ、ただ自分の場合は

「WHERE NOT 顧客ID IN (SELECT 顧客ID FROM 売上テーブル)」

ではなく

「WHERE 顧客ID NOT IN (SELECT 顧客ID FROM 売上テーブル)」

と書きます。
0705NAME IS NULL
垢版 |
2018/02/16(金) 10:17:03.78ID:???
売上げテーブルに顧客IDでインデックス貼ってあればそんなに遅くない気もする
0706NAME IS NULL
垢版 |
2018/02/16(金) 10:51:09.70ID:???
692は自分だけど、後でみなさん言われるとおり

SELECT * FROM 顧客テーブル
WHERE NOT EXISTS (SELECT TOP 1 FROM 売上テーブル WHERE 顧客ID=顧客テーブル.顧客ID)

のほうが速そうだな
0707NAME IS NULL
垢版 |
2018/02/16(金) 12:21:10.95ID:???
速いとか遅いとか気にしたいんならDBが適切にメンテされているかを考えるべきやな
SQLの表記のゆれなど考えるだけ無意味
0708NAME IS NULL
垢版 |
2018/02/16(金) 15:52:24.98ID:???
NOT INの場合はパフォーマンス以前に
顧客IDがNOT NULLじゃないと意図した結果が得られない可能性がある

NOT NULLなら意図した結果が得られるけど、速度はDBの最適化に依存
INの最適化レベルが高いDBならNOT EXISTSと同程度の速度に場合もある
でもそうならない場合もあるからこういうケースでは基本使わない
0710NAME IS NULL
垢版 |
2018/02/16(金) 20:39:05.84ID:yNJxj2Lb
>>700
環境、データ、インデックスとかによって違うからお前さんみたいに
テストした環境でLEFT JOINが速いからLEFT JOINにしてしまう奴が一番ヤバイ
0711NAME IS NULL
垢版 |
2018/02/16(金) 20:59:00.37ID:???
>>710
うまい返ししたつもりなんだろうけどアホ晒してるだけやぞww
0712NAME IS NULL
垢版 |
2018/02/16(金) 21:08:47.07ID:yNJxj2Lb
>>711
普通に答えただけだけどうまかったか?w
マジかwセンスあんな俺www
0713NAME IS NULL
垢版 |
2018/02/16(金) 21:32:20.04ID:???
誰か試してみてよ
0714NAME IS NULL
垢版 |
2018/02/16(金) 21:53:09.91ID:???
単純なnot inならouter joinと同じ実行計画吐いたきがする
0715NAME IS NULL
垢版 |
2018/02/16(金) 22:16:06.50ID:yNJxj2Lb
>>714
だからたまたまその時その環境でそういう実行プランが作られたという経験を
後生大事に今生の知識として胸にしまいこんでも無駄だと言っておろうが

SQLはいつだってよりシンプルにより直接的にやりたい事を表現してる様に書くべきなんや
0716NAME IS NULL
垢版 |
2018/02/16(金) 23:37:28.84ID:???
>>712
誰もうまい返しとは言ってないぞ
日本語の理解力もないとな w
0717NAME IS NULL
垢版 |
2018/02/17(土) 00:10:23.40ID:RRaJ3TQN
>>716
は?こっちこそお前がうまい返しと言ったとは言っとらんが???
異次元の理解力だなお前…
というかアスペだなwww
0718NAME IS NULL
垢版 |
2018/02/17(土) 00:12:55.27ID:???
ここもID強制表示にしてほしいな
0719NAME IS NULL
垢版 |
2018/02/17(土) 00:21:22.92ID:???
>>717
> というかアスペだなwww
自己紹介乙w
0720NAME IS NULL
垢版 |
2018/02/17(土) 15:34:21.57ID:lIYg2W3z
5chはROM専みたいな筆不精は、長文が書かれていると、時間をかけて書いていると思い込む。

世の中、超速で読み書きができる人間がいるのだよ。
0723NAME IS NULL
垢版 |
2018/02/18(日) 01:31:05.23ID:JhkmGsBQ
>>721
オリジナルです
0724NAME IS NULL
垢版 |
2018/02/18(日) 01:32:48.22ID:JhkmGsBQ
仕事でやってるなら仕事が異常に速いひとを知ってるはずだけどな。並の人間の20倍、30倍くらい仕事が速い人もいる。
0725NAME IS NULL
垢版 |
2018/02/19(月) 05:02:12.33ID:???
1.5人月で見積もられた仕事を1日で片付ける人か。
さすがにそれは見たことないわw
0726NAME IS NULL
垢版 |
2018/02/19(月) 12:21:33.79ID:???
めちゃくちゃキーボード打つの速そう
0727NAME IS NULL
垢版 |
2018/02/19(月) 19:22:31.89ID:???
30人にやらせれば余裕で1日で終わるというのに
0728NAME IS NULL
垢版 |
2018/02/19(月) 19:45:21.08ID:???
>>726
そんな思考だから仕事遅いんだよ
できる人できない人の違いすら理解できてない
0729NAME IS NULL
垢版 |
2018/02/19(月) 20:26:20.69ID:???
だな
キーボード打つ速度とかマジ関係ない
0730NAME IS NULL
垢版 |
2018/02/19(月) 20:33:52.86ID:md3NX5hc
仮に1.5人月のコードを5000行とすると
1日でそれ書いて、さらに仕様書とかも書いてテストもするんやで?
めちゃくちゃ打つの速いやん
0731NAME IS NULL
垢版 |
2018/02/19(月) 20:40:21.60ID:???
今どき行数で考えるなよ
0732NAME IS NULL
垢版 |
2018/02/19(月) 20:55:39.42ID:md3NX5hc
>>731
何で考えても書く行数は変わらんのだけどw
0733NAME IS NULL
垢版 |
2018/02/19(月) 21:14:39.42ID:???
無能な働き者の手による大量の無駄なコードは有能な怠け者の手による洗練された短いコードに劣る
0734NAME IS NULL
垢版 |
2018/02/19(月) 22:24:25.26ID:md3NX5hc
な?具体的に数字だされると速いやろw
0735NAME IS NULL
垢版 |
2018/02/19(月) 23:38:27.02ID:???
>>732
724が言ってるような並の人間より仕事が20倍30倍速いやつってのは
並の人間が5000行書かないと実現出来ない処理を200行程度書くだけで実現したりできるわけ
キーボードだってできるだけ打たなくていい方法を考える

見積もり時に書く行数がほぼ固定されてるような仕事してるなら
できるだけそこから早く抜け出すことだな
0736NAME IS NULL
垢版 |
2018/02/20(火) 07:11:59.70ID:D0Bn3/BK
>>735
それコードが圧縮されとるだけやんwコードゴルフかw
コードは20倍圧縮されても作業にかかる時間は速くなっとらんでそれwww
0737NAME IS NULL
垢版 |
2018/02/20(火) 07:20:13.02ID:???
典型的な無能の発想だな
0738NAME IS NULL
垢版 |
2018/02/20(火) 08:05:15.51ID:oDlAdTII
お前らはどうしてスキルないくせに突飛な主張してマウントとりたがるんや?
俺は笑えるからこうして楽しんどるけど一般的にはみっともないだけやでw
0739NAME IS NULL
垢版 |
2018/02/20(火) 14:51:54.91ID:???
どれだけ優秀な人間だろうと、1.5人月で見積もった仕事を1日で片付けたらな
そもそもの見積もりがぼったくりすぎるだけだな
0740NAME IS NULL
垢版 |
2018/02/20(火) 17:42:37.73ID:???
>>736
コードを圧縮て
斜め上の発想だね
0741NAME IS NULL
垢版 |
2018/02/20(火) 17:49:18.93ID:???
メタプログラミングやコードジェネレーションを考えればいいと思うよ
できるやつは無駄を省いて機械に仕事をさせる
Paul GrahamのLispの話と同じ
0742NAME IS NULL
垢版 |
2018/03/03(土) 09:21:09.95ID:???
新進気鋭の「グラフデータベース」って用途が思いつかないな
0743NAME IS NULL
垢版 |
2018/03/03(土) 16:40:26.84ID:???
RDBはグラフと相性悪いからな
用途が思いつかないうちは使う必要ない
0744NAME IS NULL
垢版 |
2018/03/03(土) 19:29:07.99ID:???
ビッグデータ()とかバズりたい奴向けやろ
0745NAME IS NULL
垢版 |
2018/03/03(土) 21:51:50.18ID:???
一昔前の技術で言えば多次元DBと同じようなもん
RDBみたいにあらゆる所で使われる技術ではない
0746NAME IS NULL
垢版 |
2018/03/03(土) 21:52:38.80ID:???
グラフデータベース=ビッグデータ()
とか言ってると恥ずかしいよ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況