タグ

sqlに関するdelegateのブックマーク (108)

  • SQL緊急救命室──非効率なコードを改善せよ!

    2024年9月14日紙版発売 ミック 著 A5判/432ページ 定価3,520円(体3,200円+税10%) ISBN 978-4-297-14405-0 Gihyo Direct Amazon 楽天ブックス 丸善ジュンク堂書店 ヨドバシ.com 電子版 Amazon Kindle honto このの概要 2011~2012年に『Web+DB Press』誌上で連載された「SQL緊急救命室」の書籍化です。病院を舞台としてダメなSQL文が毎回持ち込まれて,どこが非効率なのか,どこが間違っているのかをコミカルな対話形式で議論しながら効率的で正しいSQL文の書き方を学びます。中級者向けのSQL解説書は内容が難しく読者にとって敷居が高くなりがちですが,書は初級者と上級者の登場人物の対話形式を採用することで物語調でスムーズに理解できるようにしています。 こんな方におすすめ 「脱初級者」を目指す

    SQL緊急救命室──非効率なコードを改善せよ!
  • [DBデザイン#47] VARCHARとTEXTどちらを使う? – Blog by msyk

    Blog by msyk Talk about computer, network and how we should work. ちょっと間が空いてしまいました。タイトルのテーマでサクッと書こうと思って調べ始めると、迷路に入ってしまいました。真面目に、全ての情報を書くのは多分、この話題はかなり辛いでしょう。特にMySQLの問題がありますから。ですので、いい感じのストーリにするのにちょっと時間がかかりました。マニュアルやブログを大量に読みましたが、なるべくシンプルにまとめたいと思っています。 文字列をフィールドに保存するとき、VARCHARかTEXTのいずれかの型を使うことになるでしょう。VARCHARはCHARACTER VARYINGの短縮形なのですが、VARCHARの方がお馴染みなので、こちらの表記にします。標準SQLではTEXTは定義されていないのですが、MySQL、Postgre

  • SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話 - Qiita

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

    SQL記述者全員が理解すべきSELECT文の論理的な処理順序のお話 - Qiita
  • 【SQL】HAVINGの使い方とWHEREとの違いを解説

    データベース操作の際に、特定の基準を満たすデータのみを抽出したいと思うことはよくあります。記事では、データの絞り込み条件を指定する「HAVING」句について解説します。また、HAVING句と似たWHERE句との違いも説明するのでぜひ参考にしてください。 HAVING句とは SQLのHAVING句は、条件を指定するクエリで、抽出や更新の対象となるデータの絞り込む際に用いられます。たとえば、データを抽出する「SELECT」文と組み合わせて抽出するデータに条件を付けることで抽出対象を絞り込めたり、データを更新する「UPDATE」文と組み合わせてデータの更新対象を絞り込めたりします。 【基構文】 SELECT文と組み合わせた場合の構文は次のとおりです。 SELECT フィールド名 FROM テーブル名 HAVING 条件 【サンプルテーブル】 HAVING句の具体的な使い方を解説していくにあた

    【SQL】HAVINGの使い方とWHEREとの違いを解説
  • window関数を使いこなす 〜分析のためのSQL〜 - Qiita

    分析のためにSQLを使う際、window関数はとても便利です。一方でとっつきにくい考え方や、情報が少なかったりしてどうしても敬遠してしまいがちです。例を交えて簡単にまとめてみたいと思います。 window関数とは PostgreSQLの公式ドキュメントには以下のように説明があります。 A window function performs a calculation across a set of table rows that are somehow related to the current row. This is comparable to the type of calculation that can be done with an aggregate function. But unlike regular aggregate functions, use of a wind

    window関数を使いこなす 〜分析のためのSQL〜 - Qiita
  • 【SQL】GROUP BYしたときにSELECTできるのは3種類だけやで - Qiita

    SELECT user_id, MAX(login_date), device FROM login_history GROUP BY user_id ; SQL「多分、[ユーザーごとに、最後にログインしたときのデバイスを知りたい]んやろうけど...」 SQL「さてはGROUP BYのこと分かってへんな」 SQL「GROUP BYしたときにSELECTできるんは、3種類だけなんや」

    【SQL】GROUP BYしたときにSELECTできるのは3種類だけやで - Qiita
  • Oracle 別表(別テーブル)から値をコピーして一括更新する

    Oracle 別表(別テーブル)から値をコピーして一括更新する 2006.08.01 Oracle 別のテーブルからフィールドの値をコピーしてUPDATEしたいときがある。 郵便番号の一覧表から、都道府県をコピーする。などというときに使う。 UPDATE時に、SELECT結果を用いるというやり方で実施する。 ■別表からコピーして行を更新する 自分の住所録の住所欄に郵便番号リストの住所をコピーする。(全ての行を一括で更新) SQL> UPDATE my_addr 2 SET jusho = (SELECT jusho 3 FROM zip_list 4 WHERE zip_no = my_addr.zip_no) ; 一部の行だけ変更したいとき。(WHEREで指定する) SQL> UPDATE my_addr 2 SET jusho = (SELECT jusho 3 FROM zip_li

    Oracle 別表(別テーブル)から値をコピーして一括更新する
  • [小ネタ] SQLの GROUP BY / ORDER BY には数字 (1, 2...) を指定しよう - Qiita

    -------------------------------------------------------- -- users テーブルについて、部署・役職・作成日ごとに件数を集計する -- (MySQL用) -------------------------------------------------------- SELECT u.department_code `部署コード`, u.role_code `役職コード`, DATE_FORMAT(u.created_at, '%Y-%m-%d') `作成日`, COUNT(*) `人数` FROM users u GROUP BY u.department_code, u.role_code, DATE_FORMAT(u.created_at, '%Y-%m-%d') ORDER BY u.department_code ASC

    [小ネタ] SQLの GROUP BY / ORDER BY には数字 (1, 2...) を指定しよう - Qiita
  • そのSQL、もっと速くなりますよ。

    これは、FORCIA Advent Calendar 2021の7日目の記事です。 こんにちは。エンジニアの長尾と申します。旅行系アプリの開発・運用をしています。 今年の秋頃からSQLの高速化に取り組み、計600分以上の短縮に成功しました。 そのなかで特に効果の大きかった施策を4つほどご紹介させていただきます。 1. たった25行のコードの追加で、165分短縮。 「このTSVファイル20Gを超えているけど、一体これは何なんだ......。」 これを見たときに感じたことは「このデータは当に全部使われているのだろうか」ということでした。 そこで、そのTSVファイルをもとに作られたテーブルがどこでどう使われているか調査しました。 いろいろな箇所でいろいろな使われ方をしていましたが、ひとつ共通点がありました。 必ず特定のテーブルとINNER JOINされている。 SELECT hoge FROM

    そのSQL、もっと速くなりますよ。
  • 【SQL】NULL値を制御/SQLマスターへの道「COALESCE」 - Qiita

    導入 SQL文でNULL値を扱う際の便利な関数、COALESCEを紹介しようと思います。 SELECT句で、NULL値を置き換えることで、データの可読性を高めることができたり。 ORDER BY句で、NULL値のソートの条件分岐の複雑性を吸収したり。 と、SQL文の簡略化にぴったりです。 今回の記事では、簡単にCOALESCE関数の説明と実践例を2つご紹介します。 COALESCEについて リストの最初の非 NULL 値を返します。非 NULL 値がない場合は、NULL を返します。 つまり、欠損値(NULL)にデフォルト値を指定することができます。 例 SELECT COALESCE(`office`.`locale`, `office`.name`, `リモート勤務`); 上記のクエリを例にすると...。 office.locale(オフィスの場所)を出力。 office.locale

    【SQL】NULL値を制御/SQLマスターへの道「COALESCE」 - Qiita
  • サブクエリの書き方を2万文字弱かけてすべて解説する

    これはなに ども、レバテック開発部のもりたです。 今回はSQLのサブクエリについてまとめます。仕事でクエリを書く際、サブクエリは頻出の構文だと思うんですが、同時にサブクエリの書き方を完全に理解しているよという人は案外少ないのではないでしょうか?[1] 実際、MySQLの公式ドキュメントを見ると12ページくらいを割かれており、意外と奥深いのがサブクエリです。使いこなせると便利ですし、何よりちょっとSQLのコツみたいなのがわかって面白いよ、ということで記事にしてみました。 前提 この記事は以下の前提を含んでいます。 環境 MySQL8.0系 読者の知識 なんとなくサブクエリが書ける けど相関サブクエリとかになると「あーっ」つってGoogle meetを閉じてしまうくらいのレベル感 記事のボリューム 18,000文字 おれの卒論が20,000文字だった マサカリ 間違ってたら投げてくれ〜〜 それ

    サブクエリの書き方を2万文字弱かけてすべて解説する
  • データ分析のためのSQLを書けるようになるために

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

    データ分析のためのSQLを書けるようになるために
  • 複雑な条件のクエリを集計関数と集合演算を使って短く表現する - Techtouch Developers Blog

    この記事はテックタッチアドベントカレンダー22日目の記事です。 こんにちは。データアナリストの bibi です。今回初めてアドベントカレンダーの記事を書きます。よろしくお願いいたします! 2020年12月に入社してからちょうど1年が経ちました。 私の主な業務はデータの取得で、毎日クエリを書きながら、様々なチームの意思決定のサポートをしています。 データの取得クエリは時に非常に複雑になることがありますが、 その一つである、SQLでのリレーション代数系のクエリを解決する方法について、この記事で紹介します。 PostgreSQLSQLを利用して説明します。 はじめに サンプルデータベース 複雑になってしまっている例 ① 全てのシステムを利用する社員の抽出 ② データアナリスト用システムを利用する社員の抽出 ③ データアナリスト用システムのみを利用する社員の抽出 集計関数を使う方法(Aggreg

    複雑な条件のクエリを集計関数と集合演算を使って短く表現する - Techtouch Developers Blog
  • 中間テーブルには複合インデックスと単一インデックスどちらを作成すれば良いのか - やわらかテック

    データベースの設計において正規化の結果、中間テーブルを作ることがよくあると思います。 以下のようなテーブル群があったとします。登録されたユーザーと登録された商品を誰が出品した商品なのかを中間テーブルへ記録しています。 users products user_products(中間テーブル) 中間テーブルuser_productsにインデックスを作成する場合、3つの方法が考えられます。 A: user_idとproudct_idに対してそれぞれ単一インデックスを作成する B: user_idとproduct_idの複合インデックスを作成する C: AとBの合わせ技 インデックスの作成方法はAとBのどちらが良いのでしょうか。 Railsでuser_productsのような中間テーブルを作成して、user_idとproduct_idに外部キー制約を付与すると、それぞれに単一のインデックスが作成さ

    中間テーブルには複合インデックスと単一インデックスどちらを作成すれば良いのか - やわらかテック
  • SQLの達人への道: MySQLでの高速・効率的クエリ作成術 - Qiita

    データベースとテーブルの作成 テスト用のデータベースtestdbを作成し、パフォーマンスチューニングを検証するためのcompanyおよびpersonテーブルを定義します。 CREATE DATABASE testdb; USE testdb; CREATE TABLE company ( company_id INT AUTO_INCREMENT PRIMARY KEY, company_name VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE person ( person_id INT AUTO_INCREMENT PRIMARY KEY, company_id INT, person_name VARCHAR(255) NOT NULL, email VARCH

    SQLの達人への道: MySQLでの高速・効率的クエリ作成術 - Qiita
  • 高効率なSQLクエリの書き方 - Qiita

    概要 この記事では、SQLクエリをより効率的に記述するためのベストプラクティスとテクニックに焦点を当てています。データベースのクエリはシステム全体のパフォーマンスに直結するため、最適な書き方を知ることは重要です。インデックスの効果的な活用方法、適切な結合の選択、そして条件の効果的な書き方など、SQLの最適化に関する具体的な手法を解説します。各SQL文に関する実行計画の結果も掲載していますので、ぜひご確認ください。 なお、Oracle19cとOracle12cでの利用実績がありますが、他のデータベースやバージョンにおいての検証は行っておりません。 新しい情報は随時追加されますので、お楽しみにしてください。 SQLの最適化に関連する基的なアイデア 以下の通りと考えています。 1.インデックスの利用 2.正しいJOINの選択 INNER JOIN、LEFT JOIN、RIGHT JOINなど、

    高効率なSQLクエリの書き方 - Qiita
  • 【ひたすら図で説明】一番やさしい SQL window 関数(分析関数) の使い方 | 初学者DIYプログラミング入門

    PostgreSQLMySQLSQLite など、主なデータベースには Window 関数なるものが備わっており、日付や値の大小で並んだデータに対して、1つ前の値との差分を計算したり、累積値を求めるようなことが簡単に出来るようになっています。 ただ、Window 関数を始めて使う人にとっては、パーティションといった考え方に戸惑うことも多いのではないかと思います。 そこで、この記事では、その肝となるパーティションの考え方をやさしく解説し、Windows関数の使い方について理解して頂くといった内容になっています。 SQLのWindow関数とは 何らかの条件で並んでいるデータに対して、特定の範囲のデータのみ参照できるようにする機能が用意されており、これをWindowと呼んでいます。 ちょうど窓を開けて全体の中の一部を覗くようなイメージでです。 そして、このWindowに対して、最大、最小、合

    【ひたすら図で説明】一番やさしい SQL window 関数(分析関数) の使い方 | 初学者DIYプログラミング入門
  • 【SQL】EXISTSの基本構文からよく使うサンプルまで徹底解説!

    EXISTSの基構文 EXISTS句とは? EXISTSは、ある条件を満たすデータがデータベース内に存在するかどうかを確認するためのものです。具体的には、別のデータの集合(サブクエリ)が空でない場合に条件が成り立ちます。例えば、「商品IDが5の商品が注文されているかどうかを調べたい」という場合に、EXISTSを使って確認できます。 EXISTS句の特徴と使用例 EXISTS句は「実行結果が存在するかどうかを判定したい」ときに利用します。 exists句はよく下記のような使い方をします。exists句をwhere句の条件として記述し、主問合せ(メインクエリ)のテーブル列を参照する方法が一般的となっています。 このSQLは「テストテーブルのユーザーIDが存在するユーザーのみ取得する」ものです。 詳しく書くと、、 EXISTS句の引数で、testテーブルのデータを抽出しています。(条件:use

  • 【SQL】ちょっとしたパフォーマンスチューニングまとめ - Qiita

    SELECT table_a.id, table_a.name FROM table_a INNER JOIN table_b ON table_a.id = table_b.id; メリットとしては、 どちらかのテーブルのid列のインデックスを使用可能 サブクエリがないことで中間テーブルが作成されない しかし、インデックスがない場合はEXISTSの方が良い場合があります ソートの回避 SQLでは暗黙的にソートが発生する演算が存在するので、 パフォーマンスにも影響するため、ソートが必要ない場合は考慮する必要があります ソートが発生する演算 GROUP BY句 ORDER BY 句 集約関数(SUM, COUNT, AVG) DISTINCT 集合演算子(UNION, INTERSECT, EXCEPT) ウィンドウ関数(RANK, ROW_NUMBER 等) メモリ上でのソートだけではなく

    【SQL】ちょっとしたパフォーマンスチューニングまとめ - Qiita
  • goquを駆使してgoでSQL構築も構造体マッピングもRDBテストもやる - エムスリーテックブログ

    【Unit4 ブログリレー6日目】 こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。 最近まで開発していたm3ラウンジでは、goからRDBを利用していました。 m3ラウンジでは、SQLの組みやすさやテストのしやすさの観点で検討した結果、goquを採用しましたので、 そこで得られた知見とその実装例を紹介します。 これから試してみる方(と将来m3ラウンジの開発に新たに入ることになったメンバー)の参考になるように、サンプルコードも説明も多くなってしまいかなり長いです。 お時間ある時にお読みいただければ。 名古屋城は、日の城のひとつ。尾張国愛知郡名古屋(現在の愛知県名古屋市中区丸・北区名城)にある。文には特に関係ありません。 m3ラウンジ goqu 実例 modelの構造体 mapper mapperの実装 goquのSQLの結果から構造体へのマッピング

    goquを駆使してgoでSQL構築も構造体マッピングもRDBテストもやる - エムスリーテックブログ