トップページDB@2ch掲示板
1002コメント330KB
SQL質疑応答スレ 17問目 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2016/07/10(日) 22:29:01.40ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

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

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

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

前スレ:
SQL質疑応答スレ 16問目
http://echo.2ch.net/test/read.cgi/db/1447160858/
0712NAME IS NULL
垢版 |
2017/10/20(金) 21:22:24.90ID:aE0VLgo8
主キー列名、主キー制約名、インデックス名がちゃんと説明できるレベルの人は、この板にはほとんどいない。
0713NAME IS NULL
垢版 |
2017/10/20(金) 21:23:54.08ID:???
create table hoge (id integer primary key)
とした場合、制約名はシステムが勝手につけた名前になる

create table hoge (id integer constraint hage primary key)
とすると制約名はhageとなる
0714NAME IS NULL
垢版 |
2017/10/20(金) 21:25:43.33ID:aE0VLgo8
>>711
SQLは同じ名前の列は、同じ属性と見なすから標準SQLでもナチュラルジョインがあるわけで、良いはずがない。
0715NAME IS NULL
垢版 |
2017/10/20(金) 21:27:31.82ID:aE0VLgo8
>>713
あんたどのRDBMSの方言で説明してんの?
0716NAME IS NULL
垢版 |
2017/10/20(金) 21:28:23.02ID:???
>>708
お、そう
それはアンチパターンだね

>>710
トレードオフだからね
君はそれを知らないだけ
0717NAME IS NULL
垢版 |
2017/10/20(金) 21:30:12.14ID:???
もう自称プロに火つけんなよ
0718NAME IS NULL
垢版 |
2017/10/20(金) 21:31:14.77ID:???
ああ、order byの人か
0719NAME IS NULL
垢版 |
2017/10/20(金) 21:36:03.97ID:aE0VLgo8
>>716
何がトレードオフだよ。自分自身の関心事かそうでないかだろ。

有名なフレームワークやパッケージでもDBにうといのか、ひどい設計はよくある。
0720NAME IS NULL
垢版 |
2017/10/20(金) 22:02:38.96ID:???
>>708
ごっちゃにはなっていません。
最初の質問に書いたように列名と主キー名をあえて同じにすると何か困る事が有るかどうかを知りたかったのです。私はPK_派です。
0721NAME IS NULL
垢版 |
2017/10/20(金) 22:05:07.71ID:???
>>720
「主キー名」って何を指しているの? 主キー制約の名前?
0723NAME IS NULL
垢版 |
2017/10/20(金) 22:20:44.01ID:???
制約名は重要なものじゃないから自動でつけられるだろ。制約だけ削除したい時にしか使われないと思う。
だから好きにすればいい。
0724NAME IS NULL
垢版 |
2017/10/20(金) 22:20:54.61ID:???
>>722
なるほど。その言葉の使い分けはとても重要なので今後気をつけてー
0725NAME IS NULL
垢版 |
2017/10/20(金) 22:28:05.26ID:???
>>713を知らなかった人が数名は居るってことか
0726NAME IS NULL
垢版 |
2017/10/20(金) 23:12:05.89ID:???
>>720
主キー制約のことを単に「主キー」とは呼ばないから
それだけは覚えといてよ
0727NAME IS NULL
垢版 |
2017/10/20(金) 23:15:46.29ID:???
試したことも試そうと思ったことも無いけど、制約名ってカラム名とかぶっても大丈夫なのか?
それと他のテーブルとかぶっても良いのか?
SQLServerの2008R2だと
>制約名は、テーブルが所属するスキーマ内で一意である必要があります。
って書いてあるんだが
0728NAME IS NULL
垢版 |
2017/10/20(金) 23:22:56.23ID:VNmP8QHa
だめだから自動のはSYS_連番とかになってるよね
自動付与のやつだとキー重複とかでエラーになったとき
エラーログとかでぱっとわからないからPK_表名にしてる。

インデックスの名前付けにいつも悩む。
表とか列とかつなげてくと長くなるし・・
0730NAME IS NULL
垢版 |
2017/10/21(土) 00:02:55.18ID:???
自称プロはOracleしか知らなそうだし、Oracle知らなそう
0731NAME IS NULL
垢版 |
2017/10/21(土) 00:50:01.04ID:Eth7MdL6
>>730
自分は意味のあることは書かず、他人批判、もっと言えば第三者から見ても嫌なやつと思われる言動をするのは、よほどひねくれているぞ。
0732NAME IS NULL
垢版 |
2017/10/21(土) 00:54:59.44ID:Eth7MdL6
>>723
制約が重要でない?

