はじめに コースの概要と目的条件分岐の方法や複雑な集計の手法など SQL のコーディングの幅を広げるためのテクニックについて説明します また パフォーマンスを考慮した記述方法や正しい結果を取得するための記述方法などについても あわせて説明します 本コースでは 実践的な SQL の記述手法を広く浅く紹

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

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

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

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

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

目次 1 集計関数 / 分析関数とは 2 集計関数 / 分析関数のパフォーマンス効果 3 ケーススタディグループ小計やクロス集計を計算するランキングを表示する前月比較を表示する累計を計算する移動平均を計算する構成比を計算する Oracle8i SQL Oracle8i Oracle Oracle C

Oracle活用実践演習コース

はじめに コース概要と目的 Oracle を使用した開発 管理を行う上でのファースト ステップとして リレーショナル データベース管理ソフトウェアである Oracle の役割 基本機能 基本アーキテクチャを幅広く理解することを目的としています 受講対象者 これから Oracle を使用する方 データ

PowerPoint プレゼンテーション

第 7 章 ユーザー データ用表領域の管理 この章では 表や索引を格納するユーザー データ用表領域の作成や 作成後のメンテナンスに ついて解説します 1. ユーザー データ用表領域の管理概要 2. ユーザー データ用表領域作成時の考慮事項 3. ユーザー データ用表領域の作成 4. ユーザー データ

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

DB12.1 Beta HandsOn Seminar

PowerPoint プレゼンテーション

Oracle Direct Seminar <Insert Picture Here> 効果的な集計処理ことはじめ 日本オラクル株式会社

Microsoft PowerPoint - KeySQL50_10g_vlo2.ppt

橡実践Oracle Objects for OLE

プレポスト【問題】

Oracle Application Expressの機能の最大活用-インタラクティブ・レポート

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

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

BC4J...4 BC4J Association JSP BC4J JSP OC4J

領域サイズの見積方法

Oracle Direct Seminar <Insert Picture Here> 体感型セミナー SQL をクイズ感覚で学ぶ! SQL クイズ 日本オラクル株式会社

<4D F736F F D204F C B838B82C B838B8EE88F878F912E646F6378>

橡ExCtrlPDF.PDF

基本サンプル

基本サンプル

基本サンプル

PowerPoint -O80_REP.PDF


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

PowerPoint プレゼンテーション

Oracle Database Connect 2017 JPOUG

Microsoft Word - sample_adv-programming.docx

標準化 補足資料

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

n n n ( ) n Oracle 16 PostgreSQL 3 MySQL

Microsoft PowerPoint - db03-5.ppt

Oracle Database 12cでのSQL*LoaderのExpress Modeによるロード

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

セットアップカード

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

Oracle8i SQL*Plus ユーザーズ・ガイドおよびリファレンス, リリース8.1

问题集 ITEXAMPASS 1 年で無料進級することに提供する

Microsoft PowerPoint - 3-Forms-Others.ppt

Chapter Two

早分かりS2Dao

_02_3.ppt

データベースS

Java講座

NEC COBOL SQL アクセス Server Runtime V1.0 COBOL SQL アクセス Server Runtime V1.0 (1 年間保守付 ) COBOL SQL アクセス Server Runtime V1.0 (1 年間時間延長保守付 ) セットアップカード SL438

プログラミング基礎

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Oracle 入門 ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助とし

5 Q. 選択リストにアスタリスク (*) を使用して 位置に基づくソートを行うとどうなりますか A. その表を構成している列の順序に対応して 暗黙的に番号が割り振られます 6 Q. 文字データが日本語の場合 ソートは五十音順に行われるのですか A. 五十音順ではなく 文字コード順になります 文字コ

Microsoft PowerPoint - ProD0107.ppt

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

PowerPoint プレゼンテーション

要旨 : データステップ及び SGPLOT プロシジャにおける POLYGON/TEXT ステートメントを利用した SAS プログラムステップフローチャートを生成する SAS プログラムを紹介する キーワード :SGPLOT, フローチャート, 可視化 2

KeySQL R5.1のご紹介

Microsoft PowerPoint - Visualプログラミング

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

PowerPoint Presentation

Oracle Direct Seminar <Insert Picture Here> 試験対策ポイント解説 11g SQL 基礎 Ⅰ 日本オラクル株式会社

