X



トップページDB@2ch掲示板
1002コメント316KB
SQL質疑応答スレ 19問目
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2019/05/23(木) 20:25:40.60ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 18問目
https://mevius.5ch.net/test/read.cgi/db/1515071542/
0115NAME IS NULL
垢版 |
2019/12/31(火) 22:34:09.63ID:???
普通DBの参照権限は貰えても更新権限は与えないよね。
0116NAME IS NULL
垢版 |
2019/12/31(火) 22:46:40.05ID:???
そうだね
Excelで扱うデータを引っ張るような業務レベルだと
テーブル更新権限までは持たせないと思う
0117113
垢版 |
2020/01/01(水) 00:19:05.18ID:???
>>114->>116
そうですか…
せっかくスキルを身に着けたとしても、更新権限が付与されないのであれば意味がないですね。
おそらく管理者に確認しても、余計な事するな、となりそうなので

ただSQLの知識はあっても損はないので、買った本くらいは通読してみようかと思います。
0118NAME IS NULL
垢版 |
2020/01/01(水) 00:22:06.91ID:???
ぶっちゃけ、そのヤろうとしてることはクラッキングだからな
管理者の許可を得ず、データにアクセスして改竄
0119NAME IS NULL
垢版 |
2020/01/01(水) 10:09:37.97ID:???
家のPCでSQLSERVERとかPostgreSQLとか構築してみたら勉強になる
めっちゃ簡単だし
0120NAME IS NULL
垢版 |
2020/01/01(水) 14:10:53.11ID:mYS4vz8I
>>119
そんなことをしなくても、Excelシートをリレーショナルデータベースとして扱える。
0122NAME IS NULL
垢版 |
2020/01/01(水) 16:19:37.37ID:???
数百万レコード保存できるエクセルがあるそうです
0123NAME IS NULL
垢版 |
2020/01/01(水) 16:21:51.32ID:???
ネタで言っている様にしか聞こえないw
0124NAME IS NULL
垢版 |
2020/01/01(水) 16:33:58.73ID:mYS4vz8I
>>122
100万レコードなら可能
0125NAME IS NULL
垢版 |
2020/01/03(金) 23:02:49.24ID:???
unique cnstraintに引っかかるとエラーが帰ってくるの?
0127NAME IS NULL
垢版 |
2020/01/04(土) 18:42:45.71ID:???
このエラーをtry exceptで例外処理して重複するのを防ぎたいんだけど
commitしないとエラーがでなくて
毎回addする毎にcommitするしかないですか?
0128NAME IS NULL
垢版 |
2020/01/04(土) 18:47:13.70ID:???
既に存在する場合は登録しない様にすればいい
0129NAME IS NULL
垢版 |
2020/01/04(土) 22:30:42.23ID:???
>>127
普通はコミットするまでにエラーがでると思うが
使ってる言語かDBMSのスレで聞け
0130NAME IS NULL
垢版 |
2020/01/06(月) 02:30:42.66ID:pHBrkoE+
売上を記録するテーブルの設計について教えて下さい。

例えば商品マスタが以下の構造だとします。
----------------------------
| 商品コード | 商品名 | 単価 |
----------------------------

販売履歴を記録するテーブルは、
  -----------------------------------
@| 商品コード | 商品名 | 単価 | 数量 |
  -----------------------------------
と、
  --------------------------
A| 商品コード | 単価 | 数量 | ※商品名は、商品コードをキーにしてマスタから取得
  --------------------------

  -----------------------
B| 商品名 | 単価 | 数量 | ※商品コードは、商品名をキーにしてマスタから取得
  -----------------------
の3つのどれがいいのでしょうか?


