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


이미지

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

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

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

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

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

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

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

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

  • 2016년 10월 16일에 작성됨

조회수 125


1 답변


좋아요
3
싫어요
채택취소하기

일단 기본적인 데이터베이스 관리관점에서 보면, 데이터중복을 피하고 일관성을 유지해야하기 때문에, 새 테이블 보다는 뷰(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문)
  • 2016년 10월 17일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 와 매번 감사합니다 허대영님!!    capdh   2016.10.17 20:02     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close