ORACLE-サブクエリ

2316 ワード


  • 1つのSQL文セクションに含まれる別のSELECT文のため、2回のクエリが必要です.
    1回のクエリで可能な結果を解決

  • 用語
    Main-QueryまたはOuter-Query
    sub-QueryまたはInner-Queryの2対は同じ意味です.

  • 特長
    かっこで囲まなければなりません.
    サブクエリは、メインクエリの次の部分に配置できます.
    1)SELECT/DELETE/UPDATE文のFROMとWHERE節
    2)SELECT文のHAVING節
    3)INSERT文INTO節
    4)UPDATE文のSET節

  • 種類
    <1>1行サブクエリ
    -サブクエリの実行結果は、1つのカラムと1つのローのクエリのみを返します.
    (1つのデータのみを返すクエリ)
  • <2>複数行サブクエリ
    -サブクエリの実行結果は、1つのコラムと複数行のクエリを返します.
    (複数のデータのみを返すクエリ)

    1行サブクエリの作成(1 row,1 column)


    *WHEREの後に2つの表を関連付ける(重複する)コラム名を入力し、カッコサブクエリで一致する必要があるコラム名を入力します(2つは異なる場合があります)+表名を入力し、必要な条件をエクスポートします.
    異なるテーブルでは、後ろのカラム名に2つのテーブルを接続するカラム名を含める必要があります...?確認してください**
    Q.サブクエリを使用して「SMITH」の部門名を出力します.
    サブクエリを無効にすると、
  • スミスの部門番号について
  • スミスの部門名を部門番号に入れる

    -->このプロシージャを1回の実行としてエクスポートします.
    SQL> SELECT dname
     2  FROM dept
     3  WHERE deptno=(SELECT deptno FROM emp WHERE ename='SMITH');

  • 複数行のサブクエリを作成します(複数の行と列があるため、=では比較できません)。


    Q.従業員3000人の部署と同じ部署で働いている従業員の名前、給与、部署番号を印刷してください.

  • 部門を比較するので、部門番号で見ます!


  • 1コラム2うまく書けないのでinで囲みます

  •   1  SELECT ename, sal, deptno
      2  FROM emp
      3* WHERE deptno IN(SELECT deptno FROM emp WHERE sal>=3000)
    EX)自分のトップ上司が「KING」の社員の名前と給料を印刷してください.
    >SELECT ename,sal
    FROM emp
    WHERE mgr = (SELECT empno FROM emp WHERE ename='KING');
    whereセクションの後に一致するコラム名
    mgr=empnoなので、括弧内にmgrにマッチするempnoを求める条件を書き直し、enameを書くにはKINGの条件でなければなりません
    EX)「SALES」部門で働いているすべての従業員の名前と給料を印刷します.
    >SELECT ename, sal
    FROM emp
    WHERE deptno = (SELECT deptno FROM dept WHERE dname='SALES');
    サブクエリにWHEREセクションのコラム名が属するテーブル名を記録!!