SQL

SQL SELECT 조건절 / WHERE 조건절 / JOIN

yangcotton 2022. 11. 29. 14:32

쿼리 현행화중.. 결과는 같지만 기독성을 좋게하거나 속도를 위해 조건절을 활용하여 쿼리를 수정하고있다.

 

SELECT 조건절 

: select 에서 조건을 바로 준다.

SELECT
	col1
    ,(SELECT bcol1 FROM Btable WHERE bid = a.aid) col2
    ,col3
 FROM Atable
WHERE col1 IS NOT NULL

WHERE 조건절

: where에서 조건을 준다.

SELECT
	A.col1
    ,B.bcol1 as col2
    ,A.col3
 FROM Atable A , Btable B
WHERE A.aid = B.bid
	AND col1 IS NOT NULL

 

======

아래는 SELECT 조건절 - > LEFT OUTHER JOIN 로 바꿔보았다.

SELECT T.ST_DT
		,T.CUST_NO
        ,T.UP_1_NO
        ,T.UP_1_NM
        ,T.UP_1_CD
        ,T.UP_2_NO
        ,T.UP_2_NM
        ,T.UP_2_CD
  FROM
   (SELECT TO_CHAR(ENTR_DT, 'YYYYMMDD') ST_DT
   		,CUST_NO
        ,(SELECT DISTINCT UP_NO FROM BTABLE WHERE BID=A.AUP_ID_1) UP_1_NO
        ,(SELECT DISTINCT UP_NM FROM BTABLE WHERE BID=A.AUP_ID_1) UP_1_NM
        ,(SELECT DISTINCT UP_CD FROM BTABLE WHERE BID=A.AUP_ID_1) UP_1_CD
        ,(SELECT DISTINCT UP_NO FROM BTABLE WHERE BID=A.AUP_ID_2) UP_2_NO
        ,(SELECT DISTINCT UP_NM FROM BTABLE WHERE BID=A.AUP_ID_2) UP_2_NM
        ,(SELECT DISTINCT UP_CD FROM BTABLE WHERE BID=A.AUP_ID_2) UP_2_CD
    FROM ATABLE A
  WHERE CUST_NO IS NOT NULL
  ) T
 WHERE (UP_1_NO > ' ' OR UP_2_NO > ' ')
 	AND (UP_1_NM > ' ' OR UP_2_NM > ' ')
    AND (UP_1_CD > ' ' OR UP_2_CD > ' ')
SELECT A.ST_DT
		,A.CUST_NO
        ,B1.UP_NO UP_1_NO
        ,B1.UP_NM UP_1_NM
        ,B1.UP_CD UP_1_CD
        ,B2.UP_NO UP_2_NO
        ,B2.UP_NM UP_2_NM
        ,B2.UP_CD UP_2_CD
  FROM ATABLE A
  		LEFT OUTER JOIN BTABLE B1 ON (B1.BID=A.AUP_ID_1)
        LEFT OUTER JOIN BTABLE B2 ON (B1.BID=A.AUP_ID_2)
 WHERE CUST_NO IS NOT NULL
 	AND (UP_1_NO > ' ' OR UP_2_NO > ' ')
 	AND (UP_1_NM > ' ' OR UP_2_NM > ' ')
    AND (UP_1_CD > ' ' OR UP_2_CD > ' ')

'SQL' 카테고리의 다른 글

[SQL] NVL , NVL2  (0) 2023.02.10
SQL Oracle - 튜닝 Hint 힌트  (0) 2023.01.06
[SQL Oracle] ROWNUM =2 사용법 , 쿼리문 실행순서  (0) 2023.01.05