Aの場合、販売後に商品コードが変わると、販売時の商品名が分からなくなり、
Bの場合、販売後に商品名が変わると、販売時の商品コードが分からなくなるので、
@が一番いいのかな、と思うのですが、本当にそれでいいのでしょうか?
0131NAME IS NULL
垢版 |
2020/01/06(月) 06:10:26.40ID:???
普通1だし、商品名変わったら新しくID発行するだけで上書きはしないよね。
0132NAME IS NULL
垢版 |
2020/01/06(月) 07:02:36.84ID:???
普通は、商品コードと数量だろ?
(属性は足りないと思うけど)
0133NAME IS NULL
垢版 |
2020/01/06(月) 07:50:15.92ID:???
その要件なら@で仕方ないと思うが、商品名の追跡が必要なら商品名ごとの
サブコードを発行しておくという手もあると思う。
0134NAME IS NULL
垢版 |
2020/01/06(月) 07:56:03.30ID:nckEwU7J
何のために商品コードがあると思っているんだろうね。
0135NAME IS NULL
垢版 |
2020/01/06(月) 10:31:45.02ID:???
値段の変動するものなら、その時の時価を記録してないと訳分からなくなるかも
0136NAME IS NULL
垢版 |
2020/01/06(月) 11:54:17.21ID:nckEwU7J
SQLの話になってないぞ
0137NAME IS NULL
垢版 |
2020/01/06(月) 12:38:07.69ID:???
どちらかと言うとDB設計スレの方が良いような
0138NAME IS NULL
垢版 |
2020/01/13(月) 09:59:29.35ID:???
>>130
ずいぶん遅いレスだけど販売管理ならユーザーによって使い方が変わるからそういった点でも
できるだけ細かい情報を販売実績のテーブルに管理したほうがいいぞ
0139NAME IS NULL
垢版 |
2020/01/13(月) 12:58:42.68ID:CI1X7qA2
誰もがいつも表記の揺れのない正確な商品名を打てる世界を想定しなくはいけないのか?
0141NAME IS NULL
垢版 |
2020/01/13(月) 15:51:36.18ID:Atn/JdJk
商品コードがなんのためにあるのかわかってない
0142NAME IS NULL
垢版 |
2020/01/13(月) 16:22:19.97ID:???
DB設計スレに移動して続けたらどうかな
0143NAME IS NULL
垢版 |
2020/01/13(月) 17:43:27.66ID:???
データに全ての情報を埋め込むのは汎用機システム世代
リレーションシップデータベース世代になるとマスターに
できるのはできるだけマスター化する
しかし全てマスター化すると古いマスターもずっと残さないといけなくなりマスターが肥大化してしまうのでデータに埋め込んでおくのもいい場合がある
0144NAME IS NULL
垢版 |
2020/01/13(月) 17:58:21.31ID:???
リレーションシップデーターベース?
0145NAME IS NULL
垢版 |
2020/01/13(月) 17:59:57.49ID:???
リレーショナルデーターベースとしても意末は通らんけど
0146NAME IS NULL
垢版 |
2020/01/13(月) 18:08:22.94ID:???
正規化がたらんのやろ
0147NAME IS NULL
垢版 |
2020/01/13(月) 18:23:32.38ID:???
>>130の商品コードと商品名が関数従属しないんならべつに@も非正規形ではないんだがな
0148NAME IS NULL
垢版 |
2020/01/13(月) 18:27:20.09ID:???
ユーザーによっては商品マスタを使いまわすところもあれば商品ごとにマスタを登録するところもある
商品はセール(値引き)以外にも返品なども行う事もおおいから単純にマスタを見て単価や名称を紐づけすればOKなんて考えは
販売管理作ったことのあるやつならナンセンスじゃね
請求書や領収書なんかも変わった商品名称や単価だすとかありえんしね
0149NAME IS NULL
垢版 |
2020/01/13(月) 22:41:38.01ID:CI1X7qA2
>>148
あんた商売の素人だな。
0150NAME IS NULL
垢版 |
2020/01/15(水) 12:47:01.58ID:???
テーブル設計の話題は 「DB設計を語るスレ」 でやってください
0151NAME IS NULL
垢版 |
2020/01/30(木) 21:52:02.55ID:???
中間テーブルってプライマリキー無くてもいいの?
0152NAME IS NULL
垢版 |
2020/01/30(木) 22:56:44.09ID:???
プライマリキーが無くてもいいテーブルがあるDBは設計が間違ってる。
0153NAME IS NULL
垢版 |
2020/01/30(木) 23:01:58.60ID:???
じゃ全部プライマリキーってことか?
0154NAME IS NULL
垢版 |
2020/01/30(木) 23:24:33.59ID:???
tempテーブルのこと言ってんでしょ?
それならプライマリキーなくても別に構わないよ
0155NAME IS NULL
垢版 |
2020/01/30(木) 23:40:21.73ID:???
なんだろうtempテーブルって
0156NAME IS NULL
垢版 |
2020/01/31(金) 00:03:03.86ID:???
えっ、temporaryテーブル(一時テーブル)のことだよ
0158NAME IS NULL
垢版 |
2020/01/31(金) 16:28:38.74ID:???
とりあえず設計スレ行けや
0159NAME IS NULL
垢版 |
2020/01/31(金) 17:26:58.13ID:???
SQLスレにいるのにテンポラリテーブルも知らないのかw
0160NAME IS NULL
垢版 |
2020/01/31(金) 20:09:31.65ID:???
SQLの仕様に、テンポラリテーブルってのが有るのか・・・
0161NAME IS NULL
垢版 |
2020/01/31(金) 20:15:25.22ID:???
勉強し直してこなきゃ
0162NAME IS NULL
垢版 |
2020/01/31(金) 21:01:53.10ID:???
ついでに名前が似てるテンポラルテーブルも
0163NAME IS NULL
垢版 |
2020/01/31(金) 22:18:08.62ID:???
tempテーブルってのも調べて
0164NAME IS NULL
垢版 |
2020/01/31(金) 22:20:53.04ID:???
一時テーブルという機能を持つDBMSはあるが、一時テーブルだとプライマリキーが要らない
理由なんてないよなぁ。
0166NAME IS NULL
垢版 |
2020/01/31(金) 22:47:29.44ID:KMY4HniK
意味的なプライマリキーと
DBMSのPRIMARY KEY制約がごっちゃになって話が混乱してるな
0167NAME IS NULL
垢版 |
2020/01/31(金) 23:16:32.21ID:???
>>164
逆に一時テーブルの機能を持たないRDBMSってあるのかい?
0168NAME IS NULL
垢版 |
2020/01/31(金) 23:32:01.21ID:???
Oracleは18cまでまともに使える一時テーブルがなかったのね
いろいろと納得
0169NAME IS NULL
垢版 |
2020/01/31(金) 23:42:42.95ID:???
最初は中間テーブルって話だったのにいつの間に温度テーブルの話にすり替わったのか
0170NAME IS NULL
垢版 |
2020/01/31(金) 23:56:38.46ID:???
温暖化の影響だろう
0171NAME IS NULL
垢版 |
2020/02/01(土) 00:57:00.65ID:5RS/C4xX
>>168
? 
0172NAME IS NULL
垢版 |
2020/02/01(土) 03:00:50.45ID:???
>>166
それが混同されたとしても一時テーブルは関係ないわ
0173NAME IS NULL
垢版 |
2020/02/01(土) 06:05:58.75ID:???
SQLのスレなんで、DBMSの実装機能の話は無いのかと思ってたが,そう言うことか
0174NAME IS NULL
垢版 |
2020/02/01(土) 11:34:27.47ID:???
テンポラリテーブルはSQL-92で定義されてる標準だぞ
各実装が従ってるわけではないけど
0175NAME IS NULL
垢版 |
2020/02/01(土) 11:55:38.86ID:???
おおっ!
そうなんだ
Thanks
0176NAME IS NULL
垢版 |
2020/02/03(月) 22:35:32.94ID:???
inner joinの前と後のテーブル入れ替えても同じ意味になりますか?
0177NAME IS NULL
垢版 |
2020/02/03(月) 23:28:10.97ID:???
>>176
同じ意味というのが
同じ結果セットが得られるかということならイエス
同じ実行プランが得られるかということなら必ずしもそうはならない
0178NAME IS NULL
垢版 |
2020/02/03(月) 23:35:53.56ID:???
あ、inner join on x.id <> y.id のように不等号とか使ったら結果セットも変わるわ
0179NAME IS NULL
垢版 |
2020/02/04(火) 00:12:57.04ID:???
二つのテーブルの内部結合なら不等号だろうが結果セットは変わらん気がするが
もちろん列指定ちゃんとやるって前提だが
0180NAME IS NULL
垢版 |
2020/02/04(火) 01:05:42.46ID:???
順序が変わると言うことかも
0181NAME IS NULL
垢版 |
2020/02/04(火) 07:18:28.20ID:???
順序は同じSQLですら変わっても文句言えない
0182NAME IS NULL
垢版 |
2020/02/04(火) 12:37:35.35ID:???
べつに文句を言っている訳ではないよ
順序に期待するならそこまで考慮しようねって事
0183NAME IS NULL
垢版 |
2020/02/04(火) 14:41:36.84ID:???
同じSQLですら結果の順序がどうなるかわからんのにinner joinの結合順で結果の順序とか言い出す奴って…
0185NAME IS NULL
垢版 |
2020/02/04(火) 20:08:46.55ID:8UrvhxBw
>>183
そういう基本的なことからわかってないのにデタラメを言うやつは年齢関係なくいるから困るよね。
0186NAME IS NULL
垢版 |
2020/02/04(火) 21:23:41.70ID:???
このスレでの話ならスルーしてれば何も困らないだろう
職場にいるんなら、それはお前がどうにかしろ
こんなとこで愚痴るなよ、鬱陶しい
0187NAME IS NULL
垢版 |
2020/02/04(火) 23:09:26.84ID:???
いきなり何イキってるんだ?
0188NAME IS NULL
垢版 |
2020/02/06(木) 22:17:53.87ID:???
2020みたいな西暦って
integerかstr かtimeのどれ型を使うのが一般的ですか?
0189NAME IS NULL
垢版 |
2020/02/06(木) 23:00:51.88ID:???
年しかいらないならintegerとかの整数値だろ
0190NAME IS NULL
垢版 |
2020/02/07(金) 00:58:43.19ID:???
そうすか ありがとうございました
int ならorder by できますからね
0191NAME IS NULL
垢版 |
2020/02/07(金) 01:01:13.05ID:???
time型も内部表現は数値だったと思う
0192NAME IS NULL
垢版 |
2020/02/07(金) 06:35:04.69ID:???
そういうことじゃないだろw
0194NAME IS NULL
垢版 |
2020/02/07(金) 12:34:08.57ID:???
>>188
最近はDate型にして月日には1月1日入れてる
0195NAME IS NULL
垢版 |
2020/02/07(金) 12:55:00.84ID:???
日付形式にすると日付ではない値は
セットできないのでデータ整合性が
保てる