PowerPoint プレゼンテーション

DumpCollection IT Exam Training online / Bootcamp PDF and Testing Engine, study and practice

Oracle Lite Tutorial

Section1_入力用テンプレートの作成

Ⅰ 調査票 ( エクセル ファイル ) を開いたら (1) このメッセージが出てきた時の対応方法 Excel 2003 を使用する場合 A. 表示 1 マクロが使用できません というダイアログが表示された場合 OK ボタンをクリックし 下記手順にて設定を行ってください 1. メニューから 1 ツール

Microsoft PowerPoint pptx

Basic descriptive statistics

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

Copyright 2018 CO-Sol Inc. All Rights Reserved. 2 自己紹介 + 所属会社紹介 五十嵐一俊 ( いがらしかずとし ) Oracle Exadata の DBA 業務に従事 ORACLE MASTER Platinum 12c 保持 執筆記事 コーソル

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Microsoft Word - 430_15_Developing_Stored_Procedure.doc


_02-4.ppt

sinfI2005_VBA.doc

計算機プログラミング

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

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

Oracle Database Lite SQLリファレンス, 10g(10.0.0)

PowerPoint プレゼンテーション

PA4

プログラミング基礎


(Microsoft Word - FireWall\202\314\227\341\212O\220\335\222\350\202\360\215s\202\244.doc)

HDC-EDI Manager Ver レベルアップ詳細情報 < 製品一覧 > 製品名バージョン HDC-EDI Manager < 対応 JavaVM> Java 2 Software Development Kit, Standard Edition 1.4 Java 2

untitled

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

Oracle9i

PowerPoint -O80_PSO_AFO.PDF

Microsoft Word - VBA基礎(3).docx

COBOL EE開発環境 ご紹介資料

サービス付き高齢者向け住宅賠償責任保険.indd

Microsoft PowerPoint - KeySQL50_10g_vlo3.ppt

ソフトウェアエンジニアリング - 機能 #54

<4D F736F F D20837D815B B838B837A838B835F E836782CC91E391D68EE892692E646F63>

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Transcription:

はじめに コースの概要と目的条件分岐の方法や複雑な集計の手法など SQL のコーディングの幅を広げるためのテクニックについて説明します また パフォーマンスを考慮した記述方法や正しい結果を取得するための記述方法などについても あわせて説明します 本コースでは 実践的な SQL の記述手法を広く浅く紹介することを目的としているため 細かな構文やオプションの習得を目的とはしていないことを 予めご了承ください 受講対象者 SQL を使用してアプリケーション開発をされる方 前提条件 SQL トレーニング コースを受講された方 もしくは同等の知識をお持ちの方 テキスト内の記述について 構文 [ ] 省略可能 { A B } A または B のどちらかを選択 n _ 数値の指定 デフォルト値 マーク 指定バージョンからの新機能 ( 左記の場合 Oracle 12cR2 からの新機能 ) Enterprise Edition で使用できる機能 注意事項 参考情報 知っておくと便利なテクニック 参照ページ データ ディクショナリ ビュー

1 条件分岐 SQL における条件分岐の方法について説明します CASE 式 関数を使用した条件分岐 MERGE 文

CASE 式 CASE 式を使用した条件分岐の方法について説明します CASE 式を使用すると 条件に応じて処理を分岐できます CASE 式の使用方法 ( A-11) (1) 特徴 CASE 式には次のような特徴があります コードの読みやすさ 複雑な分岐条件を設定可能 さまざまな箇所で使用可能 1) コードの読みやすさ DECODE 関数などの分岐関数を使用しても条件分岐処理は可能ですが 分析関数を使用した場合は引数の意 味を理解していないと コードが読みづらくなります CASE 式の場合は 分岐条件と処理内容をわかりやすく表現できます 例 ) 部門番号 (DEPTNO 列 ) の値に応じて表示内容を変更する (DECODE 関数を使用して条件分岐 ) SELECT ename,deptno, DECODE(deptno,10,'ACCOUNTING', 20,'RESEARCH', 30,'SALES', 'OPERATIONS') FROM emp; 引数の意味を理解していないと分岐条件 と処理内容の関係を把握できない 例 ) 部門番号 (DEPTNO 列 ) の値に応じて表示内容を変更する (CASE 式を使用して条件分岐 ) SELECT ename,deptno, CASE deptno WHEN 10 THEN 'ACCOUNTING' WHEN 20 THEN 'RESEARCH' WHEN 30 THEN 'SALES' ELSE 'OPERATIONS' END FROM emp; WHEN 句や THEN 句などのキーワード によって 分岐条件と処理内容の関係が 把握しやすくなっている 1-1

