SQL 6日目17-22


レッスン日20-07-27(20-07-26+1)
깅의명 : 01 조인이란
깅의명 : 02 INNER 조인
깅의명 : 03 OUTER 조인
깅의명 : 04 SELF 조인
깅의명 : 05 FULL OUTHER조인
깅의명 : 06 CROSS 조인

趙仁蘭。


2つ以上のテーブルの情報では、ユーザーは必要なセットに基づいて仮想テーブルを作成して結果を表示します.

結合の種類



実験環境の準備
コード#コード#
create table basket_a 
(
	ID INT primary key
  , FRUIT VARCHAR (100) not NULL
);

create table basket_b
(
	 ID INT primary key
   , FRUIT VARCHAR (100) not NULL
);


insert into basket_a
(ID, FRUIT)
values
(1, 'Apple'),
(2, 'Orange'),
(3, 'Banana'),
(4, 'Cucumber')
;
commit;


insert into basket_b
(ID, FRUIT)
values
(1, 'Orange'),
(2, 'Apple'),
(3, 'Watermelon'),
(4, 'Pear')
;
テーブル台



INNER結合


特定のカラムを基準として、正しく一致するセットを出力します.INNERコネクタは代表的なコネクタの種類です.
実習
select a.id ID_A, a.fruit FRUIT_A
     , b.id ID_B, b.fruit FRUIT_B
  from basket_a a 
 inner join basket_b b 
    on a.fruit = b.fruit;
結果


集合が交差した結果のみ署名する.
実習.
顧客テーブルと支払テーブルのCIDを使用して、顧客ID、氏名、姓、Eメール、支払金額、支払日を問い合せます.
select a.customer_id, a.first_name
     , a.last_name, a.email 
     , b.amount, b.payment_date 
  from customer a 
 inner join payment b
    on a.customer_id = b.customer_id;


実習.
上記の質問結果では、CIDが2の人だけを検索します
select a.customer_id, a.first_name
     , a.last_name, a.email 
     , b.amount, b.payment_date 
  from customer a 
 inner join payment b
    on a.customer_id = b.customer_id
 where a.customer_id = 2;


実習.
3つの机の上で実習をする.上記取引の際に取引を行うスタッフの情報を一緒に提供します.
select a.customer_id, a.first_name
     , a.last_name, a.email 
     , b.amount, b.payment_date 
     , c.first_name as S_FIRST_NAME
     , c.last_name  as S_LAST_NAME
  from customer a 
 inner join payment b
    on a.customer_id = b.customer_id
 inner join staff c 
    on b.staff_id  = c.staff_id ;


OUTER接続


出力は、特定のカラムの一致セットに基づいていますが、1つのカラムの集合はすべて出力され、別のカラムの集合は一致するカラムの値のみが出力されます.
一致しないコンピュータの値はNULLで表されます.
例-LEFT OUTER接続
select a.id ID_A, a.fruit FRUIT_A
     , b.id ID_B, b.fruit FRUIT_B
  from basket_a a 
 left join basket_b b 
    on a.fruit = b.fruit;


例-LEFT ONLY結合
ダイバーシティ
select a.id ID_A, a.fruit FRUIT_A
     , b.id ID_B, b.fruit FRUIT_B
  from basket_a a 
 left join basket_b b 
    on a.fruit = b.fruit 
 where b.id is NULL;


例-RIGHT OUTER結合
後ろのジョイントの後に出てくる子供を基準にOUTERジョイントを行います
select a.id ID_A, a.fruit FRUIT_A
     , b.id ID_B, b.fruit FRUIT_B
  from basket_a a 
 right join basket_b b 
    on a.fruit = b.fruit;


SELF結合


特定のテーブルを基準としたテーブルの結合を同じテーブル間で出力します.すなわち,同じテーブルのデータを各集合に分類し,結合する.

サンプル表


manager idはemployee idにあります.マネージャーも社員なので.従業員と一緒にマネージャーを見たいならどうしますか?その時はSELF JOINを使っていました
select 
	  e.first_name || ' ' || e.last_name as employee
  	, m.first_name || ' ' || m.last_name as manager
  from employee e 
 inner join employee m
    on e.manager_id = m.employee_id
 order by manager;


実習
SELFコネクタ練習-ELF LEFT OUTERコネクタ
社長には上司がいない.ただし、上記の結果によれば、マネージャがないため、トップマネージャはクエリーの結果として現れません.この問題を解決するためにOUTERサインを実施する.
select 
	  e.first_name || ' ' || e.last_name as employee
  	, m.first_name || ' ' || m.last_name as manager
  from employee e 
 left join employee m
    on e.manager_id = m.employee_id
 order by manager;


最高管理者WindyHaysが出力されます!
SELF結合練習-否定条件
映画の上映時間は同じですが、違う映画を出力しなければなりません.
select f1.title, f2.title, f1.length 
  from film f1
 inner join film f2
    on f1.film_id <> f2.film_id
   and f1.length  = f2.length; 


FULL OUTER接続


INNER、LEFT OUTER、RIGHT OUTER結合セット全て出力の結合方式.
すなわち、2つのテーブルの間に、すべての出力可能なデータを含むデータのセットが出力される.
集合です.
select a.id ID_A, a.fruit FRUIT_A
     , b.id ID_B, b.fruit FRUIT_B
  from basket_a a 
 full OUTER join basket_b b 
    on a.fruit = b.fruit;


Full Outerコネクタ実習-ONly Outerコネクタ
集合-交差
select a.id ID_A, a.fruit FRUIT_A
     , b.id ID_B, b.fruit FRUIT_B
  from basket_a a 
 full OUTER join basket_b b 
    on a.fruit = b.fruit
 where a.id is null
    or b.id is null;


サンプル表



「従業員」テーブル


部門テーブル
FULL OUTER継ぎ手実習
select 
	  e.employee_name 
	, d.department_name
  from employees e
  full outer join departments d 
    on d.department_id = e.department_id ;


FULL OUTER継ぎ手実習-RIGHT ONLY
select 
	  e.employee_name 
	, d.department_name
  from employees e
  full outer join departments d 
    on d.department_id = e.department_id
 where e.employee_name is NULL;


CROSS結合


2つのテーブルのCATESIAN PRODUCT演算の結果を出力します.これは、データ・レプリケーションによく使用されるテクノロジーです.
サンプル表


cross_t1


cross_t2
CROSS登録練習
select *
  from cross_t1
 cross join
	   cross_t2;
サインの条件はありません!では、結果はどうなるのでしょうか.


結合条件がないため、可能なすべての状況を選択し、他のテーブルの状況と合わせて次のように表示します.
これを積演算と呼びます.
全てのケースを抽出する数字なのでJOIN条件は書かない
カティの乗り換えも以下のように表すことができます.
select *
  from cross_t1, cross_t2;


結果値は上記のように表示されます.
CROSS結合の使用方法
select *
  from cross_t1, cross_t2;

select label,
	case when label = 'A' then sum(score)
		 when label = 'B' then sum(score) * -1
		 else 0
		 end as calc
  from cross_t1
 cross join
 	   cross_t2
 group by label
 order by label;


このような複雑な演算で使用できます.