X



トップページDB@2ch掲示板
1002コメント319KB
SQL質疑応答スレ 18問目
レス数が1000を超えています。これ以上書き込みはできません。
0001NAME IS NULL垢版2018/01/04(木) 22:12:22.14ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 17問目
https://mevius.5ch.net/test/read.cgi/db/1468157341/
0952NAME IS NULL垢版2019/05/19(日) 15:25:35.49ID:H3ZBKVvV
946です、みなさんありがとうございます
SQLはあってるんですね、よかったです

模範解答は>>949さんが書いてくださってるように、asでテーブルすべてに別名をつけています
テーブル名を指定するときは、別の名前を付けた方がいいんですね
これからやってみます
 
またよろしくお願いします
0953NAME IS NULL垢版2019/05/21(火) 10:14:27.63ID:???
microsoft sql server 2008

テーブル同士を結合するとき、char型の項目とvarchar型の項目とで
結合するときはconvertで型を合わせる必要があるでしょうか?

この項目はマスタテーブルの主キーなのですが、
伝票テーブルに外部キーとしても存在します。
伝票側の項目には必ずしも値が入るとは限らず、空白も存在します。
そのためマスタテーブル側をchar型に、伝票テーブル側をvarchar型にし、
それぞれで外部結合します。
0955NAME IS NULL垢版2019/05/21(火) 23:46:08.20ID:???
そもそもなぜ型を合わせないのか
値がないなら、空白じゃなくてNULL入れろよ

まあ世の中にはNULLと空白を区別できない欠陥DBもあるけどなw
0956NAME IS NULL垢版2019/05/22(水) 01:00:05.54ID:???
主キーにする項目に、値が入らないとか、調布市議
0958NAME IS NULL垢版2019/05/22(水) 06:11:10.78ID:???
NULLと空白を区別できない欠陥DBなんかあるかな
長さゼロの文字列とNULLを区別できない欠陥DBなら知ってるけど
0959NAME IS NULL垢版2019/05/22(水) 06:20:15.84ID:???
空白と空文字列を区別できない欠陥PGなのでは?
0960NAME IS NULL垢版2019/05/22(水) 09:43:26.07ID:???
NULL不許可にしてるんでしょ
NULL撲滅委員会とかあるし
0961NAME IS NULL垢版2019/05/22(水) 17:19:04.11ID:3DWUiXWo
>>958
長さがゼロの文字列だったら、それはNULL値。これが本来のデータベースの定義。
0962NAME IS NULL垢版2019/05/22(水) 18:12:49.17ID:???
長さ0の文字列と=で比較しても良いのかな?
0963NAME IS NULL垢版2019/05/22(水) 19:07:48.33ID:???
長さゼロの文字列とNULLを区別しないのは
Oracle Databaseの有名な欠陥であり
それはOracle社自身も認識していてマニュアルにも書いてある

https://docs.oracle.com/cd/E96517_01/sqlrf/Nulls.html
> Oracle Databaseは現在、長さが0(ゼロ)の文字値を
> NULLとして処理します。ただし、将来のリリースでは
> この処理が変更される場合があるため、空の文字列を
> nullと同じように処理しないことをお薦めします。
0965NAME IS NULL垢版2019/05/22(水) 20:47:13.37ID:???
>>963
> ただし、将来のリリースでは
> この処理が変更される場合があるため
まあ、どう見ても無理だろw
0966NAME IS NULL垢版2019/05/22(水) 21:09:06.79ID:???
かなり昔からそういってるからなぁ
そのうちVarchar3型つくるんじゃって話もある
0967NAME IS NULL垢版2019/05/22(水) 21:20:32.64ID:???
Oracleを選ぶメリットがなにもない
0968NAME IS NULL垢版2019/05/22(水) 21:36:21.32ID:???
欠陥であることは分かってるんだけれども
直しちゃうと既存のアプリケーションに甚大な影響が出るんで
直すに直せないんですよー
という気持ちがありありと分かるマニュアルだねえ
0969NAME IS NULL垢版2019/05/22(水) 23:55:25.37ID:???
つーか null と空文字列を同一視するというのは極めて常識的な挙動であって
標準SQLの方が時代遅れと言えるのでは

ここはもう標準を変更してnullも空文字列も、ついでに空白だけのカラムもすべて同一視するようにすべき
null は is で比較するとかいう無意味な制限も廃止して全て = の比較に統一すべき