2) 複雑な分岐条件を設定可能 CASE 式では分岐条件に演算子や副問い合わせを含めることができます そのため 分岐関数に比べて複雑な 分岐条件を設定できます 1 例 ) 給与額 (SAL 列 ) の値に応じて表示内容を変更する SELECT ename,sal, CASE WHEN sal BETWEEN 1 AND 2000 THEN ' 少ない ' WHEN sal BETWEEN 2001 AND 4000 THEN ' 普通 ' WHEN sal BETWEEN 4001 AND 6000 THEN ' 多い ' ELSE ' 不明 ' END FROM emp; DECODE 関数では 上記のような範囲指定や非等価演算子を使用した分岐条件は設定できません 2 3 3) さまざまな箇所で使用可能 CASE 式 であるため 他の句と組み合わせて SQL のさまざまな箇所で条件分岐を行えます 例 )2000 未満の給与額 (SAL 列 ) を 2000 に切り上げて平均給与を算出する (AVG 関数と CASE 式の組み合わせ ) SELECT AVG(CASE WHEN sal > 2000 THEN sal ELSE 2000 END) FROM emp; 4 1-2

(2) 構文 CASE 式の構文には 単純 CASE 式と検索 CASE 式があります 1) 単純 CASE 式 選択子と条件値を等価評価して 処理を分岐できます _ 構文 CASE 選択子 WHEN 条件値 THEN 処理内容 [ WHEN 条件値 THEN 処理内容 ] [ ELSE 処理内容 ] END 選択子 条件値 処理内容 比較対象となる値を指定します 選択子と等価評価する値を指定します 選択子との等価評価が成立した際に行う処理内容を指定します ELSE には すべての条件を満たさなかった場合に行う処理内容を指定します 1-3

例 )DEPTNO 列の値に応じて表示内容を変更する SQL> SELECT ename,deptno, 2 CASE deptno WHEN 10 THEN 'ACCOUNTING' 3 WHEN 20 THEN 'RESEARCH' 4 WHEN 30 THEN 'SALES' 5 ELSE 'OPERATIONS' 6 END 7 FROM emp 8 ORDER BY deptno; 1 2 ENAME DEPTNO CASEDEPTNO ---------- ---------- ---------- CLARK KING MILLER JONES FORD ADAMS SMITH SCOTT WARD TURNER ALLEN JAMES BLAKE MARTIN 3 4 1-4

2) 検索 CASE 式 分岐条件を 1 つずつ指定して 処理を分岐できます 分岐条件には等価評価以外の条件も指定できます _ 構文 CASE WHEN 分岐条件 THEN 処理内容 [ WHEN 分岐条件 THEN 処理内容 ] [ ELSE 処理内容 ] END 分岐条件 処理内容 分岐条件を指定します 分岐条件を満たした場合に行う処理内容を指定します ELSE には すべての条件を満たさなかった場合に行う処理内容を指定します 例 )DEPTNO 列の値に応じて表示内容を変更する SQL> SELECT ename,deptno, 2 CASE WHEN deptno = 10 THEN 'ACCOUNTING' 3 WHEN deptno = 20 THEN 'RESEARCH' 4 WHEN deptno = 30 THEN 'SALES' 5 ELSE 'OPERATIONS' 6 END 7 FROM emp 8 ORDER BY deptno; ENAME DEPTNO CASEWHENDE ---------- ---------- ---------- CLARK KING MILLER JONES FORD ADAMS SMITH SCOTT WARD TURNER ALLEN JAMES BLAKE MARTIN 1-5