まあ汎用機世代の人間がテーブル名もカラム名も重要ではないと言うのと同じ感覚なのか?
0733NAME IS NULL
垢版 |
2017/10/21(土) 05:29:00.71ID:???
>>728
そもそもの>>689の話は、制約名を列名と同じにするって話じゃなかったのか
できるDBある?そんなことはできないで終わりの話じゃないのか
0734NAME IS NULL
垢版 |
2017/10/21(土) 08:11:31.61ID:???
DMLで多用するテーブル名、カラム名と基本的にDDLでしか使用しない制約名、インデックス名とじゃ
命名の重要度が違うのは当然だろう。
0735NAME IS NULL
垢版 |
2017/10/21(土) 09:00:42.05ID:???
>>731
批判に見えましたか!
自覚があるんやなぁ
0736NAME IS NULL
垢版 |
2017/10/21(土) 09:46:12.90ID:y12hXRx2
案の定質問の意味すらわからない奴が答えたがって場を荒すいつものパターンw
0737NAME IS NULL
垢版 |
2017/10/21(土) 09:51:46.91ID:???
それID見えてるやつのせいで起きるんだよなぁ
0738NAME IS NULL
垢版 |
2017/10/21(土) 09:58:25.58ID:y12hXRx2
>>737
他人のせいすんなクズw
0740NAME IS NULL
垢版 |
2017/10/21(土) 22:04:08.59ID:???
確かにID無しだけ見ると平和な良スレだな
0741名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2017/10/22(日) 15:51:36.27ID:???
>>733
できるのか
できるということはシステム的には問題ないって事だな
分かりにくくなったり手間が増えるかもしれんが

じゃあ、PK列名を全テーブルに対してユニークにする派の人なら
PK制約名をPKのカラム名と同じにするでもいいんじゃね
複合主キーどうするとかあるけどな

主キーは全部”ID”派の人はしらん
まあそう言う人は主キー制約の名前なんてそれこそ自動付加でいいんだろう
0742名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2017/10/22(日) 16:42:01.36ID:???
>>741
PKはテーブルに一つなのと制約名で重複しちゃダメなDBMSがほとんどなので
自動付与じゃなければPK_tablenameみたいにテーブル名を入れといたほうがいい
インデックスと違ってPK制約名からどの列がPKなのかを知りたいって人いないよね?

