0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

現場でよく使うSQLまとめ ver2

Last updated at Posted at 2022-04-05

SQL実行環境

  • PostgreSQL 9.4
  • A5:SQL

NULL値控えるために使っていたCOALESCE()。実は

-- 今まで使ってた感じ 
-- A = NULLかどうかわからない値
SELECT COALESCE(A,0); 
-- 結果:前の値がNULLだったら0をもらう, NULLではないのであればそのまま

-- 実はこういう意味だった。
-- 'A','B','C'は全部NULLではないとしたら
SELECT COALESCE('A','B','C');  --結果は'A'
SELECT COALESCE(NULL,'B','C');  --結果は'B'
SELECT COALESCE(NULL,'B',NULL); -- 結果は'B'

前からNULLか調べてNULLだったら、次の値を調べる。NULLではない物が出るまで続くらしい。
NULLかも知らない複数の値の中で、どある順番でNULLではないものが取りたい時使ってみる。

参考:https://qiita.com/ren0826jam/items/b442bb9120a4671f90b8

IN / NOT IN

select *
from m_kaihi -- 会費テーブル 
where nyukin_kubun = 12 OR nyukin_kubun = 4 -- 入金区分
where nyukin_kubun IN (12, 4)

上と下のWHERE句は同じ意味。下の方を使いたい。とってもシンプルです。
NOT INも覚えたいです。

参考:https://qiita.com/ren0826jam/items/b442bb9120a4671f90b8

UNION

テーブルたちを結合する

SELECT
   A
   , B
   , C
FROM table1
UNION
SELECT
   A
   , B
   , C
FROM table2
UNION
SELECT
   A
   , B
   , C
FROM table3

※注意点:UNION と UNION ALL の違い
UNION と UNION ALL の違いは、重複行の扱いです。
UNION は、重複行を除外します。UNION ALL は重複行も全部含みます。

参考:https://pontz-rw.hatenablog.jp/entry/2019/10/13/000000

WITH句

WITH T3 AS (
        SELECT
            id
            , bula
        FROM
            some_table        
)
, T4 AS (
        SELECT
            ST.id
            , bulabula
        FROM
            some_table ST
        LEFT JOIN T3 
            ON ST.id = T3.id
        WHERE
            ST.id = 1111 AND T3.bula = 0  -- WITH句中でT3を参照できる
)
SELECT
 *
FROM
    sometable T1
LEFT JOIN sometable T2 
    ON T2.id= T1.id
LEFT JOIN T3        -- JOINの後()中にSELECT文を書かなくて済む
    ON T3.id= T1.id
LEFT JOIN T4
    ON T4.id= T1.id

WITH句を教えられた後からは副問い合わせはほぼWITH句で書いています。
今までは JOIN の後( )中に書くのが当たり前だと思ったが、WITH句は読みやすいし書くのもシンプルです。副問い合わせのSELECT文の中にまたSELECT文を書こうとすると、わけわかんないですね。。
WITH句は中にSELECT文以外の物も書けるらしいがまだ次調べよう!

SQLを書く順番

あんまり意識してないが、下のとおりやってみる!
SELECT → FROM → JOIN(まず必要なテーブルを全部くっつける感じ) → WHERE → GROUP BY → HAVING → ORDER BYの順でSQL文を書く

参考:https://qiita.com/ren0826jam/items/b442bb9120a4671f90b8

SQLを高速化するコツ・テクニック

① SQLで暗黙の型変換は回避するよう考慮する
 where句のカラム型をチェック!
② キーワードは大文字
SQLのキーワードはすべて大文字で書く!
③ IndexがかかってるカラムをWHERE句で指定した方が検索が早いらしい!
④ 行数を数えるときは「COUNT(カラム)」を使う。
 カラムはインデックスが設定されているのを使う事で処理が速くなる!

参考:https://style.potepan.com/articles/26070.html#SQL

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?