タグ

SQLに関するkahkiのブックマーク (46)

  • より信頼できるクエリを書くために、SQLでもテストを書く - ハヤオキスルフクロウ

    はじめに こんにちは、久しぶりに技術系の記事を書きます、株式会社カンムで機械学習エンジニアをしている fkubota です。 今日はSQLについてです。 弊社に入社してから毎日のようにSQLのクエリを書いてきました。 クエリを書き始めてからもう3年が経とうとしています。 日々クエリを書きながら少しずつ自分のスタイルが出来上がってきているのを日々実感しています。 僕は 正確で 読みやすく 再利用しやすいクエリを 高速に 生み出すための工夫を重ねてきました。 結果的にテスト駆動開発ぽいスタイルが生まれたので今日は紹介してみようと思います。 似たような記事がないので少しドキドキですが温かい気持ちで読んでもらえると嬉しいです。 対象読者 対象読者は、分析のためにクエリを書いている人とします。 プロダクトに乗せるクエリというより、ビジネス的になにか示唆を得たいときにクエリを書く人を想定します。 痛み

    より信頼できるクエリを書くために、SQLでもテストを書く - ハヤオキスルフクロウ
  • 無料で学ぶ『達人に学ぶSQL徹底指南書 第1版』 - Qiita

    はじめに 『達人に学ぶSQL徹底指南書 第1版』は、CodeZine連載とミック氏ウェブサイトの掲載記事をもとに、加筆・編集されたものです。 CodeZine連載、および、ミック氏ウェブサイトは、どちらもオンラインの無料公開コンテンツです。 今回、「書籍と元コンテンツの対応表」を作成しました。 書籍のために書き下ろされた一部コンテンツや演習問題は見れませんが、その一方、編集で割愛された内容などが含まれるので、書籍以上のことを学べる箇所もあります。 すでに新版『達人に学ぶSQL徹底指南書 第2版』が出ていますが、各テーマは第1版でも大きく変わっておらず、現在でも通用する基的で面白い内容なので、一見の価値はあると思います。 書籍と元コンテンツの対応表 No. 目次 CodeZine連載 ミック氏ウェブサイト テーブル定義 サポートページ

    無料で学ぶ『達人に学ぶSQL徹底指南書 第1版』 - Qiita
  • GoでSQLの複雑なクエリのテストを書いてみた - ZOZO TECH BLOG

    はじめに こんにちは。ブランドソリューション開発部FAANSバックエンドブロックの佐野です。普段はサーバーサイドエンジニアとして、FAANSのバックエンドシステムを開発しています。 FAANSとは、弊社が2022年8月に正式ローンチした、アパレル店舗で働くショップスタッフの販売サポートツールです。例えば、コーディネート投稿機能や成果確認機能などを備えています。投稿されたコーディネートはZOZOTOWNやWEAR、Yahoo!ショッピング、ブランド様のECサイトへの連携が可能です。成果確認機能では、投稿されたコーディネート経由のEC売上やコーディネート閲覧数などの成果を可視化しています。 記事では、成果データの集計処理におけるBigQueryのクエリ実行処理のユニットテストをGoで実装した取り組みと、その際の工夫についてご紹介します。 目次 はじめに 目次 成果データの集計処理とは 抱え

    GoでSQLの複雑なクエリのテストを書いてみた - ZOZO TECH BLOG
  • 「相関サブクエリ」とは何かを理解して,複雑なSQLでも読めるようになろう - 主に言語とシステム開発に関して

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

    「相関サブクエリ」とは何かを理解して,複雑なSQLでも読めるようになろう - 主に言語とシステム開発に関して
  • joinのon区の条件とwhere区の条件の違い

    joinのon区の条件とwhere区、共にデータを絞り込みますが、どちらに条件を設定するかで結果が変わる場合があるの注意しましょう。 何故変わるかは、データを絞り込む順序を意識すると理解できます。データを絞り込む順序は ①on区の条件に一致したテーブルを結合する ②テーブルを結合した結果から、where区の条件に一致したデータ絞り込む です。 注意すべきはleft outer joinの場合です。①のon区で設定した条件に一致しなくても、left outer join の場合は元表のデータは表示されます。しかし②のwhere区で設定した条件に一致しないと、元表からもデータが消えるという点です。 ↓on区に付けた条件に合致するデータがなくても、元表のデータは表示されます。それが外部結合です。 ↓where区はテーブル結合後のデータから条件を絞り込みます。そのため結果が変わります。 テーブルを

    joinのon区の条件とwhere区の条件の違い
  • 決済システムの残高管理周りの DB 設計と戦略 - カンムテックブログ

    エンジニアの佐野です。今日はカンムの決済システムでユーザの残高管理をどうやっているかについて書きます。 カンムの製品であるバンドルカードはプリペイド方式のカードです。ユーザによる入金、店舗での利用、運営事由の操作などによりユーザの残高が増減します。このような残高の管理について単純に考えると user_id と balance と updated_at あたりをもったテーブルを用意して balance と updated_at を更新していく方法があるかもしれません。しかしながらカンムでは残高を管理するテーブルを持たず、これらイベントの履歴のみで残高を管理しています。以下、記事ではこれらユーザの残高が増減するイベントのことをトランザクションと呼びます。ここでは DB の Transaction Processing を意味しません。 記事のポイントは 残高を管理をするテーブルは作らず、ト

    決済システムの残高管理周りの DB 設計と戦略 - カンムテックブログ
  • 業務でどれだけSQL力がつくのか ~SQLアンチパターンを用いて確認~ 前編

    はじめに こんにちは。 GMOアドマーケティングのKONCEです。 新卒で入社し、数年経ちました。日々の業務で学ぶことは多いですが、今年度は技術の深堀りをテーマにやっていきたいと思っています。 今回は入社してDBSQLに関しては業務内で学ぶことが多く、特別訓練をしていたわけではなかったのですが、「SQLアンチパターン」を用いて学びながら、改めて自分の現状を見つめ直していけたらと思います。 今回は学習を行う側面と自分自身のレベルについて見直していきたいので 知っていた → ○ 部分的に知っていた → △ 知らなかった → × を付けてみようと思います。 目次 SQLアンチパターンについて Ⅰ部 データベース論理設計のアンチパターン 2-1. [○]1章 ジェイウォーク(信号無視) 2-2. [×]2章 ナイーブツリー(素朴な木) 2-3. [○]3章 IDリクワイアド(とりあえずID) 2

    業務でどれだけSQL力がつくのか ~SQLアンチパターンを用いて確認~ 前編
  • Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応

    GoogleORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応 SQL文を直接書かなくとも、自動的にSQL文を生成、実行してくれるORM(Object-Relational Mapper)は、プログラミングを容易にしてくれる技術としてRailsやHibernate、Springなどさまざまなフレームワークなどで活用されています。 一方で、ORMが生成するSQL文はときに複雑に、あるいは非効率なものとなり、データベース処理の遅さにつながることもあります。 このとき、SQL文の生成と実行を明示的にコードとして記述する必要がないというORMの特徴が、なぜデータベース処理が遅くなったのか、どのようなSQL文が生成され、そのどこに原因があるのか、といった調査を難しくている面があり

    Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応
  • VSCodeでSQLをフォーマットしたいよ - Qiita

    SQL文をVSCode上でフォーマットかけて綺麗に見たい。 この願いを叶えてくれるツールがあった。(他に良いのあったら教えて欲しい。これでも地味に不十分 →コメントで新しいものを教えていただきました。完全に自分の希望と合っていて神。 SQLのログから、どんなクエリが発行されているか確認したい時、ただ実行クエリを出力しているだけなので、ログを見ても以下のようにしか見られない。クエリは適当です。 select * from hoge as h where h.user_id = 1 and h.dep_date = '20200101' and h.area_id = 2 Web上でフォーマットかけてくれるのもあるけど、いちいち開くの面倒なんじゃー。 SQLフォーマッターFor WEB なので普段使用しているVSCode上でできるやつを探したらあった。 VSCode SQL Formatter

    VSCodeでSQLをフォーマットしたいよ - Qiita
  • SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話 - Qiita

    2020/9/30追記 記事は元々、「SQL記述者全員が理解すべきSELECT文の実行順序のお話」というタイトルで投稿しておりました。 しかし、知見のある方からのコメントと自分でも調べてみた結果、今回紹介している順序はあくまで論理的な処理順序であり、実行順序とは別物ということがわかりました。 誤った知識を布教してしまい申し訳ございません。 2020/9/30のタイミングで、記事のタイトルを「SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話」に変更させていただきました。 はじめに 「SQLといえば、エンジニアが扱うスキル」と思われがちですが、最近はマーケターや営業など、非エンジニアの方もSQLを使って、自らデータを抽出し分析する方が増えてきています。 またエンジニアの方でも、ORM任せでなんとなく理解している状態の方もいるのではないでしょうか? 今回は、そんな方々にこそ

    SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話 - Qiita
  • DBeaverでデータベースからのCSVエクスポートをお手軽に自動化する | DevelopersIO

    こんにちは。データアナリティクス事業部の松村です。ジョインブログを投稿してから2ヶ月以上経ってしまいましたが、ようやく2目に漕ぎ着けました。これからはもう少しペースを上げていきたいです! 今回はデータベースからのCSVエクスポートを自動化する方法を紹介します。 ツールとしてDBeaverを使用します。Windows/Mac/Linuxと、主要なデスクトップOSで動作し、機能も多彩です。以前も弊社ブログでご紹介したことがあります。 DBeaver Community | Free Universal Database Tool 複数のデータソース(Redshiftや主要RDBMS等)及びOS(Mac/Windows/Linux)対応の無償SQLクライアントツール『DBeaverDBeaverにはTaskというDBに対する定形作業を自動化する機能があり、これを使います。実際の運用におい

    DBeaverでデータベースからのCSVエクスポートをお手軽に自動化する | DevelopersIO
  • websec-room.com - websec room リソースおよび情報

    This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.

    websec-room.com - websec room リソースおよび情報
  • バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~

    PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)

    バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
  • MySQLの動的SQL使って検索するカラム名を動的に指定する - Qiita

    サービス・リニューアルの際のデータ移行とか、運用・保守フェーズなんかで、コマンドラインからデータベースの中身を調べてたりする時、しばしばSELECT句やWHERE句のカラムやテーブル指定を動的に行いたい!…というシーンに出くわす。 アプリケーション側の開発であれば、使用しているプログラム言語のメソッドを使ったり、OSのシェルコマンド使ったりしてSQLを動的に生成すれば対応するのは造作もないんだが、恒久的には発生しない一時的なデータ調査作業でそんな処理を書くのは非効率的で面倒でもある。 もうコンソールでDBにログインしてしまっているし…とかいうケースならなおさら、もうそのままSQLコマンドで完結してしまいたいものだろう。 そんな時に有効ななのが動的SQLだ。まぁ、ストアドプロシージャを使うという手もあるんだが、一回こっきり的な作業をそこまで大事(おおごと)にしたくもないっちゅーケースはままあ

    MySQLの動的SQL使って検索するカラム名を動的に指定する - Qiita
  • [設計]SQL設計書の書き方(続き) - PSI Labs

    こんにちは。shintaniです。 前回のSQL設計書(データ取得図)の記事 の続きです。 今回はGROUP BYやソート順の書き方、そしてインラインビューを使う場合と、書くときのポイントを説明します。 まずはGROUP BY とソート順。 (前回の紹介では書き忘れていました・・・) ソート順とグループ化項目の位置に違和感を覚える方もいるでしょう。 しかしソート順は図に書いた理由の他にも「SELECT項目がどう並ぶか?」という観点から、SELECT句のそばにあった方が分かりやすいです。 そしてグループ化項目は「テーブル結合後にどう集約するか?」なので、図の下にあった方が分かりやすいです。 次は インラインビュー。 こんな感じになります。 (インラインビューにしなくても出来る・・・というのは御容赦を) 書くときのポイントですが、 SELECT句はこだわらない。テーブル結合にこだわる です。

  • [設計]SQL設計書の書き方 - PSI Labs

    お久しぶりです。shintaniです。 今回はSQL設計書について書いてみます。 とはいっても「正しいSQL設計書」などとおこがましいことを言うつもりはありません。 「今までより多少マシなSQL設計書」という程度に捉えて下さい。 このような帳票があるとします。 これに対して、下記のような詳細設計書SQL設計書)を書いているプロジェクトが結構あるかと思います これでは殆どSQL自体を書いているのと変わりません。 テーブル同士の繋がりや絞り込み条件も分かり辛いです。 これに対し、下記は私が以前関わったプロジェクトで作ったSQL設計書です。 (そこでは ”データ取得図” と呼んでいました) これはE-R図とは異なるものです。 あくまでSQLの結合方法や条件設定などを記述したものです。 この形式のSQL設計書には以下のようなメリットがあります。 ----------------------

    [設計]SQL設計書の書き方 - PSI Labs
  • 分析関数(ウインドウ関数)をわかりやすく説明してみた

    はじめに ちょっととっつきにくいけどとっても便利な分析関数について、なるべく分かりやすく説明してみようと思います。Oracleを対象にしていますが、他のDBでもたぶん似たようなものでしょう(無責任)。 まず分析関数とは何をするものか、ですが、一言で言うと集合関数と同じ集計動作をそれぞれの行に制限範囲で実行するものです。ここでいう集合関数とは、MAXやSUMやAVG等、GROUP BYと共に使い行をまとめるて集計計算する関数ですね。分析関数は集合関数と同様の計算をしますが、集合関数と違い行をまとめません。それぞれの行で集計計算し結果を返します。ここが集合関数との大きな違いです。 また、集合関数ではGROUP BYの同じカラム値をもつ全行を一つに集計しますが、分析関数では集計対象となる行の範囲を任意で指定できます。関数に続くOVER句でこの範囲指定を行います。集合関数と分析関数は基同じ名前な

    分析関数(ウインドウ関数)をわかりやすく説明してみた
  • Oracle DBバージョンアップの際の課題「SQLテスト」、手間やコストを軽減するには?:人気連載まとめ読み! @IT eBook(46) - @IT

    Oracle DBバージョンアップの際の課題「SQLテスト」、手間やコストを軽減するには?:人気連載まとめ読み! @IT eBook(46) 人気過去連載を電子書籍化して無料でダウンロード提供する@IT eBookシリーズ。第46弾では「【12c対応】とにかく苦労しない「RAT」簡単攻略テクニック」全6回を1冊のPDFとしてまとめた。Oracle Databaseのバージョンアップ時に必要な「SQLテスト」という課題を解決するツールの攻略方法を紹介する。

    Oracle DBバージョンアップの際の課題「SQLテスト」、手間やコストを軽減するには?:人気連載まとめ読み! @IT eBook(46) - @IT
  • SQLで羃等にDBスキーマ管理ができるツール「sqldef」を作った - k0kubun's blog

    sqldefのリポジトリ github.com これは何か Ridgepoleというツールをご存じでしょうか。 これはRubyのDSLでcreate_tableやadd_index等を書いてスキーマ定義をしておくとそれと実際のスキーマの差異を埋めるために必要なDDLを自動で生成・適用できる便利なツールです。一方、 で言われているように、Ridgepoleを動作させるためにはRubyやActiveRecordといった依存をインストールする必要があり、Railsアプリケーション以外で使う場合には少々面倒なことになります。*1 *2 そこで、Pure Goで書くことでワンバイナリにし、また別言語圏の人でも使いやすいよう、RubyのDSLのかわりに、誰でも知ってるSQLCREATE TABLEやALTER TABLEを書いて同じことができるようにしたのがsqldefです。 使用例 現時点ではMy

    SQLで羃等にDBスキーマ管理ができるツール「sqldef」を作った - k0kubun's blog
  • TeamSQL - Cross-platform SQL Client Built for Collaboration

    Looking for an Amazon Redshift client? TeamSQL has retired and is not available for download anymore. You can The world's first and the only query and management tool built for Amazon Redshift. Get DataRow for Amazon Redshift Hello, TeamSQL has been a great platform to experiment with modern UI and powerful features to help you manage your popular databases with collaborative features. Over two ye

    TeamSQL - Cross-platform SQL Client Built for Collaboration