日付形式で困るのは最大値だな
データベースによって違うから
日付数字8桁なら99999999とかに
すればいいけど
0196NAME IS NULL
垢版 |
2020/02/07(金) 13:02:34.28ID:???
西暦はゼロ年、1年の扱いの違いもちょっと困ることがある
0197NAME IS NULL
垢版 |
2020/02/07(金) 14:50:07.59ID:???
年だけをどのデータ型にするのがいいのかは
利用方法、DBMSの種類、件数、(もしあれば)規約などによる

一般的にはint, smallint, dateが候補だけど
MySQLのようにyear型があればそれも選択肢になるし
Oracleならdateは7バイトも使うのであまり選ばれない

個人的には年だけ表現したいのに関数使わずに見ると
2020/01/01って入ってるのは嫌なのでsmallintが第一候補
過去の西暦とか入力できる範囲も違うから必要ならチェック制約使う
0198NAME IS NULL
垢版 |
2020/02/07(金) 21:28:01.97ID:X04cMmok
いまどき数バイトでどうこう言うのか?
0199NAME IS NULL
垢版 |
2020/02/07(金) 23:11:41.16ID:???
1月2日とかが入るのを完全に排除できるならいいけど、それやるのにトリガとか使うくらいならintでいいよね。
0200NAME IS NULL
垢版 |
2020/02/08(土) 01:13:40.84ID:???
>>198
数バイトが積み重なってレコード長が大きくなればパフォーマンスが徐々に悪化するからね
0201NAME IS NULL
垢版 |
2020/02/08(土) 09:42:01.14ID:FADQTNtD
あっそう。
0202NAME IS NULL
垢版 |
2020/02/08(土) 10:38:57.81ID:???
日付形式は検索するとき数字形式より遅くなる場合が多い
日付形式を検索するとき関数を使う場合が多く関数ある分遅くなる
例えばこんな感じ
Where TO_CHAR(sale_date, 'YYYY-MM-DD') = '1970-01-01'

