基本SELECT文

SELECT文の機能:SQL文の一つであるSELECT文は、データベースから情報を取り出す。

★ 射影:問合せによって表内の列を選択ための機能
★ 選択:問合せによって表内の行を選択ための機能
★ 結合:表と表の間にリンクを作成するための機能

基本的なSELECT文:

SELECT * | {[DISTINCT] 列名| 式 [列別名]、…}
FROM 表名
★ SELECT句:列を指定する
★ FROM句:表を指定する
★ DISTINCT: 重複を排除する
★ 列別名:選択した列に異なる見出しをつける
★ *: すべての列を選択

SQL文の作成
★ SQL文では、大文字と小文字は区別されない
★ SQL文では、1行または複数行で記述できる
★ キーワードは、短縮したり2行に分けることはできない
★ 句は、通常、個別の行にする
★ インデントを私用すると読みやすくなる

列見出しのデフォルト
★ 位置調整
  - 文字/日付:左揃え
  - 数値:右揃え
★ 大文字で表示

算術式: 算術演算子を使用して、数値データや日付データの式を作成する

演算子	説明	
*	乗算	
/	除算	  
+	加算
-	減算

★ データを表示する方法を変更したり、計算をしたりする必要がある場合がある、このようなことは、算術式を使用して
  行うことができる、算術式には、列名、定数値、演算子を含めることができる
★ 算術演算子は SQL文のFROM句以外のすべての句で使用できる

NULL値の定義: 行の特定の列に値が含まれない場合には、値がNULLである、またはNULLを含むと表現される
    NULL値は、使用不可能、未割当で、不明または適用不可能な値である。NULL値はゼロまたは空白とは異なる
    ゼロは数値であり、空白は文字である。
    列が作成されたときに列がNOT NULLまたは主キーとして定義されていない限り、すべてのデータ型の列に
    NULL値を含めることができる。
★ NULLは使用不可能、未割当て、不明、または適用不可能な値
★ NULLはゼロや空白スペースとは異なる
★ NULL値を含む算術式は、結果がNULLになる

列別名の定義
★ 列見出しを変更できる
★ 計算に対する見出し
★ 列名(もしくは ASキーワード)の直後に指定
SELECT 列名 AS 列別名、 列名 列別名(ASキーワードを使用しても使用しなくても同じだ)
★ スペースやと特殊文字を含める場合、もしくは大文字と小文字を区別する場合、二重引用符を使用

連結演算子:"||"を使用して、列とほかの列を連結して表示できる。連結演算子の両側の列が結合され、
      1つの列が作成される。
SELECT 列名 || 列名 AS 列別名 (列別名の前に ASキーワードを入れるを、SELECT句が読みやすくなる)

リテラル文字列:


列別名の定義
★ 列の名前をそのまま列見出しにするとわかりにくい場合がある、列別名を使用することにより列見出しを変更できる。
★ 列別名は、スペースを区切り文字として使用し、SELECT句の中で列名の後ろに指定する。
★ デフォルトでは、列見出しは大文字で表示される
  ☆ 列別名にスペースや特別文字(%や!など)を含む
  ☆ 大文字と小文字を区別する場合には、列別名をに


重複する行:特に指定しない限り、問合せの結果は重複する行は除かずに表示される

重複する業の排除:結果から重複する行を排除するには、
             SELECT句の中でSELECTキーワードの直後にDISTINCTキーワードを含む

SQLとSQL*Plusの関係(1-24)

表構造の表示:SQL*PlusのDESCRIBEコマンドで表構造を表示する
DESC[RIBE] 表名
★ DESCRIBEコマンドを使用して表構造を表示、列名、その列にNULL値を含められるかどうか、列のデータ型が表示

SQL*Plusの編集コマンド

コマンド			説明				
A[PPEND]文字列			現行行の最後に文字列を追加する				
C[HANGE]/元の文字列/変更後の文字列			現行行の文字列を変更する				
C[HANGE]/文字列/			現行行から指定した文字列を削除する				
CL[EAR]BUFF[ER]			SQLバッファからすべての行を削除する				
DEL			現行行を削除する				
I[NPUT]			行を挿入する				
I[NPUT]文字列			指定した文字列で、行を挿入する				
L[IST]			SQLバッファからすべての行を表示する				
L[IST]n			n行目を表示する				
L[IST]  m n			m行目からn行目までを表示する				
R[UN]			バッファ内の現行行SQL文を表示および実行する				
n			現行行としてn行目を指定する				
n 文字列			n行目を表示する指定した文字列で置換する				
o 文字列			SQLバッファの先頭に指定した文字列で行を挿入				

