sql >> データベース >  >> RDS >> Oracle

オラクルのサブクエリとは

    Oracleのサブクエリ

    (1)サブクエリまたはネストされたクエリは、別のSQLクエリ内のクエリであり、WHERE句内に埋め込まれています。サブクエリはクエリ内のクエリです

    (2)サブクエリは、取得するデータをさらに制限するための条件としてメインクエリで使用されるデータを返すために使用されます。

    (3)サブクエリは、複数の部分からなるクエリに回答します。親クエリは一部に回答し、サブクエリは他の部分に回答します

    (4)サブクエリは、SELECT、INSERT、UPDATE、およびDELETEステートメントとともに、=、<、>、> =、<=、IN、BETWEENなどの演算子とともに使用できます。

    (5)FROM句でサブクエリを使用することは、インラインビューと呼ばれます。 。

    (6)WHERE句でサブクエリを使用することは、ネストされたサブクエリと呼ばれます。 。最大255のネストされたクエリが許可されます。

    OracleSubQueriesのガイドライン

    (1)サブクエリは常に括弧で囲む必要があります

    (2)比較演算子の右側にサブクエリを配置する必要があります

    (3)単一行サブクエリで単一行演算子を使用し、複数行サブクエリで複数行演算子を使用します

    一般的な構文

    SELECT col1, col2
    FROM   table1
    WHERE  col1  OPERATOR
    (SELECT col1
    FROM table2
    [WHERE])
    
    

    単一行サブクエリ

    結果の1行のみを返し、単一行演算子を使用します(最も一般的なのは等号演算子(=)です)。他の演算子は>、<、> =、=<

    単一行のサブクエリでは、同じテーブルまたは別のテーブルからデータを選択できます

    SELECT ENAME FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);SELECT ENAME FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH');
    
    

    複数行のサブクエリ

    サブクエリから数行の結果を返し、IN演算子を使用します。前のクエリでは、複数の研究部門があった場合、クエリは失敗していました。サブクエリで複数の行を返す例

    使用される他の演算子はありとあらゆる

    SELECT ENAME, DEPTNO FROM EMP
    WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME LIKE 'R%');

    相関サブクエリ

    相関サブクエリは、親クエリの列に依存するサブクエリです。相関サブクエリは、親クエリによって処理された行ごとに評価されます。親ステートメントは、SELECT、UPDATE、またはDELETEにすることができます。

    SELECT ENAME,SAL FROM EMP E1
    WHERE SAL = (SELECT MAX(SAL)
    FROM EMP E2 WHERE E1.DEPTNO = E2.DEPTNO);

    empとdeptの同じデータに基づいて、結果は次のとおりです

    スカラーサブクエリ

    1つの行から正確に1つの値を返します。これは、INSERTステートメントのVALUES句、ORDER BYまたはWHERE句、およびSELECT句で最も頻繁に使用されます。

    SELECT ENAME,
    DEPTNO, (SELECT MAX(SAL)
    FROM EMP E2
    WHERE E2.DEPTNO = E1.DEPTNO) HIGH_SAL
    FROM EMP E1
    WHERE ENAME LIKE 'B%';

    サブクエリは、マスタークエリの実行ごとに1回実行されます。単一行のサブクエリは、単一行の演算子でのみ使用できます

    複数列のサブクエリ

    クエリには、サブクエリのSELECT句またはUPDATEステートメントに複数の列を含めることができます

    SELECT CITY,CITY_CODE,CITY_DESCRIPTION
    FROM LOCATIONS
    WHERE (LOCATION_ID, COUNTRY_ID)
    IN (SELECT LOCATION_ID, COUNTRY_ID
    FROM LOCATIONS
    WHERE STATE_PROVINCE = 'NEWYORK');

    他のDMLステートメントのサブクエリ

    サブクエリは、UPDATE、DELETE、およびINSERTステートメントで使用できます

    Update Statement
    UPDATE EMP
    SET SALARY = (SELECT SALARY FROM EMP
    WHERE EMPLOYEE_ID = 112408)
    WHERE EMPLOYEE_ID = 193711;
    
    Insert Statement
    INSERT INTO DEPT (DEPT_ID, DEPT_NAME)
    VALUES ((SELECT MAX(DEPT_ID)
    FROM DEPT), 'NEW DEPT');
    
    Delete Statement
    DELETE FROM CUSTOMERS
    WHERE AGE IN (SELECT AGE FROM CUST_BACK
    WHERE AGE > 40 );

    関連記事
    SQLクエリの記述方法:例を使用したOracle結合(SQL結合)、さまざまなタイプの結合、内部結合、外部結合、左外部結合、右外部結合、例を使用した相互結合
    Oracle結合:例を使用したOracle結合(SQL結合)、さまざまなタイプの結合、内部結合、外部結合、左外部結合、右外部結合、例を使用した相互結合
    oracleの日付関数:この投稿でoracleを確認してください日付関数、年単位のオラクル日付差、日単位のオラクル日付差、月単位のオラクル日付差。
    オラクルのJSON:オラクルでJSONを使用する方法、JSONデータを含むテーブルを作成する方法、方法については、この投稿を確認してください。抽出するには、JSONデータをoracleに挿入します
    Oracle Sqlチュートリアル:SQLを習得し、Oracle、データ管理、および操作で使用できるすべてのsqlチュートリアルレッスンのリスト
    https://livesql。 oracle.com/apex/livesql/file/tutorial_GMLYIBY74FPBS888XO8F1R95I.html


    1. PostgresのGoおよびIN句

    2. MySQLで月末を取得する方法

    3. 転送中のMySQLデータのSSLキー管理と暗号化

    4. SQLServerのSelectQueryの列エイリアスを理解する-SQLServer/TSQLチュートリアルパート115