skillup

技術ブログ

Database

SQL 更新系に関して

投稿日:

SQL実践入門、残り2章になりましたが、いやーむずいっす。

今回は9章を進めていますがSQLはもともと検索を主な用途として発展したため、SELECT文の使用がメインになります。

ですが、UPDATE文などでもSELECTをうまく利用することで効率的なSQLを書くことができます。

例えば下記のようなテーブルがあったとします。

テーブル名 omittbl

keycol | seq | val
———-+—–+—–
A | 1 | 50
A | 2 |
A | 3 |
A | 4 | 70
A | 5 |
A | 6 | 900
B | 1 | 10
B | 2 | 20
B | 3 |
B | 4 | 3
B | 5 |
B | 6 |

紙のデータだと割とよくあるパターンだと思いますが、直前と同じデータがあった場合、省略して書かなかったりします。

例えば A|2 は直前と同じですので値は50 A|5は70になります。

これを埋める場合、サブクエリを使います。

ステップとしては

まずvalがnullののレコードをベースに考え、nullでないseqを求める

これがスタートになります。

こちらを求めたのが下記のSQLです。

出力結果は下記になります。

kara_seq | not_kara_seq
———-+————–
2 | 1
3 | 1
5 | 4
3 | 2
5 | 4
6 | 4

 

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

SQL基礎 case式について

case式に関して。 集約系の関数では複雑な処理を一気に行うことができる。 case式は1列のみ有効。複数の列に対して行うことはできない。 case ~ when ・・・thenではwhenが評価され …

no image

SQL基礎 条件式はunionよりもcaseで

複雑な条件式があったときにcase式を使うことでパフォーマンスを向上させることができます。 ※一般にunionを使うよりも高速なことが多い。 例1 ある条件により別の列を使いたいとき、 [crayon …

no image

SQL基礎 ウィンドウ関数

SQLの基礎(主にSELECT)を whereはレコードに対しての集計、havingはレコードの集合に対しての集計 ビューは一時的なselect文なのでサブクエリとほぼ等価 条件分岐で出力項目を変えた …

no image

SQL基礎 case&groupbyの活用について

主に集計タイプの計算で大活躍するgroupbyについて。 主な用途は集計とカット。特にcase式と連動した集計はかなり使える 例 nameとageで構成されたテーブルがあるとして、年代ごとの人数を出し …

no image

DBの構造について メモリとHDD

データベースについてまたまた学習中。 覚えておきたいポイントなど。 データを収めておくべき媒体では「記憶コスト(単位金額当たりの容量)」と「アクセス速度」の2つが重要なパラメータ メモリとHDDでは前 …

アーカイブ