SQL. SUB QUERY


サブクエリ:主SELECT文内で他のSELECT文◆条件文として理解
  • PRODUCTSテーブルで、LIST PROICEの最大行のPRODUCT ID、PRODUCT NAME、およびLIST PROICEを検索します.
    SELECT 
    	PRODUCT_ID,
    	PRODUCT_NAME,
    	LIST_PRICE
    	FROM PRODUCTS
    		WHERE LIST_PRICE = (SELECT
    								MAX(LIST_PRICE)
    								FROM PRODUCTS);
  • PRODUCTS表の中で、RPODUCT NAME、LIST PRICE、AVG LIST PRICEを求めて、そしてPRODUCT NAME標準昇順に並べ替えます.ただし、AVG LIST PRICEは、同一のCATEGORY IDを有するLIST PRICEの平均値である.
  •  SELECT
     	A.PRODUCT_NAME,
        A.LIST_PRICE,
        (
        SELECT
        	AVG(LIST_PRICE)
            FROM PRODUCTS B
            WHERE B.CATEGORY_ID = A.CATEGORY_ID
            ) AVG_LIST_PRICE
        FROM PRODUCTS A
        ORDER BY A.PRODUCT_NAME;
    위와같이 SELECT절 안의 서브쿼리를 스칼라 서브쿼리라고 한다.
  • ORDER ITEMSテーブルで、ORDER ID、ORDER VALUEを求め、上位10桁のみを表示します.ORDER VALUEは、QUANTITY*UNIT PRICEの売上高を示しています.
  • SELECT
    	ORDER_ID,
        ORDER_VALUE
        FROM
        	(
            	SELECT
                	ORDER_ID,
                    SUM(QUANTITY * UNIT_PRICE) ORDER_VALUE
                    FROM
                    	ORDER_ITEMS
                        GROUP BY ORDER_ID
                        ORDER BY ORDER_VALUE DESC
                        )
        WHERE
        	ROWNUM <= 10 ;
    FROMセクションのSELECT文からVIEW->VIEWを生成し、ORDER IDとORDER VALUEのみを表示します(イントラビューサブクエリ)
  • PRODUCT表にSELECT文を作成し、LIST PRICE価格が平均価格より高い行(集合)のPRODUCT ID、PRODUCT NAME、lIST PRICE列を求め、P NAMEで
  • をソートする.
    SELECT 
    			A.PRODUCT_ID ,
    			A.PRODUCT_NAME ,
    			A.LIST_PRICE
    			FROM PRODUCTS A
    			WHERE LIST_PRICE > (SELECT 
    									AVG(K.LIST_PRICE)
    									FROM PRODUCTS K)
    			ORDER BY PRODUCT_NAME ;
  • CUSTOMERSテーブルでは、CREDIT LIMITの最大値の10行が印刷されます(ただし、CUSTOMERSテーブルのすべての列がCREDIT LIMITと同じである場合は、NAMEコラムごとに
  • が昇順に並べられます).
    SELECT 
    			*
    			FROM (SELECT *
    					FROM CUSTOMERS
    					ORDER BY CREDIT_LIMIT DESC, NAME)
    			WHERE ROWNUM <= 10;