X



トップページ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/
0690NAME IS NULL
垢版 |
2017/10/20(金) 19:35:23.02ID:MhmtGzT7
>>689
そんな疑問持ったことなかったなw何も考えずにPK_hageとかしてたけどw
おまえセンスいいかもw
0691NAME IS NULL
垢版 |
2017/10/20(金) 19:43:24.93ID:???
主キーは常に'id'だわ
0694NAME IS NULL
垢版 |
2017/10/20(金) 20:42:11.14ID:???
>>689
制約には名前をつけることができるが
主キー制約の場合はテーブル毎に一個しか持てないので
名前をつけようがつけまいが利便性は特に変わらない
(ので、主キー制約自体に名前をつけることは通常ない)
0695NAME IS NULL
垢版 |
2017/10/20(金) 20:56:42.26ID:RTm/vvXY
>>694
名前の無い主キーを作成出来るのですか?
0696NAME IS NULL
垢版 |
2017/10/20(金) 20:59:41.26ID:???
主キーの名前って言えば普通は列名のこと
PK制約の名前とは別だよ

CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,



↑こう書けばDBMSで規定されてる命名ルール使ってPK制約名が付けられる
0697NAME IS NULL
垢版 |
2017/10/20(金) 21:06:42.39ID:RTm/vvXY
>>696
「主キー制約」と「PRIMARY KEY 制約」は別物と言う意味に解釈できるのですが、
それで良いのでしょうか?
0698NAME IS NULL
垢版 |
2017/10/20(金) 21:06:52.62ID:aE0VLgo8
>>694
名前のない主キー制約はない。
0699NAME IS NULL
垢版 |
2017/10/20(金) 21:07:57.48ID:aE0VLgo8
>>697
それは日本語で言うか英語で言うかの違いで同じ
0700NAME IS NULL
垢版 |
2017/10/20(金) 21:11:53.19ID:???
制約に名前をつけなかった場合、OracleならSYS_○○、
DB2ならSQL○○など、システムが勝手につける名前がつく
0701NAME IS NULL
垢版 |
2017/10/20(金) 21:12:38.46ID:aE0VLgo8
>>697
主キー列(カラム)は、そのテーブルで主キー制約がある列(カラム)のこと。

単に主キーというひとが多いからよくない。

主キー列はただの列名。主キー制約名は主キー制約名。

主キー制約に名前をつけなくてRDBMSが自動的に名前をつけるが、プロなら管理の都合上、ちゃんと名前をつける。
0702NAME IS NULL
垢版 |
2017/10/20(金) 21:13:24.76ID:???
CREATE TABLE Persons (

PRIMARY KEY (ID)


こう書いても同じでDBが自動で名前を付けてくれる
0703NAME IS NULL
垢版 |
2017/10/20(金) 21:14:37.36ID:???
また自称プロかよww
0704NAME IS NULL
垢版 |
2017/10/20(金) 21:14:42.93ID:???
>>697
主キー制約 = PRIMARY KEY 制約 だよ。(主キー=PRIMARY KEY)
ひとつの列が主キーであるなら、その列の名前=主キーの名前、という理解でよい

主キーの名前の付け方にはいろいろな流儀があるが、
SQLを利用するフレームワーク (例えば Ruby on Rails)との関係で
id という名前にすることが最近は多い
>>690 が書いているように、pk_hage みたいな人も多い
(「サロゲートキー」で検索するといろいろ出てくるはず)
0705NAME IS NULL
垢版 |
2017/10/20(金) 21:16:35.15ID:???
>>704
PK_hageはプライマリキー制約の名前で列名じゃないよ
0706704
垢版 |
2017/10/20(金) 21:17:18.37ID:???
>>702 が書いているように、
RDBMSに主キーの値を自動的に割り振らせたいようなときにも
列名を id とする
0707NAME IS NULL
垢版 |
2017/10/20(金) 21:17:18.87ID:aE0VLgo8
たぶん主キー制約名で一番多い命名は、PK_(テーブル名)。
0708704
垢版 |
2017/10/20(金) 21:18:46.46ID:???
>>705
制約名にすることが多いけど、列名にする人もいる
(質問者はそのあたりがごっちゃになっているっぽいけど)
0709NAME IS NULL
垢版 |
2017/10/20(金) 21:18:51.27ID:???
制約名と列名を混同している人がいるな
複合キーの場合どうすると思ってるんだ?
0710NAME IS NULL
垢版 |
2017/10/20(金) 21:20:15.43ID:aE0VLgo8
ただ"ID"という名前の列を作って主キー項目にするのは、たいしたデータベースを必要としていない人の習慣。
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許可できる糞仕様だったな
またオラクル使いか
■ このスレッドは過去ログ倉庫に格納されています

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