SQLなら俺に訊け
- 1 :デフォルトの名無しさん:2017/07/14(金) 07:40:53.63 ID:HFjsarQi.net
- さあ
- 219 :デフォルトの名無しさん:2022/07/25(月) 22:10:59.17 ID:bIl9FMxT.net
- SQLで急にファイル出力とか言われても何のこっちゃ分からんわ
シェルスクリプトで普通にappendでもしろや
- 220 :デフォルトの名無しさん:2022/07/28(木) 20:47:41.93 ID:oYIQQ6EM.net
- ネタに反応すんな
- 221 :デフォルトの名無しさん:2022/11/10(木) 10:38:00.26 ID:5Ugvs3e+.net
- explain analyzeを付けると1秒、付けないと30秒かかるクエリがあるのですが一般的には何が原因なのでしょうか
- 222 :デフォルトの名無しさん:2022/11/10(木) 12:15:12.96 ID:8Ccihq77.net
- >>221
両方同じようにクエリが実行されてるのなら
結果セットの転送コストがめちゃくちゃ大きいんじゃないの?
- 223 :デフォルトの名無しさん:2022/11/17(木) 10:16:58.88 ID:gy0rtS5S.net
- SQL Server 2022 正式リリース(米国11/16日)
MSDNダウンロードサイトでDeveloper EditionのISOリリースを確認
- 224 :デフォルトの名無しさん:2023/02/12(日) 18:13:43.26 ID:fJXtAG7P.net
- phpMyAdmin使ってます。
型が合わないデータの入力があったとき、
拒否するか、無理やりデフォルトの値を登録するか。
それを設定するコンパネとかありますか?
- 225 :デフォルトの名無しさん:2023/08/25(金) 10:09:06.20 ID:AK+z9ndV.net
- ストアドプロシージャって初心者用解説サイトとかで戻り値のない関数って言われてるけど普通にRETURNできるやん
歴史的な背景でもあるんか
それとも解説者か俺があほなんか
- 226 :デフォルトの名無しさん:2023/08/25(金) 14:00:50.18 ID:5+gJach+.net
- 論理演算が弱すぎる
- 227 :デフォルトの名無しさん:2023/08/25(金) 18:18:42.69 ID:DhQDvuMa.net
- >>225
一部のDBMSの古いバージョンではOUT/INOUT引数を使わないと値を返せなかったんだよ
- 228 :デフォルトの名無しさん:2023/08/30(水) 22:18:57.94 ID:+4EyrP3p.net
- >>4
全列nullでも?
- 229 :デフォルトの名無しさん:2023/08/31(木) 14:07:47.09 ID:nrSGXsFq.net
- >>225
それはファンクション(関数)とストアドプロシージャの違いがあまりないDBMSの場合
- 230 :デフォルトの名無しさん:2023/08/31(木) 14:16:19.77 ID:nrSGXsFq.net
- ファンクションは戻り値があるプロシージャという意味
- 231 :デフォルトの名無しさん:2023/08/31(木) 14:31:41.51 ID:6hJq0gPI.net
- 違う
それは特定ベンダーの勝手な解釈
- 232 :デフォルトの名無しさん:2023/08/31(木) 15:20:59.08 ID:nrSGXsFq.net
- 元はユーザー定義関数
- 233 :デフォルトの名無しさん:2023/08/31(木) 15:26:10.21 ID:nrSGXsFq.net
- VBもAda言語もそうだけど、ファンクションプロシージャとサブプロシージャをわけているのは、プログラミング言語ではめずらしくない。
C言語、C言語に影響を受けた言語だと、わざわざ戻り値なしをvoidと書いて明確にする。
ファンクションは戻り値を利用するもの。戻り値を呼び出し側が無視できる仕様かどうかの問題。
- 234 :デフォルトの名無しさん:2023/08/31(木) 16:29:25.54 ID:JttiXEFt.net
- SQL標準的にはプロシージャに戻り値があるかどうかはimplementation defined
戻り値があったほうが便利なので多くのDBMSベンダーはscalar valueとresult setのどちらも返せるようにしてる
一方(ストアド)ファンクションはSQL標準で戻り値が必須でscalar valueのみと定められている
プログラミング言語でファンクションとプロシージャを区別してたのは太古の昔の話
今ではもうそんな区別に価値はなくなってる
SQL標準で区別されてるのは利用方法や利用する場所が基本的に違うため
- 235 :デフォルトの名無しさん:2023/08/31(木) 16:31:16.87 ID:nbJL0Jax.net
- MySQL系はファンクションだと、COMMITなどのトランザクション制御ができないので、あまり考えずにファンクションで統一などしてはならない。
- 236 :デフォルトの名無しさん:2023/08/31(木) 16:41:03.73 ID:nbJL0Jax.net
- >>234
前半と後半で違う説明をしているね。
ファンクションは「関数」だ。
OUTパラメータを参照するのは「手続き」という処理だ。
プロシージャで戻り値とOUTパラメータを返す場合は、ちゃんと仕様書がないとわけのわからないものになる。
- 237 :デフォルトの名無しさん:2023/08/31(木) 18:27:10.59 ID:ZhVoPqIG.net
- なんだこの中身のないアホなレスはw
- 238 :デフォルトの名無しさん:2023/08/31(木) 23:06:43.05 ID:smxtGdye.net
- そもそも、DBMSの指定や前提もなく
>ストアドプロシージャって初心者用解説サイトとかで戻り値のない関数
とか書いてあるなら、そのサイトに問題があるだけの話
まあ、ちゃんと前提を読んでないか理解してない読み手の問題の可能性もあるが
- 239 :デフォルトの名無しさん:2023/09/01(金) 20:37:48.72 ID:5C0TsKNS.net
- 関数やプロシージャのことを「メソッド」と書いている書籍もあるくらいだからな。勝手な名前をつけるやつはたくさんいる。
- 240 :デフォルトの名無しさん:2023/09/01(金) 23:32:50.20 ID:OZcoXz6r.net
- ざっくり言うと
ファンクションは1つのSQL文の中でSELECT句やWHERE句などの一部として繰り返し利用する機能を定義したもの
プロシージャはSQL文を使ったひとまとめの処理をSQL文の一部としてではなく外部から繰り返し呼び出せるように定義したもの
これが最も根本的な違い
ファンクションでトランザクション制御しようと考えてしまったりデータベースを更新しようと考えてしまう人はこの根本的違いを理解してない
- 241 :デフォルトの名無しさん:2023/09/02(土) 22:12:45.21 ID:9Zs5bzSj.net
- そもそもプロシージャは手続きという処理という意味で、ファンクション(関数)は機能という結果を返す処理の意味。
- 242 :デフォルトの名無しさん:2023/09/02(土) 23:45:29.35 ID:xVr9+q3l.net
- 全然違う
またいい加減なことを言って振り出しに戻すのやめろ
- 243 :デフォルトの名無しさん:2023/09/16(土) 22:45:43.61 ID:S29731mD.net
- 数学がわからないんだろ
- 244 :デフォルトの名無しさん:2023/09/16(土) 22:48:52.44 ID:S29731mD.net
- ファンクションプロシージャは結果を戻り値で返す
サブプロシージャはOUTパラメータ(引数)で返す
SQLの関数は関数(ファンクションプロシージャ)で実装しないとSQLの構文が破綻する
- 245 :デフォルトの名無しさん:2023/09/16(土) 22:55:55.12 ID:S29731mD.net
- >>242
だから、オラクル社はAda言語をそのまま流用しただけだよ。
ANSIはファンクションの方を先に標準SQLに組み込んだだけ。
ファンクションとサブを区別しているかどうかは、Ada言語を踏襲しているかどうかの違い。
C言語のように戻り値を無視する構文がいいのか悪いのかという話だよ。
- 246 :デフォルトの名無しさん:2023/09/17(日) 13:55:16.79 ID:I/olJ+Ch.net
- perl の戻り値の仕組みは面白いと思ったのは古い思い出
- 247 :デフォルトの名無しさん:2023/09/17(日) 23:44:17.06 ID:70jB6wMR.net
- noSQLのスレはないの
オブジェクト指向データベースとかはsql使うのかな
- 248 :デフォルトの名無しさん:2023/09/18(月) 11:28:48.80 ID:+ud3D/1q.net
- noSQLスレは以前はあった
- 249 :デフォルトの名無しさん:2023/10/06(金) 19:29:28.75 ID:Oy8bZUfG.net
- >>247
データベース板を忘れないでください
- 250 :デフォルトの名無しさん:2024/02/29(木) 15:04:09.68 ID:YOT99MGOL
- 地球破壞テ□リスト自閉隊か゛ADS-Bも出さずにCH-47やら都心付近までクソ爆音航空機飛ばしまくって低周波騷音被害を引き起こしてるな
内心民間人に中指立ててる自閉隊とは國民の生命と財産を守る存在ではなく税金泥棒しなか゛ら莫大な温室効果カ゛スまき散らして
物価暴騰させて住民の権利を強奪して氣侯変動させて災害連發させて國土まで破壞して私腹を肥やすテロリストの典型た゛からな
戦爭前のウクラヰナの軍事予算はGDP比4%以上あったわけた゛し軍のク‐デターによって政権掌握されたミャンマ‐はGDP比2%台
徴兵して拒否すれば犬コ□公務員に制圧させて殺害可能な社会にしようとしてるのが岸田異次元増税憲法ガン無視地球破壞霸権主義文雄
真の防衛として利権を貪って税金泥棒して地球破壊して私権侵害して私腹を肥やすだけの人類に湧いた害虫クソ公務員を全滅させて
−刻も早く拳銃、スティンカ゛一,手榴弾を新≡種の神器にしないとお前らウクラヰナやロシアの逃亡民みたいな目に合うそ゛
ちなみにと゛ちらも逃亡民は国境警備兵に逮捕されて最前線に送られとるわ
(ref.) ttps://www.call4.jp/info.php?type=items&id=I0000062
ttps://haneda-project.jimdofree.com/ , ttps://flight-route.com/
ttps://n-souonhigaisosyoudan.amebaownd.com/
- 251 :デフォルトの名無しさん:2024/04/15(月) 01:05:12.02 ID:3rGFgNqt.net
- 入門レベルです
環境はsqliteをsqlite3 CLIを通して使ってます
expr(式)を評価して簡易に値を確かめる方法はあったりしませんかね?
目的は学習目的の挙動把握実験と切り分けデバッグです、例えば'foo' LIKE 'f_%'とかそんなやつを試したい
sqlで実行できるのはstmt(文)のみなので、今のところexprを受け付ける何らかのstmt(文)に組み込み、その結果から値を間接的に類推してます
類推するにせよ、そもそもstmt毎に固有の意味論があるゆえ、一貫した振る舞いも得られず
なかなかしんどいです…
それっぽいCLIコマンドの.printも、シグネチャが.print STRING+なのでexpr評価がされませんし
- 252 :デフォルトの名無しさん:2024/04/15(月) 11:17:52.57 ID:fSSptXgn.net
- >>251
> % 0文字以上の任意の文字列
> _ 任意の1文字
> [^] 除外
> https://techmania.jp/blog/sql-like/
正規表現と違い、これだけしかないのに要らないだろ。
お前は 1+1 と打って 2 と出る環境がないと死ぬ人か?
(昨今の文系馬鹿が流入してきてる)プログラミングでは、意味のないところに拘って時間を浪費する奴は多々居る。
お前もこれで、この程度なら読んだ瞬間分かるし、
(勘違いや見落としとかではなく)ガチで 'f_%' が 'foo' に一致するか分からないようならプログラミングを止めた方がいい。
普通なら、というか、自分で作りたい物があってSQLを使おうとしてる奴なら、こんなの読んだ瞬間に「はい分かった、次」でしかない。
初学者向けに環境を整備したいのであれば、インタラクティブ環境を整備する意味は大きいが、お前はそうではないのだろ。
それでも試したければ、所詮は正規表現の下位互換、どころかゴミ程度でしかないので、ブラウザでF12押してコンソールに
'foo'.search(new RegExp('f_%'.replace(/_/g,'.').replace(/%/g,'.*')))!==-1
とでも打てばいいだろうよ。でもこれもお前にとっては余計な回り道でしかないから、とっとと進むべきだと思うがな。
- 253 :デフォルトの名無しさん:2024/04/15(月) 12:03:59.29 ID:YG3lrvG/.net
- >>252
やはり標準環境には無さそうな感じですか
LIKEはexprの一番簡単な例としてです
実際のところC系等の一般用途のプログラミング言語と比べてsqlのexpr文法って異常に複雑じゃありません?
https://sqlite.org/lang_expr.html
ASTも印字して欲しいくらいだけど、自分でパーサ書いてみるのも勉強になりそうですね
- 254 :デフォルトの名無しさん:2024/04/15(月) 12:45:09.95 ID:cLz3iDP/.net
- 普通の言語はstmtの構成要素としてexprが設けられるが、sqlでは逆にexprの中にstmtも入り得る異色の設計だから、exprサブセットのみの評価機は作れないね
まあstmtの評価は単にモックとして構文木を組んでみれば目的には適うし良い勉強になる
区切り文字をあまり使わないSQLは初学者には目に滑る構文だから特にそう
- 255 :デフォルトの名無しさん:2024/04/15(月) 12:57:20.78 ID:cLz3iDP/.net
- >>253
評価の確認はおとなしくSQLiteに投げて、構文解析慣れてるようだし見本はこれ参考で十分だろう
https://sqlite.org/src/artifact/741a270b7f2f85bc
lemonって変わったパーサジェネレータ使ってるのけど、見た感じただのyacc変種なので出会ったトークン種別を単に印字させればよいだけ
- 256 :デフォルトの名無しさん:2024/04/15(月) 13:34:40.60 ID:fSSptXgn.net
- >>253
> やはり標準環境には無さそうな感じですか
実際要らんしね。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では無いが、まあ似たようなものではあるだろう。
- 257 :デフォルトの名無しさん:2024/04/15(月) 14:00:04.64 ID:YG3lrvG/.net
- >>254
sqliteの構文図見直したらしっかりselect-stmtってありますねえ…
>>255
まさに求めてたやつです、どうも
各処理系のパーサも見較べるとBison向けでルール/アクションの羅列のpsqlの奴が一番わかり易かった
https://github.com/postgres/postgres/blob/master/src/backend/parser/gram.y
psql用だけど拡張や高度な機能を気にする段階に無いので、ここから必要そうなのを拾い始めました
sqliteのパーサは中でゴチャゴチャ処理してるけど、psqlのパーサはparser/*.cへアクション内で呼ぶ関数がキレイに分離されていて、記述的命名から意味論まで分かるお手本のようなデザインですね
座右の文法リファレンスとして印刷してそのまま使えそうな出来栄え
- 258 :デフォルトの名無しさん:2024/04/15(月) 14:07:24.63 ID:YG3lrvG/.net
- >>256
忠告どうも
たまたまSQLという'言語'が面白そうで規格までしっかりある良さそうなもので意欲を得ました
もしこのSQL'言語'が肌に合わなかったならば、プログラミング言語同梱のリレーショナルデータベースAPIへロールバックするでしょう
私の主眼はスレタイ通りSQLにあります
- 259 :デフォルトの名無しさん:2024/04/15(月) 14:23:22.62 ID:f5jIOgeT.net
- 既にRDBバリバリ管理やってる人こそ学ぶべき
むしろ初学が厳しい見た目のSQLだと挫折率高そう
母語に流暢でも英語をサボる理由にはならない
API通ってる環境なら必然的に埋め込みSQLも使える
- 260 :デフォルトの名無しさん:2024/04/15(月) 14:34:25.57 ID:fSSptXgn.net
- >>258
そりゃ規格はあるよ。
ただ無料では仕様書が手に入らないらしい。勿論買えば済むらしいが。
> プログラミング言語同梱のリレーショナルデータベースAPI
てかこれ何ぞ?Oracleのことか?
そもそもDB使ってきててSQL知ラネ、ってのがかなり意味不明なのだが。
ORMの事なら、ぶっちゃけORMで済むのならORMでやるべきだと思うよ。
むしろ今時SQL手打ちか?とも言われてるはずだし。
(AccessとかでもクエリビルダーでSQLを作成してて、SQL自体をプログラマが打ち込む必要はなかったはず)
- 261 :デフォルトの名無しさん:2024/04/15(月) 14:57:46.75 ID:2Ew9RCgX.net
- >>260
標準ライブラリ備えてるような言語には大抵RDB接続機能があって、ホストの文法に沿ってクエリ送れるやろ
例えば.NET共通のLINQとか
.NET言語毎にもあったりしてそれこそ無数
- 262 :デフォルトの名無しさん:2024/04/15(月) 15:02:39.91 ID:2Ew9RCgX.net
- LINQはRDB以外の色々なデータベースモデルも想定してるからSQLとはかなり違う
LINQでRDB管理に習熟してもSQL知識はあまり付かないと思われ
- 263 :デフォルトの名無しさん:2024/04/15(月) 16:16:36.38 ID:Xey1DMe3.net
- >>251
'foo' LIKE 'f_%'とかを試したいならSELECT 'foo' LIKE ‘f_%’;とすればいい
ただSQLを学ぶ目的なら実際に使うSQLでデータのほうを弄りながらいろいろ試したほうが断然効率いいよ
一つ一つ式の評価結果を実際に使うSQLとは別で確認するのは時間の無駄
https://www.db-fiddle.com/f/oUzwVLEEeWgxdxbQN36kvJ/0
あとプログラマー歴が長い人にありがちだけど
SQLをループと条件節のように命令型のパラダイムで捉えるのはお勧めしない
関係演算の感覚を身につける妨げになるから
- 264 :デフォルトの名無しさん:2024/04/15(月) 16:47:19.47 ID:fSSptXgn.net
- むう?なんか書き込み失敗して内容も失ったが、覚えてる範囲でもう一度書く。
復活して同様の物が連投されてたらご容赦を。
>>261-262
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等に移行するほうが妥当だと思うぜ。
- 265 :デフォルトの名無しさん:2024/04/15(月) 18:29:06.40 ID:x2iyd0ju.net
- >>264
めっちゃくちゃ基本的なこともわかってないからまずは公式チュートリアル的なのを読んだほうがいい
LINQ to ObjectとLINQ to SQL/DataSet/Entitiesの区別くらいは最低限つくようにしてくれ
- 266 :デフォルトの名無しさん:2024/04/15(月) 19:25:10.27 ID:fSSptXgn.net
- >>265
なるほど俺が糞だと思ってたのはLINQ to Objectなのは分かった。
そして俺の思惑とは違い、MSはSQL対象のほうをラップしてるわけか。
俺的希望仕様ならLINQはリテラルか引数で無ければならず、ハードコードベタ書きとか意味不明だったが、
まあこれなら分からんでも無い。
が、そもそもこれはSQLが無駄に方言が増えすぎてたからMSもLINQというSQLモドキを実装しただけの気がするが。
それでもDOMだXPATHだとやるよりはLINQだけで済む方がいいのは確かだが、
ある意味新たなMSSQL方言を生み出しただけの気も。
そしてOracleもSQL方言だとは聞いてるし、やっぱRDB弄っててSQL知ラネ、ってのはよく分からない。
KVSならSQL関係ないが、そういう感じではなさそうだし。まあいいけどね。
- 267 :デフォルトの名無しさん:2024/04/16(火) 08:55:41.54 ID:Fr3sHPgG.net
- LINQはSQLに寄せようとしてる雰囲気があるので中途半端感
普通は言語のインメモリオブジェクト操作の方へ寄せるのだが
C#, VB.NET etc.の多言語前提のデザインだからかな
まあWhereとかSelectとかキーワードを借りて文面ぱっと見だけの話
- 268 :デフォルトの名無しさん:2024/04/16(火) 10:35:29.23 ID:len5k1k5.net
- >>267
MSなりの折衷策なんだろ。
> 言語のインメモリオブジェクト操作の方へ寄せる
これならORMが最上で、それ以上は無いからね。
PHPにはPDOという、無いよりはましだが実質的に意味が無いラッパがあるが、
あれよりはましなDBラッパを用意して、共通文法を考えました、ってところだろ。
実際、forでウダウダやるより宣言型の方が読みやすいのは確かだから、宣言型文法も取り入れたかったのだろうし。
90 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver.24052200