SQL*Plusのファイル・コマンド

コマンド			説明				
SAV[E]ファイル名[.拡張子][REP[LACE]APP[END]]: SQLバッファの内容を、ファイルにセーブする。既存のファイルに追加するにはAPPENDオプションを、上書きするにはREPLAオプションをそれぞれ指定する。デフォルトを拡張子は .sql				
							
GET ファイル名[.拡張子]:	作成されたファイルの内容をSQLバッファに読み込む				
							
STA[RT]ファイル名[.拡張子]@ファイル[.拡張子]:ファイルの内容を実行する				
							
ED[IT]:O/Sのエディタを起動し、SQLバッファの内容をafiedt.bufというファイルにセーブする				
							
ED[IT][ファイル名[.拡張子]]:O/Sのエディタを起動し、ファイルの内容を編集する				
							
SPO[OL][ファイル名[.拡張子]|OFF|OUT]:出力結果をファイルに記録する。OFFは記録用のファイルを閉じる。OUTはスプール・ファイルを閉じ、結果をプリンタに送信する				
							
EXIT:SQL*Plusを終了する				

データの制限及ぶソート




行の制限:SELECT文のWHERE句を使用して行える

★ 選択される行の制限:WHERE句を使用して、問合せから戻される行を制限することができる
   FROM句の直後にWHERE句を指定し、制限のための条件を記述する

   構文の説明:
   ☆ WHERE 問合せ条件を満たす行のみに限定する
   ☆ 条件式: 列名、式、定数及び比較条件から構成される。複数指定することもできる

   WHERE句は3つの要素で構成される
   ・列名
   ・比較条件
   ・列名、定数、または値のリスト

★ WHERE句の使用方法

  ☆ 文字列及び日付
    ・文字列及び日付値は、単一引用符で囲む
    ・文字値では大文字と小文字が区別され、日付値は書式が区別される
    ・ デフォルトの日付書式は RR-MM-DD。

★比較条件

条件	意味	
=	等しい	
>	より大きい	
>=	より大きいまたは等しい	
<	より小さい	
<=	より小さいまたは等しい	
<>	等しくない	
		
★ そのほかの比較条件

条件		意味		
BETWEEN…AND…		2つの値の間(両端を含む)		
IN(値リスト)		値リストのいずれかを照合		
LIKE		文字パターンを照合		
IS NULL		NULL値かどうか		

☆BETWEEN条件を使用方法 :ANDを使用して、値の範囲に基づいて表を表示する

SQL> SELECT ###
   FROM ###
   WHERE ### SETWEEN 2500 AND 3500

☆IN条件の使用方法:リスト中の値をテストする

SQL> SELECT ###
   FROM ###
   WHERE ### IN ( 2500,3000, 3500);

☆LIKE条件の使用方法:有効な検索文字列値のワイルドカード検索を行う
   ・ % はゼロ文字以上を表する
   ・ _ は 1文字を表する
SQL> SELECT ###
  FROM ###
  WHERE ### LIKE '_O%';

☆ IS NULL条件の使用方法:NULLかどうかをテストする

SQL> SELECT ###
   FROM ###
   WHERE ### IS NULL;

☆ 論理条件

条件	意味			
AND	両方の条件を満たす行のみを戻す			
OR	どちらかの条件を満たす行を戻す			
NOT	条件を満たさない行を戻す			

☆優先順位の規則

評価の順序		条件		
1		比較条件		
2		NOT		  優先順位を変更するにはカッコを使用する
3		AND		
4		OR		
      					

☆ ORDER BY 句:行をソートする
  - ASC:昇順
  - DESC:降順

SQL> SELECT ###
   FROM ###
   ORDER BY ###; (昇順の場合は ASC句を省略可)

SQL> SELECT ###
   FROM ###
   RDER BY ### DESC;

☆ 列別名によるソート

SQL> SELECT ### 列別名
   FROM ###
   ORDER BY 列別名;

☆ 複数列によるソート

