サブクエリの深化


1.操作方式によってサブクエリを分類する


サブクエリにプライマリ・クエリの列が含まれているかどうかによって、関連サブクエリ、非関連サブクエリに分割されます.

関連サブクエリの例


プライマリ・クエリーのセットはサブクエリーに含まれ、プライマリ・クエリーのセットはサブクエリーの特定の条件として使用されます.

select id, department_id, name, salary
from employee as a
where
salary > (select avg(salary)
			from
            	employee as b
            where
            	b.department_id = a.department_id);
たとえば、サブクエリはプライマリクエリの列を参照します.

非関連サブクエリの例


プライマリ・クエリー列はサブクエリーに含まれません.主にプライマリ・クエリーに特定の値を指定するために使用されます.
select
	avg(salary)
from
	employee
where
	department_id = (select
    					department_id
                     from
                     	employee
                     where
                     	name = 'steve');
例では、サブクエリはプライマリクエリを参照しません.

2.返されたデータ型に基づいてサブクエリを分類する


1行サブクエリ


結果値として1行のみを使用するサブクエリを示します.

複数行サブクエリ


サブクエリの結果は、複数行を返し、複数行比較演算子(IN、ALL、ANY、EXISTS)とともに使用できます.
  • IN:サブクエリ結果に存在する値の1つと一致する必要があります.
  • EXISTS:サブクエリ結果値が存在することを確認します.(存在する限りTRUE)
  • ALL:サブクエリ結果に存在するすべての値について、条件を満たす必要があります.
  • ANY:サブクエリの結果には、少なくとも1つの条件を満たす値が存在する必要があります.
  • 複数列サブクエリ


    サブクエリの結果は、複数のカラムを返し、メインクエリの条件と比較します.
    select
    	name,
        salary
    from
    	employee
    where
    	(department_id, salary) in
        (select
        	department_id, max(salary)
         from
         	employee
         group by
         	department_id);

    3.スカラー量子クエリー


    1つのプロパティがあり、1行のクエリーのみが返されます.select、where、haveセクションなどで使用できます.
    select
    	name,
        (select
        	count(*)
         from
         	employee as e
         where
         	e.department_id = d. id)
    from
    	department as d;

    4. VIEW


    ビューは、他のテーブルから派生したテーブルです.データは物理(ハードウェア)に格納されていません.
    論理的にのみ存在し、ビューを使用してクエリーを行う場合、DBMSはビュー定義に基づいてクエリーを書き換えます.

    VIEWのメリット

  • 独立性:テーブル構造が変更されても、ビューを使用するアプリケーションは変更する必要はありません.
  • 利便性:よく使用される複雑なクエリーをプレビューとして定義すると、以降のクエリーは簡単な形式で表示されます.
  • セキュリティ:ユーザー権限によっては、閲覧可能なデータが異なる場合があります.
  • VIEW特性


    生成されたビュー
  • は、別のビューを作成するために使用することができる.
  • ビューの定義は変更できません.削除後に再生する必要があります.
  • ビューでの更新は制限されます.更新するには、デフォルトでソーステーブルのプライマリ・キーを含める必要があります.
  • ソースのテーブルまたはビューを削除すると、そのベースのビューも削除されます.
  • VIEW例

    create [또는 replace] view 뷰 이름 as
    select 컬럼 1, 컬럼 2, .....
    from 테이블 이름
    where 조건