SQL

【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】構文…

【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入門 ——データベース&設計の基礎から楽しく学ぶ作者:西村 めぐみ技術評論社Amazon 目次 【1】和(union) 【2…

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

■ はじめに SQLで個人情報保護のためのマスキングを実装する 可能性がでてきたので、予習。 なお、実行環境は、PostgreSQL。 目次 【1】電話番号をマスキング 【2】Emailをマスキング 【1】電話番号をマスキング -- 出力結果:01-2345-**** SELECT RPAD(S…

【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文を考える…

【SQL】過去直近データを取得するには

SQL

■ はじめに SQLで、過去直近データを取りたい時って多々あるのでメモ。 目次 【1】方法1 1)構文 2)欠点 【2】方法2 1)構文 2)サンプル 【3】方法3:ROW_NUMBER + PARTITION BY 【1】方法1 * ただし、この方法には欠点がある 1)構文 SELECT…

【SQL】 サブクエリ / 副問合せ

SQL

■ はじめに SQL の サブクエリ について、メモ。 目次 【1】副問合せ(サブクエリ)とは? 【2】使いどころ 【3】使用例 例1: 「最新日付データ」の取得 【1】副問合せ(サブクエリ)とは? * SELECT文を入れ子にして記述する構文 => SELECT文中のSELE…

【Ant】 Ant で、SQL を実行する

sqlタスク 仕様 http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/CoreTasks/sql.html サンプル : PostgreSQL build.xml * SQL文 <project basedir="." default="sql.sample" name="SampleJavaCodes"> <target name="sql.sample"> </target></project>

【SQL】レコードが存在していなかったら、INSERTするには

SQL

レコードが存在していなかったら、INSERTするには * 条件に「NOT EXISTS」を利用する => WHERE NOT EXISTS (SELECT * FROM 【テーブル名】 WHERE 【主キー名】='【主キー値】'); サンプル 例1:PostgreSQL 使用するテーブル CREATE TABLE person ( id charac…

【SQL】最新日付データを取得するには

SQL

■ はじめに SQLで、最新日付データを取りたい時って多々あるのでメモ。 目次 【1】方法 【2】サンプル 【3】補足:過去直近データを取得する場合 【1】方法 SELECT * FROM テーブル名 AS A1 INNER JOIN (SELECT 主キー, MAX(カラム名) AS latest FROM テ…

【SQL】アクセス制限 ~GRANT文 / REVOKE文~

SQL

アクセス制限 http://www.techscore.com/tech/sql/10_01.html/ が、図もあって、一番わかりやすかった。 GRANT文 * 権限を付与する => 表の利用者に対し,表への問合せ,更新,追加,削除などの操作を許可する場合に使用 構文 GRANT 【権限名】 ON 【テーブル名…

【SQL】SQLで階層構造データを扱うことを考える

SQL

■ はじめに SQLで階層構造データを扱うことを考える 参考文献 http://gihyo.jp/dev/serial/01/sql_academy2/000501