タグ

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

  • 3値論理

    なぜ「= NULL」ではなく「IS NULL」と書かなくてはならないのか? これは、気になっている人も多いはずです。まだ SQL に不慣れな頃、ある列が NULL である行を選択しようとして、 SELECT * FROM table_A WHERE col_1 = NULL; というクエリを書いてしまい、エラーになったり思い通りの結果が得られなかった、という経験は、ほぼ全ての人が持っているでしょう。ちょうど C言語や JAVA を習い始めのころに「if (a = 5)」と書いてしまう間違いとよく似ています。最初は、言語仕様の汚さにぶつぶつ文句をいいながらも、そのうち「IS NULL」という書き方に慣れてしまって、疑問を持たなくなります。 でもどう考えても奇妙な書き方ですよね。こんな素直でない書き方をしなくてはならないということには、やはりそれなりの理由があるのです。今からその理由を説明しま

  • 社内SQL研修のために作った資料を公開します | 株式会社AI Shift

    こんにちは、Development Teamの三宅です。 先日、社内(AI事業部内)でSQL研修の講師を担当したので、今回はその内容について簡単に共有したいと思います。 はじめに 例年、AI事業部では、新卒エンジニアの育成のためにソフトウェアエンジニア研修を行っております。今年はフルリモートでの実施となりました。研修期間は2週間ほどで、内容は前半が講義、後半が実践(チーム開発)でした。私が担当したのは、講義パートの一部であるSQL研修です。SQLRDBにあまり慣れていない人でも、できるだけ体系的な学びが得られるようにすることを目標に、様々な資料をまとめて提供する方針で準備しました。結果的には、ハンズオン込みで4時間ほどのやや長い講義となりましたが、勉強になったという声も頂けたのでやって良かったと思っています。 研修資料 研修内容 SQL研修の内容は、基的には大学のデータベース講義で

    社内SQL研修のために作った資料を公開します | 株式会社AI Shift
  • 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など主要なフレームワークに対応
  • Next.js Database with Prisma | Next-Generation ORM for SQL Databases

    Next.js blurs the lines between client and server. It supports pre-rendering pages at build time (SSG) or request time (SSR). Prisma is the perfect companion if you need to work with a database in a Next.js app. You can decide whether to access your database with Prisma at build time (getStaticProps), at request time (getServersideProps), using API routes, or by entirely separating the backend out

    Next.js Database with Prisma | Next-Generation ORM for SQL Databases
  • すべてのエディタでSQLの自動補完をするためにSQL Language Server(sqls)を作った - Qiita

    sqlsとは sqlsとは、いま私が開発中のSQL用Language Serverです。SQLをエディタで編集するときの支援機能を実装したサーバとなっており、主な特徴は以下です。 Language ServerなのでLSクライアントが存在するエディタであればどんなエディタでも利用可能 SQL編集支援機能 自動補完(テーブル名、カラム名など) 定義参照 SQL実行 複数のRDSMSに対応 MySQL PostgreSQL SQLite3 Language Serverとは Language Server(あるいはLanguage Server Protocol)とは、プログラム言語の開発支援機能をエディタに提供するサーバ、およびその通信内容を規定したプロトコルです。ただしサーバといってもほとんどの場合ローカル内にホスティングしてローカルのエディタと通信をします。 ここでは主題ではないので詳し

    すべてのエディタでSQLの自動補完をするためにSQL Language Server(sqls)を作った - Qiita
  • そろそろSQLのウィンドウ関数を理解したい - 連載1/3話 - Qiita

    はじめに データ分析とデータ品質改善に従事してきた筆者が、SQLを用いた分析の基である「ウィンドウ関数」の使い方とデータ品質の調査改善を行う手法をまとめてみようと思います。 こちらの記事は、SQLの知識向上と振り返りを主題としているので、ABC分析、バスケット分析、RFM分析などの「データ分析の手法」について説明している記事ではありません。(反響やコメントによって別投稿するかもしれません) 背景 SQLエンジニアの大多数が利用しており、多くの方はWebサービス開発などでデータの登録画面や検索画面を作る際にSQLを利用したり、またはシステムの運用保守で障害の原因調査のためにSQLを利用して原因を特定すると思います。そのため、テーブル結合・サブクエリ・集計関数といったSQL構文は理解されている人が多いと思いますが、分析関数を理解して使っている人となると、ぐっと減ると思います。 私は以前、社

    そろそろSQLのウィンドウ関数を理解したい - 連載1/3話 - Qiita
  • MongoDBの様なNoSQLに勢いがあるのは何故ですか?SQLと比べてどんな利点や欠点がありますか? - Quora

    回答 (3件中の1件目) ハイプサイクルという概念をGartnerグループが提唱してまして、様々な流行りスタリのサイクルを分析する標準的な方法となっています。 ハイプとは過度な期待や熱狂を意味する言葉です。一発屋芸人の人気のカーブみたいなもので、テツandトモみたいに安定する場合と、消えていくものがあります。芸人ではありませんがDA PUMPは一茶の人間性もありまして、次は厳しいけど定着すると思っています。 なんだかのトリガーで評価が上がり始め、ピークを迎える。その後評価が下がっていき、底を打つと少し上がって定着するという経過をたどるとしています。これと同じモデルで、流行りのハイテク...

    MongoDBの様なNoSQLに勢いがあるのは何故ですか?SQLと比べてどんな利点や欠点がありますか? - Quora
  • SQLパフォーマンス詳解: 開発者のためのデータベースチューニング解説書

    開発者のための解説書SQLパフォーマンスに関するは、どれも分厚くて難解でした。 あらゆる知識が詰まった数百ページ… …でもその多くは開発者には関係ないこと。 SQLパフォーマンス詳解は、開発者が知るべきことに焦点を絞っています。 たった200ページですが… …主要なデータベース全てをカバーしています。 (PayPalでの支払い、送料無料) PDFならすぐ手に入ります。. ❗印刷版は2024年8月末発送予定です❗ お詫びのしるしにディスカウントコード SlowDelivery24 をお使いください。 削除 印刷版をアマゾンまたはメルカリShopsで購入 (ソフトカバー版のみ、有料リンク) メルカリShops

    SQLパフォーマンス詳解: 開発者のためのデータベースチューニング解説書
  • SQLアンチパターンもりもりDBを設計しよう! - Qiita

    概要 名著SQLアンチパターンを読み終えたので、それの復習のために悍ましいデータベースを作ろうと思った。 まず前半では、SQLアンチパターンを意図的に盛り込み、目も当てられない酷い設計をします。 そのあとリファクタリングを行なったER図に書き直していきます。 なお、真面目に書くと参考書の丸写しになってしまうので、この記事は アンチパターンもりもりのER図を見て嫌悪感を学習し、設計に役立てようという趣向のもと、詳しい説明は省きます。 とても良いなので読んでください。 想定するシステムの概要と状況 目的において適切かはわかりませんが、とりあえず考えることの多い”お金”を扱うシステムを想定してみます。 私はブラックジョークが好きなので、今回は「ちょっと怖い金融屋さんが使う債務者管理システム」のER図を設計してみようと思います。 ざっくりした要件 債務者を登録でき、プロフィールを入力できる。 債

    SQLアンチパターンもりもりDBを設計しよう! - Qiita
  • 結合(SQL) - Qiita

    デカルト結合(Cartesian join) デカルト積(Cartesian) 直積(cross product) クロス結合(cross join) 無結合(no join) とも呼ばれることがある

    結合(SQL) - Qiita
  • 直積結合とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

    1つ目のテーブル(テーブル1)には「名前」と「性別」があります。 2つ目のテーブル(テーブル2)には「名前」と「年齢」があります。 「名前」に注目すると、何となく合体できそうな気がしませんか? 実際問題、合体できます。 それでは「名前」に注目して2つのテーブルを合体させてみましょう。 このときの合体のさせ方には、いくつかのやり方があります。 一般的なのは 1.2つのテーブルの合体可能なデータのみ取り出す 2.テーブル1の全データを取り出して、それにテーブル2のデータをくっつける 3.テーブル2の全データを取り出して、それにテーブル1のデータをくっつける 4.両方のテーブルの全データを取り出して、くっつけられる範囲でくっつける 5.両方のテーブルの全データを取り出して、すべての組み合わせでくっつける の5つです。 よく登場するのは1と2ですけどね。 3は2を逆にしただけなので、あまり使いませ

    直積結合とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
  • クロス結合(CROSS JOIN)が役に立つケースに初めてぶつかった。(横持ち⇔縦持ち変換) - Continue(s)

    話を始める前にまずは簡単によく使うSQLの結合公文を復習していきます。 - INNER JOIN (内部結合) - LEFT OUTER JOIN (左外部結合) - RIGHT OUTER JOIN (右外部結合) - FULL OUTER JOIN (完全外部結合) このままの形式で書くことはあまりありません。基的に - INNER JOINJOIN - LEFT OUTER JOIN ⇒ LEFT JOIN - RIGHT OUTER JOIN ⇒ RIGHT JOIN といった省略形で書くことが多いです。 LEFT JOINとRIGHT JOINがなんなのか最初に掴むまで苦労しましたが、いくつか手で書いてみるとわかります。 ここに雑な例を載せておきます。 mysql> SELECT * FROM photobook; +------+--------------------

    クロス結合(CROSS JOIN)が役に立つケースに初めてぶつかった。(横持ち⇔縦持ち変換) - Continue(s)
  • PostgreSQLのロック - Qiita

    ロックとは ロックとは、あるトランザクションがレコードにアクセスしているときに,別のトランザクションからそのレコードにアクセスできないようにする仕組みのことです。 PostgreSQLの場合、トランザクションからの同時実行を確実にするために、テーブル・行に対して明示的なロックを獲得することができます。 また、ほとんどのPostgreSQLコマンドでは、参照されるテーブルがそのコマンドの実行中に別の方法で削除もしくは変更されていないことを確実にするために、SQLの実行の裏で、適切なモードのロックを自動的に獲得します。 テーブル単位のロック テーブル単位のロックは、LOCK文を使用します。 transaction_a=# BEGIN; transaction_a=# LOCK TABLE hoge_table IN EXCLUSIVE MODE; transaction_b=# BEGIN;

    PostgreSQLのロック - Qiita
    hiro14aki
    hiro14aki 2019/03/25
    ロックの仕組みとか
  • SQLスタイルガイド · SQL style guide by Simon Holywell

    概要 全般 推奨 非推奨 命名規則 通則 表 列 別名、相関名 ストアド・プロシージャ 統一的接尾辞 問合せ文 予約語 空白類 インデント 望ましい形式 Create文 データ型の選択 デフォルト値の指定 制約とキー 非推奨設計 付録 予約語リファレンス SQLスタイルガイド(日語訳) 日語訳について 日語訳は誤訳や原文の最新版に追随していない恐れがあります。誤訳や改善点があれば、GitHubのissueまたはpull requestを使用するか、Twitterでお知らせください。 翻訳: 久利史之 @nkuritw 概要 このガイドラインは利用の他、forkしたり、自分自身のものに改変したりすることができます。ここで大事なのはスタイルを選択しそれを踏襲することです。変更の提案やバグの修正にはGitHubのissueまたはpull requestを使用してください。 このガイドライン

  • Postgre SQL用 SQLメモ - Qiita

    はじめに PostgreSQLについて調べたりしたことのメモです。 Timestamp型、Date型関連 --現在日時の取得 select current_timestamp; --現在日付の取得 select current_date; --現在時刻の取得 select current_time; --Date型からTimestamp型への変換 select to_timestamp(to_char(current_date, 'YYYY-MM-DD'), 'YYYY-MM-DD hh:mm:ss'); --日時の加算 select current_timestamp + '1 hours 40 minutes'; --日時の減算 select current_timestamp + '-5 days'; --現在月の1日(ついたち)を取得 select date_trunc('mont

    Postgre SQL用 SQLメモ - Qiita
    hiro14aki
    hiro14aki 2018/06/12
    timestamp
  • データ型フォーマッティング関数

    6.7. データ型フォーマッティング関数 PostgreSQL のフォーマッティング関数は多彩なデータ型 (日付/時刻データ型、整数データ型、浮動小数点数データ型、数値データ型)をフォーマットされた文字列変換したり、フォーマットされた文字列を特定のデータ型に変換する強力なツールの一式を提供しています。 Table 6-12 にこれらをリストしています。これら関数は共通の呼び出し規約を踏襲しています。最初の引数はフォーマットされる値で二番目の引数は入力フォーマットまたは出力フォーマットを定義するテンプレートです。

    hiro14aki
    hiro14aki 2018/06/12
    日付演算子関連
  • 日付/時刻関数と演算子

    4.8. 日付/時刻関数と演算子 Table 4-17 は日付/時刻の値の処理を行う関数を示しています。 Table 4-16 は(+、* 等のような)基的な算術演算子の振舞いを説明しています。フォーマッティング関数については Section 4.7 を参照ください。日付/時刻データ型に付いての背景となっている情報に精通していなければなりません( Section 3.5 を参照)。 以下に示す日付/時刻演算子の振舞いは時間帯付きおよび無しのデータ型に似通っています。

    hiro14aki
    hiro14aki 2018/06/12
    日付演算子
  • 安全なSQLの呼び出し方 - Qiita

    SQL 文中の「'052312'」のような定数のことをリテラルと呼び、文字列としてのリテラルのことを文字列リテラルと呼ぶ。リテラルには文字列リテラルの他、数値リテラル、論理値リテラル、日時リテラルなどがある。 SQLインジェクションの原因 SQL をアプリケーションから利用する場合、SQL 文のリテラル部分をパラメータ化することが一般的である。パラメータ化された部分を実際の値に展開するとき、リテラルとして文法的に正しく文を生成しないと、パラメータに与えられた値がリテラルの外にはみ出した状態になり、リテラルの後ろに続く文として解釈されることになる。この現象が SQL インジェクションである。 文字列リテラルに対するSQLインジェクション SQL の id 列は文字列型を想定しており、$id は Perl の変数で、外部から与えられるものとする。

    安全なSQLの呼び出し方 - Qiita
    hiro14aki
    hiro14aki 2018/05/06
    安全に SQL を実行する方法
  • SQLインジェクションのまとめ - No Programming, No Life

    当記事はSQLインジェクションのまとめ | Think Twiceに移転しました。

    SQLインジェクションのまとめ - No Programming, No Life
    hiro14aki
    hiro14aki 2018/05/06
    対象となる記号のサンプル
  • よく使うpsqlの便利技10選

    1. メタコマンドとSQLを一緒に使う 実行例 2. SELECT結果の値だけを取得する 実行例 3. SQLSQLを作り実行 (9.6~) 実行例 4. サーバに応じて実行するSQLを変える (10~) 実行例 5. 忘れたDDLのシンタックスを確認する 実行例 6. SQLファイルの内容を一行ずつ確認しながら実行する 実行例 7. 特定のコマンドを定期的に実行したい 実行例 8. psqlを起動した時に実行されるコマンドを設定する 実行例 9. .psqlrcを一時的に使わない 実行例 10. SELECTの結果をCSV形式で出力 実行例 普段よく使っているpsqlで便利だと思う使い方を10個紹介します。運用で使うシェルスクリプトとかでもpsqlは使う事があると思うので、psql派でない人にも多少は役に立つはず。 特に最近のバージョンで追加された機能は、利用できるバージョンを記載して