タグ

sqlに関するysdytのブックマーク (5)

  • SELECT文を統合する「UNION」

    SELECT文の統合「UNION」 今回は、問い合わせの統合(UNION)と、NULLに関連するトピックを解説し、SELECT文の最後の回とします。 UNION句を使用すると、これまでに使用してきたSQL文の結果を統合して、1つの結果とすることができます。これは、四半期ごとの売り上げデータを別のテーブルに持っている場合に、集計した結果を1つの表として参照したい場合など、複数の問い合わせ結果のマージを実施したい場合に役立ちます。 今回は、製品ごとに付けられた単価のパターンをすべて洗い出す、というSQL文を作成してみましょう。製品の単価は、製品マスターテーブル(Products)に基となる単価が保存されています。また、取引ごとに製品の単価を決定しているので、注文の明細テーブル(Order Details)にも、その取引における製品の単価が登録されています。これらの2つのテーブルからの別々の問

    SELECT文を統合する「UNION」
  • 複数の表からデータを取り出して表示させる(1)

    今回は、SQLの中でも特に重要な構文である「結合」について解説します。一言で結合といっても、いろいろなやり方があります。まずは、比較的単純な方法から解説します(編集部) 今回と次回の2回に分けて、SQLの中でも、最も重要な構文の1つである結合について説明します。「結合って難しそう」というイメージをお持ちの方も多いかもしれませんが、1つ1つの構文はそれほど複雑ではありません。整理して覚えましょう。 連載で使っている「apex.oracle.com」の環境には「EMP」「DEPT」という複数の表があります。これは、リレーショナルデータベース(RDB)では一般的なことです。RDBでは、データを格納するストレージ領域を効率良く使うため、「正規化」というルールに従って、データを格納する表を複数に分割するように設計します。分割された複数の表から、関係するデータを取り出すことを「結合」と呼びます。 結

    複数の表からデータを取り出して表示させる(1)
    ysdyt
    ysdyt 2016/05/15
  • 副問合せを使った複雑な条件指定

    これまでの連載では、条件に「列」と「値」を指定したシンプルな条件指定の方法を紹介してきました。 例えば「給与が3000ドル以上(WHERE sal>3000)」や「部門番号が10(WHERE deptno=10)」のように、条件に「列」と「値」を指定して、必要なデータを取得することができます。 しかし、業務システムで必要なSQL文を書くときには、もう少し複雑な条件を指定したい場面もあるでしょう。例えば、「ある社員と同じ部門に所属する社員は誰か」や「全社員の平均給与より給与が高い人は誰か」を調べたい場合には、どのように条件を指定すればよいでしょうか。 今回は、このような場合に便利な「副問合せ」について説明します。 副問合せとは 副問合せを使った複雑な条件指定の方法について、実際の例を使って考えてみましょう。 「社員SCOTTと同じ部門に所属する社員は誰か」を調べるには、どのようなSQLを書け

    副問合せを使った複雑な条件指定
  • テキスト検索の方法とインデックス — Let's Postgres

    板垣 貴裕 テキスト検索にもさまざまな方法があります。大量のテキストを検索するにはインデックスを使って検索したいところですが、どんな検索にも応えられるインデックスというものは、さすがに存在しません。それぞれのアプリケーションの条件に適したテキスト検索方法やインデックスの張り方を選んで行きましょう。 今回説明するテキスト検索の方法の一覧を以下に挙げます。PostgreSQL ユーザが「全文テキスト検索」というと「単語単位の検索」を指すことが多いようです。また、「中間一致検索」が「あいまい検索」と呼ばれることもあるようです。用語が厳密な意味で使われないことも多いようなので、文脈には注意して解釈してください。 「単語単位の検索」と「中間一致検索」では、追加のモジュールを導入することで日語全文検索が可能なインデックスを作成できます。こちらは説明の後半で紹介します。以下、記事の内容です。 テキス

  • MySQL 日時ごとの集計まとめ - Qiita

    月別、日別、時間別にレコード数を集計 一月毎 mysql> SELECT DATE_FORMAT(カラム1, '%Y-%m') AS time, COUNT(*) AS count FROM テーブル名 GROUP BY DATE_FORMAT(カラム1, '%Y%m'); 一日毎 mysql> SELECT DATE_FORMAT(カラム1, '%Y-%m-%d') AS time, COUNT(*) AS count FROM テーブル名 GROUP BY DATE_FORMAT(カラム1, '%Y%m%d'); 一時間毎 mysql> SELECT DATE_FORMAT(カラム1, '%Y-%m-%d %H:00:00') AS time, COUNT(*) AS count FROM テーブル名 GROUP BY DATE_FORMAT(カラム1, '%Y%m%d%H'); 30

    MySQL 日時ごとの集計まとめ - Qiita
  • 1