Table과 Table의 데이터를 연결하는 Join의 방법에 대해서 설명 드리겠습니다.

    제가 생각하기에 SQL은 조인만 제대로 이해한다면 

    거의 80%는 이해했다고 볼수 있을것 같습니다. 

    왜냐면 Join을 어떻게 했느냐에 따라 데이터가 제대로 나오기도 하고

    데이터가 뻥튀기 되서 생각지도 못하게 많은 데이터가 나오기도 합니다. 

    그래서 조인을 어떤것을 어떻게 쓰느냐에 따라 결과가 달라집니다. 

    그리고 각자 원하는 데이터를 추출 하시려면 하나의 테이블만 가지고서는

    원하는 데이터를 추출하지 못할것입니다. 

    그래서 이부분이 정말 중요합니다. 

    Join에도 여러가지가 있지만 

    처음에는 inner join , left outer join 이 두개만 알고 있으면 됩니다. 

    이 두개를 이해하고 나면 다른것들은 그리 어렵지 않아요.. 

    특히 left outer join의 개념이 조금 어려우니 

    이번 강의는 inner join에 대해서 설명을 해드리겠습니다. 

    Join의 종류

    그중에서 가운데에 있는 inner join은 

    각 두개의 테이블에서 모두 존재하는 케이스만 나옵니다. 

    이렇게 말로만 설명 하면 어려우니 예를 들어서 설명 드리겠습니다. 

    A테이블에는 이름,번호, 상품명의 데이터가 들어가 있고, 

    B테이블에는 이름, 수량, 속성의 데이터가 들어가 있습니다. 


    저는 이름, 번호, 수량, 속성을 보고 싶은데 

    테이블을 보면 A에는 이름과 번호가 있고, 

    B에는 수량 속성이 있습니다. 

    그래서 데이터를 연결을 해야 하는데, 이때 join을 사용합니다. 


    SQL작성 하는것은 아래에서 설명하고 먼저 

    저렇게 조인을 하게되면 어떻게 데이터가 추출이 되는지 부터 

    설명 드리고 작성 하는 방법을 설명 드리겠습니다. 


    두개의 테이블을 조인을 하게 되면 Key값을 기준으로 데이터를 연결 하게 됩니다. 

    그 KEY값 두개의 테이블에 공통적으로 들어가 있는 컬럼이 대부분 KEY값이 됩니다. 

    또는 해당 테이블의 primary key가 key값이 됩니다. (이부분은 나중에 설명하겠습니다)


    위의 예제 테이블을 보면 공통적인것은 이름입니다. 

    그래서 이름을 키값으로 쓰고 저 이름을 기준으로 공통적인것만 데이터가 나옵니다.(inner join시)

    Inner join결과

    두테이블에 공통적으로 들어가있는 이름은 B,C입니다. 

    그래서 결과는 B,C의 데이터만 나옵니다. 


    자. 그럼 이걸 SQL로 작성을 해보겠습니다. 

    SQL작성 결과

     위의 SQL을 설명드리겠습니다. 

     Select와 from사이에는 보자가 하는 컬럼이 들어간다고 했습니다. 

    그런데 컬럼명을 지정하지 않고 *을 표시하면 해당 테이블의 전체 컬럼이 다 나옵니다. 

    그리고 from다음에는 테이블명이 들어 갔었죠

    그런데 우리는 두개의 테이블을 연결 해야 하니 

    테이블명 inner join 테이블명을 넣어 줍니다. 

    그후 가장 중요한 on 테이블명.컬럼명 = 테이블명.컬럼명 을 넣어 주셔야 합니다. 

    이게 무슨 의미냐 하면 두개의 테이블을 두개의 키값이 같은것으로 연결한다 입니다. 

    그래서 위에는 on 테이블A.이름 = 테이블B.이름을 적어 준것입니다.


    여기에서 중요한 부분 하나

    이제부터는 두개이상의 테이블을 연결을 하기 때문에 

    모든 부분은 테이블명.컬럼명으로 적어 주셔야 합니다. 

    예를 들어 이전 강의에서 처럼 이름과 수량을 보고 싶다 했으면 

    select와 from사이에 이렇게 적어주시면 에러가 납니다. (Select 이름, 수량 from )

    그 이유는 이름이란 컬럼은 A,B테이블에 둘다 있기 때문에

    어디서 이름을 가져와야 하는지 몰라서 에러를 발생 시킵니다. 

    그래서 두개이상 테이블을 조인했다라고 한다면 

    (Select 테이블A.이름, 테이블B.수량 from )

    이렇게 적어주셔야 합니다.


    그래서 최종 내가 이름,번호, 수량, 속성을 본다라고 한다면 

    SQL은 아래와 같이 작성을 하시면 됩니다.

    최종 SQL


    자.. 근데 또 이것만 가지고는 잘 이해가 안되시겠죠?

    저번 시간에 저희는 Mysql을 설치 했습니다. 

    실전 예제로 한번 익혀 보시죠. 


    Mysql Workbench를 실행 시키고 로그인 하세요. 

    그럼 이런 화면이 나오는데

    거기서 왼쪽의 조그마한 빨간 박스를 누르시면 회색으로 되어 있는 공간에

    SQL을 적을수 있는 하얀 화면이 생깁니다. 

    그 화면에 SQL을 작성 하시면 됩니다. 

    저희가 이번에 Join을 할것은 sakila DB안에 있는 address와 city, country를 연결 해보겠습니다. 

    우선 address와 city를 연결 해볼께요. 

    저는 해당 테이블에 어떤 컬럼이 있는지 모릅니다. 

    그렇기 때문에 제일먼저 아래와 같은 SQL을 실행하여

    어떤 컬럼들이 있는지, 데이터 형식이 어떻게 되는지 우선 확인 해봅니다. 

    1번 SQL실행창에 select * from sakila.address 를 넣고 위의 번개 버튼 또는 

    Ctrl + 엔터를 눌러 주시면 실행 결과가 아래에 2번 처럼 나타 납니다. 

    그럼 저 address테이블에 address_id, address, address2, district, city_id, postal_code, phone, location, last_update 

    이런 컬럼들이 나옵니다. 


    마찬가지로 city테이블을 위와 동일하게 조회를 하여 결과를 확인 해봅니다. 

    여기서 팁하나

    조회를 하실때 하나의 창에서 조회를 하면 기존의 테이블을 외우지 못했는데 비교해보다가 

    기억이 안나서 계속 이전 테이블을 조회하는 경우가 발생 합니다. 

    그래서 저는 왼쪽에 있는 SQL창을 하나더 열고 다른 테이블은 새로 열친 창에서 

    조회를 해보고 탭을 이동하며 결과를 확인 비교를 합니다. 

    이렇게 되면 시간을 많이 적약할수 있더라구요. 


    자.. 이제 비교를 했으면 두개 테이블에 공통적으로 들어가 있는 

    Key값을 찾으셔야 합니다. 

    두개의 테이블에 형식도 똑같고 컬럼명도 똑같은게 하나 있습니다. 

    바로 city_id입니다. 

    이것을 키값으로 사용하여 테이블을 Join하면 됩니다. 

    이와 같이 SQL을 작성 하면 address, city의 테이블이 연결되었습니다. 

    그럼 여기서 다른점 하나 from다음에는 테이블명이 들어가야 합니다. 

    여기서는 테이블명이 address인데 그앞에 모가 하나가 더 있네요..

    저건 db명입니다. 

    저희가 예제로 사용하는 Mysql에는 DB가 3개가 있고, 

    테이블명이 동일한 것이 있습니다. 

    그래서 잘못 돌리면 다른 db에 들어 있는 city테이블이 연결이 될수 있습니다. 

    그래서 앞에 어느 db에 있는 테이블이다를 명시해줘야 오류가 나지 않습니다. 

    조회 결과를 한번 보겠습니다. 

    address테이블에 있는 데이터와 city테이블에 있는 데이터가 

    city_id를 키값으로 연결이 되었습니다. 

    연결이 될때는 address테이블에 city테이블이 옆으로 붙은 형태가 됩니다. 

    다른 키값으로 계속 붙이면 옆에 테이블이 계속 붙는 형태 입니다. 


    여기에 바로 연속적으로 country테이블을 붙이도록 하겠습니다. 

    이번에는 다른 탭에서 country테이블에 어떤 데이터가 있는지 조회를 해보세요. 

    조회해보니 country_id, countrry, last_update컬럼이 있네요. 

    그럼 위에 연결한 컬럼들과 공통으로 들어가 있는 컬럼이 어떤것이 있는지 확인을 합니다. 

    여기에서는 city테이블에 있는 country_idcountry테이블에 있는 country_id가 공통으로 들어가 있어서

    Key값으로 쓰면 되겠네요. 

    하나더 테이블을 연결을 하였습니다. 

    처음 두개의 테이블을 연결한 이후에는 

    join 

    테이블명

    on 테이블.키값 = 테이블.키값 

    이렇게 연결을 하시면 됩니다. 4개던 5개던 계속 이 방식으로 

    연결 하시면 됩니다. 

    그럼 테이블이 연결된 결과를 볼까요?

    자. 이렇게 결과가 나왔습니다. 

    이렇게 결과가 나오면 내가 보고 싶은 컬럼만 select 와 from사이에 넣어 주면 됩니다. 

    자.. 여기 까지가 inner join 을 이용한 테이블 연결 방법에 대한 설명 이였습니다. 

    다음 시간에는 left outer join에 대해서 설명 해드리겠습니다. 


    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기