SQL

【SQL】ストアド ~ 例外処理 ~

SQL

■ はじめに ストアドの例外処理について扱う 目次 【1】ストアド の 例外ハンドリング 1)構文 【2】ストアド の 例外スロー 1)構文 【3】カスタム例外を作成する 1)構文 【4】サンプル 例1:Hello world 例2:独自例外 【1】ストアド の 例外ハ…

【SQL】SQL ~ 正規表現関数 / REGEXP_XXX ~

SQL

■ はじめに 業務で、PostgreSQL / Snowflake において REGEXP_SUBSTR や REGEXP_REPLACE でてきたので 調べて、徐々にではあるがまとめておく。 なお、サンプルは、PostgreSQL17で試した。 SQL Fiddle https://www.db-fiddle.com/ 目次 【0】正規表現関数 …

【SQL】SQL ~ 大文字 / 小文字が含まれているか判定 ~

SQL

■ はじめに 小ネタ。 SQLのテーブル調査をしていて、 大文字 / 小文字が含まれているか判定する必要があったのでメモ。 【1】大文字 / 小文字が含まれているか判定するには [1] 大文字が含まれているかを判定 … WHERE 【対象項目】 != LOWER(【対象項目】);…

【トラブル】SQLFluffでエラー「ConfigLoader.get_global() is deprecated」が発生

■ はじめに SQLFluff でエラーがあり、他のメンバーが解決してくれたのだが 色々と勉強になったので、トラブルをメモっておく 【1】トラブル概要 SQLFluffでLinter実行後に「エラー内容」が表示 【2】エラー内容 ConfigLoader.get_global() is deprecated,…

【SQL】SQL ~ テーブル差分を調査することを考える ~

SQL

■ はじめに システムのマイグレーションで テーブル差分を調査する必要ができたので そのやり方を調べてみた 目次 【0】データ準備 1)使用データ 【1】方法1:差集合 EXCEPT / MINUS 1)サンプル 2)使用上の注意 【2】方法2:LEFT OUTER JOIN 1)…

【SQL】SQL ~ 集合演算の応用 ~

SQL

■ はじめに https://dk521123.hatenablog.com/entry/2023/01/16/000000 https://dk521123.hatenablog.com/entry/2024/09/12/003814 で、SQLの集合演算について、扱った。 今回は、SQLの集合演算を利用して、 delete + insert 後のデータ確認してみる。 ラン…

【SQL】SQL ~ INTERSECT ~

SQL

■ はじめに https://dk521123.hatenablog.com/entry/2023/01/16/000000 https://dk521123.hatenablog.com/entry/2024/09/12/003814 で、SQLの集合演算の中で 積集合(共通部分の算出)する際の INTERSECT を行うのだが 一度もちゃんと取り上げていなかったの…

【SQL】SQL Linter ~ SQLFluff / Custom rule ~

SQL

■ はじめに https://dk521123.hatenablog.com/entry/2024/02/28/225002 https://dk521123.hatenablog.com/entry/2024/03/04/180308 の続き。 業務において、SQLファイルを独自のルールでチェックをする必要がありそうなので SQLFluff の Custom rule (カスタ…

【SQL】SQL Linter ~ sqlfmt ~

■ はじめに https://dk521123.hatenablog.com/entry/2024/02/28/225002 の続き。 SQL の Linter (リンター) で「SQLFluff」がでてくるが、 どうも「sqlfmt」と併用して使うことも多いみたいなので 調べてみた。 目次 【1】sqlfmt 【2】環境構築 【3】Lint…

【SQL】SQL Linter ~ SQLFluff ~

SQL

■ はじめに SQL の Linter (リンター) について 使用したいって旨を頂いたので、調べてみたら 「SQLFluff」ってのがでてきたので、メモっておく 今回のこととは、まったく関係ないが、業務で以下のサイト教えてもらった。 キャリア形成や面接などで使えそう…

