SQL 基礎 (6) JOIN 句 - データの結合 作成日 : 2016/02/22 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2016/02/22 新規作成 西村 はじめに この資料では 下記のような JOIN によるテーブル ( データ ) の結合について簡単に説明します INNE

Similar documents
結合サンプル

Microsoft PowerPoint - 講義補助資料2017.pptx

結合演算 ( 復習 ) データベース論 (9) R 社員番号 氏名麻生太郎安部晋三与謝野馨森喜朗 部門経理課営業課総務課営業課 S 部門経理課営業課総務課 電話 問合せ言語と SQL(2) R S 社員番号

Microsoft PowerPoint pptx

eラーニング資料 e ラーニングの制作目標 データベース編 41 ページデータベースの基本となる概要を以下に示す この内容のコースで eラーニングコンテンツを作成予定 データベース管理 コンピュータで行われる基本的なデータに対する処理は 次の 4 種類です 新しいデータを追加する 既存のデータを探索

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

7-1- 基 RDB に関する基礎知識 1 独立行政法人情報処理推進機構

プレポスト【問題】

Basic descriptive statistics

Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba Sequel のすすめ - 私が SQL を嫌いな理由 Powered by Rabbit 2.0.7

第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

3 - 正しい SQL ( 方言を排除した SQL 文の記述方法 )

基本サンプル

データベース工学 2011年度資料

基本サンプル

PowerPoint プレゼンテーション

1,.,,,., RDBM, SQL. OSS,, SQL,,.

PowerPoint Presentation

標準化 補足資料

PA4

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

データベースS


住所録を整理しましょう

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

クエリの作成が楽になるUDF

スライド 0

ID010-2

- 1 -

%

2

Microsoft Word - sample_adv-programming.docx

1 ex01.sql ex01.sql ; user_id from (select user_id ;) user_id * select select (3+4)*7, SIN(PI()/2) ; (1) select < > from < > ; :, * user_id user_name

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

基本サンプル

クエリエディターを活用した公開データのデータ整形

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

機能と使い方 起動すると下のようなフォームが表示されます ボタンの大きさはあらかじめ3 種類用意してありますが 任意の大きさも指定できます ボタンに表示する文字列はあらかじめ5 種類用意してありますが 任意の文字列も指定できます ボタンの色はあらかじめ6 種類用意してありますが 任意の色も指定可能で

変更履歴 版数変更日変更内容 /9/1 初版設定

第 13 講データ管理 2 2 / 14 ページ 13-1 ファイルを開く 第 12 講で保存したデータベースファイル サークル名簿.accdb を開きましょう 1. Access を起動します 2. Microsoft Office Access - 作業の開始 が表示されていることを確認します



LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

Microsoft Word - Android_SQLite講座_画面800×1280

Microsoft PowerPoint - system8.ppt

DF-200

Oracle Database Connect 2017 JPOUG

問題 1 次の文章は Access データベース およびデータベースの概要について述べたものである にあてはまる適切なものを解答群 { } より選び その記号で答えよ 設問 1. Microsoft Access 2007 データベースのテーブルでは 表す としてデータを { ア. レコードを列 フ

Exam : 1z0-882 日本語 (JPN) Title : Oracle Certified Professional, MySQL 5.6 Developer Vendor : Oracle Version : DEMO 1 / 4 Get Latest & Valid 1z0-882-JP

ご存知ですか? データ転送

この文章に含まれる情報は 公表の日付の時点での Microsoft Corporation の考え方を表しています 市場の変化に応える必要 があるため Microsoft は記載されている内容を約束しているわけではありません この文書の内容は印刷後も正しいとは保障で きません この文章は情報の提供の

Microsoft PowerPoint - db03-5.ppt

目次 更新履歴... 1 画面設計書の目的... 3 必要な内容... 3 画面一覧... 4 必要な内容... 4 画面遷移... 5 画面レイアウト... 6 入力パラメータ... 7 必要な内容... 7 項目定義... 8 必要な内容... 8 部品の種類... 9 ( 参考 ) 部品指定と

Microsoft Word - CygwinでPython.docx

1 はじめに 従 来 診 療 報 酬 明 細 書 (レセプト)は 紙 媒 体 で 請 求 されてき たが 2011 年 度 より 原 則 として 電 子 請 求 されるようになった 従 来 の 紙 媒 体 に 比 べ 分 析 が 容 易 になったため 電 子 化 され たレセプトデータの 様 々な

Chapter Two

データベースアクセス

Chapter Two

20 代 30 代 40 代 50 代 全 体 男 性 (12.9%) (30.3%) (28.7%) (28.1%) ( %) 女 性 (35.0%) (35.0%) (13.3%) (16.7%) (100.0

Si 知識情報処理

スライド 1

Microsoft PowerPoint - KeySQL50_10g_vlo2.ppt

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成


untitled

untitled

untitled

,, create table drop table alter table


PowerPoint プレゼンテーション

関数サンプル1

CMP2-3SQL2b.pptx

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

n n n ( ) n Oracle 16 PostgreSQL 3 MySQL

PowerPoint Presentation

フォト・ボックス

Excel データ出力ガイドブック 第 1.0 版平成 30 年 9 月 1 日制定 株式会社中電シーティーアイ

スライド タイトルなし

アジェンダ ORACLE MASTER Oracle Database 11g 概要 11g SQL 基礎 Ⅰ 試験紹介 ポイント解説 Copyright 2011 Oracle. All rights reserved. 2

表 2 michael のパスワード変更後の USER_ACL テーブル内容 リスト2は userpwd プログラムのソースリストである Perl で書かれたプログラムで,DBI インタフェー注ス ( 1 注 ) を使用して MySQL( 2 ) データベースへアクセスする 5 7 行目では, コマ

Microsoft認定資格問題集DEMO(70-459_Part2)

桐入門 立ち読み

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

KTest

PowerPoint プレゼンテーション

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

TALON Tips < 親子関係のある構成データを TALON で表示する > 株式会社 HOIPOI 第 1.1 版 p. 1

3 課題提出方法競技者は 完成した作品 ( 未完成作品も含む ) を大会主催者側の用意する外付けの USB メモリに保存し提出する なお作品を保存した USB メモリは競技時間終了と同時に競技委員が回収する 4 注意事項 (1) 各テーブル用の CSV データは事前に配布されるファイルを使用する (

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = "select * from

地域医療ビッグデータに触ってみよう ほぼハンズオンマニュアル

情報科学概論 第6回

Microsoft Word - Amazon Pay オペレーションマニュアル.docx

WEBシステムのセキュリティ技術

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

関数サンプル2

Transcription:

SQL 基礎 (6) JOIN 句 - データの結合 作成日 : 2016/02/22 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2016/02/22 新規作成 西村 はじめに この資料では 下記のような JOIN によるテーブル ( データ ) の結合について簡単に説明します INNER JOIN LEFT JOIN RIGHT JOIN 1

サンプルのデータ この資料では 下記のテーブルをもとに各クエリの結果がどうなるかを示します [ 社員テーブル ] id 姓 名 性別 部署 id 1 山田 太郎 男 1 2 福岡 幸子 女 2 3 東京 次郎 男 3 4 青森 花子 女 1 5 岩手 誠司 男 1 6 山口 三郎 男 999 [ 部署テーブル ] id 部署名 1 開発部 2 技術部 3 総務部 4 経理部 2

JOIN? JOIN は データベース内の複数のデータを結合する ( くっつける ) 機能です たとえば 別のテーブルになっている社員のデータと部署名のデータを一度に取得したい などデータ同士をくっつけて一度に取得したい場合に使います テーブル A テーブル B 上記のイメージの通り テーブル同士が横でくっつく感じです 縦でくっつかせたい場合は UNION という別の機能を使います 3

基本的な書き方 基本的な書き方は下記のようになります SELECT 列名 FROM テーブル名 JOIN の種類別のテーブル名 ON 結合条件 JOIN の種類は後述します 結合条件は 2 つのデータを何にもとづいてくっつけるか を DB に教えるための条件です WHERE と同等の式を書くこと ができます ( 社員. 部署 id = 部署.id など AND や OR を使うこともできます ) JOIN は複数使うことができます ( 同じテーブルを何度も使うこともできます ) SELECT 列名 FROM テーブル名 JOIN の種類別のテーブル名 1 ON 結合条件 JOIN の種類別のテーブル名 2 ON 結合条件 JOIN の種類別のテーブル名 3 ON 結合条件 4

INNER JOIN INNER JOIN は 内部結合 と呼び 2 つのテーブル間の行で くっつくことができた 内の行だけ結果として表示する結合方式です ( 例 ) 社員の部署 id と部署の id が一致するもので INNER JOIN する場合 SELECT 社員.id, 社員. 姓, 社員. 部署 id, 部署. 部署名 FROM 社員 INNER JOIN 部署 ON 社員. 部署 id = 部署.id; [ 社員 ] id 姓 部署 id 1 山田 1 2 福岡 1 3 東京 1 4 青森 2 5 岩手 3 6 山口 999 [ 部署 ] id 部署名 1 開発部 2 技術部 3 総務部 4 経理部 [ 結果 ] id 姓 部署 id 部署名 1 山田 1 開発部 2 福岡 1 開発部 3 東京 1 開発部 4 青森 2 技術部 5 岩手 3 総務部 http://sqlfiddle.com/#!9/d440ed/2 社員側にある部署 id = 999 の行は部署側に id = 999 の行がないので結果から取りのぞかれます 部署側にある id = 4 の行は社員側に部署 id = 4 の行がないので結果から取りのぞかれます 5

LEFT JOIN LEFT JOIN(LEFT OUTER JOIN) は 左外部結合 と呼び 2 つのテーブル間の行で くっつくことができた 内の行 + くっつくことができなかったの左側のテーブルの行を結果として出すという結合方式です ( 例 ) 社員の部署 id と部署の id が一致するもので LEFT JOIN する場合 SELECT 社員.id, 社員. 姓, 社員. 部署 id, 部署. 部署名 FROM 社員 LEFT JOIN 部署 ON 社員. 部署 id = 部署.id; [ 社員 ] id 姓 部署 id 1 山田 1 2 福岡 1 3 東京 1 4 青森 2 5 岩手 3 6 山口 999 [ 部署 ] id 部署名 1 開発部 2 技術部 3 総務部 4 経理部 [ 結果 ] id 姓 部署 id 部署名 1 山田 1 開発部 2 福岡 1 開発部 3 東京 1 開発部 4 青森 2 技術部 5 岩手 3 総務部 6 山口 999 (NULL) http://sqlfiddle.com/#!9/d440ed/3 社員側にある部署 id = 999 の行は部署側に id = 999 の行がありませんが 左側をベースにするため結果に含ま れます ( 部署名は結合できなかったので NULL で出てきます ) 部署側にある id = 4 の行は user 側に部署 id = 4 の行がなかったので結果から取りのぞかれます 6

RIGHT JOIN RIGHT JOIN(RIGHT OUTER JOIN) は 右外部結合 と呼び 2 つのテーブル間の行で くっつくことができた 内の行 + くっつくことができなかったの右側のテーブルの行を結果として出すという結合方式です ( 例 ) 社員の部署 id と部署の id が一致するもので RIGHT JOIN する場合 SELECT 社員.id, 社員. 姓, 社員. 部署 id, 部署. 部署名 FROM 社員 RIGHT JOIN 部署 ON 社員. 部署 id = 部署.id; [ 社員 ] id 姓 部署 id 1 山田 1 2 福岡 1 3 東京 1 4 青森 2 5 岩手 3 6 山口 999 [ 部署 ] id 部署名 1 開発部 2 技術部 3 総務部 4 経理部 [ 結果 ] id 姓 部署 id 部署名 1 山田 1 開発部 2 福岡 1 開発部 3 東京 1 開発部 4 青森 2 技術部 5 岩手 3 総務部 (NULL) (NULL) (NULL) 経理部 http://sqlfiddle.com/#!9/d440ed/6 社員側にある部署 id = 999 の行は部署側に id = 999 の行なかったので結果から取りのぞかれます 7

部署側にある id = 4 の行は社員側に部署 id = 4 の行がありませんが 右側をベースにするため結果に含まれます ( 社員から表示しようとしていた列は社員と結合できなかったので NULL で出てきます ) 8

左側 右側? SQL での 左側 は FROM に書いてあるテーブル 右側 は JOIN に書いてあるテーブル のことです SELECT 社員.id, 社員. 姓, 社員. 部署 id, 部署. 部署名 FROM 社員 LEFT JOIN 部署 ON 社員. 部署 id = 部署.id; の場合 FROM 社員の部分が左側 その次の部署が右側になります JOIN が続く場合は先に出てきたテーブルが左です どの JOIN を使ったらいい? 基本的には INNER JOIN と LEFT JOIN しか使うことはほとんどありません サンプルのデータで言うと 部署 ID とくっつかない社員データはいらない ( またはありえない ) から結果からのぞこう という場合 INNER JOIN 部署 ID とくっつかない社員データがあってもとりあえず全社員出したい という場合 LEFT JOIN になります (RIGHT JOIN は順番が変わるだけで LEFT JOIN と同じなのでわざわざ RIGHT JOIN を使う必要がない ) 9

結合する行が複数あった場合 例えば部署テーブルに部署 id=3 の行が 2 件あるなど 結合する行が複数あった場合は結果も同じ行出てきます [ 社員 ] id 姓 部署 id 1 山田 1 2 福岡 1 3 東京 1 4 青森 2 5 岩手 3 6 山口 999 [ 部署 ] id 部署名 1 開発部 2 技術部 3 総務部 4 経理部 3 総務部 2 [ 結果 ] id 姓 部署 id 部署名 1 山田 1 開発部 2 福岡 1 開発部 3 東京 1 開発部 4 青森 2 技術部 5 岩手 3 総務部 5 岩手 3 総務部 2 変な行が出てくる という場合はまず 結合の条件が甘いのではないか データがおかしくないか を確認してみるとよいで す 10

ON と WHERE ON の結合条件でできることは WHERE でもできることがあります ( 通常の INNER JOIN の例 ) SELECT 社員.id, 社員. 姓, 社員. 部署 id, 部署. 部署名 FROM 社員 INNER JOIN 部署 ON 社員. 部署 id = 部署.id; (INNER JOIN に ON で結合条件を付けずに WHERE に持っていくこともできます ) SELECT 社員.id, 社員. 姓, 社員. 部署 id, 部署. 部署名 FROM 社員 INNER JOIN 部署 WHERE 社員. 部署 id = 部署.id; ただ WHERE の場合は 全部の行を掛けあわせ (CROSS JOIN) してから抽出する という動きになるので一般的に遅い ですしわかりづらいのでやめましょう ( 次のページのような形になります ) 11

id 姓 部署 id 部署名 ( 部署.id) 1 山田 1 開発部 1 1 山田 1 技術部 2 1 山田 1 総務部 3 1 山田 1 経理部 4 2 福岡 2 開発部 1 2 福岡 2 技術部 2 2 福岡 2 総務部 3 2 福岡 2 経理部 4 3 東京 3 開発部 1 3 東京 3 技術部 2 3 東京 3 総務部 3 3 東京 3 経理部 4 4 青森 1 開発部 1 4 青森 1 技術部 2 4 青森 1 総務部 3 4 青森 1 経理部 4 5 岩手 1 開発部 1 5 岩手 1 技術部 2 5 岩手 1 総務部 3 5 岩手 1 経理部 4 6 山口 999 開発部 1 6 山口 999 技術部 2 6 山口 999 総務部 3 6 山口 999 経理部 4 12

id 姓 部署 id 部署名 1 山田 1 開発部 2 福岡 2 技術部 3 東京 3 総務部 4 青森 1 開発部 5 岩手 1 開発部 13

その他の JOIN の形式 ほとんど使いませんが 下記のような形式もあります FULL OUTER JOIN: くっついた行 + 左側 + 右側すべて結果に出す ( 例えばサンプルデータの場合 LEFT のみで出る 1 行 RIGHT のみで出る 1 行を含めた 7 行出てきます ) CROSS JOIN: 結合条件を指定しないで全て結果に出す ( 例えばサンプルデータの場合社員 6 行 部署 4 行を掛けあわせた 24 行出てきます ) MySQL では FULL OUTER JOIN はサポートされていません JOIN の形式の違い JOIN の形式の違いは下記の通りです JOIN くっついた行を出す くっついていない左側を出す くっついていない右側を出す INNER JOIN LEFT JOIN RIGHT JOIN FULL OUTER JOIN CROSS JOIN 全部の行を掛けあわせる ( 直積と呼びます ) 14

問題 今回は簡単です 1. FROM 側をベースにデータを結合するには何の JOIN を使いますか? 2. くっつく条件に当てはまる結果だけ取得するためには何の JOIN を使いますか? 3. FROM A??? JOIN B で B 側をベースにデータを結合するには何の JOIN を使いますか? 4. 結合条件の前に置く文字は何ですか? ( 選択肢 ) A. LEFT JOIN B. INNER JOIN C. RIGHT JOIN D. ON E. WHERE JOIN は開発するときにはよく使うので覚えておくと効率がよくなります 15