SQL> SELECT ### ###
   FROM ###
   ORDER BY ###,###;

単一関数


★SQL関数:関数は、SQLの非常に強力な機能だ。目的は
☆ データ計算の実行
☆ 個々のデータ項目の変更
☆ 出力の行のグループ単位での操作
☆ 表示のための日付及び数字の書式化
☆ 列のデータ型の関数

★SQL関数の2つの種類
        ☆ 単一行関数:単一の行のみを操作し、1つの行に対して1つの結果を戻す
  種類:文字、数値、日付、変換
☆ ブループ関数:複数の行をグループ単位で操作し、行のグループに対して1つ結果を戻す

★単一行関数
データ項目を操作するために使用される、1つまたは複数の引数を受け取り、問合せから戻される行ごとに1つに
の値を戻す。使用できる引数
☆ ユーザー定義の定数
☆ 変数値
☆ 列名
☆ 式
単一行関数の機能
☆ 問合せから戻される各行を操作する
☆ 1行ごどに1つの結果を戻す
☆ 参照されたデータ型とは別の型のデータ値を戻すことができる
☆ 1つまたは複数の引数を受け取る
☆ SELECT句、WHERE句、ORDER BY句で使用及びネストできる

関数名 [(パラメータ1、パラメータ2、….)]									
関数名:関数の名前									
パラメータ:関数が使用する引数。									

