1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OracleMasterBronzeの勉強で新しく知った関数とか知識

Last updated at Posted at 2019-05-01

この記事の概要

  • OracleMasterBronzeを勉強していくにあたり、初めて目にする関数や知識が何個かあったので、メモとして残しておこうと思い
  • SQL関係はdualを使ってできる範囲でSQLと結果を載せますー

SQLの種類

DML(Data Manipulation Language)

  • データ操作言語
  • select, insert, delete, update, merge

DDL(Data Definition language)

  • データ定義言語
  • create, alter, drop, rename, truncate, comment

DCL(Data Control Language)

  • データ制御言語
  • grant, revoke
    • revoke: ユーザやロールから権限を剥奪する

トランザクション制御

  • commit, rollback, savepoint

汎用関数

nullif

  • 第一引数と第二引数が等しい場合にNullを返す単一関数
SQL> select nullif(1000, 1000) from dual;

NULLIF(1000,1000)
-----------------


SQL> select nullif(1000, 1001) from dual;

NULLIF(1000,1001)
-----------------
	     1000

nvl

  • 第一引数がNullだった場合に第二引数の値を返す関数
SQL> select nvl(null, 123) from dual;

NVL(NULL,123)
-------------
	  123

SQL> select nvl(1, 123) from dual;

NVL(1,123)
----------
	 1

nvl2

  • 第一引数がnullじゃなかったら第二引数を、
  • 第一引数がnullだったら第三引数を返す
SQL> select nvl2(null, 123, 456) from dual;

NVL2(NULL,123,456)
------------------
	       456

SQL> select nvl2(1, 123, 456) from dual;

NVL2(1,123,456)
---------------
	    123

coalesce

  • 可変引数をとり、はじめにnullでない値を返す
  • 引数はすべて同じデータ型である必要あり
  • (読み方がわからん。。。)
SQL> select coalesce(null, 2, 3) from dual;

COALESCE(NULL,2,3)
------------------
		 2

SQL> select coalesce(null, null, null) from dual;

C
-

条件式

case文

  • そういえばあまり使ってこなかったなぁ
  • 最後のendを忘れない
  • CASE var WHEN val1 THEN ret1 ELSE ret2 ENDみたいな書き方もできる
  • decodeも条件で出し分けができるけど、範囲指定でやりたいときはこっちかな
SQL> select case when 90 > 80 then 'good' else 'soso' end from dual;

CASE
----
good

グループ関数

注意点メモ

  • null値は集計対象にならない
  • 集計対象にしたければnvlとかを使う
  • ネストは2レベルまでOK。それ以上はエラー

複数の表の結合

  • すべての列名に表接頭辞を付与するとoracleが列名の重複チェックをしなくなりわずかにパフォーマンスアップ!
  • 表別名を短いものに設定するとSQLが短くなってパフォーマンスアップ!

集合演算子

  • 集合演算子に優先順位はない
  • 上から順に結合される

UNION

  • 重複した行を排除して結合
  • select句の先頭の列でソートされる
  • 最後の問い合わせの後にORDER BY句を記述することでソート順を制御できる

UNION ALL

  • 重複行も含めて結合
  • ソートはされない

INTERSECT

  • 共通する行だけを返す

MINUS

  • 1つ目の問い合わせ結果 - 2つ目の問い合わせ結果
  • 問い合わせ順を変えると結果が変わるよ

トランザクション制御

FOR UPDATE

  • select句使用時には通常ロックはかからないが、 FOR UPDATE文を使用することで行単位でロックをかけることができる

表の作成と管理

TABLE

  • DROPで削除できるが、ゴミ箱には残っている
  • ゴミ箱からも削除したい場合はPURGE句を指定する
  • ゴミ箱から復元するためにはFLASHBACK TABLE文を使用する

INDEX

  • 一意性制約のチェックはインデックスを利用して行われる
  • だからprimary_keyやunique制約をつけるとデフォルトでインデックスが作成されるのか

FOREIGN KEY制約

  • 参照する列は同じ表でも異なる表でもOK
  • ただしPRIMARY_KEY制約かUNIQUE制約が定義されている必要がある
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?