例 ) 入社日 (HIREDATE 列 ) に応じて表示内容を変更する SQL> SELECT ename,hiredate, 2 CASE WHEN hiredate <= '80-12-31' THEN '80 年入社 ' 3 WHEN hiredate <= '81-12-31' THEN '81 年入社 ' 4 WHEN hiredate <= '82-12-31' THEN '82 年入社 ' 5 ELSE '83 年以降入社 ' 6 END 7 FROM emp; ENAME HIREDATE CASEWHENHIRE ---------- -------- ------------ SMITH 80-12-17 80 年入社 ALLEN 81-02-20 81 年入社 WARD 81-02-22 81 年入社 JONES 81-04-02 81 年入社 MARTIN 81-09-28 81 年入社 BLAKE 81-05-01 81 年入社 CLARK 81-06-09 81 年入社 SCOTT 82-12-09 82 年入社 KING 81-11-17 81 年入社 TURNER 81-09-08 81 年入社 ADAMS 83-01-12 83 年以降入社 JAMES 81-12-03 81 年入社 FORD 81-12-03 81 年入社 MILLER 82-01-23 82 年入社 上記例のように 検索 CASE 式では等価評価以外の分岐条件も指定できます 1 2 3 4 1-6

注意事項 単純 CASE 式や検索 CASE 式を記述する際には 次の点に注意が必要です ELSE 句の記述 ELSE 句の記述を省略した場合は ELSE NULL(NULL を戻す ) となります 分岐条件をすべて満たさない場合に NULL を戻す場合であっても 意図が伝わるようにするために ELSE 句は省略しないことをおすすめします 例 ) 職種 (JOB 列 ) に応じて新給与 (NEW_SAL) を計算する (ELSE 句を省略 ) SQL> SELECT ename,job, 2 CASE WHEN job = 'MANAGER' THEN sal*2 3 WHEN job = 'SALESMAN' THEN sal*3 4 END AS new_sal 5 FROM emp; ELSE 句の記述が省略されているため 分岐条件 をすべて満たさない場合に NULL を戻すことが ENAME JOB NEW_SAL 意図した動作なのかがわからない ---------- --------- ---------- SMITH CLERK ALLEN SALESMAN 4800 省略 例 ) 職種 (JOB 列 ) に応じて新給与 (NEW_SAL) を計算する (ELSE 句を省略しない ) SQL> SELECT ename,job, 2 CASE WHEN job = 'MANAGER' THEN sal*2 3 WHEN job = 'SALESMAN' THEN sal*3 4 ELSE NULL 5 END AS new_sal ELSE 句が記述されているため 分岐条件を 6 FROM emp; すべて満たさない場合に NULL を戻すことが意図した動作であることがわかる ENAME JOB NEW_SAL ---------- --------- ---------- SMITH CLERK ALLEN SALESMAN 4800 省略 1-7

戻される値のデータ型 THEN 句と ELSE 句で戻される値のデータ型は すべて一致している必要があります 1 例 ) 戻される値のデータ型を変えて CASE 式を実行する SQL> SELECT ename,deptno, 2 CASE WHEN deptno = 10 THEN 'ACCOUNTING' 1 つ目の分岐条件で文字型 3 WHEN deptno = 20 THEN 1 2 つ目の分岐条件で数字型が 4 ELSE NULL 戻されるため エラーが発生 5 END 6 FROM emp; WHEN deptno = 20 THEN 1 * 行 3 でエラーが発生しました : ORA-00932: データ型が一致しません : CHAR が予想されましたが NUMBER です 2 3 分岐条件の記述順 分岐条件は記述順に評価され 条件が成立した時点で評価が打ち切られます そのため 先に記述した条件が 後に記述した条件を含む場合は意図しない結果となるため 分岐条件の記述順には注意が必要です 例 ) 給与 (SAL 列 ) に応じて表示内容を変更する SQL> SELECT sal, 2 CASE WHEN sal >= 2500 THEN ' 少ない ' 3 WHEN sal >= 5000 THEN ' 多い ' 4 ELSE ' 不明 ' 5 END AS amount 6 FROM emp 7 ORDER BY sal DESC; 分岐条件は記述順に評価される 4 SAL AMOUNT ---------- ------ 5000 少ない 3000 少ない 省略 SAL 列が 5000 の場合 多い と表示したいが 1 つ目の分岐条件 (SAL 列が 2500 以上 ) に合致するため 2 つ目の分岐条件 (SAL 列が 5000 以上 ) が評価されていない CASE 式の評価結果に対しては 列の別名を定義することをおすすめします 列の別名を定義していない 場合は CASE 式の記述がそのまま列ヘッダーに表示されます 1-8