SQLなら俺に訊け [無断転載禁止]©2ch.net (457レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

250
(1): デフォルトの名無しさん [sage] 2024/04/15(月) 11:17:52.57 ID:fSSptXgn(1/5) AAS
>>249
249(2): デフォルトの名無しさん [sage] 2024/04/15(月) 01:05:12.02 ID:3rGFgNqt(1) AAS
入門レベルです
環境はsqliteをsqlite3 CLIを通して使ってます

expr(式)を評価して簡易に値を確かめる方法はあったりしませんかね?
目的は学習目的の挙動把握実験と切り分けデバッグです、例えば'foo' LIKE 'f_%'とかそんなやつを試したい

sqlで実行できるのはstmt(文)のみなので、今のところexprを受け付ける何らかのstmt(文)に組み込み、その結果から値を間接的に類推してます
類推するにせよ、そもそもstmt毎に固有の意味論があるゆえ、一貫した振る舞いも得られず
なかなかしんどいです…

それっぽいCLIコマンドの.printも、シグネチャが.print STRING+なのでexpr評価がされませんし
> %  0文字以上の任意の文字列
> _ 任意の1文字
> [^] 除外
> 外部リンク:techmania.jp
正規表現と違い、これだけしかないのに要らないだろ。
お前は 1+1 と打って 2 と出る環境がないと死ぬ人か?

(昨今の文系馬鹿が流入してきてる)プログラミングでは、意味のないところに拘って時間を浪費する奴は多々居る。
お前もこれで、この程度なら読んだ瞬間分かるし、
(勘違いや見落としとかではなく)ガチで 'f_%' が 'foo' に一致するか分からないようならプログラミングを止めた方がいい。
普通なら、というか、自分で作りたい物があってSQLを使おうとしてる奴なら、こんなの読んだ瞬間に「はい分かった、次」でしかない。

初学者向けに環境を整備したいのであれば、インタラクティブ環境を整備する意味は大きいが、お前はそうではないのだろ。
それでも試したければ、所詮は正規表現の下位互換、どころかゴミ程度でしかないので、ブラウザでF12押してコンソールに
'foo'.search(new RegExp('f_%'.replace(/_/g,'.').replace(/%/g,'.*')))!==-1
とでも打てばいいだろうよ。でもこれもお前にとっては余計な回り道でしかないから、とっとと進むべきだと思うがな。
254
(1): デフォルトの名無しさん [sage] 2024/04/15(月) 13:34:40.60 ID:fSSptXgn(2/5) AAS
>>251
251(2): デフォルトの名無しさん [sage] 2024/04/15(月) 12:03:59.29 ID:YG3lrvG/(1/3) AAS
>>250
やはり標準環境には無さそうな感じですか

LIKEはexprの一番簡単な例としてです
実際のところC系等の一般用途のプログラミング言語と比べてsqlのexpr文法って異常に複雑じゃありません?
外部リンク[html]:sqlite.org

ASTも印字して欲しいくらいだけど、自分でパーサ書いてみるのも勉強になりそうですね
> やはり標準環境には無さそうな感じですか
実際要らんしね。SQLがCLIから打てるのだから普通はそれで十分。(普通は=使う人にとっては)
PHPer連中はphpLiteAdminという、SQLがWebから打てる奴を使ってるようだが、動作レベルはCLIと同じでSQLだね。

> sqlのexpr文法って異常に複雑じゃありません?
さあ知らん.。というか俺は使う人であって、環境を構築する人ではないので、
ASTとか使ったこと無いし、yacc/lex/bisonあたりは触ったことが無い。
SQLも基本俺がコードに直接書く程度で、コード上でSQLを自動生成しようとはしたことは無いので分からん。
ただ、目がすべる=SQLの区切りがよく分からん、という感じにはならなかった気がする。カッコ使えで終わるし。

方針として「あらゆる道草を食い、遠回りしてるうちに、全体的な力が養える」という考えの奴もいるが、
今やることがあるなら変なところに拘らず先に進んで実装して行ったほうがいいと思うぜ。
その先にもどのみちハードルはあるのだから、同様に学んではいけ、目標実現に直接近づける。

> ASTも印字して欲しいくらいだけど、自分でパーサ書いてみるのも勉強になりそうですね
ちなみにASTに関心があるのなら、Goの方がいい。あれは標準でAST木を吐ける。
あと、パーサも作るのは自由だが、SQLについては公開された仕様書がなかったはず。
SQL92なら特許は切れてるはずなのだけど。
それから、もうやってるだろうがexplainコマンドでクエリプランを出せる。ASTでは無いが、まあ似たようなものではあるだろう。
258
(1): デフォルトの名無しさん [sage] 2024/04/15(月) 14:34:25.57 ID:fSSptXgn(3/5) AAS
>>256
256(1): デフォルトの名無しさん [sage] 2024/04/15(月) 14:07:24.63 ID:YG3lrvG/(3/3) AAS
>>254
忠告どうも
たまたまSQLという'言語'が面白そうで規格までしっかりある良さそうなもので意欲を得ました
もしこのSQL'言語'が肌に合わなかったならば、プログラミング言語同梱のリレーショナルデータベースAPIへロールバックするでしょう
私の主眼はスレタイ通りSQLにあります
そりゃ規格はあるよ。
ただ無料では仕様書が手に入らないらしい。勿論買えば済むらしいが。

> プログラミング言語同梱のリレーショナルデータベースAPI
てかこれ何ぞ?Oracleのことか?
そもそもDB使ってきててSQL知ラネ、ってのがかなり意味不明なのだが。
ORMの事なら、ぶっちゃけORMで済むのならORMでやるべきだと思うよ。
むしろ今時SQL手打ちか?とも言われてるはずだし。
(AccessとかでもクエリビルダーでSQLを作成してて、SQL自体をプログラマが打ち込む必要はなかったはず)
262
(1): デフォルトの名無しさん [sage] 2024/04/15(月) 16:47:19.47 ID:fSSptXgn(4/5) AAS
むう?なんか書き込み失敗して内容も失ったが、覚えてる範囲でもう一度書く。
復活して同様の物が連投されてたらご容赦を。

>>259-260
LINQはSQL風にC#を書ける物で、C#のArrayに対してSQLを発行できるものではなかったと思ったが違ったか?
俺は後者だと思ってたが前者だったので絶望した。あれが有用になる局面がよく分からん。

俺が希望してたLINQ:
.NETのStreamクラスが匿名パイプ/ネットワークストリーム/ファイルの抽象クラスのように、
.NETのArrayや各種DBに対してSQLを発行できるもの
(つまり、接続先がDBなら通常通り、接続先をArrayにすればオンメモリDBとして、同一コードで一文字も変更なく動く物)

実際のLINQ:
for文を書きたくないでござる、だけのクソったれ

俺はあくまでSQLでDB管理する前提で、LINQが何らかのラッパを提供するものだと思ってた。
だから実際のLINQ見て使えねえと判断したが、全く違う方法でDB管理するのかあれは?
俺は勝手に、SQL書けるがC#書けない奴をC#側の戦力として取り込む文法かと思ってたが。

が、まあ、
> プログラミング言語同梱のリレーショナルデータベースAPI
がLINQ等を指すのはわかった。そして ID:YG3lrvG/ の書き込みを読み直すと、
もしかして自前でSQLインタフェース提供しようとしてる?
ならそれは諦めて、DBをPostgreSQL等に移行するほうが妥当だと思うぜ。
264: デフォルトの名無しさん [sage] 2024/04/15(月) 19:25:10.27 ID:fSSptXgn(5/5) AAS
>>263
263(1): デフォルトの名無しさん [sage] 2024/04/15(月) 18:29:06.40 ID:x2iyd0ju(1) AAS
>>262
めっちゃくちゃ基本的なこともわかってないからまずは公式チュートリアル的なのを読んだほうがいい
LINQ to ObjectとLINQ to SQL/DataSet/Entitiesの区別くらいは最低限つくようにしてくれ
なるほど俺が糞だと思ってたのはLINQ to Objectなのは分かった。
そして俺の思惑とは違い、MSはSQL対象のほうをラップしてるわけか。
俺的希望仕様ならLINQはリテラルか引数で無ければならず、ハードコードベタ書きとか意味不明だったが、
まあこれなら分からんでも無い。

が、そもそもこれはSQLが無駄に方言が増えすぎてたからMSもLINQというSQLモドキを実装しただけの気がするが。
それでもDOMだXPATHだとやるよりはLINQだけで済む方がいいのは確かだが、
ある意味新たなMSSQL方言を生み出しただけの気も。
そしてOracleもSQL方言だとは聞いてるし、やっぱRDB弄っててSQL知ラネ、ってのはよく分からない。
KVSならSQL関係ないが、そういう感じではなさそうだし。まあいいけどね。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.467s*