原則を知る ーDRYー

こんばんは、原田です。

さっき地元の知り合いから電話がきて、地元に帰りたくなりました。はい。

 

 

最近、上司に「どれが良い実装で、どれが悪い実装なのかが分からない」と相談しました。

すると、「原則を知るといい。」という助言を頂きました。

原則  …特別な場合は別として、一般に適用される根本的な法則。

確かに、原則を知ることは、いいコードが分かる導きになるかもしれないと思い、これからちょいちょい原則を書いていこうと思います!!!

 

ではでは、

今日の原則は〜・・・・

DRY

です。

乾燥という意味ではありません。(知らなかったのは私だけですかね?)

DRY(Don’t  Repeat Yourself)

重複を防ぐ考え方。

Single Source of truthとも言うそうです。

 

なぜ重複を防いだ方が良いのか?

重複が多い→変更時に変更箇所が増える→時間がかかる

情報量が多い→明確でない→不一致が生じる可能性がある

という点があるからだそうです。

 

ということで、今後はまとめることができたり、同じような実装が複数ある場合は、関数化したりしてDRYに努めようと思います。

いろんなSQL ~副問い合わせ編~

どうも、原田です。

急に寒くなりましたね、、。私はインフルエンザというものにかかったことがないという自慢があります!

 

ナッガーイSQLって本当読む気失せますよね。なんでwhereでまたselectしてんの?とかとか!けどSQLって便利なので、頑張って取得したいっす(´ι_` )

::::::::::::本日のラインナップ::::::::::::::::::::::

一、副問い合わせってナンダ

二、DISTINCT,  EXIST,   IN….

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

 

一、副問い合わせってナンダ

さっきも言ったんですが、selectの条件でwhereを使いますが、そのwhereの中にまたselectしてる(selectをネストしてる)!なにこれ〜!?

→これが「副問い合わせ」です。

わかりやすく書こうとすると二文とかにして、文を分けれるのですが、つなげっちゃったのが「副問い合わせ」とやらです。

《シチュエーション》’原田泰三’と年齢が上の人の名前を知りたい時

「副問い合わせ」使った時(一文)

イコール

「副問い合わせ」使わない時(二文に分けた時)

SELECT age FROM member_all WHERE name=’原田泰三’;

//age=20を取得

をクエリした後、そこで得たageの値(age=20)をもとに、、、

SELECT  name FROM member_all WHERE age>20;

 

()内のselectが副問い合わせ、外側のselectが主問い合わせと呼ぶらしいです。

 

では、もっといろんな大文字を使って、どんな感じで使ってるのか?

 

 

二、DISTINCT,  EXIST,   IN….

□DISTINCT

取り出したレコード(結果)から重複する行の削除を行う

EXIST  

副問合せによって返されたレコードが一つでもあれば真でそのレコードを返す,なければ偽でそのレコードを返さなさい。

□IN    

  副問合せによって返された値のいずれかと等しいかを評価する

例文;

INSERTとUPDATE

この二つの使い分けが曖昧だっだので、簡単に調べた件!by原田

私は「違い」を知るのが好きみたい。

今更言いますが、原田はパソコン系・IT系クソド素人です。

ぜひ間違って入れば、ツッコミお願いします。

 

端的に言うと、、

指定テーブルに既に存在する項目だが、値が入っていないものを新たに追加したい時はINSERT 。基本全く同じ情報があっても、上書きされない!

指定テーブルに既に存在する項目で、値が既に入っているものを更新したい時はUPDATE。条件に引っかかるものは全て上書きされちゃう!

INSERTって新たに項目も追加できるもんやとおもってた!!!

UPDATEって下手になにも考えず実行しちゃうとめちゃくちゃ危ない!!

 

 

例 INSERT INTO station (‘name’) VALUES(‘tokyo ‘);

◯INSERT文
INSERT INTO テーブル名 [(列名,列名…)]
VALUES    (値,値…)

 

例 UPDATE station SET name=’tokyo’ WHERE id=’1′;

◯UPDATE文
UPDATE テーブル名
SET
列名 = 値
WHERE
条件