RDBとSQL
リレーショナルモデルの構成要素:
- SQL演算子
- データ整合性
- オブジェクト・リレーションの集合
※トランザクション管理はDBMS(データベース管理システム)の機能の一つ
E-Rモデルの構成要素:
- エンティティ
- 属性
- リレーションシップ
Select文
主な機能
- 選択:特定の行の検索(where句)
- 射影:特定の列の指定(select句)
- 統合:表の結合
引用符(''と"")
一重引用符で囲むもの:文字リテラル、日付リテラル、日付書式、数値書式
二重引用符で囲むもの:ネーミング規則に沿わない名前(列別名、オブジェクト名など)、日付書式中の文字リテラル
※列見出しはデフォルト大文字なので「"」が必要
select ename "Emp_Name", deptid "DEPT ID" from emp;
select * from emp where ename='HOGE' and hdate>'00-01-01';
NULLの扱い
- NULLを含む計算式の結果はNULL
-
where a <> 100
などの時はa=null値も検索対象外
列別名
- 使える:order句
- 使えない:select句(列別名を他の列で使う場合)、where句、group by句、having句
置換変数(&と&&)
- 大文字・小文字は区別されない
- ACCEPTコマンドで値を入力&定義
ACCEPT emp_id char PROMPT '値を入力してください:'
値を入力してください:130 ※ここで値を入力
- DEFINEコマンドで事前定義
define var_no=120
- UNDEFINEコマンドで変数解除
undefine var_no
- &:実行時に値を入力
- &&:値の入力と同時に事前定義(そのため、以降のSQL分に引き継がれる)
-
set verufy on
で置換後の値を表示されるよう設定(デフォルトでON)
初めの"&&EMP_NO"のみ入力を求められるスクリプト例
select * from emp where empno=&&EMP_NO;
update emp set=sal*1.2 where empno=&emp_no;
行制限(OFFSET句, FETCH句)
- order by句の後に指定
- rowとrowsは同じ
- firstとnextは同じ
- WITH TIESはorder by句と一緒だと有効(一緒でないとONLYと同じ)
select * from emp order by hdate
offset 10 rows fetch first 20 rows with ties
単一行関数
文字関数
- LOWER: 文字列を小文字に変換
- UPPER: 文字列を大文字に変換
- INITCAP: 文字列の先頭を大文字に、移行を小文字に変換
- CONCAT: 文字列を連結
- SUBSTR:文字列の指定位置から指定文字数分を抽出(デフォルトは最後までの文字列を抽出)
- LENGTH:文字列の長さを表示
- INSTR:指定文字列の(先頭からの)数値位置を表示(デフォルトは先頭1文字目から検索して、1回目の出現位置を表示)(見つからない場合は0を返す)
- LPAD:文字列の左側に指定文字を埋め込む
- RPAD:文字列の右側に指定文字を埋め込む
- TRIM:先行、後続文字の切り捨て
- REPLACE:文字列を置換
例 | 結果 |
---|---|
LOWER('Hoge Fuga') | hoge fuga |
UPPER('Hoge Fuga') | HOGE FUGA |
INITCAP('Hoge Fuga') | Hoge Fuga |
CONCAT('Hoge Fuga','Boo') | Hoge FugaBoo |
SUBSTR('Hoge Fuga',2,6) | oge Fu |
SUBSTR('Hoge Fuga',-4) | Fuga |
LENGTH('Hoge Fuga') | 9 |
INSTR('Hoge Fuga','g') | 3 |
INSTR('Hoge Fuga','g',-1) | 8 |
INSTR('Hoge Fuga','g',-1,2) | 3 |
LPAD('Hoge Fuga',12,'*') | ***Hoge Fuga |
RPAD('Hoge Fuga',12,'*') | Hoge Fuga*** |
TRIM('g', FROM 'Hoge Fugagg') | Hoge Fuga |
TRIM(' Hoge Fuga ') | Hoge Fuga |
TRIM('g', FROM 'Hoge Fuga') | Hoe Fua |
REPLACE('Hoge Fuga','g','m') | Home Fuma |
数値関数
- ROUND:数値を丸める(四捨五入する)
- TRUNC:数値を切り捨てる
※どちらも第二引数のデフォルトは0で整数を返す
※+1毎に右側(-1毎に左側)に丸める(切り捨てる)桁が移動する
例 | 結果 |
---|---|
ROUND(123.567) | 124 |
ROUND(123.567, 2) | 123.57 |
TRUNC(123.567) | 123 |
TRUNC(123.567, -2) | 100 |
日付関数
- LAST_DAY:指定日付が含まれる月の最終日を表示
- NEXT_DAY:指定日付より後の最初の指定曜日の日付を表示
- CURRENT_DATE:セッションタイムゾーンの現在日付を表示(SYSDATEはDBが存在するOSの現在日時を表示)
例 | 結果 |
---|---|
LAST_DAY('01-FEB-14') | 28-FEB-14 |
NEXT_DAY('02-APR-19','MONDAY') | 8-APR-19 |
NEXT_DAY('02-APR-19','2') | 8-APR-19 |