複数のテーブルのデータを表示する必要がある場合があります。これを実行するには、1つのテーブルを別のテーブルにリンクする必要があります。複数のテーブルからデータを取得するにはさまざまな方法があります。ここでは、例を使用してOracle結合に焦点を当てます。これは、一般的にすべてのSQL結合にも有効です。 。内部結合、外部結合、クロス結合、自然結合、デカルト結合を例を挙げて説明します
Oracleが参加します
Oracleが参加します 2つ以上のOracleテーブルの行を組み合わせるクエリです。
FROM句に複数のテーブルが含まれる場合は常に、Oracleは結合を実行します。 2つのテーブルを結合するには、2つのテーブルに関連する共通の列を識別する必要があります。 WHERE句では、FROM句にリストされているテーブル間の関係を定義します。
Oracle結合(SQL結合)に関するいくつかのガイドライン
1)テーブルを結合するselectステートメントを作成するときは、わかりやすくするために、列名の前にテーブル名を付けることをお勧めします。
2)m個のテーブルを結合するには、少なくともm-1個の条件が必要です
3)テーブル名が長い場合は、テーブル名にテーブルエイリアスを使用できます。テーブルはコードが短く見えるため、メモリが少なくなります
4)列の選択時にtable_nameまたはtablesエイリアスを使用していない場合、および複数のテーブルが同じ列名を持っている場合は、テーブル間で共通の列にtable_nameを指定する必要があります
内部参加
2つのテーブルを関連付けるために使用される最も一般的な演算子は、等式演算子(=)です。これは、等式結合またはe quijoinと呼ばれます。 。この単純な結合は、内部結合とも呼ばれます
Oracle内部結合の例
Syntax
Select tab1.col,tab2.col
from tab1 ,tab2
where tab1.col=tab2.col
SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
FROM EMP , DEPT
where EMP. DEPTNO= DEPT. DEPTNO;
3つ以上のテーブルの結合を実行するために、Oracleは結合条件に基づいて2つのテーブルを結合し、次に結合条件に基づいて結果を別のテーブルに結合し、すべてのテーブルが結合されるまで繰り返します。
複雑な結合
WHERE句に1つ以上の条件を追加します。たとえば、英国以外のすべての部門とその場所に関心がある場合は、
SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';
非等結合
非等結合は、等式演算子以外の結合条件です。
これは、異なるテーブルの行を照合するために不均等な操作(<>、>、<、=、BETWEENなど)を使用する内部結合ステートメントです
SELECT e.ename, e.sal, s.grade
FROM emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;
デカルト積またはデカルト結合またはクロス結合
-デカルト結合(またはデカルト積)(またはクロス結合)は、2つ以上のテーブルからデータが選択され、結合条件が定義されているか、WHERE句で共通の関係が定義されていない場合に発生します
-結合が実行され、結合条件が指定されていない場合、デカルト積が生成されます。デカルト積は、2つのテーブルの合計行の積である結果セットです。テーブル「P」に100行、テーブル「Q」に100行があり、デカルト積が開発された場合、結果セットは10000行になります。クエリが3つ以上のテーブルを結合する場合、オプティマイザはデカルト積を除外する結合順序を選択する方法を見つける可能性がありますが、それを当てにしないでください。
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP cross join DEPT ;
外部結合
これまでに見た内部結合は、結合条件に従って2つ以上のテーブルから一致する行を返します。外部結合メカニズムは、結合テーブルに対応する行がない場合でも、1つのテーブルからデータを返します。
3つの外部結合があります
a)左外側結合または左結合
b)右外側結合または右結合
c)完全外部結合または完全結合
左アウタージョイン
両方のテーブルから一致する行と、結合句の左側にあるテーブルから一致しない行を返します。
LEFT OUTER JOINは、左側のテーブルのすべてのレコードと、右側のテーブルと交差する右側のテーブルのレコードのみを返します。
これは、Oracleの左外部結合の例です
Example:を選択します。
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;
oracle結合構文(+) :Oracleデータベースでは、左外部結合にプラス記号構文を使用することもできます。この場合、プラス結合は方程式の右側にあります。
Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;
右外部結合
両方のテーブルから一致する行と、結合句の右側のテーブルから一致しない行を返します。
これは、OracleRight外部結合の例です
Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
oracle結合構文(+) :Oracleデータベースでは、RIGHT OUTER JOINにプラス記号構文を使用することもできます。この場合、方程式の左側にプラス記号があると、右結合が示されます。
Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;
完全な外部参加
このタイプの結合は、結合条件が満たされない場所にnullがあるLEFT-handテーブルとRIGHT-handテーブルからすべての行を返します
OracleFullOuterJoinの例を次に示します
select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;
このクエリは、両方のテーブルからすべての行を返します。 E.DEPT_ID(+)=D.DEPT_ID(+)を使用してOracle構文を使用することは、(+)記号が1つのテーブルのみを参照する可能性があるため不可能です。 +記号を使用して同じことを達成するには、Unionを使用する必要があります
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+)
union
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno;
一部のRDBMSは完全外部結合句をサポートしていないため、以下でそれをカバーできます
select empno,ename,dept.deptno,dname
from emp
left OUTER JOIN dept
on emp.deptno=dept.deptno
union
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
自然な参加
自然結合は、結合が2つのテーブルの同じ名前のすべての列を関連付けることを指定します。
基本的に、両方のテーブルの共通の列を相互に比較します。自然結合を実行する前に、両方のテーブルに共通の列が存在するかどうかを確認する必要があります。
Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME FROM EMP NATURAL JOIN DEPT;
ここで、dept_idは、テーブルempとdeptの間の同じ列です
自然結合は3つ以上のテーブルを結合できます
Oracleのこの投稿が例に加わっていることを願っています。
関連記事
Oraclesqlチュートリアル
OracleSqlサブクエリ
Oracle集合演算子
Oracleビュー
SQLクエリの書き方
自動インクリメント列–シーケンス
Oracleでのクロスジョイン
例を使用してオラクルに自己参加
oraclejoin構文の例
Oracleでのハッシュ結合