Help us understand the problem. What is going on with this article?

Oracle Bronze 12c SQL基礎 (SELECT, 引用符, NULL, 置換)

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした