はじめに テーブル結合の動作についてまとめてみました! ログを見た時に、何してるか分かるようになることを今回の目的とします。 本記事は、全て動作済みです。 DBMS: Mysql テーブル結合の挙動について まずはテーブルの結合がどのように行われているのか見て行きましょう。 結合にはJOIN句が使われます。 使い方
![【INNER JOIN, LEFT JOIN , RIGHT JOIN】テーブル結合の挙動をまとめてみた【SQL】 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/d2cfb6b687b1edadcfaab62747f6f5e6890586c3/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgwJTkwSU5ORVIlMjBKT0lOJTJDJTIwTEVGVCUyMEpPSU4lMjAlMkMlMjBSSUdIVCUyMEpPSU4lRTMlODAlOTElRTMlODMlODYlRTMlODMlQkMlRTMlODMlOTYlRTMlODMlQUIlRTclQjUlOTAlRTUlOTAlODglRTMlODElQUUlRTYlOEMlOTklRTUlOEIlOTUlRTMlODIlOTIlRTMlODElQkUlRTMlODElQTglRTMlODIlODElRTMlODElQTYlRTMlODElQkYlRTMlODElOUYlRTMlODAlOTBTUUwlRTMlODAlOTEmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWU2MjFlN2I0ODk1MzRlZmZiZTlkNWRkZWMxYmQ2NGM1%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBuZ3JvbiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YzZhNDVjMWU1Y2YzNTRlZjU5YTRkY2UwNTQ2NTRlOTc%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3Dc7b43c5c7eab6a9948e25a9905bef2c4)
MySQL のデータを範囲ごとにデータの個数を集計したいと思いました。以下の記事に書いてあることを MySQL でやりたかったので調べました。 [Excel] データの範囲ごとにデータの個数を集計する - ピボットテーブルを利用した 値の範囲ごとの人数集計 (年代、価格帯、得点帯での集計方法) 環境 $ mysql --version mysql Ver 14.14 Distrib 5.6.34, for osx10.11 (x86_64) using EditLine wrapper 準備 今回はサンプルとして0 ~ 100 点までの成績の集計を想定します。 mysql> create database sampletables; Query OK, 1 row affected (0.02 sec) mysql> use sampletables Database changed my
みなさんこんにちは!フリーランスプログラマーのsatoです。 今回はUNIONについて見ていきましょう。UNIONは二つ以上のSELECTの結果を、統合して表示してくれる仕組みです。これを使えれば、また一つ高度な結果表示を行えますのでぜひ覚えてしまいましょう。 [基本]UNIONとは [基本]UNIONの種類 [基本]UNIONの使い方 [応用]UNION後に「ORDER BY」を使用する [応用]UNION後に「GROUP BY」を使用する 今回は前半で「UNIONの種類」「UNIONの使い方」といった基礎的な内容を見ていきましょう。そして後半で、よく疑問として上がるUNION後に「ORDER BY」などをかける方法について見てきましょう。 UNIONとは UNNIONとは、冒頭でも言いましたが二つ以上のSELECTの結果を、統合して表示してくれる仕組みのことを言います。 例えばすごくシ
環境 MAC OSX 10.10.5 Yosemite 使い方(例) テーブルの準備 CREATE TABLE items ( id SMALLINT , name VARCHAR(16) , item_id SMALLINT , item_name VARCHAR(16) , PRIMARY KEY(id, item_id) ); INSERT INTO items VALUES (1, '文房具', 1, 'シャーペン') , (1, '文房具', 2, '消しゴム') , (1, '文房具', 3, '定規') , (2, 'かばん', 1, 'リュックサック') , (2, 'かばん', 2, 'ショルダーバッグ'); CREATE TABLE genre ( id SMALLINT , name VARCHAR(16) ,PRIMARY KEY(id) ); # SELECT *
UNION は複数の SELECT 文によってデータをそれぞれ取得し、その結果を結合した上で1つのデータとして取得する場合に使います。書式は次の通りです。 SELECT col_name1, ... FROM table_name1 UNION [ALL | DISTINCT] SELECT col_name2, ... FROM table_name2 [UNION [ALL | DISTINCT] ...] 最初の SELECT 文で取得したデータに、次の UNION のあとの SELECT 文で取得したデータを結合して取得します。 3 つ以上のテーブルを結合したい場合は UNION 以下をテーブルの数だけ記述してください。 取得したデータのカラム名は最初の SELECT 文のあとに記載されたカラム名となります。それぞれの SELECT 文で取得するデータのカラムの数は同じである必要が
月別、日別、時間別にレコード数を集計 一月毎 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
postgres=# select version(); version ------------------------------------------------------------- PostgreSQL 9.6.1, compiled by Visual C++ build 1800, 64-bit (1 行) 再帰呼び出しの課題としてよく利用されるのがフィボナッチ数列。DBMSにもよりますが、SQLでも再帰呼び出し(再帰クエリ)はサポートされているので、SQLでフィボナッチ数列を書いてみました。 with recursive fib (x, a, b) as ( select 0, cast(0 as decimal), cast(1 as decimal) union all select x + 1, b, a + b from fib where x < 100 )
drop table if exists depts; create table depts( dept_id int primary key, dept_name varchar(32) ); insert into depts(dept_id,dept_name) values(1,'営業部'); insert into depts(dept_id,dept_name) values(2,'経理部'); insert into depts(dept_id,dept_name) values(3,'技術部'); insert into depts(dept_id,dept_name) values(4,'法務部'); #employees drop table if exists employees; create table employees( id int primary key
こんにちは、VASILYバックエンドエンジニアの塩崎です。 VASILYでは様々なログデータの分析にBigQueryを使用しています。 インデックスについて何も考えなくても良いのが特に便利です。 さて、そんなBigQueryですが、数か月前にStandard SQLという新しい仕様のSQLがサポートされました。 BigQuery 1.11, now with Standard SQL, IAM, and partitioned tables! VASILYでも徐々にStandard SQLに移行をしているので、使い勝手や従来のSQLからの移行方法についてまとめておきます。 Standard SQLとは SQL:2011に準拠しつつ、配列や構造体等の構造化データを扱えるように拡張されたSQLです。 Standard SQLの登場によって、以前からあったSQLはLegacy SQLと呼ばれるよ
今さらな話ではあるんですが、前にも一度同じ過ちを犯したことがあるので、ここでちゃんと自分を懲らしめておきたいと思います。 前提条件 例えば、データベースにこんなデータが入っているとする。 +----+-----------+--------+------+---------------------+ | id | author_id | title | text | created | +----+-----------+--------+----------------------------+ | 1 | 1 | title1 | text | 2012-10-01 12:00:00 | | 2 | 2 | title2 | text | 2012-10-02 12:00:00 | | 3 | 1 | title3 | text | 2012-10-03 12:00:00 | | 4
Facebookは、数ペタバイト級の大規模データに対しても、対話的にアドホックな問い合わせを可能にする分散SQLエンジン「Presto」を、オープンソースで公開しました。 PrestoはFacebook社内で大規模データの分析のために開発され、すでに同社社内使われているもの。 FacebookはPrestoを開発した背景として、大量のデータをHadoop/HDFSベースで保存したものの、バッチ指向のMapReduceではなく、リアルタイム性に優れた処理が必要になったためだと、次のように説明しています。 Facebook’s warehouse data is stored in a few large Hadoop/HDFS-based clusters. Hadoop MapReduce [2] and Hive are designed for large-scale, reliabl
本書はDB設計やSQL記述の際に避けるべき事柄を1章で1つ、25個紹介する書籍です。リレーショナルデータベースを中心に据えたシステム開発には、様々な場面で陥りやすい失敗(アンチパターン)があります。本書はデータベース論理設計、データベース物理設計、クエリの記述、アプリケーション開発という4つのカテゴリに分け、それぞれの分野におけるアンチパターンを紹介し、失敗を避けるためのより良い方法を紹介します。複数の値を持つ属性や再帰的なツリー構造の格納から、小数値の丸めやNULLの扱いに起因する問題、全文検索やSQLインジェクション、MVCアーキテクチャなど、実践的かつ幅広いトピックを網羅します。日本語版では、MySQLのエキスパートとして著名な奥野幹也氏によるアンチパターンを収録。データベースに関わるすべてのエンジニア必携の一冊です。 本書への称賛の声 監訳者まえがき はじめに I部 データベース論
ブログコンテストも終わってしまったので、MySQLの実践TIPSを書いていこうと思います。 一般的なSQLの他のサイトの解説に譲るとして、ちょっと横道にそれて、MySQL独自関数を使った実践TIPSを紹介していきたいと思います。 まず第一弾は『ELT/FIELD』、MySQLマニュアルを読むと ELT(N,str1,str2,str3,...) N = 1 の場合は str1 を戻し、N = 2 の場合は str2 を戻す、というふうに続きます。N が 1 以下か、引数の数より大きければ、NULL を戻します。ELT() は FIELD() の補数です。と書かれています。がこれだけだと良く分かりません。 具体的な実践例をあげると例えば、ユーザテーブル(user)で『sex』という性別を示すカラムがあったとします、1:男 2:女といった意味でtinyint型で値が格納されているとします。その
「安全なSQLの呼び出し方」というSQLのセキュリティに焦点を当てたドキュメントが、2010年3月にIPA(独立行政法人情報処理推進機構)から公開された。 これは2006年1月から提供されている、Webサイト開発者や運営者向けのセキュアWebサイト構築のための資料「安全なウェブサイトの作り方」の別冊として書かれたものである。「安全なウェブサイトの作り方」が92ページなのに対して、SQLインジェクションについてだけで40ページもの分量がある。なぜこんなに分厚いのだろうか。 このドキュメント作成に協力したという、独立行政法人産業技術総合研究所 情報セキュリティ研究センターの高木浩光氏にお話を伺うことができた。高木氏は個人ブログ「高木浩光@自宅の日記」で、セキュリティ関連の問題を追求する論客としても知られている。筆者も以前、この連載の「今夜わかるSQLインジェクション対策」の回(2006年11月
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く