タグ

SQLに関するdaikixのブックマーク (22)

  • BigQueryで利用しているSQLFluffルールを公開してみる

    はじめに SQLの書き方は開発対象や人・チーム事情によっても様々なので、チーム開発で利用しているSQLFluffの設定を公開してみる。 なぜこのような設定・ルールになったか理由を紹介します。 ちなみに、私達のチームではBigQueryで比較的多くのカラム数やstruct型によるネスト構造を扱っているので、他のDBや他のチームでは合う/合わないはあるかもしれない。 SQLFluff 設定 下記がチームメンバーで合意した SQLFluff 設定。 なお、下記参考として公式の Rules Reference です。 [sqlfluff] dialect = bigquery max_line_length = 120 exclude_rules = # joinするときTable Aliasを使いたいので除外する aliasing.forbid, # Table Aliasのas句の省略ができる

    BigQueryで利用しているSQLFluffルールを公開してみる
    daikix
    daikix 2024/05/02
  • データ分析のためのSQLを書けるようになるために

    はじめに 稿では分析用クエリをスラスラ書けるようになるまでの勉強方法や書き方のコツをまとめてみました。具体的には、自分がクエリを書けるようになるまでに利用した教材と、普段クエリを書く際に意識していることを言語化しています。 想定読者として、SQLをガンガン書く予定の新卒のデータアナリスト/データサイエンティストを想定しています。 勉強方法 基礎の基礎をサッと座学で勉強してから、実践教材で実際にクエリを書くのが望ましいです。 実務で使える分析クエリを書けるようになるためには、実務経験を積むのが一番良いですが、だからといって座学を御座なりにして良いというわけではありません。SQLに自信がない人は、一度基礎に立ち返って文法の理解度を確認した方が良いと思います。 書籍 SQL 第2版: ゼロからはじめるデータベース操作 前提として、SQLに関する書籍の多くがデータベース運用/構築に関する書籍がほ

    データ分析のためのSQLを書けるようになるために
    daikix
    daikix 2024/04/02
  • あなたの遅延はどこから? SQLから! 〜患部に止まってすぐ効くSQLレビューチェックリスト 年初め特大サービス号〜 - ANDPAD Tech Blog

    あけましておめでとうございます! 今年は異世界放浪メシのアニメが放送されるらしいので楽しみなバックエンドの原田 (tomtwinkle)です。 内部で運用しているSQLレビューチェックリストの一部を抽出し思いつきで追記して行った結果、結構な分量になってしまいました。 暇な時でも流し読みして頂けるとありがたいです。 Motivation SQLレビュー観点 大きくSQLが変更される修正の際にはEXPLAINをレビュー内容に加える 検索のキーにINDEXを使用しているか SQL発行回数がN+1(1+N)の構造になっていないか サブクエリを利用したSQLはパフォーマンス要チェック Viewの利用は基的に禁止 CROSS JOINは禁止 WHERE句で十分に絞った検索をしているか 必要なcolumnだけSELECTしているか レコード数だけ必要な場合にCOUNT用のSQLを発行しているか 集計関

    あなたの遅延はどこから? SQLから! 〜患部に止まってすぐ効くSQLレビューチェックリスト 年初め特大サービス号〜 - ANDPAD Tech Blog
    daikix
    daikix 2023/01/12
  • SQL Server / SQL Database パフォーマンスチューニングのための基礎知識 - Qiita

    投稿について 投稿は、Microsoft Learn で公開されている、「SQL Server でクエリのパフォーマンスを最適化する 」を確認していた際に、いくつかの情報を補足しながら日語化したものとなります。 SQL Server / Azure SQL Database のパフォーマンスチューニングには様々な方法があり、「このケースであればこの方法」ということを断定することは難しいのではないでしょうか。 そのため、様々なケースで利用することが可能な、チューニング方法の基礎知識 (一般論) はとても重要です。 投稿で、確認を行った「SQL Server でクエリのパフォーマンスを最適化する 」は、チューニングに対しての体系的な考え方を無償で学ぶのには適しているコンテンツではないかと思いました。 チューニング系の講義は様々なノウハウが絡みますので有償が多く、ノウハウがない状態で体系

    SQL Server / SQL Database パフォーマンスチューニングのための基礎知識 - Qiita
    daikix
    daikix 2020/08/27
  • SOQL入門 SOQLにおけるJoinの方法

    SOQLはJOINが出来ない…そう思っていた時期が僕にもありました。 例えば「あの取引先に紐づく取引先責任者を全部削除したい」とかそういう話はままあると思います。普通のSQLであれば「あの取引先」のIdが’hogehoge’だったとして SELECT c.Id From Account INNER JOIN Contact ON a.Id = c.AccountId Where a.Id = ‘hogehoge’ なんてするんでしょう。SOQLではテーブルの結合が出来ず、JOINなんてもんは出来ません。 ただjoinが出来ないと参照関係のオブジェクトを持って来たい場合、一回クエリ引いてそのIdを変数に入れて…とかいう七面倒なことをしなければなりません。Query Editorも使えないし、面倒すぎる!…なんて思ってた時期がありました。 SOQLにおけるJOINは子と親で記法が違う 普通のS

    SOQL入門 SOQLにおけるJoinの方法
    daikix
    daikix 2019/10/20
  • 500ページ超えの新刊『わかりみSQL』を支える技術 - Qiita

    500ページを超える新刊『わかりみSQL』を、技術書典7 (2019-09-22) で出します。 SQL初心者はもちろんのこと、SQLに挫折した人こそ読んでもらいたい入門書になってます。 (好評だった『オブジェクト指向言語 解体新書』のSQL版だと思えばだいだいあってます。) 新刊の紹介はこのくらいにして、この記事では「初心者向けのを書く上で気をつけたこと」と「500ページ執筆を支えるキーボード」の話をします。 初心者向けのを書く上で気をつけたこと 『わかりみSQL』では、自分が初心者のときに「こういうふうに教えてくれれば良かったのに‥‥」と感じたことをつぎ込んでいます。ある意味、怨念のカタマリみたいなですねw 「こういうふうに教えてくれれば良かったのに‥‥」とはどういうことか、紹介しますね。 過程の説明を省略しない 初めと終わりだけを説明されても、あるいは問題点と解決方法だけを説明

    500ページ超えの新刊『わかりみSQL』を支える技術 - Qiita
    daikix
    daikix 2019/09/20
  • [RDBMS][SQL]トランザクション分離レベルについて極力分かりやすく解説 - Qiita

    技術系の記事色んなところで書いてたけど、ここにまとめることにした。昔書いてたやつは綺麗バッサリ消そうかと思ったんだけど、やたらView数が多いやつが何個かあったので気が向いた時に乗り換えしつつ(予定)今の知識で更新。 概要 以下の3つの不都合な読み込み現象がある。この意味に関しては後ほど解説。とりあえずはどれもRDBMSのACID特性のI(Isolation-隔離性)から外れたものと思ってくれればいい。 ダーティリード ファジーリード(非再現リード,ノンリピータブルリード) ファントムリード で、題のトランザクション分離レベルは4つのレベルがある。 READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 下に行くほど高レベルで上に行くほど低レベル。 高レベルになればなるほど、先ほどの不都合な読み込み現象が発生しなくなる。が

    [RDBMS][SQL]トランザクション分離レベルについて極力分かりやすく解説 - Qiita
    daikix
    daikix 2019/05/17
  • FirebaseのRealtime DatabaseでSQLのWhere句っぽい感じでデータを検索しよう | ひま缶

    Realtime DatabaseってNoSQLなのでSQLが使用できないんですよね。 なので検索するときどうやるんだっけなといつも迷ってしまうのでまとめときます。 データは以下の通りになっています。 { "users" : { "aaa" : { "age" : 21, "name" : "sato" }, "bbb" : { "age" : 18, "name" : "suzuki" }, "ccc" : { "age" : 20, "name" : "tanaka" }, "ddd" : { "age" : 17, "name" : "takahashi" }, "eee" : { "age" : 25, "name" : "ito" } } }

  • 【GWにおすすめ】サーバーレス開発部でおすすめされた技術書を17冊紹介します | DevelopersIO

    今月入社したサーバーレス開発部の佐藤です。ジョインブログから初めての投稿です。 札幌オフィス勤務予定なのですが、札幌にサーバーレス開発部のメンバーがいないため、1ヶ月間、会社の文化になれるために東京の岩町オフィスに出社しています。前職からの働きかたのギャップが激しいですが、毎日楽しく仕事をしています。 先日、サーバーレス開発部のSlackチャンネルで、おすすめの技術書を紹介してくれという雑なポストをしたところ、すごい勢いで技術書が流れてきたので、保存する意味も込めてブログにまとめてみました。 おすすめ理由については、サーバーレス開発部の方々に直接聞いたものを載せています。 おすすめされた技術書 Webを支える技術 Webを支える技術 おすすめ理由 当たり前に使っているWebやREST、HTMLなどベースとなる技術歴史からふりかえっており単純に読み物として面白いです 普及している技術の思

    【GWにおすすめ】サーバーレス開発部でおすすめされた技術書を17冊紹介します | DevelopersIO
    daikix
    daikix 2019/04/26
  • SQLQL は GraphQL にとってなんなのか

    14. 少し複雑なクエリ 鍵付きユーザーの「いいね」について名前を 「匿名」にして出している WITH comments AS ( SELECT comments.id, content, users.name AS user_name, comments.created_at FROM comments JOIN users ON comments.user_id = users.id ), likes AS ( SELECT COALESCE(users.name, '匿名') AS user_name, likes.created_at, comment_id FROM likes LEFT OUTER JOIN users ON likes.user_id = users.id ) SELECT comments.id, content, comments.user_name ,

    SQLQL は GraphQL にとってなんなのか
    daikix
    daikix 2019/03/26
  • 【SQL】複数の条件のcountを1回のクエリでおこなう at softelメモ

    問題 こんなテーブル a があります。 create table a (id int, flag int); こんなふうにデータを入れて、 insert into a (id, flag) values (1, 1), (2, 1), (3, 0), (4, 0), (5, 1); こんなふうになっているとします。 select * from a; +----+------+ | id | flag | +----+------+ | 1 | 1 | | 2 | 1 | | 3 | 0 | | 4 | 0 | | 5 | 1 | +----+------+ なるべく単純な1つのSQLで、すべてのレコード数と、flag=1のレコード数と、flag=0のレコード数を取得せよ。 なお、サブクエリは使わないこと。 ヒント 集計を3つしたいので、こうなる? select count(????), c

    【SQL】複数の条件のcountを1回のクエリでおこなう at softelメモ
    daikix
    daikix 2019/03/19
  • CSVのためのSQLライクなクエリ言語 – csvq – を試してみた #csvq | DevelopersIO

    今朝方、CSVに対してSQLを実行できる「csvq」というライブラリを知りました。業務の関係で快適にCSVを操作する方法を求めていたこともあって、操作感等含めて試してみました。 mithrandie/csvq 特徴 関係するオプションも合わせて表記してみました。 標準のデリミタがコンマ--write-delimiter 出力先指定オプションがある --out 色つけできる --color 標準で罫線がついてる--format タイムゾーンの設定ができる --timezone 手軽に対話シェルとして実行できる Ambiguous Character を全角文字の幅で表示可能--east-asian-encoding ゼロ幅スペースを半角文字としてカウント--count-format-code 改行コードを指定可能--line-break CSVに対して各種操作を行う際に、あると助かるオプショ

    CSVのためのSQLライクなクエリ言語 – csvq – を試してみた #csvq | DevelopersIO
    daikix
    daikix 2019/02/14
  • 『NOT IN』『NOT EXISTS』の検証

    『INDEX』のキホンで、否定条件(NOT IN等)はINDEXが効かず性能的に使用は避けるべきと書きました。 確かに「NOT IN」より「NOT EXISTS」を使うべきだとされていることもありますが、しかし昨今のRDBでは、何かと最適化もされているので実のところどうなのでしょうか・・・ この他にも「LEFT JOIN + IS NULL」も代用できますが、これらの違いを各RDBでの性能の違いを検証してみました。 検証用テーブル 『JOIN と SELECT列のサブクエリー』で使ったテーブルを使用しました。 出力内容 製品マスタで、まだ受注されていない製品を抽出する。 求めたい表イメージ

    『NOT IN』『NOT EXISTS』の検証
    daikix
    daikix 2019/01/18
  • 同一グループの中で最大のレコードを取得する SQL を書く | Webシステム開発/教育ソリューションのタイムインターメディア

    +----+----------+------------+---------+ | id | group_id | updated_at | comment | +----+----------+------------+---------+ | 1 | 1 | 2013-12-01 | C | | 2 | 2 | 2013-12-01 | A | | 3 | 1 | 2013-12-02 | B | | 4 | 2 | 2013-11-30 | D | +----+----------+------------+---------+ CREATE TABLE sample_table ( id int(11) NOT NULL, group_id int(11) NOT NULL, updated_at date NOT NULL, comment varchar(60) NOT NU

    同一グループの中で最大のレコードを取得する SQL を書く | Webシステム開発/教育ソリューションのタイムインターメディア
    daikix
    daikix 2019/01/18
  • B-treeインデックス入門 - Qiita

    B-treeがMySQLで使用されている背景から、B-treeインデックスの構造、そしてそれに基づいたインデックスの使用方法の入門編です。以下の流れに沿ってまとめていきます。 インデックスってなに? B-treeってなんでインデックスに使われているの? B-treeインデックスの構造 インデックスの使用方法 ※ 勉強をかねてまとめていることもあり、間違っている箇所がございましたら教えていただけると嬉しいです。 インデックスってなに? 全体の内容の中から特定部分を探すために使用する、の索引のような概念のことです。これを用いることで、検索を高速化することができます。 特定の項目がのどこに載っているかを確認するために索引を調べることで、全ページを順に調べなくても、その項目が登場するページ番号がわかる MySQLのストレージエンジンでも、インデックスが同様の方法で利用されており、インデックスの

    B-treeインデックス入門 - Qiita
    daikix
    daikix 2019/01/15
  • PostgreSQLの実行計画の処理

    インデックスとテーブルへのアクセスSeq ScanSeq Scanは、ディスクに保存されている通り(TABLE ACCESS FULLのように)に関係(テーブル)をスキャンします。 Index ScanIndex ScanはBツリー走査を行い、 一致する全ての値を検索するのにリーフノードをたどり、対応するテーブル上のデータを取り出します。INDEX RANGE SCANに続いてTABLE ACCESS BY INDEX ROWIDを行うのに似ています。第1章1, 「 SQLインデックスの内部構造」も参照して下さい。 いわゆるインデックスフィルタ述語は、Index Scanの パフォーマンス問題を引き起こします。次の節でその問題の 識別方法を説明しています。 Index Only Scan (PostgreSQL 9.2以降)Index Only ScanはBツリー走査を行い、一致する全ての

    PostgreSQLの実行計画の処理
  • SQLで身につける!初めてのレコメンド 〜 基礎から応用まで ~

    ビッグデータをビジネスに応用する上で需要の高いアウトプットとして、ユーザーの興味・関心に適した商品を自動的にオススメする「レコメンド」システムが挙げられます。 DMM.comラボでも、2015年のビッグデータ部立ち上げ後、Hadoop/Sparkを用いた内製レコメンドの導入を続け、2017年3月には400を越える箇所(Webページ、メルマガ等)で利用されています。 一口にレコメンドといっても、ユーザーの行動ログを用いた相関分析や協調フィルタリング、アイテムのメタデータを用いたコンテンツベースレコメンド、機械学習/ディープラーニングを用いた類似度計算など、要素技術は多岐に渡ります。 また、実際にレコメンドシステムを運用していくためには、レコメンドのロジックだけでなく、レコメンドを表示する際の工夫や、サービスに特化した精度のチューニング、パフォーマンスやセキュリティの考慮なども必要となってきま

    SQLで身につける!初めてのレコメンド 〜 基礎から応用まで ~
    daikix
    daikix 2019/01/14
  • SQLスタイルガイド - Qiita

    はじめに 文書はSQLのスタイルガイドです。 PythonRubyのようなプログラミング言語には有名なスタイルガイドがあり、共通のレイアウトルールに沿ったインデントや命名規則に則ったコードが生み出されています。 一方、SQLには知名度のある統一されたスタイルガイドがありません。 そのため、思いのままに書かれたSQLが散見されます。 もちろん、SQLを使ってアドホックな分析を行う場合は、必ずしもルールに沿う必要はなく、効率よく書いても良いと思います。 しかし、Webサービスやバッチの中に組み込むようなもの、つまり自分以外の誰かに読まれるSQLは、多くのプログラミング言語同様に何らかのスタイルガイドに沿うことで多くのメリットを享受できると思います。 クエリが構造化され、可読性が高まる バグの発見や修正が容易になる 改行位置やインデントなどのフォーマットの悩みが解消される スタイルガイドを共

    SQLスタイルガイド - Qiita
    daikix
    daikix 2019/01/06
  • 【mySQL】様々な結合を分かりやすくまとめた!これで使い分けは完璧(なハズ)! | NullNote

    結合(left join と right join) の違いを以前まとめましたけど・・・結合ってこれだけじゃないんですよね・・・というわけで、今更ですが!! どの結合はどうなるのか毎回調べてる自分のために、分かりやすくまとめたよ!! サンプル画像のテーブルについて 以下のようなテーブルでやってみてます。 内部結合(INNER JOIN) カラム同士を結合する [sql] SELECT * FROM テーブル1 INNER JOIN テーブル2 [/sql] ONで結合規則を付けると、カラムの値が一致するデータのみ取得 [sql] SELECT * FROM テーブル1 INNER JOIN テーブル2 ON テーブル1のカラム = テーブル2のカラム [/sql] CROSS JOIN ~ ON 結合規則 でも同じ結果が出せます [sql] SELECT * FROM テーブル1 CROS

    【mySQL】様々な結合を分かりやすくまとめた!これで使い分けは完璧(なハズ)! | NullNote
    daikix
    daikix 2018/12/07
  • 「相関サブクエリ」とは何かを理解して,複雑なSQLでも読めるようになろう - 主に言語とシステム開発に関して

    SQLの「相関サブクエリ」がわかれば・・・ 巨大なSQLが,迷わずに読めるようになる。 「関数」のような,便利なサブクエリを書けるようになる。 以下では, 「相関サブクエリ」とは何か? 普通のサブクエリ(非相関サブクエリ)やJOIN操作とは何が違うのか? 多重にネストされた,巨大なSQLの読み方は? という点を論じる。 サンプルデータ,および全体の方針 (1)サブクエリ無しでJOIN (2)INで非相関サブクエリ (2)の補足:サブクエリを「関数」と考えてみよう (3)EXISTSで相関サブクエリ 他のサンプル 巨大SQLの読み方 サンプルデータ,および全体の方針 まず,相関サブクエリの説明のために,以下のようなテーブルを例として取り上げる。 table1が,普通のデータ table2が,マスタデータ(ホワイトリスト) 「マスタに一致しないレコードをはじく」という操作をしたい。 方法は3パ

    「相関サブクエリ」とは何かを理解して,複雑なSQLでも読めるようになろう - 主に言語とシステム開発に関して
    daikix
    daikix 2018/12/06