新卒1、2年目又はIT業界1、2年目向けに投稿。
・目次
・はじめに
・SQLとは
・カスタマイズ時に抑えたいポイント
・まとめ
はじめに
PGをする際、SQL文のカスタマイズする事があると思うが、その際に押さえておきたいポイントが
幾つかあるので、ここにその内容を記載していきます。
SQLとは (初学者以外の方はスキップ推奨)
SQLとは「Structured Query Language(ストラクチャード・クエリ・ランゲージ)」の略で
データベースを操作するための言語です。データベースにデータを挿入したり、検索したりする際に
使用します。データベースのなかには、数万・数百万件ものデータが保存されているが、
このSQLを使うことで効率的に操作をすることが可能になります。
※DBって何?という方は下記のURLを参照
https://www.sejuku.net/blog/8763
SQLの種類は基本的には下記4種類あり、今回はこのSQL文をカスタマイズする際の
ポイントの話です。
■検索(SELECT)
select 項目1, 項目2 from テーブル1 where 項目3='条件1';
■登録(INSERT)
insert into テーブル1 (項目1, 項目2) values('値1', '値2');
■更新(UPDATE)
update テーブル1 set 項目1 = '値1', 項目2 = '値2' where 項目3='条件1';
■削除(DELETE)
delete from テーブル1 where 項目3='条件1';
カスタマイズ時に抑えたいポイント、及びSQLの小技
##①インデントを正しく効果的に使う
インデントとは、行の先頭にTabキーやスペースキーで空白を挿入して「字下げ」を行うことです。
これを行うことで読みやすいし、メンテもしやすくなります。
悪い例
select
item.id, item.name, itemprice.price
from
item
left outer join itemprice on item.id = itemprice.item_id
where
(itemprice.price > 100
or
itemprice.price < 200)
order by item.id
上記のSQL、一発で解読できるでしょうか?
できるのであれば、この部分は省略して大丈夫です。
問題点
####SQLの構造がわからない
1.SELECT句, FROM句, WHERE句
2.FROM句内のテーブル構造
3.AND,ORの条件
インデントを行い、SQLを見やすくします。
良い例
select
item.id, item.name, itemprice.price
from
item
left outer join itemprice
on item.id = itemprice.item_id
where
(itemprice.price > 100 or itemprice.price < 200)
order by
item.id
いかがでしょうか?好みによって多少変わるでしょうが、先程と比べると随分と見やすくなった
と思います。
##②WHERE句の検索項目の値の位置を統一する
①と似た話にはなりますが、WHERE句の項目名の値の位置も統一するに越したことはありません。
悪い例
select
id,
name,
category_id
from
item
where
id = '1'
name = 'テスト商品'
category_id = 'カテゴリ1'
いかがでしょうか? 項目名の値の位置がズレているので見づらくはないでしょうか?
細かい所ではありますがこの辺りも統一した方が良いです。
良い例
select
id,
name,
category_id
from
item
where
id = '1'
name = 'テスト商品'
category_id = 'カテゴリ1'
上記①、②については「こんなこと」、と思うかもしれません。
しかし、正常な動作を実現する為、正確にレビューを受ける為
他の人に引き継ぐときに困らない為には必要な事だと思います。
##③SELECT句の,を入れる場所は、項目の前に入れる
SELECTのカンマを入れる時には項目の前に入れますでしょうか?
それとも項目の後に入れますでしょうか?
これは人それぞれ意見が分かれる所があると思うのですがカンマは項目の前に入れた方が良いです。
後ろにカンマを入れた場合
select
id
,name
from
前にカンマを入れた場合
select
id
,name
from
カスタマイズで以下のような変更をする時に影響します
・新しい項目の追加
・項目の削除
・コメントアウト
上記の修正は、カスタマイズ時に項目の最後を変更することが多いです。
カンマを前に入れると一行のみの変更ですみます。
カンマを後にすると2行の修正が必要です。
そういった理由で、カンマは前に入れた方が良いです。
価格を追加する場合
select
id
,name
,price
from
select
id,
name,
price
from
名前を削除する場合
select
id
,name
from
select
id~~,~~
,name
from
コメントアウトする場合
select
id
--,name
from
select
id--,
--name
from
##④特定の項目を前に表示したいときの小技
極稀ではあるが、エラーの調査などをする時に後ろの方にある項目を前に表示したい
という事があると思います。
例えば、商品(ITEM)テーブルの情報を出して、それぞれの価格のデータを調査していたとします。
select
*
from item it
商品名の項目は左にあり、価格がずっと右にあったとします。
これは調べにくいですよね。
どの商品が何円なのかを見るのに横にスクロールしないとみれなくってしまいます。
通常このようにSQLを書き直します。
select
it.name
,it.price
from item it
これで2つの項目を見比べることができます。
ですが、このような方法を使わずとも、テーブル名.*を使う事で、すべての項目を出したまま、項目を追加できます。
select
it.price
,it.*
from item it
エラーの調査等をする時にぜひお使いください。
##⑤WHERE句には 1=1を追加した方が良い
SQLをカスタマイズしている時、WHERE句に1=1と入っていることがあります。
経歴が浅い方はこれは何で入っているのだろうと思った事があると思います。
「WHERE 1=1」とは必ず正であるという意味です。
何があっても通りますので、正直1=1自体に意味はないのですが、
大事なのは、この記述でWHERE句を確定させられることにあります。
カスタマイズで抽出条件を変える時に便利です。
where 1 = 1
and 名前 = 'テスト商品'
and 価格 = '1000'
というSQLで、商品名の検索条件を外すカスタマイズの場合
このようにコメントアウトを追加するだけでOKになります。
where 1 = 1
--and 名前 = 'テスト商品'
and 価格 = '1000'
ですのでカスタマイズの時、下のように書くより簡単にできます。
where 名前 = 'テスト商品'
and 価格 = '1000'
まとめ、次回予告
・SQLとはデータベースにデータを挿入したり、検索したりする際に使用します。
・インデントは正しく、カンマの位置にも気をつけてカスタマイズをしよう。
・次回はPostgresqlを使用する時に押さえておきたいポイントを紹介します。