とするのはどう?
0970NAME IS NULL垢版2019/05/23(木) 00:07:35.60ID:???
こんなところでそんなアホ丸出しの提案して
何かが変わると本気で思っているのか
0972NAME IS NULL垢版2019/05/23(木) 00:45:42.35ID:b4XWIHfq
空文字列とNULLが混在して混乱を招いているシステムは多い。
0973NAME IS NULL垢版2019/05/23(木) 00:54:30.57ID:???
空の文字列とNullを同一視するのが常識とかないと思うんだが
データベースしか触らんやつはそういう常識なの?
0974NAME IS NULL垢版2019/05/23(木) 01:02:33.57ID:???
Oracle社員?が荒らしてるだけ
0975NAME IS NULL垢版2019/05/23(木) 01:05:22.79ID:???
ホントOracleはシステム開発者にとってマイナスなことしかしないよね
0976NAME IS NULL垢版2019/05/23(木) 01:20:10.41ID:???
特定のDBしか触らない奴だとそれが常識だと考えるかも
その場合は、そいつには触らない方が良いと思う
0977NAME IS NULL垢版2019/05/23(木) 01:26:06.81ID:???
ぬるい質問ばかりで暴れたくなった
相手はどのDBでもよかった
0978NAME IS NULL垢版2019/05/23(木) 02:16:05.50ID:???
>>973
例えばC言語で空文字列とnullが同じと言ったらそりゃ変なんだが
抽象度が高いSQLで区別する意味は全くないと思うんだよね
むしろ区別することが当然と考えること自体が何か洗脳されてるという気がするわけ
まあ釣りではあるのだが
0979NAME IS NULL垢版2019/05/23(木) 02:52:16.93ID:TvO7l/JJ
全項目NOT NULLにして集計処理の手間を減らすことはあるな
CSV/TSVを外部テーブルで使うとNULLが使えないことがほとんどよね

外部結合して片側NULLで引っ掛けるのはよく使うから
NULLの概念自体はあってほしいけど
0980NAME IS NULL垢版2019/05/23(木) 08:31:33.80ID:???
nullと空文字列が区別できなくて良いってやつは、nullが値ではないって概念が理解出来ないんだろうな
0982NAME IS NULL垢版2019/05/23(木) 10:57:17.75ID:???
>>980
その概念に実用性はあるのか?
それで何か便利なことがあった?
むしろ不便であって弊害しかないオナニー概念だと思うのだが

いや >>970 の言う通り、ここで言っても仕方ないことは分かってるけどね
たまには王様は裸だと言って見たくなる
0983NAME IS NULL垢版2019/05/23(木) 12:25:42.68ID:???
あえて釣られてやるけど、例えば未入力と空文字の入力を区別したいとか普通にあるだろ
0984NAME IS NULL垢版2019/05/23(木) 12:41:39.82ID:???
>>983
あるか? そんなの
空文字の入力は未入力でいいんでわ
0985NAME IS NULL垢版2019/05/23(木) 12:42:22.93ID:???
未入力よりも未設定ってことでは
0986NAME IS NULL垢版2019/05/23(木) 13:19:01.66ID:???
>>985
空文字の入力を未設定と区別する必要があるのかね
それを区別しようとすることでシステムは複雑になり間違いも多くなる
0987NAME IS NULL垢版2019/05/23(木) 13:58:31.76ID:???
セルの値としてはどうかわからないが,テーブル結合後の名テ―ブルの行の属性値としては有りだと思う
0988NAME IS NULL垢版2019/05/23(木) 14:19:42.47ID:???
>>987
そうかねぇ
むしろ使い分けする運用こそ危うい気がするのだが
0989NAME IS NULL垢版2019/05/23(木) 18:02:19.51ID:???
整数値カラムでouter joinしたとき
存在しない行の整数値カラムの値は
何になるのでしょうか?
0990NAME IS NULL垢版2019/05/23(木) 20:00:04.84ID:RM6eL1FJ
>>988
バカが使えばどんな道具も危ないからな
0994NAME IS NULL垢版2019/05/23(木) 23:30:17.28ID:???
どうしてオラクルは、ああいう苦しいコメント出しているの?
0995NAME IS NULL垢版2019/05/24(金) 07:31:48.91ID:???
「sqlなら曖昧でよくね?」っていうけど
連携するプログラム側が困るんよね。それじゃぁ

運用担当がデータ見るだけに使うなら
テキトーでも許されるのかもしれんけど
0996NAME IS NULL垢版2019/05/24(金) 13:54:52.91ID:???
NULLとかnilとかNoneについては、「値ではない」という説明の仕方より、「あくまでも値だけど、約束事として、(概念的に)値なしと呼びうる状況(の一部)に対応する値として利用できる特殊な値」という説明の仕方の方が誤解を招きにくいんじゃないか。
たとえば、空の配列の長さが0、Noneが1個入った配列の長さが1という言語で「Noneは値ではない」という説明はしづらい気がする。

結局、(概念的に)値なしと呼びうる状況のうち、どれにNULL/nil/Noneを対応させて、どれに空文字列・空配列を対応させるか(undefinedがある言語についてはそれも)というマッピングを整理しておくべきという話かなと思うが。
0998NAME IS NULL垢版2019/05/24(金) 18:24:26.05ID:???
頭ぱっぱらぱーのウチの運用が言いそう
10011001垢版Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 504日 21時間 44分 19秒
10021002垢版Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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