★文字関数
☆ 文字関数の分類									
  	・大文字小文字変換関数								
									
	関数		目的						
	LOWER(列名|式)		アルファベット文字列を小文字に変換する						
	UPPER(列名|式)		アルファベット文字列を大文字に変換する						
	INITCAP(列名|式)		各語を先頭文字を大文字に変換し、他のすぺての文字を小文字にする						
									
	・文字操作関数								
									
	関数		目的						
	CONCAT(列名1|式1、列名2|式2)		2つの文字列を連結する。連結演算子(||)と効果は同じ						
	SUBSTR(列|式、m[,n])		文字位置mからn文字分の文字を戻す。						
	LENGTH(列|式)		文字数を戻す						
	INSTR(列|式、’文字列’[m]{,n])		指定した文字列の数値位置を戻す。任意で検索開始位置mと発生回数nを指定することもできる。M,nのデフォルトは1.						
	LPAD(列名|式、n[,’文字列’])		文字値を右寄せし、その左にnバイト目まで文字列を埋め込む						
	RPAD(列名|式、n[,’文字列’])		文字値を左寄せし、その右にnバイト目まで文字列を埋め込む						
	TRIM([EADING|TRAILING|BOTH][trim_charFROM]trim_source)		文字列の先頭または後続文字(またはその両方)を切り捨て						
	REPLACE('文字列’、search_string[,replacement_string])		文字列内でsearch_stringを検索し、見つかった場合、search_stringをreplacement_stringに置換する。						

★大文字小文字変換関数








★大文字小文字変換関数の使用方法








★文字操作関数








★文字操作関数の使用方法








★数値関数

	関数		目的						
	ROUND(列名|式、n)		列、式、値を小数点以下n桁に四捨五入する。                  Nが省略された場合は、小数点以下が四捨五入される             Nが負の場合は、10の位、100の位などで四捨五入される						
	TRUNC(列名|式、n)		列、式、値を小数点以下n桁に切捨てる。                  Nが省略された場合は、小数点以下が切捨てられる             Nが負の場合は、10の位、100の位などで切捨てられる						
	MOD(m,n)		MをNで除算した余りを戻る						


★ROUND関数の使用方法











★TRUNC関数の使用方法











★MOD関数の使用方法










★日付の操作

☆Oracleデータペースでは、日付は世紀、年、月、日、時、分、秒の内部形式で保管される	
☆デフォルトの日付形式はRR-MM-DD	
	- 年の最後の2桁のみをしていすることによって、21世紀の日付に格納することができる
	- 20世紀の日付を同じ方法で21世紀に格納することができる
☆ SYSDATEは日付項目を戻す関数	
 	- 日付								
	- 時刻								

★日付を使用した算術

	操作		結果		説明				
	日付+数値		日付		日付に日数を加算する				
	日付ー数値		日付		日付から日数を減算する				
	日付ー日付		日数		ある日付から別の日付を減算する				
	日付+数値/24		日付		日付に時間を加算する				

★日付での算術演算子の使用








★日付関数

	関数				説明				
	MONTHS_BETWEEN(日付データ1、日付データ2)				2つの日付の間の月数				
	ADD_MONTHS(日付データ、n)				日付にカレンダ月を加算				
	NEXT_DAY(日付データ、’文字データ’)				指定された曜日の次の日付				
	LAST_DAY(日付データ)				月の最終日				
	ROUND(日付データ[、’表示書式’])				日付を四捨五入				
	TRUNC(日付データ[、’表示書式’])				日付を切捨て				

★日付関数の使用方法













★変換関数
☆ データ型変換	
	・暗黙的なデータ型変換
	・明示的なデータ型変換

★暗黙的なデータ型変換
代入で使用された値のデータ型を、Oracle Serverが代入先データ型に変換できた場合は、代入は成功だ								
代入の場合、Oracle Serverでは次の変換が自動的に行われる								
一般的には、Oracle Serverは、代入変換の規則が適用されない場合でデータ型の変換が必要になった場合、式の規則を使用								
								
	変換前			変換後				
	VARCHAR2またはCHAR			NUMBER				
	VARCHAR2またはCHAR			DATE				
	NUMBER			VARCHAR2				
	DATE			VARCHAR2				
	VARCHAR2またはCHAR			NUMBER				
	VARCHAR2またはCHAR			DATE				



★明示的なデータ型変換
☆TO_CHAR関数と日付	
	・TO_CHAR(数値型|日付型、[表示書式],[nlsパラメータ])
	・TO_CHAR関数を使用すると、デフォルトの書式からユーザーが指定した書式に日付を変換できる
	・数値データまたは日付データを表示書式にしたがって可変長文字列に変換する
	・数値変換:nlsパラメータには次の数値書式要素を指定する
	  - 小数点文字
	   - 「,」などの3桁ごとの区切り文字
	  - 各国通貨記号
	nlsパラメータを省略すると、デフォルトのパラメータ値が使用される
	・日付変換
	 nlsパラメータには月、曜日、その略称を指定する。このパラメータを職略すると、デフォルトの日どけ書式が使用される

	・TO_CHAR(日付データ、’書式表示’)
	表示書式
	 -単一引用符で囲む必要があり、大文字と小文字は区別される
	 -日付書式要素を含められる
	 -埋め込み空白の削除や先行ゼロ抑制のためのfm要素
	・日付書式モデルの要素(3-30)*略

	・数値に対するTO_CHAR関数の使用
	TO_CHAR(数値データ、’表示書式’)
	数値を文字列として扱う場合には、TO_CHAR関数を使用して、これらの数字を文字データ型に変換する必要がある
	この関数は NUMBERデータ型の値をVARCHAR2データ型に変換する
	・数値書式モデルの要素(3-33)*略

★TO_NUMBER関数及びTO_DATE関数の使用
  文字列を数値または日付型データに変換することが必要な場合に使用する
☆ 文字列を数値書式に変換するには、TO_NUMBER関数を使用する	
 	TO_NUMBER(文字データ[、’表示書式’])
☆ 文字列を日付書式に変換するには、TO_DATE関数を使用する	
	TO_DATE(文字データ[、'表示書式’])

★RR日付書式
RR日付書式は、YY要素と似ているが、この書式で別の世紀を指定することができる。YYのかわりにRR日付書式を使用すると、									
指定する2桁の年と、現在の年の下2桁によって、戻される値の世紀を変えることができる。									

★関数のネスト
☆ 単一行関数は任意のレベルでネストできる									
☆ ネストされた関数は最も不快レベルから浅いレベルの順に評価される									

★一般関数
どのデータ型でも使用することができる									
NULL値を処理できる									
・NVL(式1、式2)				NULL値を実際値に変換する					
・NVL2(式1、式2、式3)				式1がNULLでない場合、NVL2は式2を戻す                 式1がNULLである場合、NVL2は式3を戻す                 式1は任意のデータ型にできる					
・NULLIF(式1、式2)				2つの式を比較し、式が等しい場合はNULLを戻す、式が等しくない場合は最初の式を戻し					
・CONLESCE(式1、式2、。。。式n)				式リストの中の最初のNULLでない式を戻す					

★NVL関数
NULL値を実際の値に変換するには、NVL関数を使用する									
☆ 使用可能なデータ型は、日付、文字及ぶ数値									
☆ データ型の一致が必要									
構文 NVL(式1、式2)									
  	・式1:NULLを含む可能性がある元値または式								
	・式2:NULLを変換する値								

★NVL関数の使用方法
	各種データ型のNVL変換								
	データ型			変換の例					
	NUMBER			NVL(数値データ、9)					
	DATE			NVL(日付データ、’1995-01-01’)					
	CHAR or VARCHAR2			NVL(文字データ、’Unavailable')					

★NVL2関数の使用方法
構文:NVL2(式1、式2、式3)				
	・式1:NULLを含む可能性がある元値または式			
	・式2:式1がNULLでない場合に戻される値			
	・式3:式1がNULLの場合に戻される値			

★NULLIF関数の使用方法
構文:NULLIF(式1、式2)				
 	・式1:式2と比較される元値			
	・式2:式1と比較される元値。式1と等しくない場合は、式1が戻される			

★COALESCE関数の使用方法
構文:CONLESCE(式1、式2、。。。式n)				
	・式1:NULLでない場合に戻される式			
	・式2:式1がNULLであり、この式がぬLLでない場合に戻される式			
	・式n:先行する式がNULLである場合に戻される式			

★条件式
☆ SQL文の中でIF-THEN-ELSEロジックを使用できる		
☆ 2つの方法:		
  	・CASE式	
	・DECODE関数	

★CASE式:IF-THEN-ELST文と同じ機能を実行し、条件付き照会を可能にする
構文: CASE式 WHEN 条件1 THEN 値1		
 		[ WHEN 条件2 THEN 値1
		WHEN 条件n THEN 値n
		ELSE デフォルト値]
	    END	
☆ CASE式を使用すると、SQL文の中で条件分岐(IF-THEN-ELSE論理)を使用できる		
☆ 単純CASE式では、式と条件が一致する最初のWHEN…THENペアが検索され、値が戻される		
 	どのWHEN…THENペアも条件と一致せず、ELSE句が存在する場合、デフォルト値が戻される	
	ELSE句がない場合は、NULLが戻される。値とデフォルト値にはリテラルNULLを指定できない		
☆ 式、条件、値は 同じデータ型である必要がある。使用できるデータ型は、CHAR,VARCHAR2,NCHAR,NVARCHAR2.			

★CASE式の使用方法(略)

★DECODE関数:IF-THEN-ELST文と同じ機能を実行し、条件付き照会を可能にする
構文: DECODE(列名|式、条件1、値1 			
		[, 条件2、値2、….]	
		[,デフォルト値])	
	・ECODE関数は、様々な言語で使用するIF-THEN-ELSEロジックと似た方法で式を解釈する		
	・ECODE関数は、式を条件値と比較した後で、その式を解釈する。式が条件と同じ場合には、対応する値が戻される		
	・デフォルト値が省略されている場合、検索値がどの結果値とも一致しないときは、NULL値が戻される。		

★DECODE関数の使用方法 (略 3-52)

複数の表からのデータの表示


★ 複数の表からのデータの取得
場合によっては、複数の表のデータが必要なことがある。	

★ 直積演算
☆直積演算は、次の場合に生成される	
	・結合条件が省略されている
	・結合条件が有効でない
☆最初の表のすべての行が、2番目の表のすべての行に結合される	
☆直積演算を避けるため、WHERE句に有効な結合条件を必ず含める	

★ 直積演算の生成




★ 結合の種類

	Oracle独自の結合				SQL:1999準拠の結合		
	等価結合				クロス結合		
	非等価結合				自然結合		
	外部結合				句の使用		
	自己結合				完全な外部結合または左側と右側外部結合		
					外部結合の任意結合条件		
							
★ Oracle構文を使用した表の結合
構文:SELECT 表1.列名、表2.列名							
 	  FROM 表1、表2						
	  WHERE 表1.列1=表2.列2;						
☆	表1.列1=表2.列2:表を結合する(あるいは関連付ける)条件です。						

グループ関数を使用したデータの集約

副問合せ

SQL・Plusを使用した読みやすい出力の作成

データの操作

表作成

制約

ビュー

順序

索引

シノニム

制御

最終更新:2006年05月02日 12:25