[公費教育]Day 25


そして昨日習ったサブクエリの進捗状況です.

📝目次

  • 複数列SubQuery
  • 関連SubQuery
  • Inline View
  • Ranking (Top-N)
  • 1.複数列サブクエリ


    :複数の戻り値を持つサブクエリ
    複数のローと同様に、複数のカラムにも複数の戻り値があります.複数の値ではなく、1つのカラムに複数の値を返すだけです.
    [構文]
         (1,2)       = (select1,2   from   테이블  where 조건);
    (dept_code, job_code) = (select dept_code, job_code from employee where ent_yn='Y)
  • 複数の列を比較するので、同じで比較可能です.
  • ただし、サブクエリの出力値とメインクエリの入力値は一致する必要があります.
  • プライマリ・クエリの順序も一致する必要があります.
  • 退職者と同じ部門の同じレベルの従業員のリストを印刷してください.
    次に、上記の例の退職者を確認するクエリを示します.
    select dept_code, job_code from employee
    where ent_yn='Y'; -- 다중열로 출력
    ただし、上記のように記入すると、退社者全員のデータが出てきます.
    次に、検索条件に基づいて複数の列で値を入力します.
    select 
        emp_name, dept_code, job_code, hire_date 
    from employee 
    where 
        (dept_code, job_code) = (select dept_code, job_code from employee where ent_yn='Y')
        and emp_name not in ('이태림');
    whereセクションには、プライマリ・クエリーで使用される値が含まれます.
    次に、含まれる値は、メインクエリ内で条件に従ってselectとして出力されます.

    = , in, any, all


    :複数行-列または1行のサブクエリ値をプライマリ・クエリとして使用する場合、条件があります.
  • 前提:コンピュータは同じカラム値を区別できません.
  • =(같다)複数行、複数行列には適用されません.
  • 1行、複数列は1列の値であり、比較可能である.
  • in:複数行、複数行列で返される複数の値のうち1つを検索します.

    2.関連サブクエリ


    :主にselectセクションのサブクエリ
    select () from () where () group by () having () order by ()
    サブクエリはDQLを構成するすべてのセクションに入ることができます.ここで、selectセクションのクエリーを相互関連クエリーと呼びます.
    この関連クエリーには、従来とは異なる特殊な点があります.
    select 
        emp_name 직원명, 
        (select dept_title from department where dept_code = dept_id) 부서명 -- 조건을 걸어서 가져옴.
    from employee;
    上記の例は、サブクエリが関連クエリとして使用される例です.

    ここから見ると、二つの特徴があります。


    1)外部テーブルから値を抽出します.
    2)dept_codeemployeeテーブルのカラムで、サブクエリに使用されます.
    このように、関連クエリはプライマリクエリのデータを使用します.
    したがって、fromを除いて、サブクエリが最初に実行されます.
    上記の例では、サブクエリは、自主クエリの「dept code」とそのテーブルの「dept id」とを比較します.
    また、departmentテーブルは、両者が一致する場合にのみ「dept title」を返します.
    この意味では、プライマリ・クエリーに関連付けられたクエリーを意味的に上(相互)パイプ・クエリーと呼ぶ.
    ただし、関連サブクエリは単独では使用できず、機能は便利ですが、パフォーマンスはよくありません.
    事前に選んでおくので、ホームページで出力するたびに確認します.

    3. inline view


    :fromセクションで主に使用されるサブクエリfromセクションでは、内部に格納されているテーブルを指定し、データを取得します.
    それだけでなく、テーブルのコラムを集めて、仮想のテーブルを作ることもできます.
    select * from employee;
    select * from (select emp_name, salary from employee); 
    決心さえすれば、joinと一緒に編むこともできます.

    4. Ranking (Top-N)


    :上から下への関数
    文法を勉強していますが、ソートや他の順序でテーブルに戻る関数です.
    使い方は大きく3つあります.

    1)rank()over(order by標準カラム名desc)


    :連合順位が付与され、連合順位が付与されると空白が解消されます.
    select 
        emp_name, 
        salary,
        rank() over(order by salary desc) 순위
    from 
        employee;

    2)稠密rank()over(orderby標準列名desc)


    :共通順位が与えられますが、そのために空の値は消去されません.
    select 
        emp_name, 
        salary,
        dense_rank() over(order by salary desc) 순위
    from 
        employee;

    3)row number()over(order by標準カラム名desc)


    :行番号を列に減算するための共通の順序は貼り付けられません.
    select 
        emp_name, 
        salary,
        row_number() over(order by salary desc) 순위
    from 
        employee;
    また、inline viewとrow number()を併用します.
    select * from
        (select emp_name, salary, row_number() over(order by salary desc) 순위 from employee) 
    where 
        순위 between 1 and 5; 
    1〜5名の例題の中から1〜5万を選ぶのは容易なことではない.
    いっそinline viewで仮想テーブルを作成します.でも、いっそテーブルでランキング
    プライマリ・クエリーをインポートし、ランキングの値を使用します.