【SQL】Window関数 ~ 入門編 ~

SQL

「基本がわかるSQL入門」って本で Window関数について取り上げてたので、メモ。 基本がわかるSQL入門 ——データベース&設計の基礎から楽しく学ぶ作者:西村 めぐみ技術評論社Amazon 目次 【1】Window関数 【2】用途 【3】構文 【4】主なWindow用の関数 【…

【SQL】SQLの実行計画の見方

SQL

■ はじめに https://a5m2.mmatsubara.com/wp/?p=20255 で勉強になりそうな記事があったので徐々にメモ。 【1】初めに注目する点 * 無駄なテーブルの全体読み込みが発生していないか確認すること => TABLE ACCESS FULLのものに注目(「Seq Scan (PostgreSQL)…

【SQL】SQL ~ 関係演算 / 集合論 ~

SQL

■ はじめに SQL で前から集合ってことは知っていたが、 「基本がわかるSQL入門」って本で、 ちゃんと書かれていたので、メモ。 基本がわかるSQL入門 ——データベース&設計の基礎から楽しく学ぶ作者:西村 めぐみ技術評論社Amazon * Snowflake については、以下…

【SQL】SQLでマスキングを実装

■ はじめに SQLで個人情報保護のためのマスキングを実装する 可能性がでてきたので、予習。 なお、実行環境は、PostgreSQL。 目次 【0】Tips 1)RPAD / LPAD 【1】電話番号をマスキング 【2】Emailをマスキング 【0】Tips * 使用した文字列関数で、 Sno…

【SQL】複合キーの重複データを取得することを考える

■ はじめに Snowflakeのデータ取り込みで、 重複データの調査を依頼されたのでメモ。 目次 【0】お題 補足:単純にそのデータがユニークどうか調べる場合 【1】関連するSQL 1)GROUP BY 2)HAVING 3)自己相関サブクエリ 4)DISTINCT 【2】サンプル …

【SQL】日付・日時に関する操作する関数

SQL

■ はじめに Snowflake の セミナーを受けていて、 date_trunc() がでてきて、今後も使えそうだったので SQLの日付・日時に関する操作する関数を 徐々にメモっていく。 目次 【1】DATE_TRUNC関数 【1】DATE_TRUNC関数 * 指定した単位(「hour」「month」な…

【Hive】【SQL】全く関係ないテーブルを結合することを考える

■ はじめに Hive と Redshift で カウントなどの集計情報するのに 全く関係ないテーブルを結合したので、 そのことについて、メモっておく。 (もっといい方法があれば、随時、更新していく) 目次 【1】結合方法 方法1:JOINを使った結合 【2】サンプル …

【SQL】Window関数 ~ LAG / LEAD ~

SQL

■ はじめに SQL の Window関数 (分析関数) について扱う。 PostgeSQLだけでなく、Redshiftでも使える。 今回は、その中で、 LAG / LEAD に絞る。 なお、ROW_NUMBER / RANK については、 以前やった以下の関連記事を参照のこと。 ROW_NUMBER / RANK + PARTITI…

【SQL】SQLで変化(増加/変化なし/減少)について考える

SQL

■ はじめに SQLで変化(増加/変化なし/減少)について考える 目次 【1】ポイント 1)過去データと比較するために自己結合する 2)データ仕様上、歯抜けがあるかどうかを確認 【2】Oracle 11g 例1:年間売上の変化(増加/変化なし/減少) 例2:年間売上…

【Hive】【SQL】差集合 ~ EXCEPT / MINUS etc ~

■ はじめに https://dk521123.hatenablog.com/entry/2021/02/11/233633 で記載した警告文 ~~~~~~~ unix_timestamp(void) is deprecated. Use current_timestamp instead. ~~~~~~~ に対応し、クエリを修正したのだが、 修正前と修正後の確認で、SQL文「MINUS…