それに他の制約名と違ってPK制約名は意識的に扱うことが基本ないから自動付与で十分なことが多い
SQL ServerやPostgresなんかは自動付与でも分かりやすい名前になる
0743名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2017/10/22(日) 19:04:47.81ID:B6C5gZpT
今回初めて知って嬉しいのはわかるけどこんなにいつまでも引っ張るような話題ではない
0744NAME IS NULL
垢版 |
2017/10/22(日) 20:01:12.98ID:???
はいはい
自称プロなら管理の都合上、ちゃんと名前つける( ー`дー´)キリッ
だもんねww
0745NAME IS NULL
垢版 |
2017/10/22(日) 20:58:53.03ID:???
話題としては意味はあるけど、SQL質疑応答スレでやる内容ではないな
0746NAME IS NULL
垢版 |
2017/10/22(日) 22:38:37.90ID:B6C5gZpT
あまのじやくやのうw
0747NAME IS NULL
垢版 |
2017/10/22(日) 23:05:36.02ID:hqoDUL2z
すっごい不評なegov法令検索を設計したのは名古屋大学の外山教授ですか?
不評過ぎます
0748NAME IS NULL
垢版 |
2017/10/22(日) 23:07:02.13ID:hqoDUL2z
すっごい不評な法令検索つくったくせに賞をもらっている意味不明な教授ですか?
0749NAME IS NULL
垢版 |
2017/10/22(日) 23:53:08.71ID:???
データベース板でID見えてるやつは地雷であり荒らしよ
無視推奨
0750NAME IS NULL
垢版 |
2017/10/23(月) 00:27:40.32ID:mf1jBI9V
豊田真由子様に罵倒されたい
0751NAME IS NULL
垢版 |
2017/10/23(月) 13:55:18.88ID:???
JavaでSQL書いてRDB使いまくりたいんですがそうなるためにこれ読んどけ見たいなのありませんか?
DBにデータを記憶するのはもちろんDBから数値や文字列を取り出してjava側で変数に代入したりして使いこなせるようになりたいです。
0752NAME IS NULL
垢版 |
2017/10/23(月) 15:29:30.92ID:CzSV0ugc
>>751
そのRDBが何なのか?
0754NAME IS NULL
垢版 |
2017/10/23(月) 17:30:16.82ID:???
>>752
どれ使って良いかよく解らないんですが今はスッキリ解るシリーズのSQLの本読んでます。
MySQLかpostgreSQLがよさそうだなと思いますがSQLserverの無料版もよさそうだなと思って迷ってます。
>>753
使い方はよく解りませんがJDBCって言うの使えばどのDBMSでも多少ルールが違えど似たような扱いができるんですよね?
スッキリ解るシリーズの実戦編に少し書いてあった気がしますがほんの少しだけだった気がします。
なんかJavaとDBの連携した使い方がみっちりつまった本ってありませんか?初学者でもわかるようなので・・・
0755NAME IS NULL
垢版 |
2017/10/23(月) 17:33:48.73ID:ZhgI//rN
その選択肢はWindowsで動かす予定かな
DBはDBで単体でまず扱えるようにならないとあとあときついよ
0756NAME IS NULL
垢版 |
2017/10/23(月) 17:46:09.06ID:???
>>754
Javaデータアクセス実践講座

中で使ってるのはMySQL

javaとSQLがそれぞれわかっていることが前提条件になっているとは思う
一応これでJavaからMySQLに接続してどうのこうのってのは出来るようになった。
0757NAME IS NULL
垢版 |
2017/10/23(月) 20:14:17.85ID:mf1jBI9V
Javaというより、RDBの勉強の方がいいと思うけどな。JavaとRDBのやり取りは、知らないフレームワークを介さないのであれば難しいわけではない。
0758NAME IS NULL
垢版 |
2017/10/23(月) 20:48:54.31ID:???
>>757
>知らないフレームワークを介さないのであれば

学ばないでいつ知るんだよw
JDBCならともかくHibernateにしろSpring Data JPAにしろ
中身を把握するにはそれ相応の学習コストが必要
0759NAME IS NULL
垢版 |
2017/10/23(月) 21:09:51.32ID:mf1jBI9V
>>758
JDBC以外は全部、Java EEじゃないんですけど?

JDBCと言ってるのにいきなり謎のフレームワークを使えとはトレーナーとしてもありえない。
0760NAME IS NULL
垢版 |
2017/10/24(火) 01:31:44.05ID:???
謎のフレームワーク?
0761NAME IS NULL
垢版 |
2017/10/24(火) 02:12:17.03ID:Ftk4ZC9L
>>754 は超初心者だぜ?
0762NAME IS NULL
垢版 |
2017/10/24(火) 07:23:26.08ID:???
>>756
ありがとうございます。その本買ってみます。
0763NAME IS NULL
垢版 |
2017/10/24(火) 16:01:08.70ID:???
>>759
トレーナーとして?
プロの次はトレーナー
0764NAME IS NULL
垢版 |
2017/10/26(木) 00:31:39.63ID:Z3UH5ceX
なんでそんなにプロにつっかかるん?
ふいんき悪くなるからやめたら?
0765NAME IS NULL
垢版 |
2017/10/27(金) 10:04:02.60ID:???
SQL初心者です。
カラムをNULL許容型にするのは良くないと言った説明をいろんなサイトで見ます。
実際のところ、データが無い状態をNULLで表現する手法は、使わないほうが良いのでしょうか?
DBを使いまくっている専門家の人の意見をお聞かせください。
0766NAME IS NULL
垢版 |
2017/10/27(金) 10:41:51.90ID:???
>>765
専門家じゃないけど

> カラムをNULL許容型にするのは良くないと言った説明をいろんなサイトで見ます。
必要ないなら非許容にするべき
理由は一番下のリンク先とかを読んでみて

> 実際のところ、データが無い状態をNULLで表現する手法は、使わないほうが良いのでしょうか?
そのケースなら俺は普通に使う
ただNULLの扱いは初心者にはちょっと直感に反するところがあるから注意が必要
https://codezine.jp/article/detail/532
0768NAME IS NULL
垢版 |
2017/10/27(金) 11:19:35.89ID:7pjSfMZX
>>765
リレーショナルデータベースではデータがない、値がないことを単にNULLと定義しているので、勘違いしないように。
0769NAME IS NULL
垢版 |
2017/10/27(金) 11:41:03.34ID:???
自分はNULL活用してるけどな

0や空文字 と 未定義(未入力) とは意味合いが違う
フラグを別に設けるのも嫌だし

最近は言語側でも int? n; みたいなことが出来るようになって嬉しい
0770NAME IS NULL
垢版 |
2017/10/27(金) 11:48:09.91ID:???
インデックスがねぇ
0771NAME IS NULL
垢版 |
2017/10/27(金) 11:55:53.32ID:7pjSfMZX
>>770
NULLを検索するという設計がおかしい。
0772NAME IS NULL
垢版 |
2017/10/27(金) 12:42:08.79ID:???
あれ、WHERE 項目 IS NULL ってインデックス効かないの?
0773NAME IS NULL
垢版 |
2017/10/27(金) 14:49:04.82ID:???
NULLを検索する設計がおかしいとは思わんが
インデックスが効くかどうかはDBMSによる
0774NAME IS NULL
垢版 |
2017/10/27(金) 14:52:48.92ID:???
「とある項目が未入力のものを探す」という風なのだが、わざわざフラグ立ててやるの?
0775NAME IS NULL
垢版 |
2017/10/27(金) 14:54:13.98ID:7pjSfMZX
NULLを検索が多発している時点で考え方がおかしい。
0776NAME IS NULL
垢版 |
2017/10/27(金) 14:58:18.06ID:7pjSfMZX
>>774
言わんとすることはわかるが、なんで未入力とわかっている状態を検索して再度、確認する設計なのか?
0777NAME IS NULL
垢版 |
2017/10/27(金) 14:59:19.82ID:???
だから、「とある項目が未入力のものを探す」という風なのだが、わざわざフラグ立ててやるの?
机上じゃなくて現実の運用場面を経験したことないのか?
0778NAME IS NULL
垢版 |
2017/10/27(金) 15:01:04.60ID:???
>>776
完全に入力が完了しないとコミットできない仕様(打ちかけを許容しない仕様)は
ちょっとユーザーフレンドリーじゃないと思うよ?
0779NAME IS NULL
垢版 |
2017/10/27(金) 15:24:58.30ID:7pjSfMZX
>>777
そもそもNOT NULLにしなくてはいけないと思い込んでいる初心者の話だろうが?
0780NAME IS NULL
垢版 |
2017/10/27(金) 16:22:16.25ID:???
>>765
バグを生みやすいからNOT NULLにできるんならそうしたほうがいい
といっても全部排除するにはそれなりの手間がかかるので落とし所を決める必要がある

単にデータが無い状態を表現する場合じゃなく
データが「まだ」無い状態を表現する場合にNULLがよく使われる
簡単にデフォルト値が決められるようなものはNULL許容にしない
0781NAME IS NULL
垢版 |
2017/10/27(金) 16:40:52.06ID:???
>>778
入力完了済みのデータと入力途中のデータを一つのテーブルで管理するなら
完了済みかどうかの状態を管理するカラムを用意してそれを検索するんじゃないの?
特定のカラムがNULLだからXXという状態だと判断するって方法は極力避けたほうがいいと思うよ
0782NAME IS NULL
垢版 |
2017/10/27(金) 16:53:00.08ID:7pjSfMZX
>>780
変なこと言うな
0783NAME IS NULL
垢版 |
2017/10/27(金) 16:55:39.17ID:7pjSfMZX
NULL許容はC#用語か。RDB用語で言ってくれ。不親切。
0784NAME IS NULL
垢版 |
2017/10/27(金) 18:42:11.20ID:???
>>764
この流れを見れば
ふいんき悪くしてるのが誰かアホでも分かるよね?
0785NAME IS NULL
垢版 |
2017/10/27(金) 18:51:51.10ID:7pjSfMZX
>>784
相当な小心者だな
0786NAME IS NULL
垢版 |
2017/10/27(金) 18:53:20.75ID:???
この質問、例の人の自演だろ
あんま相手しないほうが良さそう
0787NAME IS NULL
垢版 |
2017/10/27(金) 18:53:29.86ID:???
はーい!ID :7pjSfMZX君でーす!!
0788NAME IS NULL
垢版 |
2017/10/27(金) 19:21:39.36ID:???
nullはminとかmaxとかの集計関数で無視したい場合とか
更新が必要な項目で未更新状態の意味合いで使うな
0789NAME IS NULL
垢版 |
2017/10/27(金) 20:01:02.67ID:???
そういえばオラクルはキー項目でもnull許可できる糞仕様だったな
またオラクル使いか
0790NAME IS NULL
垢版 |
2017/10/27(金) 20:47:43.07ID:???
Oracleでもさすがに主キーにNULLは入らない
外部キーには入るがそれは別に普通のこと

それよりOracleは長さゼロの文字列とNULLが同じ意味になるという
糞仕様をいつまでも捨てられずにいることが問題
0791NAME IS NULL
垢版 |
2017/10/27(金) 20:50:02.76ID:n2vV1nnl
>>790
地雷だな、それって
0792NAME IS NULL
垢版 |
2017/10/27(金) 21:07:35.53ID:???
ま〜たこうやって、ボラクルの話になっていくのであった。
0793NAME IS NULL
垢版 |
2017/10/27(金) 21:31:19.54ID:???
>>788
>nullはminとかmaxとかの集計関数で無視したい場合
条件で絞ればいいだけじゃないの?
0794NAME IS NULL
垢版 |
2017/10/27(金) 22:49:58.72ID:???
正規化してテーブルを増やしてデータの一貫性を保ちやすくするのは解ったんですが
テーブル増やしたらデータを追加するとき複雑になりませんか?
あっちのテーブルに日付情報入れて利用者IDいれてこっちのテーブルに金額入れてとか混乱しそうな気がしますが
0795NAME IS NULL
垢版 |
2017/10/28(土) 00:43:45.46ID:SXU3olx1
>>784
え?ふいんき悪いのか?アホ的には?
0796NAME IS NULL
垢版 |
2017/10/28(土) 04:44:21.82ID:???
NULL使わない人はデータが無い状態をどうやって表現するのですか?
0797NAME IS NULL
垢版 |
2017/10/28(土) 06:49:50.86ID:???
リレーションを分ける
0798NAME IS NULL
垢版 |
2017/10/28(土) 08:02:48.10ID:???
NULLは必要だよ。
例えば日付型の生年月日があるとして、
NOT NULL なら default値はどうすんの?
0800NAME IS NULL
垢版 |
2017/10/28(土) 08:50:09.46ID:???
create table T (
pkey int primary key,
a int not null,
b int null
)

こんなリレーションなら下のように分ける

create table TA (
pkey int primary key,
a int not null
)

create table TB (
pkey int primary key,
b int not null
)

元のaがnot nullでbがnullという条件はTBからTAへの外部参照制約で表現できる
0801NAME IS NULL
垢版 |
2017/10/28(土) 11:10:00.12ID:qpJvhhHo
>>800
それは方言のじゃないのか?
0803NAME IS NULL
垢版 |
2017/10/28(土) 11:37:56.32ID:???
>>800
いちいちそんな面倒なことやってんの?
0804NAME IS NULL
垢版 |
2017/10/28(土) 12:35:01.35ID:???
NOT NULL縛りの是非はともかく、手間としては正規化とたいして違わない気がするが。
正規化を「いちいちそんな面倒なこと」と言う奴は少ないだろう。
0805NAME IS NULL
垢版 |
2017/10/28(土) 12:58:56.42ID:???
違うだろ〜
ハゲ〜
0806NAME IS NULL
垢版 |
2017/10/28(土) 13:31:18.62ID:???
null 可能列が10個あったら表が10個増えるのか w
まあ頑張れやとかしか言えない
0807NAME IS NULL
垢版 |
2017/10/28(土) 14:56:15.88ID:???
単純に10個増えるとは限らないよ

派生関係でうまく処理できる場合もあるけど
任意項目があるたびに派生関係を作っていくのはあまり現実的ではないよね
0808NAME IS NULL
垢版 |
2017/10/28(土) 15:58:18.89ID:???
思いつきでアホなこと言ったばかりに言い訳が苦しいなw
0809807
垢版 |
2017/10/28(土) 16:39:43.64ID:???
>>808
俺は派生関係提示したやつと別人だぞ
0810NAME IS NULL
垢版 |
2017/10/28(土) 19:05:25.10ID:???
>>800
で、外部結合して結局項目bがNULLになるのな
0811NAME IS NULL
垢版 |
2017/10/28(土) 19:34:58.65ID:Nv4Gn8Ik
ID 強制表示に出来ないのかな
■ このスレッドは過去ログ倉庫に格納されています

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