単一行関数、詳細クエリー、データ辞書、データ型--Oracle 2の再確認

4500 ワード

最近、宿題で忙しくて、勉強が中断しました.続行...
 
第四章単行関数
文字関数
Upper
 
nvl(str,str 2)strがnullでない場合はstrを返します.そうでない場合はstr 2を返します(str 2もnullである場合はnullも返します).
select nvl(ename, ‘a’) from emp;
 
last_day戻り日付当月末日の日付
select last_day(hiredate) from emp;
 
initcapは、頭文字の大文字、残りのアルファベットの小文字のフォーマットの文字列を返します.
select initcap(ename) from emp;
 
length(str)
substr(str)
to_char(str)
to_date(str, format)
 
 
ページングクエリ
 
Select * from (select rownum no, e.* from emp e) where no > 5 and no <= 10;

 
 
Exists
 
Select * from t1 where exists (select null from t2 where y=x);-- x t2   ,y t1   。

 
次の文と同じです.
 
for x in (select from t1) loop
    if (exists(select null from t2 where y = x.x))
    then
        --Output the record
    end if
end loop

inとexistsのパフォーマンスの違い:
サブクエリの結果セットのレコードが少ない場合は、プライマリ・クエリのテーブルが大きく、インデックスがある場合はinを使用します.逆に、外部レイヤのプライマリ・クエリのレコードが少ない場合は、サブクエリのテーブルが大きく、インデックスがある場合はexistsを使用します.
実はinとexistsを区別するのは主に駆動順序の変化(これが性能の変化の鍵である)をもたらし、existsであれば外層テーブルを駆動テーブルとし、先にアクセスされ、inであればサブクエリを先に実行するので、駆動テーブルの迅速な戻りを目標とし、インデックスと結果セットの関係を考慮します.
またinはnullを処理しません.
 
Select 1 from dual where null in (0,1,2,null)  --  。

 
 
 
1枚のテーブル重複レコードを削除する(IDは自己増加一意、重複レコード:ID以外は同じ).
非常に古典的な面接問題で、多くのデータが存在する可能性があり、性能が高いことが要求されています.
 
1  abc  20
2  abc  20
3  ab   15
4  abc  20

 
delete from tbl where id not in (select min(id) from tbl group by name,age)
delete from tbl where id not in (select t1.id from tbl t1, tbl t2 where t1.id >t2.id and t1.name = t2.name and t1.age = t2.age)

 
 
第5-7章はすべていくつかの面接問題で、しばらく
 
 
 
 
第八章高級クエリー
 
5つのレコードを返します
 
Select * from (select ename, job from emp order by dbms_random.value() ) where rownum <=5;

Null値ソートの処理
 
Select * from emp order by comm. Desc nulls last(first);  --   first

クエリ偶数行をスキップ
 
Select ename from (select row_number() over (order by ename) rn, ename from emp) x where mod(rn,2) = 1;

れんぞくごう
 
Select ename,sal, sum(sal) over(), sum(sal) over(order by ename) from emp;

Sum(sal)over(order by ename)とは、連続して和を求め、enameでソートすることを意味します.このようなウィンドウ関数が2つある場合は、後のウィンドウを主とします.
 
部門別連続合計
 
Select deptno, ename, sal, sum(sal) over(partition by deptno order by ename) as s from emp;

現在の行の前または次の行のデータを取得
 
Select ename,sal, lag(sal) over (order by sal) before, lead(sal) over(order by sal) last from emp;

SQL文を使用して、毎月および先月と来月の合計収益を統計する必要があります.
 
Select month, sum(income),lag(sum(income)) over(order by sum(income)) as     ,lead(sum(income)) over(order by sum(income)) as      from table group by month;

Select add_months(trunc(sysdate, ‘y’), 12) – trunc(sysdate,’y’) from dual;
 
 
 
第九章データ辞書
 
ユーザーの下にあるすべてのテーブルを問い合わせる
 
Select table_name from all_tables where owner=’SCOTT’;

 
クエリー・テーブルのすべてのフィールド
 
Select * from all_tab_columns where table_name=’EMP’;

 
クエリー・テーブルの索引列
 
Select * from sys.all_ind_columns where table_name=’EMP’;

 
クエリー・テーブルの制約
 
Select * from all_constraints where table_name=’EMP’;

 
データ辞書ビューの説明
 
Select table_name,comments from dictionary where table_name like ‘%TABLE%’;

 
 
 
第十章Oracleデータ型
Char,nchar,varchar 2,nvarchar 2,number(),date,blob(binaryバイナリ大オブジェクト),clob(ファイル大オブジェクト)
注意:
1,charは固定長さなのでvarchar 2よりずっと速いです!しかし、プログラムの処理は面倒で、trimのような関数で両側のスペースを取り除く必要があります.
2,Varchar 2は一般的に英語と数字に適用され、nvarchar 2は中国語と他の文字に適用され、nはunicode定数を表し、多言語文字セット間の変換問題を解決することができる.
3,Number(4,2)は整数が2位,小数が2位(99.994可,99.995不可,四捨五入)を指す.
4,Numberのデフォルトは38ビットです.
 
Javaによるblobフィールドの操作(後述)
 
張文海