俺は月次単位でデータを作る事が多く検索で多く使うから
年月は数字6桁でインデックス貼ってるな
年月は他のテーブルと連結する時も多く使われるので
後で変更する場合非常に面倒なのでよく考えたほうがいい
日付形式はデータ作成日時とか更新日時のではよく使う
パフォーマンス問題を引き起こす日付型
https://use-the-index-luke.com/ja/sql/where-clause/obfuscation/dates
0203NAME IS NULL
垢版 |
2020/02/08(土) 11:21:26.54ID:???
日付型って内部は数値形式でしょう
比較したり順序を決めるのに文字列にする必要は無いんじゃないかな
0204NAME IS NULL
垢版 |
2020/02/08(土) 11:46:08.00ID:???
OracleにはSQL-92 DATEが無かったからそんな感じだったな。
0205NAME IS NULL
垢版 |
2020/02/08(土) 12:44:53.21ID:???
>>201
知らなかった感じ?
SQL使うだけなら知らなくていいけど
DB設計するなら基礎の基礎だから知っておくといいよ
0206NAME IS NULL
垢版 |
2020/02/08(土) 12:53:54.84ID:???
とりあえずここはSQLのスレであってDB設計スレではない
そのことをまず知っておこう
0207NAME IS NULL
垢版 |
2020/02/08(土) 14:20:32.42ID:FADQTNtD
>>202
どの製品のことを言っているのか?
0208NAME IS NULL
垢版 |
2020/02/08(土) 14:21:24.23ID:FADQTNtD
>>205
馬鹿にされた自覚がないのか?
0209NAME IS NULL
垢版 |
2020/02/08(土) 14:23:26.63ID:FADQTNtD
物理メモリもストレージ容量も大きいのに少しのことを大袈裟に言うやつは引退した方がいい。

ハードウェアの進化に知識が追いついていない。
0210NAME IS NULL
垢版 |
2020/02/08(土) 14:32:11.63ID:???
>Where TO_CHAR(sale_date, 'YYYY-MM-DD') = '1970-01-01'

こういうダメな例を書かないためには
SQL使うだけのやつもDB設計の基礎知らないといけないんじゃないか?
0211NAME IS NULL
垢版 |
2020/02/08(土) 14:37:55.61ID:???
自分の設計能力の低さをハード性能でカバーされてることに気づかないやつも引退したほうがいいけどな
0212NAME IS NULL
垢版 |
2020/02/08(土) 14:38:49.29ID:???
>Where TO_CHAR(sale_date, 'YYYY-MM-DD') = '1970-01-01'

確にこれは初心者
0213NAME IS NULL
垢版 |
2020/02/08(土) 14:43:36.83ID:1VUqo/WP
ON DUPLICATE KEY UPDATEのIF文について質問させてください

ON DUPLICATE KEY UPDATE
fb_like = IF(fb_like > VALUES(fb_like), fb_like, VALUES(fb_like))

このIF分の第二と第三の引数と戻り値の意味を教えて頂けないでしょうか。
第一は比較条件なのは分かりますが・・・
DUPLICATE KEY UPDATEのリファレンスを調べてもわかりませんでした・・・
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況