마포돌주먹
225
2021-09-08 10:54:47
25
305

sql 쿼리 질문이요


SELECT
revenue, grossProfit, operatingIncomeLoss, profitLoss, comprehensiveIncome,
assets, liabilities, equity, cashFlowsFromUsedInOperatingActivities, cashFlowsFromUsedInInvestingActivities,
cashFlowsFromUsedInFinancingActivities, increaseDecreaseInCashAndCashEquivalents, currentAssets, currentLiabilities, costOfSales,
shortTermTradeReceivable, inventories, propertyPlantAndEquipment, revenueCumulativeAmount, grossProfitCumulativeAmount,
operatingIncomeLossCumulativeAmount, profitLossCumulativeAmount, comprehensiveIncomeCumulativeAmount,
'035720'
'2020'
'CFS'
'11013'
FROM tb_web_financial_statement a, (
SELECT
a.ISU_SRT_CD, b.CORP_CODE
FROM tb_stock_list a, tb_corpcode b
WHERE a.ISU_SRT_CD = b.STOCK_CODE
AND a.ISU_SRT_CD = '035720'
AND a.DELETE_YN = 'N'
) b
WHERE a.CORP_CODE = b.CORP_CODE
AND a.BSNS_YEAR = '2020'
AND a.FS_DIV = 'CFS'
AND a.REPRT_CODE = '11013'
이 쿼리 결과에
LEFT OUTER JOIN tb_unregistered_executive b
ON a.ISU_SRT_CD = b.STOCK_CODE
이걸 추가하고 싶어서
SELECT
revenue, grossProfit, operatingIncomeLoss, profitLoss, comprehensiveIncome,
assets, liabilities, equity, cashFlowsFromUsedInOperatingActivities, cashFlowsFromUsedInInvestingActivities,
cashFlowsFromUsedInFinancingActivities, increaseDecreaseInCashAndCashEquivalents, currentAssets, currentLiabilities, costOfSales,
shortTermTradeReceivable, inventories, propertyPlantAndEquipment, revenueCumulativeAmount, grossProfitCumulativeAmount,
operatingIncomeLossCumulativeAmount, profitLossCumulativeAmount, comprehensiveIncomeCumulativeAmount,
'035720'
'2020'
'CFS'
'11013'
FROM tb_web_financial_statement a, (
SELECT
a.ISU_SRT_CD, b.CORP_CODE
FROM tb_stock_list a, tb_corpcode b, (
WHERE a.ISU_SRT_CD = b.STOCK_CODE
AND a.ISU_SRT_CD = '035720'
AND a.DELETE_YN = 'N'
)
WHERE 1 = 1
AND a.ISU_SRT_CD = b.STOCK_CODE
AND a.BSNS_YEAR = '2020'
AND a.REPRT_CODE = '11013'
) a LEFT OUTER JOIN tb_unregistered_executive b
ON a.ISU_SRT_CD = b.STOCK_CODE
이렇게 짰는데 오류 나오는데 ㅠㅠ 어디가 잘 못 됬을까요??
0
  • 답변 25

  • Eleutherius
    1k
    2021-09-08 11:01:18

    일단 테이블 alias를 중복되지 않게 변경하시는건 어떠하십니까...

    a가 세번이나 사용되서 이 쿼리가 제가 봐도 뭔지 모르겠는데 DBMS도 이해하지 못할 것 같아요

    FROM절에 alias를 싹 다 고치면 좋을 것 같아요

  • 드코
    3k
    2021-09-08 11:06:47 작성 2021-09-08 11:07:38 수정됨

    이해가 안되는 부븐들이 있어요



    윗분 말씀처럼 a테이블이 많아서 보기가 힘들고 이해가 안되는 괄호도 있고 뭔가 이상해요



  • 마포돌주먹
    225
    2021-09-08 11:12:30

     드코

    tb_corpcode b, ( 이거랑

    ) a LEFT OUTER JOIN  이거 괄호는 LEFT OUTER JOIN 하려고 괄호 쓴거에요 근데 심텍스 오류나요 

  • a785312468
    326
    2021-09-08 11:26:24

    안녕하세요

    Syntax Error가 나는걸로 보아 쿼리문을 잘못쓴것같습니다. 꾸벅

  • 마포돌주먹
    225
    2021-09-08 11:28:04

     a785312468 

    저렇게 SELECT 문 2개에 LEFT OUTER JOIN 사용하려고 하면 어떻게 해야 하나요?

  • 마포돌주먹
    225
    2021-09-08 13:16:21

    Eleutherius

    변경 한 다음에 LEFT OUTER JOIN은 어떻게 추가해야 할까요??

  • 드코
    3k
    2021-09-08 14:06:49

    아무리봐도 저 초록색 괄호가 문법상으로 틀린거 같아요 

  • 드코
    3k
    2021-09-08 14:09:15 작성 2021-09-08 14:10:36 수정됨

    테이블이름 주실때  a,b,c,d, 이렇게 주지지 마시고 T1,T2,T3 이런식으로 명칭을 변경해주시고 


    이름은 같은이름으로 주시지 마세요 .

    left join 은


      select *

        from table1 T1

    left join table2 T2

           on T1.key = T2.key


    이러한 형태로 주시면 되고 이것을 줬을 시에는

    T1테이블은 전부다 나오고 T2테이블은 T1와 매칭된 애들만 나오는 방식이에요


  • 마포돌주먹
    225
    2021-09-08 14:10:08

     드코

           SELECT
    revenue, grossProfit, operatingIncomeLoss, profitLoss, comprehensiveIncome,
    assets, liabilities, equity, cashFlowsFromUsedInOperatingActivities, cashFlowsFromUsedInInvestingActivities,
    cashFlowsFromUsedInFinancingActivities, increaseDecreaseInCashAndCashEquivalents, currentAssets, currentLiabilities, costOfSales,
    shortTermTradeReceivable, inventories, propertyPlantAndEquipment, revenueCumulativeAmount, grossProfitCumulativeAmount,
    operatingIncomeLossCumulativeAmount, profitLossCumulativeAmount, comprehensiveIncomeCumulativeAmount,
    '035720'
    '2020'
    'CFS'
    '11013'
    FROM tb_web_financial_statement a, (
    SELECT
    a.ISU_SRT_CD, b.CORP_CODE
    FROM tb_stock_list c, tb_corpcode b
    WHERE c.ISU_SRT_CD = b.STOCK_CODE
    AND c.ISU_SRT_CD = '035720'
    AND c.DELETE_YN = 'N'
    ) b, (
    WHERE a.CORP_CODE = b.CORP_CODE
    AND a.BSNS_YEAR = '2020'
    AND a.FS_DIV = 'CFS'
    AND a.REPRT_CODE = '11013'
    ) LEFT OUTER JOIN tb_unregistered_executive d
    ON a.ISU_SRT_CD = d.STOCK_CODE;
    이런 식으로 바까밨는데 이것도
    WHERE a.CORP_CODE = b.CORP_CODE 이부분에서 심텍스 오류나는데 이유를 모르겠어요 ㅠㅠ
  • 드코
    3k
    2021-09-08 14:12:38

    tb_web_financial_statement a

    요테이블 이름도 a 이고


    (

       SELECT

          a.ISU_SRT_CD, b.CORP_CODE

       FROM tb_stock_list a, tb_corpcode b, (

           WHERE a.ISU_SRT_CD = b.STOCK_CODE

       AND a.ISU_SRT_CD = '035720'

       AND a.DELETE_YN = 'N'

       )

       WHERE 1 = 1

       AND a.ISU_SRT_CD = b.STOCK_CODE

        AND a.BSNS_YEAR = '2020'

              AND a.REPRT_CODE = '11013'

          ) a


    요테이블 이름도 a 이기때문에 


     ON  a.ISU_SRT_CD = b.STOCK_CODE

    조건을 주었을때


     a.ISU_SRT_CD 이것이 어떤 a테이블의 값인지 못찾을 확률도 있어보여요




  • 드코
    3k
    2021-09-08 14:13:40
    (
    WHERE a.CORP_CODE = b.CORP_CODE
    AND a.BSNS_YEAR = '2020'
    AND a.FS_DIV = 'CFS'
    AND a.REPRT_CODE = '11013'
    )
    요기서 이 괄호는 문법적으로 맞지를 않는거 같아요 이런문법은 제가 모르는거일수도
    있지만 이런 문법은 진짜 처음봐요 
  • 드코
    3k
    2021-09-08 14:15:36

    첫번째 a테이블

    tb_web_financial_statement a


    두번째 b테이블

    (

             SELECT

                a.ISU_SRT_CD, b.CORP_CODE

             FROM tb_stock_list c, tb_corpcode b

             WHERE c.ISU_SRT_CD = b.STOCK_CODE

             AND c.ISU_SRT_CD = '035720'

             AND c.DELETE_YN = 'N'

          ) b


    여기까지는 정확 히 괄호로 테이블이 구분되어 있죠


    이것이 문제의 의문의 괄호 테이블인가 뭔가 ??

    (

          WHERE a.CORP_CODE = b.CORP_CODE

          AND a.BSNS_YEAR = '2020'

          AND a.FS_DIV = 'CFS'

          AND a.REPRT_CODE = '11013'

    )


    세번째 조인할 테이블

    tb_unregistered_executive d


  • 드코
    3k
    2021-09-08 14:17:29

    아시는거 또말하는것일수도 있지만 혹시몰라서


    table1 T1 이라고 적었을 시 테이블의 원래이름은 table1 이지만 T1이라고 옆에 적어줬기때문에 이 SQL구문에서 이 테이블의 이름은 T1입니다.

    table as T1 이라고 쓸 수도있습니다.

  • 마포돌주먹
    225
    2021-09-08 14:17:55

     드코

    저 문제의 괄호는 제가 잘못한 문법이에요..


    SELECT
    revenue, grossProfit, operatingIncomeLoss, profitLoss, comprehensiveIncome,
    assets, liabilities, equity, cashFlowsFromUsedInOperatingActivities, cashFlowsFromUsedInInvestingActivities,
    cashFlowsFromUsedInFinancingActivities, increaseDecreaseInCashAndCashEquivalents, currentAssets, currentLiabilities, costOfSales,
    shortTermTradeReceivable, inventories, propertyPlantAndEquipment, revenueCumulativeAmount, grossProfitCumulativeAmount,
    operatingIncomeLossCumulativeAmount, profitLossCumulativeAmount, comprehensiveIncomeCumulativeAmount,
    '035720'
    '2020'
    'CFS'
    '11013'
    FROM tb_web_financial_statement T1,
    (
    SELECT
    T3.ISU_SRT_CD, T2.CORP_CODE
    FROM tb_stock_list T3, tb_corpcode T2
    WHERE T3.ISU_SRT_CD = T2.STOCK_CODE
    AND T3.ISU_SRT_CD = '035720'
    AND T3.DELETE_YN = 'N'
    ) T2
    WHERE T1.CORP_CODE = T2.CORP_CODE
    AND T1.BSNS_YEAR = '2020'
    AND T1.FS_DIV = 'CFS'
    AND T1.REPRT_CODE = '11013';
    이렇게 수정했고
    LEFT OUTER JOIN tb_unregistered_executive d
    ON T1.ISU_SRT_CD = d.STOCK_CODE;이거를 추가하고 싶은데 어떻게 해야할까요?
  • 드코
    3k
    2021-09-08 14:18:25

    컬럼에서도 마찬가지로


    select a as c1

    ,b as c2

    c as c3

    from table T1


    이런식으로 원래 컬럼명 말고 도 이름을 붙혀 줄 수있죠

  • 드코
    3k
    2021-09-08 14:22:18 작성 2021-09-08 14:29:29 수정됨
    FROM tb_web_financial_statement T1
    inner join
    (
    SELECT
    T3.ISU_SRT_CD, T2.CORP_CODE
    FROM tb_stock_list T3, tb_corpcode T2
    WHERE T3.ISU_SRT_CD = T2.STOCK_CODE
    AND T3.ISU_SRT_CD = '035720'
    AND T3.DELETE_YN = 'N'
    ) T2
                  on T1.CORP_CODE = T2.CORP_CODE 
                  AND T1.BSNS_YEAR = '2020'
    AND T1.FS_DIV = 'CFS'
    AND T1.REPRT_CODE = '11013';
    지금 이렇게 바꾸면 위에 쓴 쿼리랑 같습니다.
    만약 여기에 조인을 하나 더 추가하고싶으시면
    조인구문은 from절 안에 쓰시면 됩니다. 
  • 드코
    3k
    2021-09-08 14:25:00


      FROM tb_web_financial_statement T1,
        (
           SELECT
                  T3.ISU_SRT_CD, T2.CORP_CODE
                  FROM tb_stock_list T3, tb_corpcode T2
                  WHERE T3.ISU_SRT_CD = T2.STOCK_CODE
                  AND T3.ISU_SRT_CD = '035720'
                  AND T3.DELETE_YN = 'N'
              ) T2
                  WHERE T1.CORP_CODE = T2.CORP_CODE
                  AND T1.BSNS_YEAR = '2020'
                  AND T1.FS_DIV = 'CFS'
                  AND T1.REPRT_CODE = '11013';
    
    즉 이 방식대로 조인을 하시려면  from절 아래 where 절 위에  사용해주시면 됩니다.


  • 드코
    3k
    2021-09-08 14:26:04

    위에 쓰신 쿼리문처럼 inner join 이란 구문을 생략하고 그냥 , 콤마로 조인을 해주셨잖아요?


    레프트조인도 마찬가지로 left join이란 구문을 생략하고 (+)구문과 , 콤마를 통하여 조인을 할 수도 있습니다.

  • 마포돌주먹
    225
    2021-09-08 14:32:53 작성 2021-09-08 14:33:19 수정됨

     드코

    친절한 답변 너무너무 감사합니다 ㅠㅠ

    FROM tb_web_financial_statement T1,
    (
    SELECT
    T3.ISU_SRT_CD, T2.CORP_CODE
    FROM tb_stock_list T3, tb_corpcode T2

    WHERE T3.ISU_SRT_CD = T2.STOCK_CODE
    AND T3.ISU_SRT_CD = '035720'
    AND T3.DELETE_YN = 'N'
    ) T2, tb_unregistered_executive T4
    LEFT OUTER JOIN T2
    ON T1.ISU_SRT_CD = T4.STOCK_CODE;
    WHERE T2.CORP_CODE = T2.CORP_CODE
    AND T1.BSNS_YEAR = '2020'
    AND T1.FS_DIV = 'CFS'
    AND T1.REPRT_CODE = '11013';
    이런식으로 하는 거 맞나요??
  • 드코
    3k
    2021-09-08 14:39:35 작성 2021-09-08 14:43:28 수정됨


    FROM tb_web_financial_statement T1
    INNER JOIN
    (
     SELECT
              t3.ISU_SRT_CD, t2.CORP_CODE
              FROM tb_stock_list t3
                  ,tb_corpcode t2
             WHERE t3.ISU_SRT_CD = t2.STOCK_CODE
               AND t3.ISU_SRT_CD = '035720'
               AND t3.DELETE_YN = 'N'
          ) T2
      ON T1.CORP_CODE = T2.CORP_CODE
     AND T1.BSNS_YEAR = '2020'
     AND T1.FS_DIV = 'CFS'
     AND T1.REPRT_CODE = '11013';
    LEFT JOIN tb_unregistered_executive T4
      ON T1.ISU_SRT_CD = T4.STOCK_CODE
    WHERE 1=1
    and 여려가지 조건들 

    개인적으로 모든 조건문 다지우고 


    아래 테이블 3개가지고 inner join, left join  두가지만 연습하셔서 확실하게 구문을 습득하시는걸 간절히 추천 드리고 싶습니다.

    tb_web_financial_statement, tb_stock_list, tb_unregistered_executive 
  • 드코
    3k
    2021-09-08 14:45:04
              AND T3.DELETE_YN = 'N'
    ) T2, tb_unregistered_executive T4
    LEFT OUTER JOIN T2
    진짜 이 조인 구문은 끔찍해서 못보겠습니다. 

    A테이블과  B테이블 사이에 inener join left join 등 여러조인이 올 수있습니다.
    as 붙히는건 테이블 우측에 붙힐 수있습니다.
  • 드코
    3k
    2021-09-08 14:47:08 작성 2021-09-08 14:49:37 수정됨

    select *

    from table1

    , table2

    where table1 = table2


    이것은 이너조인 방식 입니다 ( 암시적 표현 )


    select *

    from table1

    inner join tabel2

    on table1.key=table2.key

    이것도 이너조인 방식입니다. (명시적 표현)



    select *

    from table1

    , table2

    ,table3

    where table1.key = table2.key

    and talbe1.key = table3.key

    이것은 테이블 3개 조인하는 방식 입니다.



    select *

    from table1

    inner join  table2

    on table1.key = table2.key

    inner join table3

    on  talbe1.key = table3.key

    이것도 테이블 3개 조인하는 방식 입니다.


  • 드코
    3k
    2021-09-08 14:50:51

    select 


    from 


    where


    group by


    having


    order by 

    쿼리문은 이 순서대로 올 수있고 각 구간마다 들어갈 수있는 것들이 다릅니다.

  • 마포돌주먹
    225
    2021-09-08 15:16:12 작성 2021-09-08 15:22:03 수정됨

     드코

    넵 진짜 답변 너무 감사합니다 공부 열심히 해야겠어요!! 어떻게 보답을 해드려야 할지 ㅠㅠ


    FROM tb_web_financial_statement T1
    INNER JOIN
    (
    SELECT
    t3.ISU_SRT_CD, t2.CORP_CODE
    FROM tb_stock_list t3,tb_corpcode t2
    WHERE t3.ISU_SRT_CD = t2.STOCK_CODE
    AND t3.ISU_SRT_CD = '035720'
    AND t3.DELETE_YN = 'N'
    ) T2
    ON T1.CORP_CODE = T2.CORP_CODE
    AND T1.BSNS_YEAR = '2019'
    AND T1.FS_DIV = 'CFS'
    AND T1.REPRT_CODE = '11012'
    LEFT JOIN tb_unregistered_executive T4
    ON T1.ISU_SRT_CD = '035720'
    WHERE 1=1
    AND T4.NMPR = '872'
    근데 조인을 했는데 결과에 AND T4.NMPR = '872' 이 부분이 안 나오네요.. 
    tb_unregistered_executive T4 이 테이블의 NMPR 부분을 저 위에 결과에 더하고 싶은 거거든요
  • 마포돌주먹
    225
    2021-09-08 15:49:49

    드코

    FROM tb_web_financial_statement T1
    INNER JOIN
    (
    SELECT
    t3.ISU_SRT_CD, t2.CORP_CODE
    FROM tb_stock_list t3,tb_corpcode t2
    WHERE t3.ISU_SRT_CD = t2.STOCK_CODE
    AND t3.ISU_SRT_CD = '035720'
    AND t3.DELETE_YN = 'N'
    ) T2
    ON T1.CORP_CODE = T2.CORP_CODE
    AND T1.BSNS_YEAR = '2019'
    AND T1.FS_DIV = 'CFS'
    AND T1.REPRT_CODE = '11012'
    요기에 tb_unregistered_executive T4 이 테이블의 칼럼을 추가하고 싶은 건데 조인이라니라 유니온을 써야 할까요?


  • 로그인을 하시면 답변을 등록할 수 있습니다.