アカウント名:
パスワード:
SQLはクソ言語だし、今さら互換性を維持して色々するのは悪手だとは思う。まぁみんな使えるから価値はあるかな。が、現代風にクエリ言語を再設計するならどうすればいいだろうか。
データベース側の処理を考えるとJsonやらXMLやらで命令文が記述できた方が処理しやすいだろうがさすがにそれは人間側が困る。各言語側でJavaのStreamやC#のLinq的な何かを実装するとして問い合わせは機械処理しやすい言語ってのもありかもな(現在もだけど名前を微妙に変えたりせずAPIは統一してほしい)。あんまり高度で表現性が高いとキャッシュやら高速化やらで困るのは目に見えてるのも難点。
とりあえずいろんなデータで扱えるクエリ言語ってのは便利かもしれないな。良い普及したのがあればJavaScriptで標準で使えるようになりそうで便利な感じ。XMLならXPathあたりが…近いようで全然違うな。
伺いたいのですが、SQLってどの辺がクソ言語ですかね?
いや、基本のSQL構文に各DBが好き勝手に色々やっててごちゃごちゃしてるのはありますが、データの取り扱いにおいて、シンプルな実装だと思ってるので。
まあ、もう少し記号等でシンプルに表記できたりしてもいい気もしますが、自分も大分慣らされちゃったってことなのかな。
とりあえず語順。fromを先にしてくれれば…。
あとプログラム方面に振れるけど、一つ前のデータを使って計算したいとか度々あるので簡単に使用できる構文なり関数なり欲しい。サブクエリ作って行番号発行すればできるけど面倒。
語順は、「普通の英語の構文」っぽいんですよね。Select [columns] from [Table]とUpdate [Table] set はたしかに昔よく間違えたかも。で、UpdateとInsertの文法も、まあ違う。
英語だと考えれば、やりたいことが一番前に来るのはナチュラルだと思うんですよね。で、やりたいことの対象が目的語として次にくる。
どうしても語順に馴染めない場合、配列やら構造体やらで事前にデータセット作って、SQL文は手で書かないような工夫をしたり、なんてのもいいかもです。(なんかこんな事言うとクソ言語を認めるみたいになってますが)
「一つ前のデータ」のイメージがはっきり湧きませんが、DBって、データの順序とか気にして(保証されて)格納されてないイメージですけどね。(そういう開発したことないだけかな・・・)
前後の行と連携させた処理の場合、AWKっぽい発想になっちゃいますね、自分は。
> 語順は、「普通の英語の構文」っぽいんですよね。
普通の英語って、否定形の疑問に対する解答が「Is't it? → No. 」だろ?コンピュータで扱う文法として不適切な言語だよ。
というか fromが先じゃないせいでクエリエディタの補完ができないのがクソだわ。
> コンピュータで扱う文法として不適切な言語だよ。まったくです。
「語順や文法が自然言語っぽい」というのは、コンピュータで扱う言語としては欠陥でしかない。
サブルーチンなどが記述しにくく(できない?)、入れ子構造が巨大化し易いなどの問題もあるかも。#細かいことをいうなら、「DELETEでWHEREを忘れると……」というのはなんとかしてほしかった。
ところで、SQLできちんとオートインデントが機能するエディタってありますか?それが実現しにくい(或いは不可能)だというのも、問題と言えば問題なアア.
>ところで、SQLできちんとオートインデントが機能するエディタってありますか?>それが実現しにくい(或いは不可能)だというのも、問題と言えば問題なアア.
クエリ書いて実行してくれるようなツールだと大抵補完してくれますよ。DB繫いでる前提ですが。
補完したかったらselect * from xxxx as aみたいにまず書いてから直してけばselectの後ろも保管してくれます。
> 補完したかったらselect * from xxxx as aみたいにまず書いてから直してけばselectの後ろも保管してくれます。
多分、補完について書いてる奴はだいたいわかってると思うよ
それが構造的欠陥だって話なんだよなぁ前から書いて補完が素直に効くほうが合理的じゃん
> 前から書いて補完が素直に効くほうが合理的
この主張は正しいけど、欠陥というほどでもないかな。query書くときはどうしてもfrom以降の内容 (whereとかgroup byとかjoinとか) に注意が行ってるから、とりあえず select * from まで書くのをすでに手が覚えてるし。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日本発のオープンソースソフトウェアは42件 -- ある官僚
SQLねぇ (スコア:0)
SQLはクソ言語だし、今さら互換性を維持して色々するのは悪手だとは思う。
まぁみんな使えるから価値はあるかな。
が、現代風にクエリ言語を再設計するならどうすればいいだろうか。
データベース側の処理を考えるとJsonやらXMLやらで命令文が記述できた方が処理しやすいだろうがさすがにそれは人間側が困る。
各言語側でJavaのStreamやC#のLinq的な何かを実装するとして問い合わせは機械処理しやすい言語ってのもありかもな(現在もだけど名前を微妙に変えたりせずAPIは統一してほしい)。
あんまり高度で表現性が高いとキャッシュやら高速化やらで困るのは目に見えてるのも難点。
とりあえずいろんなデータで扱えるクエリ言語ってのは便利かもしれないな。
良い普及したのがあればJavaScriptで標準で使えるようになりそうで便利な感じ。
XMLならXPathあたりが…近いようで全然違うな。
Re: (スコア:2)
伺いたいのですが、SQLってどの辺がクソ言語ですかね?
いや、基本のSQL構文に各DBが好き勝手に色々やっててごちゃごちゃしてるのはありますが、
データの取り扱いにおいて、シンプルな実装だと思ってるので。
まあ、もう少し記号等でシンプルに表記できたりしてもいい気もしますが、自分も大分慣らされちゃったってことなのかな。
Re: (スコア:0)
とりあえず語順。fromを先にしてくれれば…。
あとプログラム方面に振れるけど、一つ前のデータを使って計算したいとか度々あるので簡単に使用できる構文なり関数なり欲しい。
サブクエリ作って行番号発行すればできるけど面倒。
Re: (スコア:4, 参考になる)
語順は、「普通の英語の構文」っぽいんですよね。
Select [columns] from [Table]とUpdate [Table] set はたしかに昔よく間違えたかも。
で、UpdateとInsertの文法も、まあ違う。
英語だと考えれば、やりたいことが一番前に来るのはナチュラルだと思うんですよね。
で、やりたいことの対象が目的語として次にくる。
どうしても語順に馴染めない場合、配列やら構造体やらで事前にデータセット作って、SQL文は手で書かないような工夫をしたり、なんてのもいいかもです。
(なんかこんな事言うとクソ言語を認めるみたいになってますが)
「一つ前のデータ」のイメージがはっきり湧きませんが、DBって、データの順序とか気にして(保証されて)格納されてないイメージですけどね。(そういう開発したことないだけかな・・・)
前後の行と連携させた処理の場合、AWKっぽい発想になっちゃいますね、自分は。
Re: (スコア:0)
> 語順は、「普通の英語の構文」っぽいんですよね。
普通の英語って、
否定形の疑問に対する解答が「Is't it? → No. 」だろ?
コンピュータで扱う文法として不適切な言語だよ。
というか fromが先じゃないせいでクエリエディタの補完ができないのがクソだわ。
Re: (スコア:0)
> コンピュータで扱う文法として不適切な言語だよ。
まったくです。
「語順や文法が自然言語っぽい」というのは、
コンピュータで扱う言語としては欠陥でしかない。
サブルーチンなどが記述しにくく(できない?)、入れ子構造が巨大化し易いなどの問題もあるかも。
#細かいことをいうなら、「DELETEでWHEREを忘れると……」というのはなんとかしてほしかった。
ところで、SQLできちんとオートインデントが機能するエディタってありますか?
それが実現しにくい(或いは不可能)だというのも、問題と言えば問題なアア.
Re: (スコア:0)
>ところで、SQLできちんとオートインデントが機能するエディタってありますか?
>それが実現しにくい(或いは不可能)だというのも、問題と言えば問題なアア.
クエリ書いて実行してくれるようなツールだと大抵補完してくれますよ。
DB繫いでる前提ですが。
補完したかったらselect * from xxxx as aみたいにまず書いてから直してけばselectの後ろも保管してくれます。
Re:SQLねぇ (スコア:0)
> 補完したかったらselect * from xxxx as aみたいにまず書いてから直してけばselectの後ろも保管してくれます。
多分、補完について書いてる奴はだいたいわかってると思うよ
それが構造的欠陥だって話なんだよなぁ
前から書いて補完が素直に効くほうが合理的じゃん
Re: (スコア:0)
> 前から書いて補完が素直に効くほうが合理的
この主張は正しいけど、欠陥というほどでもないかな。query書くときはどうしてもfrom以降の内容 (whereとかgroup byとかjoinとか) に注意が行ってるから、とりあえず select * from まで書くのをすでに手が覚えてるし。