【Hive】【SQL】Window関数 ~ ROW_NUMBER / RANK + PARTITION BY ~

■ はじめに Hive でデータが積み重なるようなテーブル (例えば、ユーザ情報で入会・退会するようなデータ)に対して ユーザの最新/過去直近情報を取得するのに、 ROW_NUMBER + PARTITION BY を使ったので、メモする。 ついでに、RANK + PARTITION BY も載せ…

【SQL】EXPLAINステートメント

■ はじめに https://dk521123.hatenablog.com/entry/2020/02/22/002139 https://dk521123.hatenablog.com/entry/2020/08/31/171754 で、Redshiftの勉強した際に、パフォーマンスの分析する際に EXPLAINステートメントがでてきた。 以前、やったはずだが、す…

【SQL】グループ内のMAXデータを取得する

SQL

■ はじめに 性別・部署別の最高齢を取得するSQLを考える 相関サブクエリ / 自己相関サブクエリを使う。 相関サブクエリ / 自己相関サブクエリについては、 以下の関連記事を参照のこと。 https://dk521123.hatenablog.com/entry/2016/01/23/230608 目次 【1…

【SQL】複数の集計を1回のSQL文で行う方法を考える

SQL

■ はじめに 例えば... 全体数とその母数からさらに条件を付けてカウントしたい場合に それをサブクエリを使わずに、一回で行う方法を考える 目次 【1】解決案 【2】サンプル 【1】解決案 COUNT (条件 OR null) でカウント可能。 【2】サンプル * 全体数…

【SQL】初めの数文字が一致してたら同一データと見なすSQLを考える

SQL

■ はじめに 初めの数文字が一致してたら同一データと見なし、 重複を排除するSQL文を考える 目次 【1】解決案 【2】サンプル 【1】解決案 以下を使えば可能。 * サブクエリ * LEFT() * GROUP BY 【2】サンプル * DB : MySQL5.7 テーブル CREATE TABLE `m…

【SQL】【MySQL】 現在日時に近い順にソートし、重複を排除する

【0】お題 * 現在日時に近い順にソートし、重複を排除する 【1】サンプル * 顧客テーブル「customer」と予約テーブル「reservation」があり、 予約日時に対して、現在日時に近い順にソートし、 顧客名の重複を排除するデータを取得する 1)テーブル custo…

【SQL】ALTER TABLE ~ テーブル制約変更 編 ~

SQL

■ はじめに https://dk521123.hatenablog.com/entry/2016/06/16/220624 の続き。 今回は、テーブル制約変更を扱う 目次 【1】PRIMARY KEY制約 【2】UNIQUE制約 【3】Not null制約 【4】制約の削除 * 各制約(= CONSTRAINT)については、以下の関連記事を…

【SQL】ALTER TABLE ~ テーブル変更 編 ~

SQL

■ はじめに https://dk521123.hatenablog.com/entry/2010/07/09/201233 の続き。 今回は、テーブル変更するための「ALTER TABLE」を扱う 目次 【1】表名を変更する 【2】表の項目追加 【3】表の項目削除 【4】表の項目のデータ型 / 文字列長の変更 【5…

【SQL】相関サブクエリ / 自己相関サブクエリ

SQL

■ はじめに https://gihyo.jp/dev/serial/01/sql_academy2/000901 などで、 「SQLでループ→ 相関サブクエリ」とあるので、 相関サブクエリについて、学ぶ。 目次 【1】相関サブクエリ / 自己相関サブクエリ 【2】相関サブクエリの捉え方 【3】使用上の注…

【SQL】SQLを書くコツ

SQL

■ はじめに * 書籍やサイトなどで、気になった事をメモる。 目次 【1】FROM から書く 【2】SQLを集合指向と捉える 【3】ループは GROUP BY句と相関サブクエリで置き換える 【1】FROM から書く SQL文を考える順番は、以下の順番で考える。 SQL文を考える…