コッドはオラクル社と、一部のユーザーの意見を慌てて混ぜ込んだので、よくわからないものになった。 0664NAME IS NULL2022/12/27(火) 19:18:02.13ID:Nm1SClNo>>661 コッドはどのデータ型でも空が必要と考え直して、あせって空の概念を追加したから、数値の空がゼロになるという失敗をおかした。
ゼロが値のデータと、空を表現するゼロというデータの区別ができなくなった。
空文字列も同様に、空文字列が空なのか、空というデータなのか区別がつかなくなった。 0665NAME IS NULL2022/12/27(火) 19:20:10.01ID:???>>663 空文字列のほうがNULLより古い概念だと思うんだがな
つまりコッドは自分の間違いに気付いて修正したのに オラクルは修正しなかったと 0666NAME IS NULL2022/12/28(水) 00:44:53.00ID:??? おまえそんなウソをよく信じるなwww 0667NAME IS NULL2022/12/28(水) 21:08:04.43ID:??? Edgar Frank “Ted” Coddが『A Relational Model of Data for Large Shared Data Banks』を書いたのが1969年 John McCarthyがLISP 1.5を作ったのが1958年 もちろんLISP 1.5に文字列は(当然空文字列も)ある 要するに>>663は単なるアホの妄想でしかない 0668NAME IS NULL2022/12/28(水) 23:39:34.80ID:??? オラクルがおバカな設計をしたもんだからこりゃダメだと感じて 空文字とNULLは違うんだよって至極当然のことを声高に宣言して標準化することになったんだよ 0669NAME IS NULL2023/01/04(水) 16:34:41.59ID:nkfvAbjd コッドはオラクル社が製品化したことについては悪く言っていない。 空の概念は後付けなので、オラクル社が製品化したときには、まだコッドは空の概念がなかった。 0670NAME IS NULL2023/01/04(水) 17:22:14.61ID:xblv//Bh>>667 LISPおじさんは、空文字列がnilに変換されてしまうから怒っているのか。
ようやく変なこだわりが変わった。 それはLISPだけの話じゃない。
空文字列は空の文字列だから、NULLなんだよ?
わかった? 0671NAME IS NULL2023/01/04(水) 17:48:04.83ID:??? 年明け早々ガイジが沸いてて草 0672NAME IS NULL2023/01/05(木) 09:27:21.66ID:uQIDyRWM NULLは空文字列と使う側が変換すればいい話をくどくど言うやつは死ぬまで言うんだろうな。 0673NAME IS NULL2023/01/05(木) 14:58:06.50ID:??? 情報が失われてるのにどうやって変換するんだよw NULLと空文字を区別するためのカラムを別途用意するのかww 0674NAME IS NULL2023/01/05(木) 16:45:00.33ID:??? 空文字列がNULLの人に、下記2点、イエスかノーかで答えてほしい
1.空文字列は文字列として有効である 2.NULLは文字列として有効である 0675NAME IS NULL2023/01/06(金) 22:45:20.28ID:qDWOeluB NULLは値がないことだよ
空文字列は空文字列という値だよ
空文字列はいらないと言ったのは博士だよ
歴史を知らないのなら、博士の考えが揺れたことをまずは調べてね。 0676NAME IS NULL2023/01/06(金) 22:54:26.06ID:qDWOeluB OracleDBでもCLOB型なら、ロケーターがあっても中身は空文字列という状態がある。
AWSでのOracleDBとSQL Serverが選択されるようになってきた。少し前までは減っていく方向だったが、フルマネージドはバージョンをどんどん上げないといけないから、仕様が変わっていないか頻繁に確認し直さないといけない。 0685NAME IS NULL2023/01/20(金) 05:53:38.02ID:??? 脱オラクルはテクニカルな問題はあまり問題視されていないような 0686NAME IS NULL2023/01/21(土) 02:52:45.82ID:??? そりゃいまどき特定のDBMS(ORACLE)でしか使えないような機能とか、そうそうないからな 0687NAME IS NULL2023/01/21(土) 15:36:12.78ID:W/7tJ9Sa>>686 はあ? 0688NAME IS NULL2023/01/21(土) 15:37:29.54ID:W/7tJ9Sa>>686 DBMSの選定で機能比較をしたことがあるのか? ないからそんなことが言える。 0689NAME IS NULL2023/01/21(土) 21:00:31.30ID:??? Oracle だけじゃないけど SQL-Server 使ってると order by ~ nulls first は欲しいと思う 逆にちょっとした値を直書きしたい時に Oracle だと select ~ from (VALUES (1, 'one'), (2, 'two'), (3, 'three')) as t (num,letter); ってできないのが不満だわ 0690NAME IS NULL2023/01/21(土) 23:12:57.75ID:W/7tJ9Sa>>689 SQL Serverは文字の照合順序が指定できる。
そうしなくてもUNION ALLでNULLレコードを最初に持ってくるか最後に持ってくるかをSELECT文で指定できる。 0691NAME IS NULL2023/01/21(土) 23:19:08.33ID:W/7tJ9Sa>>689 ORDER BYの仕様は、OracleDBがNULLをNULL値と定義したおかげ。
キャラクタセットと文字の照合順序をORDER BYに絡ませた他のRBDMSは、性能を優先したせいで面倒な比較条件、ソート条件が仕様として残ってしまった。 0692NAME IS NULL2023/01/23(月) 20:24:57.70ID:???>>689 order by のNULLの順序は確かに指定したいときはままあるんだが、 ソートしたい項目にNULLが入ってる段階で設計間違ってる気がしないでもない
>>690-691 NULLは別に文字に限った話じゃないんだが? ちなみに >UNION ALLでNULLレコードを最初に持ってくるか最後に持ってくるかをSELECT文で指定できる。 これどうやるんだ?NULLレコードってなんだ? 0693NAME IS NULL2023/01/23(月) 20:36:47.29ID:???>>692 > ソートしたい項目にNULLが入ってる段階で設計間違ってる気がしないでもない left join の結果とかで null をどっちかに寄せたいとか
・データ ID 巻数 タイトル 1 第1巻 あいうえお 2 第2巻 かきくけこ 3 第3巻 さしすせそ ------------ このテーブルでInsert文作りたいのですが、 ID、Numberが+1ずつしていく場合、タイトル以外を自動加算させる書き方ってありますか? ------------ Insert Into テーブル (ID,Number,Title) Select MAX(ID)+1, 第???回, たちつてと From テーブル ------------ この 第???回 がわからず。。 0695NAME IS NULL2023/01/24(火) 01:03:41.31ID:CDmns3ou>>692 ソートしたカラムにNULLのレコードがあると彼は言っている。
select aaa from abc where aaa = b and aaa is not null order by aaa union all select aaa from abc where aaa = b and aaa is null; 0696NAME IS NULL2023/01/24(火) 01:04:41.14ID:CDmns3ou>>694 PL/SQLでやればいい 0697NAME IS NULL2023/01/24(火) 01:06:05.17ID:CDmns3ou>>694 select max(id) だけでも破綻しているぞ? 0698NAME IS NULL2023/01/24(火) 11:44:08.22ID:???>>695 そのSQL通るのか? すくなくともSQL Serverではunionに指定できるorder byは最後に指定して全体に適用されるものだけのはずだが サブクエリでTopとか使うなら個別のorder byは有効かもしれんが unionした結果の行の順番は(全体としてのorder byがなければ)保証されないと思うが
ORACLEならそれで全体の順序が保証されるってなら、根拠となる資料教えてくれ 0699NAME IS NULL2023/01/24(火) 13:01:51.57ID:??? 保証されるわけない ちなみにオラクルでは個別のorder byも書けない 0700NAME IS NULL2023/01/25(水) 00:21:18.55ID:???>>694 INSERT INTO ~ SELECT MAX(ID) + 1 …の形だと同時実行されたらダメじゃね? 他のDBMSと違ってオラクルだとSERIALIZABLEでもwrite skewが発生する 0701NAME IS NULL2023/01/25(水) 13:44:05.91ID:???>>700 さすがにSERIALIZABLEでそんなことが起こったらダメだろうと思うんだが WikiのSnapshot isolation のとこ見ると >Oracle は snapshot isolation のことを "serializable" と呼んでいる って書いてあるな
今回の例なら素直にシーケンス使えで良いかもしれんが トランザクション設計ちょっと考えんといかんな
どおりでみんなやたらにfor update書くわけだ 0702NAME IS NULL2023/01/25(水) 15:22:11.85ID:??? オラクルでgap freeなシーケンスって存在する? 0703NAME IS NULL2023/01/25(水) 17:59:27.93ID:???>>700 同時実行とか関係なく単にデータを生成したいだけかもしれない 0704NAME IS NULL2023/01/25(水) 23:07:49.88ID:YToOJ4zV>>698 unionとunion allはまったく別物 0705NAME IS NULL2023/01/25(水) 23:18:07.37ID:YToOJ4zV>>698 select句に対して、ひとつのorder by句が対応するという構文の仕様があるが、select文のfrom指定をインライビュー(副問い合わせ)にすれば問題ない。
副問い合わせは、現在ではあたりまえの拡張構文だけど、古い仕様があるから、わさわざ2段階にしないといけないだけ。 0718NAME IS NULL2023/01/26(木) 14:45:43.06ID:0ZdAuIEw>>716 製品マニュアルのSELECT文の構文部分を読め 難しいだろうから、しばらくは暇つぶしになるだろう。 0719NAME IS NULL2023/01/26(木) 14:49:05.23ID:0ZdAuIEw>>716 まずは冷静に読みなさい。 間違えたもの訂正したから、訂正部分をスルーしたのは私の書き方が悪いのもあるが、特定厨のくせにちゃんと見てないあなた様をちょっとおかしい。 0720NAME IS NULL2023/01/26(木) 14:52:21.72ID:0ZdAuIEw このスレは機能不全になったな。 データベース板はどのスレも書き込みがあると、他人の書き込みのアラ探しをする無職がいるようだ。
OTNの掲示板が機能していた時代でも、ネットで質問して返ってくる内容なんて変なのばかりだったぞ。
匿名をいいことに他人の書き込みをいちいちギャーギャー言うのは、本当にタチが悪い。 0721NAME IS NULL2023/01/26(木) 15:11:59.93ID:???>>718-719 ドヤ顔で頓珍漢なトランザクションのURL示せるんならselectの説明してるURL示せよ 0722NAME IS NULL2023/01/26(木) 15:22:22.59ID:0ZdAuIEw 最初に言った人がORDER BYでNULLを最初か最後かに指定できないと言ったのを、そういう仕様だったかなと思ったしまっていた
よく考えたら、OracleDBでもちゃんとNULLの並び順の指定方法があることを思い出したよ。
ORDER BY句に下記のものを書けば、NULLのカラムが最後にくるか、最初にくるか指定できる
NULLS LAST NULLS FIRST 0723NAME IS NULL2023/01/26(木) 15:27:44.63ID:???>>717 >select文のfrom指定をインライビュー(副問い合わせ)にすれば問題ない。 つまり>>695のSQLは間違ってるんだな じゃあまず正しいSQL示せ
その上で副問い合わせで指定した順序が最終の結果セットで保持されている根拠を示せ? 0724NAME IS NULL2023/01/26(木) 15:29:45.58ID:0ZdAuIEw>>723 インラインビュー内のSELECT文のソートは標準SQLで決まっているので、OracleDB固有の仕様ではない。
まあ >ネットで質問して返ってくる内容なんて変なのばかり そう思うならお前は回答するな 0727NAME IS NULL2023/01/26(木) 15:34:10.33ID:0ZdAuIEw ああそう 0728NAME IS NULL2023/01/26(木) 15:34:46.93ID:???>>722 >SQL-Server 使ってると order by 〜 nulls first は欲しいと思う に対して >UNION ALLでNULLレコードを最初に持ってくるか最後に持ってくるかをSELECT文で指定できる。 って解答がそもそもの発端なんだが、これお前の発言じゃないのか? 0729NAME IS NULL2023/01/26(木) 15:35:16.15ID:0ZdAuIEw>>726 データベース板は過疎板なんだけどな 0730NAME IS NULL2023/01/26(木) 15:36:44.39ID:0ZdAuIEw>>728 そうだったね。勘違いした。
Oracle だけじゃないけど SQL-Server 使ってると order by ~ nulls first は欲しいと思う 逆にちょっとした値を直書きしたい時に Oracle だと select ~ from (VALUES (1, 'one'), (2, 'two'), (3, 'three')) as t (num,letter); ってできないのが不満だわ 0731NAME IS NULL2023/01/26(木) 15:40:38.39ID:???>>724 標準SQLではインラインビューにORDER BYは書けなかったはずだが ちなみに、どのレベルの標準SQLだ? 標準SQLの規格書手元にないから、書けるって根拠があるなら教えて 0732NAME IS NULL2023/01/26(木) 15:41:35.97ID:0ZdAuIEw>>728 SQL Serverの場合はunion allするselect文のfrom句に副問い合わせのselectでorder byができる。