0559NAME IS NULL2018/09/21(金) 23:13:57.63ID:??? 責任? w 0560NAME IS NULL2018/09/21(金) 23:43:14.92ID:J7Fz2JlS 図星に脊髄反射しとる奴、おる? 0561NAME IS NULL2018/09/22(土) 07:06:16.16ID:??? 図星に脊髄反射しとる奴 ⇒ >>5580562NAME IS NULL2018/09/22(土) 13:24:41.08ID:/G0Wh7Kz>>557 いまどき上げ下げかw 0563NAME IS NULL2018/09/22(土) 19:23:47.16ID:??? sageるのって荒らしに見つからんようにとかそんな理由だったっけ? 今だと勢い順か新しい順、あるいはスレ検索して見るからもう完全に意味ないよな、わざわざ荒らすやつも激減してるし ましてこんな過疎版じゃ気にするだけ無駄 0564NAME IS NULL2018/09/22(土) 20:12:24.86ID:??? 質問スレだと、質問者は必ずageてって板もある ID出た方が成りすましを防げるからやり取りで 混乱しなくて良いと言う側面もある 0565NAME IS NULL2018/09/23(日) 10:30:22.73ID:??? 質問スレはそんなルールあったね sageるとID出ないのはDB板の仕様か 技術的な話をするんだから一律IDつけたほうが勝手がいいと思うけどなあ 専ブラがデフォルトsageになってていちいち削除すんのもめんどいし 0566NAME IS NULL2018/09/29(土) 20:35:17.15ID:W8T9QA3v 質問するのでIDありで・・・ リレーショナルデータベース=JOINで複数のテーブルをまたいでクエリを投げられる
という意味? 0567NAME IS NULL2018/09/29(土) 20:51:07.76ID:??? リレーションってのは要はテーブルだ。 リレーションでできているデータベースだからリレーショナルデータベース。 0568NAME IS NULL2018/09/29(土) 21:24:57.55ID:W8T9QA3v レスありがとう。 リレーショナルではないデータベースというのは、テーブルでは無いデータベースが想像つかないな・・・。 二次元的なものではなく、テキストに羅列されているだけという感じだろうか。 昔pc-98で桐ver2とか名前だけは知っていたけど、あの頃はすでにテーブルという概念があったのかしら? 0569NAME IS NULL2018/09/29(土) 21:34:54.80ID:9EBEb433 すごい会話だなw 0570NAME IS NULL2018/09/29(土) 21:36:14.75ID:9EBEb433>>568 自作自演? 0571NAME IS NULL2018/09/29(土) 21:38:54.14ID:???>>568 桐もDBASEもリレーショナルデータベースだな テーブルであるならそうかといえば、ちょっと違う
複数のテーブルを関係性で紐付けが出来るなら リレーショナルデータベースと呼んで良いと思う
Excelの表はテーブルだけど誰もそうは呼ばないしな 0572NAME IS NULL2018/09/29(土) 22:03:17.34ID:??? 情報処理試験とかデータベースの勉強をすれば初めの方で説明されているはずだけど、 リレーショナルの前には階層型やネットワーク型といったデータベースの形式があった。
ついでに言えば、リレーショナルデータベースには「複数のテーブル」などという要件はない。 複数のテーブルはその直積である1テーブルと等価なんで。 0573NAME IS NULL2018/09/29(土) 23:12:42.69ID:9EBEb433 なんか変な素人が出てきたなw 0574NAME IS NULL2018/09/29(土) 23:27:01.69ID:??? 普通はRDBMSと言えばリレーショナルデータモデルを表現できるだけでなく ACID特性を備えるのが必要条件とされる 最近流行りのNoSQLなんかはリレーショナルデータモデルを表現するものではない上に ACID特性のいずれかを満たさないのが普通だったりする 0575NAME IS NULL2018/09/29(土) 23:29:52.65ID:9EBEb433 NoSQLが最近ものだと?
タイムマシンで過去から来た人間の書き込み? 05765742018/09/30(日) 00:54:24.60ID:??? しまった 自ら正解を出すことはできず文句しか言わない人に絡まれてしまった 0577NAME IS NULL2018/09/30(日) 01:17:21.17ID:??? NGにすると吉 0578NAME IS NULL2018/09/30(日) 09:28:56.36ID:??? おまえらが知る前から俺は使ってるんだ( ・`ー・´) + 0579NAME IS NULL2018/09/30(日) 14:41:59.34ID:???>>574 RDBとDBMSの区別がつかないなら、ややこしくなるだけだから黙っとけな 0580NAME IS NULL2018/09/30(日) 22:46:54.70ID:??? プライマリキーをフォーリンキーにすることはできますか? 0581NAME IS NULL2018/10/01(月) 00:24:20.26ID:??? できるが変な設計だなとは思う 0582NAME IS NULL2018/10/01(月) 12:38:28.99ID:???>>581 時系列データのテーブルが2つあって 時間をフォーリンキーにしたいんですけどおかしいですか? 0583NAME IS NULL2018/10/01(月) 12:51:24.62ID:Q6K7qC3N>>580 単に1対1のテーブルだからおかしくはない。 0584NAME IS NULL2018/10/10(水) 11:28:56.03ID:??? インデックスが使われるSQL文の書き方というのは、例えば出庫データに 商品コード順+出荷日順+伝票番号順というインデックスを作っておいて SELECT * FROM 出庫データ WHERE 商品コード='A01' ORDER BY 商品コード, 出荷日, 伝票番号 みたいにするとレスポンスが速くなるということでしょうか? 0585NAME IS NULL2018/10/10(水) 21:59:19.97ID:G1VCUlYl>>584 プラス記号の意味がよくわからんが CREATE INDEX(商品コード,出荷日,伝票番号) という複合主キーを作成すると 例示のSQLは速くなるだろうが ただしインデックスの順序と異なる ORDER BY 出荷日,商品コード などと場合は効かない 0586NAME IS NULL2018/10/11(木) 11:55:45.37ID:???>>585 ありがとうございます 0587NAME IS NULL2018/10/11(木) 23:22:18.86ID:LDSiJwGe>>584 忠告しておくが、インデックスが使われるSQLを書くのではなくて、問い合わせの内容とインデックスが必要かどうかを考えてSQLを書く。
SQLがこうだから、このSQLはこのインデックスが使われるとSQLだけでは言いきれない。 0588NAME IS NULL2018/10/11(木) 23:32:44.06ID:ppvirY+z>>586 複合主キーじゃないわ複合インデックスね
>>587の言うように 実際に効くかどうかは実行計画で決まるので インデックスを使ったかどうかは 実際の実行計画を取得しないとわからない オプティマイザが意図したインデックスを使ってくれない場合 ヒントで特定インデックス使用を強制することもDBMSによっては可能 0589NAME IS NULL2018/10/13(土) 19:43:23.58ID:???https://imgur.com/FAF05na.jpg0590NAME IS NULL2018/10/14(日) 17:09:16.28ID:EhhxMLoo 常にサクラのサイトが応援している ノーザンコペルニクス https://mevius.5ch.net/test/read.cgi/blog/1538500447/0591NAME IS NULL2018/10/14(日) 20:22:51.35ID:??? 私たち日本人の、日本国憲法を改正しましょう。 『憲法改正國民投票法』、でググってみてください。 (へいわ)は、勝ち取るものです。拡散も含め、お願い致します。 0592NAME IS NULL2018/11/01(木) 06:26:01.46ID:imTVWlJr 質問です。 以下のようなテーブルがあったとします。 id|name ------ 0|aaa 1|bbb 2|ccc
aaa,bbb,ddd,eeeを呼び出し側から与えて、nameにない項目(dddとeee)を取得したいです。 こういう場合どのように書けばよいでしょうか。 擬似的にaaa,bbb,ddd,eeeの項目をテーブルのように扱えればできそうですが、やり方がわかりません。 SQLiteを使っていますが、汎用的な書き方でできればしたいです。 よろしくおねがいします。 0593NAME IS NULL2018/11/01(木) 09:10:57.14ID:???>>592 case when thenとかは? 0594NAME IS NULL2018/11/01(木) 11:56:15.87ID:??? 汎用的には、テーブルを作ってしまうのが良いと思う 0595NAME IS NULL2018/11/01(木) 12:45:48.88ID:pgw6fBBH SELECT a.empno<br /> ,a.ename ,a.job ,b.ename AS 'mname' FROM emp a ,emp b WHERE a.mgr = b.empno; このようなSQLを書いたのですが、SELECTのAS句が機能しません。どうすれば機能しますか? 0596NAME IS NULL2018/11/01(木) 13:00:22.93ID:??? 'mname' の囲みいらない 0597NAME IS NULL2018/11/01(木) 14:17:52.92ID:imTVWlJr 意見ありがとうございました。 汎用的なのは諦めて、SQLiteでは以下で疑似的なテーブルができるようなので、これをもとにSQLを考えていこうと思います。 WITH t(name) AS (SELECT * FROM (VALUES ("aaa"), ("bbb"), ("ddd"))) SELECT * FROM "t"; 0598NAME IS NULL2018/11/01(木) 19:59:14.73ID:vMwdzdp/>>595 行頭に,を書く悪習はいいかげんヤメロ 0599NAME IS NULL2018/11/01(木) 21:02:02.93ID:??? 行頭に,を書くとどういう問題があるんだ? 0600NAME IS NULL2018/11/01(木) 21:32:48.31ID:vMwdzdp/>>599 ヴィジュアル的に認識しにくい 0601NAME IS NULL2018/11/01(木) 21:50:22.90ID:??? まさかそれだけ? 0602NAME IS NULL2018/11/02(金) 09:06:50.55ID:???>>599 見た目にブサイク (個人の感想です) 0603NAME IS NULL2018/11/02(金) 09:48:07.02ID:??? 膨大なカラム数があって、スクリプトで処理しているときには都合が良いかもしれないが、 手作業で編集する分にはどっちでもいい気がする 0604NAME IS NULL2018/11/02(金) 12:32:46.28ID:c/Fx/3hC コードは読むもんだと教わらんかったんかおまえら? ヴィジュアル問題の大切さがいまいちわかっとらんな 0605NAME IS NULL2018/11/02(金) 13:13:36.22ID:DS+sU5kd 前カンマの方が打ち忘れが減るので 自分はこちらのヴィジュアルが合っているらしい 0606NAME IS NULL2018/11/02(金) 19:10:39.71ID:ckbyV4Q5 それヴィジュアルちゃうやんw 0607NAME IS NULL2018/11/02(金) 19:39:46.15ID:??? 前にカンマの方がコメントアウトする時に楽 0608NAME IS NULL2018/11/02(金) 22:38:08.71ID:ckbyV4Q5 だからヴィジュアルちゃうやんそれ しかもどっちゃでも変わらんしw 0609NAME IS NULL2018/11/02(金) 22:53:44.45ID:??? カンマの忘れとか、余分なカンマとか、割とよくやるw 0610NAME IS NULL2018/11/03(土) 03:58:33.81ID:Pv5mB3Rz 最近JSONとか末尾カンマ無視するのあるよね あれ導入されれば後ろでもいいんだけどな 前の方が行カット&ペーストで入れ替えやすい 0611NAME IS NULL2018/11/03(土) 09:51:12.69ID:JBJEgXB4 前カンマの方が綺麗だと思うけどなあ カンマと列名の間にタブなりスペースなり入れてカンマの位置を揃えるの テキストエディタで矩形選択を使ってごりごり編集するのに便利なのだ 0612NAME IS NULL2018/11/03(土) 10:58:19.38ID:??? 人の好きずきの問題をここで語られても 0613NAME IS NULL2018/11/03(土) 11:34:40.41ID:??? caseの件 0614NAME IS NULL2018/11/04(日) 12:09:42.60ID:??? 書式整形ソフト使って好きな形で読め。 --のコメントさえなければSQLは改行なし で書けるんだから読むやつが好きに整形しろ。 ここで個人の好みの書式の話しされると うざい!! 0615NAME IS NULL2018/11/04(日) 12:23:08.21ID:??? ちょっと難しい問題を出してみて そうしたら、多分静かになるから 0616NAME IS NULL2018/11/11(日) 17:44:06.06ID:DVzqXgBV そもそもカンマがいらなかったんだよな。
英文っぽくしたためにカンマ区切りにしてしまった。
列名の区切りは半角スペースか改行でよかった。 0617NAME IS NULL2018/11/23(金) 19:38:48.29ID:NImj8hV3 質問させてください。 使っているのはSQLite(Python)です。
DISTINCT を使えばできそうです。 ありがとうございました。 0619NAME IS NULL2018/11/23(金) 20:05:35.29ID:???>>617 こうじゃないか
select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル` group by`性別`,`血液型`,`職業`; 0620NAME IS NULL2018/11/24(土) 03:57:01.05ID:??? 効率悪いし、何名か?が取れないと思う 0621NAME IS NULL2018/11/24(土) 03:58:33.86ID:??? distinctについてね 06226172018/11/24(土) 12:35:17.12ID:???>>619
ありがとうございます。 助かりました。 0623NAME IS NULL2018/11/24(土) 16:31:58.75ID:Pyo9iAE3 再び質問です。 教えてもらった
select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル` group by`性別`,`血液型`,`職業`;
で得られる'人数’を同じテーブル内の別カラムに保存したいと思い、 カラムは事前に作成しておいて、
update 'テーブル' set '人数のカラム' = (select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル` group by`性別`,`血液型`,`職業`)
その後、order by でなく、select以下のテーブルをtable as Tなどとしてwhere句で’テーブル’とTの要素が等しい時に限定したら一応できました
何故かブロックされたのでスマホから 0627NAME IS NULL2018/11/24(土) 17:49:44.47ID:Pyo9iAE3>>625 使用意図は、エクセルの表計算のように、 左のカラムにデータがあって、それを元に 右の方のカラムに途中計算を書いていって、 最後に得られた結果の誤差が減るように また最初の方から計算を繰り返すような感じです。
1巡の計算が大きすぎて記録を残したいのですが、ご指摘の通り、記録が不要なところはテーブル変数がよさそうです 勉強してみます 0628NAME IS NULL2018/11/24(土) 17:50:56.49ID:??? オレ多分頭悪いんだろう >>626 で何を言っているのかよく分からない
愚直に>>623の要求通りのものを書くとすれば `テーブル`に`人数`カラムを追加したとして update `テーブル` t1 set `人数` = ( select `人数` from ( select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル` group by`性別`,`血液型`,`職業` ) t2 where t1.`性別` = t2.`性別` and t1.`血液型`= t2.`血液型` and t1.`職業` = t2.`職業` );
でも、こんなこと実際にはしないし、 もっと良い方法が必ずあるはずだし 見直した方がいい 0629NAME IS NULL2018/11/24(土) 18:02:53.98ID:Pyo9iAE3>>628
なんだか変な事をやってるみたいで恐れ入ります 0630NAME IS NULL2018/11/24(土) 18:07:07.78ID:??? 結局何をしたいのかさっぱり理解できないけどわざわざ違うモデルで答えさせるとか失礼な事するやつだからスルーしとくわ 0631NAME IS NULL2018/11/24(土) 18:18:02.74ID:??? 質問をシンプルにしたくてモデルを 変えましたが、失礼と思われたようで 済みません 0632NAME IS NULL2018/11/24(土) 18:26:04.19ID:??? わざわざスルーするって宣言してる奴なんだからスルーでいいよ 0633NAME IS NULL2018/11/24(土) 21:20:38.92ID:??? 合計値も平均値も割と簡単に計算出来ますし それをテーブルに入れた方が良いのか それともDBを見ているミドルの方で計算させた方が良いのか 全体の仕組みと性能で総合的に考えた方が良いかもしれません 0634NAME IS NULL2018/11/25(日) 01:43:22.84ID:+jUq2Ssihttp://altohumano.com/gt-r%e3%80%80%E8%B2%B7%E5%8F%96/0635NAME IS NULL2018/11/26(月) 21:45:52.63ID:??? mysql,mariadbでmyisamが非推奨になったのはなぜですか? innodbではbeginやcommitが使えるそうですが、メモ的なデータをinsertするぐらいなのですが、 それでもinnodbを使った方がいいのでしょうか? 0636NAME IS NULL2018/11/26(月) 22:42:16.59ID:??? そういうのは各RDBのスレがあるんだから、そこで聞けよ 0637NAME IS NULL2018/11/26(月) 23:01:09.03ID:???>>635 こちらで聞いてみたら
MySQL SQL質問応答スレ https://mevius.5ch.net/test/read.cgi/db/1478776715/0638NAME IS NULL2018/11/27(火) 03:05:52.60ID:??? 専用スレがあったのですね、誘導ありがとうございます。 0639NAME IS NULL2018/11/28(水) 16:28:54.70ID:ZtGMc1/U 【勝谷誠彦(57)死去】 人口が毎年20万人も減るほど被曝して応援させ、さらに70歳まで働いて応援 http://rosie.5ch.net/test/read.cgi/liveplus/1543371270/l500640NAME IS NULL2018/11/29(木) 10:10:36.91ID:??? 以下のようなデータがあった場合、 name date rate AAA 11/1 2000 BBB 11/1 900 CCC 11/1 500 DDD 11/1 700 AAA 11/2 2000 BBB 11/2 1200 CCC 11/2 500 DDD 11/2 700 AAA 11/3 2000 BBB 11/3 500 CCC 11/3 1500 DDD 11/3 700
最新のrateが1000未満だけを抽出するにはどうすればよいでしょうか? DDD 11/3 700 BBB 11/3 500 0641NAME IS NULL2018/11/29(木) 11:07:44.82ID:???>>640 こうかな? select name, MIN(date), rate from hoge where rate < 1000 group by name, date, rate 06426412018/11/29(木) 11:26:02.69ID:??? 違った、こうか? select a.name, a.date, a.rate from hoge as a, (select name, MAX(date) from hoge where rate < 1000 group by name, date) as b where a.name = b.name and a.date=b.date; 0643NAME IS NULL2018/11/29(木) 13:04:58.18ID:??? SELECT * FROM a WHERE (name,date) IN (SELECT name,MAX(date) FROM a GROUP BY name) AND rate<1000 0644NAME IS NULL2018/11/29(木) 13:09:17.80ID:???>>642 レスありがとうございます。 試したのですが、fromのselectでMAX(date)以外のも全て列挙されてしまいます。 DDD 2018/11/01 00:00:00 BBB 2018/11/01 00:00:00 CCC 2018/11/01 00:00:00 DDD 2018/11/02 00:00:00 CCC 2018/11/02 00:00:00 DDD 2018/11/03 00:00:00 BBB 2018/11/03 00:00:00 ちなみに使用DBはpostgresqlです。 0645NAME IS NULL2018/11/29(木) 13:14:19.05ID:???>>643 おお!できました!! ありがとうございます! 整理して理解します。 0646NAME IS NULL2018/11/29(木) 16:31:32.41ID:??? こういうときに色々意地悪な条件をついつい考えてしまう 最新日って言う場合、1件だけになるのか、 それとも同一日は全部該当にするのか 結果表示に時刻まで出てきていると悩んでしまう その後の処理で何を使いたいかにもよるんだろうけど 0647NAME IS NULL2018/11/29(木) 23:50:24.51ID:0rvo1ya5>>646 ここで質問してくるやつはいつも仕様などあまり考えていない。 0648NAME IS NULL2018/12/03(月) 19:05:02.42ID:??? 2つの文字列カラムがあり、一方がもう片方の文字列から始まるものだけを抽出したい場合どうすればいいですか? str1 str2 ABC ABCDEF DEF aiu GHI GHIxxx JKL akasa の場合、 ABC ABCDEF GHI GHIxxx 0649NAME IS NULL2018/12/03(月) 20:36:59.12ID:???>>648 str1の長さがstr2より短いことがわかってるなら where left(str2, len(str1)) = str1 でいいかと 0650NAME IS NULL2018/12/03(月) 22:05:33.10ID:??? ためしてないけど、 where (str1 like str2+'%') or (str2 like str1 + '%')とかでどうだろう 0651NAME IS NULL2018/12/03(月) 22:51:42.17ID:???>>648 んじゃ他ので WHERE PATINDEX(str1 + '%', str2) = 1 0652NAME IS NULL2018/12/04(火) 10:41:43.68ID:???>>649>>650>>651 お三方、ありがとうございました。 ばたばたしてて遅くなりましたが、確認できました。 0653NAME IS NULL2018/12/04(火) 11:20:56.24ID:???>>650-651 str1とかstr2に'%'含んでても大丈夫だっけ? 0654NAME IS NULL2018/12/04(火) 11:59:27.62ID:KJK6oDpE 大丈夫。ただ+が使えるのはMS系だな。 後は使えるやり方に読み換えて 0655NAME IS NULL2018/12/09(日) 16:50:28.29ID:??? SQL SERVERのSQL文について質問です