DB에 테이블을 만드려고하는데...

조회수 1606회

이미지

기업(기업이름(PK), 주소, 대표자, 제품) 혁신기업(기업이름(PK,FK), 선정년도, 선정이유) 우수기업(기업이름(PK,FK), 선정년도, 선정이유) 선진기업(기업이름(PK,FK), 선정년도, 선정이유)

ERD가 많이 허접하지만... 위와 같이 테이블이 있는 상황에서,

테이블을 하나 더 만들고 싶습니다

그 테이블에는 기업이름이 모두 써있고 기업이 선진,혁신,우수 중에서 몇개에 선정 되었는지 숫자로 된 컬럼이 존재합니다.

예를 들어서.. 뛰어난기업(기업이름(PK), 혁신우수선진 중에서 몇개에 들어가있는지 갯수(int)) 이런 테이블입니다..

현재, 위에 사진속에 있는 테이블에는 데이터가 모두 들어가있는상태입니다. 그 상태에서 위와 같이 새로 테이블을 하나 만들고, SQL쿼리를 날려서 기업이름과 숫자를 한번에 쫙 넣고 싶은데.. 어케 해야할까요..

제 질문이 이해가 되실련지 모르겠네요...

아니면 제가 아예 잘못 생각하는 부분이 있다면 지적 부탁드립니다 ㅠㅠ 감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 일단 기본적인 데이터베이스 관리관점에서 보면, 데이터중복을 피하고 일관성을 유지해야하기 때문에, 새 테이블 보다는 뷰(VIEW)를 사용해보는 것이 좋을 것 같습니다.

    참고: http://www.w3schools.com/sql/sql_view.asp

    먼저 기업이 선진기업으로 선정된 횟수를 구하는 방법은 다음과 같이 GROUP BY를 사용하면 됩니다. 다른 우수기업이나 혁신기업도 마찬가지 방식으로 구할 수 있습니다.

    SELECT 기업이름,COUNT(선정년도) AS 선진선정횟수 FROM 선진기업 GROUP BY 기업이름
    

    위의 결과를 기업 테이블과 조인하면 원하시는 결과를 얻을 수 있는 데, 이것을 VIEW르 만들어서 사용하면 되겠네요. 만약 데이터가 많아져서 속도가 저하된다면, SQL을 좀더 튜닝하거나, 다른 방법을 찾아보셔야 합니다.

    다음은 기업이 선진기업과 우수기업의 횟수를 한번에 조회하는 간단하 SQL의 예입니다. 참고하시기 바랍니다.

    SELECT 기업.기업이름, 선진.선정횟수, 우수.선정횟수 FROM 기업
      LEFT JOIN
        (SELECT 기업이름,COUNT(선정년도) AS 선정횟수 FROM 선진기업 GROUP BY 기업이름) 선진
        ON 기업.기업이름 = 선진.기업이름
      LEFT JOIN
        (SELECT 기업이름,COUNT(선정년도) AS 선정횟수 FROM 우수기업 GROUP BY 기업이름) 우수
        ON 기업.기업이름 = 우수.기업이름
    

    위를 테이블처럼 사용하려면 VIEW를 생성해서 사용하면됩니다.

    CREATE VIEW 기업정보 AS SELECT ...; //( SELECT... 는 앞의 SELECT문)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)