teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

NULLの補足

2016/09/28 10:29

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -41,8 +41,13 @@
41
41
  INSERT INTO sample_table (col1, col2, col3) VALUES (100, 500, 400)
42
42
  ```
43
43
 
44
+ 尚ビューを用いる場合も例に漏れず、
44
- 尚ビューを用いる場合も例に漏れず、KiyoshiMotokiさんの回答にあるようNULL演算の問題が起こり得ます。
45
+ KiyoshiMotokiさんの回答にあるようNULL演算の問題が起こり得ます。
46
+ これはMySQLに限った話ではなく、
47
+ 一般的DBMSは全てこのような挙動を取ります。
48
+ 参考までに[NULLの話題を扱ったQA](https://teratail.com/questions/41418)もありますので、
49
+ 興味があるようでしたら一読して下さい。
45
50
 
46
- その対策としては、
51
+ 対策方法としては、
47
52
  実テーブル側にカラムにNOT NULL制約をかけるか、
48
53
  SELECTする際に**ベンダ拡張のIFNULL関数か標準SQL関数のCOALESCE関数**を利用してNULLをエスケープするかしておきましょう。

1

レイアウト調整など

2016/09/28 10:29

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -29,14 +29,13 @@
29
29
 
30
30
  ビューのメリットとしては、
31
31
  **実体を持たないという特徴**があるため、
32
- **実テーブル側の値やデータ数が変わった場合も、
32
+ **実テーブル側の値やデータ数が変わった場合も、自動計算して出力**してくれる点です。
33
- 自動計算して出力**してくれる点です。
34
33
 
35
34
  ただしデメリットもまた実体を持たないことで、
36
35
  内部的にはビューで定義したSELECT句が起動されるだけなので、
37
36
  下手な使い方をするとパフォーマンス的に不利となります。
38
37
 
39
- ちなみにビューを経由したINSERTやUPDATEなどは色々制約があるため
38
+ ちなみにビューを経由したINSERTやUPDATEなどは色々制約があるので
40
39
  その際は素直に実テーブルに対して行うと良いでしょう。
41
40
  ```SQL
42
41
  INSERT INTO sample_table (col1, col2, col3) VALUES (100, 500, 400)
@@ -46,4 +45,4 @@
46
45
 
47
46
  その対策としては、
48
47
  実テーブル側にカラムにNOT NULL制約をかけるか、
49
- SELECTする際に**ベンダ拡張のIFNULL関数か標準SQL関数のCOALESCE関数**NULLをエスケープするかしておきましょう。
48
+ SELECTする際に**ベンダ拡張のIFNULL関数か標準SQL関数のCOALESCE関数**を利用してNULLをエスケープするかしておきましょう。