OracleにおけるUsingの使い方(転)
5046 ワード
http://www.2cto.com/database/201503/384694.html
oracleでusingキーワードを使う
sql/92標準はusingキーワードを使用して接続クエリを簡略化することができますが、次の二つの条件を満たすと検索するだけで、有効になります.
usingキーワードで簡略化する.
1.クエリーは等値接続が必要です.
2.等値接続中の列は同じ名前とデータタイプが必要です.
例えば、usingキーワードを使用すると、以下のようになります.
上記のような結果は自然接続の結果と同じです.
usingキーワードを使って接続を簡略化する場合、以下の点に注意する必要があります.
1.emp表とdept表のdeptの列を使って接続する場合、using子文とselect子文のいずれもdeptの列に表名または表の別名を指定することはできません.
2.クエリーに接続する際に、同じ複数の列を2つのテーブルに使用すると、長い間、usingサブルーチンで複数の列名を指定できます.形式は以下の通りです.
oracleでusingキーワードを使う
sql/92標準はusingキーワードを使用して接続クエリを簡略化することができますが、次の二つの条件を満たすと検索するだけで、有効になります.
usingキーワードで簡略化する.
1.クエリーは等値接続が必要です.
2.等値接続中の列は同じ名前とデータタイプが必要です.
例えば、usingキーワードを使用すると、以下のようになります.
select emptno,ename,sal,deptno,dname from emp e inner join dept d using(deptno);
SQL> select e.empno,e.ename,e.sal,deptno,d.dname from
2
emp e inner join dept d using(deptno);
EMPNO ENAME SAL DEPTNO DNAME
---------- ---------- ---------- ---------- --------------
7369
SMITH
800
20
RESEARCH
7499
ALLEN
1600
30
SALES
7521
WARD
1250
30
SALES
7566
JONES
2975
20
RESEARCH
7654
MARTIN
1250
30
SALES
7698
BLAKE
2850
30
SALES
7782
CLARK
2450
10
ACCOUNTING
7788
SCOTT
3000
20
RESEARCH
7839
KING
5000
10
ACCOUNTING
7844
TURNER
1500
30
SALES
7876
ADAMS
1100
20
RESEARCH
7900
JAMES
1800
30
SALES
7902
FORD
3000
20
RESEARCH
7934
MILLER
1300
10
ACCOUNTING
7935
XIAOXUE
5000
20
RESEARCH
15行が選択されました上記のような結果は自然接続の結果と同じです.
usingキーワードを使って接続を簡略化する場合、以下の点に注意する必要があります.
1.emp表とdept表のdeptの列を使って接続する場合、using子文とselect子文のいずれもdeptの列に表名または表の別名を指定することはできません.
2.クエリーに接続する際に、同じ複数の列を2つのテーブルに使用すると、長い間、usingサブルーチンで複数の列名を指定できます.形式は以下の通りです.
select... from table1 inner join table2
using(column1,column2)
上記の語句は以下の語句に相当します.select... from table1 inner join table2
on table1.column1=table2.column2
and table1.column2=table2.column2;
複数の表を検索する場合は、何度もusingキーワードを使用して指定しなければなりません.形式は以下の通りです.select... from table1
inner join table2 using(column1)
inner join table3 using(column2);
の は の に します.select... from table1,table2,table3
where table1.column1=table2.column1
and table2.column2=table3.table2;
--------------------------------------------------------------------------------------------------------------------------------------------------------------
http://blog.csdn.net/robertkun/article/details/10562807
1. SQLSQLとダイナミックSQL
OracleコンパイルPL/SQLプログラムブロックは つの に けられています. つは (early binding)で、つまりSQL はプログラムコンパイルの に されています.ほとんどのコンパイル はこのタイプです.もう つは、ポスト・カスケード(late binding)、つまりSQL は、 でのみ され、 えば、クエリ がユーザ である 、OracleのSQLエンジンはコンパイル にこのプログラム を することができず、ユーザが のクエリを した にのみSQLエンジンに を うことができる. に、 SQLは のコンパイル を し、 SQLは のコンパイル を する.
では に SQLの について し、 に に したいくつかの を する.
2.ダイナミックSQLプログラム
SQLコンパイルの を して、その な を しました. SQLは「 」なSQLである 、その にはそれなりの がある.Oracleでは、 SQLを するためにExecute immediate が されています.シンタックスは、Excute immediate SQL usingバインディングパラメータリストreturning into パラメータリストです.
この について のように します.
1) SQLとは、DDLと DML(すなわち、パラメータ きDML)を する.
2)バインディングパラメータのリストは パラメータのリストであり、すなわちそのタイプはinタイプであり、 と SQL のパラメータ( のプレースホルダは、 の パラメータとして されます)と けられています.
3) パラメータリストは、 SQL の に ってくるパラメータリストです.
4) SQLは で されるので、 に べて、システム の を うことが い.
プロセスをよりよく するために、 の を げます.
データベースのempテーブルを します.そのデータは の りです.
ID NAME SALARY
100 ジャック 5600
101 Rose 3000
102 ジョン 4500
:
1.テーブルを し、 データを します.
2. のIDに づいて、その と の が べられます.
3. の より きい に づいて する の を べます.
の に って、 SQLを して、 つのプロセスを に することができる.
プロセス1:
create or replace procedure create utable asbeginnexecute immediate'create table emenp(id number,name varhar 2(10)salary number;;;;;;;;;;;;;;;;;;-- SQLはDDL insert into empvalues(100、'jacky'、5600)である.insert into empvalues(101、'rose'3000)insert into empvalues(102、'john's、4500)end create_テーブル
プロセス2:
create or replace procedure find uinfo(puuid number)asv_name varrhar 2(10);v_.salary numberbeginnexecute immediate'select name,salary from epwhere id=:1'using p_idreturning into v_name,v_salary; SQLは dbms_out put.put_LINEの は「124」です.exceptionwhen others then dbms_out put.put_ライン('は データが つからない');end find_info;