BookmarkSubscribeRSS Feed

[SQL 4-2] Inner Joins (테이블 Inner 조인)

Started ‎06-17-2020 by
Modified ‎06-17-2020 by
Views 217

[SQL 4-2] Inner Joins

 

 

안녕하세요^^

​오늘은 columns를 matching하여 두 개 또는 그 이상의 테이블을 join하는 방법에 대해 알아보도록 하겠습니다.

​Inner join은 두 개 또는 그 이상의 테이블을 join하여 필요한 정보만을 report하고 싶을 때 사용할 수 있습니다.

 

​예를들어, customers 테이블과 transactions 테이블을 join하여 두 테이블이 공통으로 갖는 결과만을 얻고자 할 때 사용할 수 있습니다.

 

​이러한 조건에 대한 문장은, where절을 사용합니다.

 

SE22016122113340270.jpg

 

SE22016122113342470.jpg

 

 

 

 

 

우선 사용할 데이터 customers와 transactions는 다음과 같이 만듭니다.

 

SE22016122113353870.jpg

 

SE22016122113354770.jpg

 

그 결과 생성된 데이터는 아래와 같습니다.

 

 

SE22016122113365770.jpg

 

SE22016122113370570.jpg

 

이제 위에서 보았듯이, 두 테이블이 공통으로 갖고 있는 행을 id를 기준으로 찾아보도록 하겠습니다.

 

 

SE22016122113375470.jpg

 

SE22016122113380270.jpg

 

select문에 작성한 *은 두 테이블에 있는 모든 columns를 선택할 때 사용합니다.

​따라서, 결과에서 볼 수 있듯이, 두 개의 id를 갖게 됩니다.

​또한, 하나 이상의 테이블에서 같은 이름을 갖는 colums가 존재한다면, 어떤 테이블의 column 이름인지 table-name.column-name 으로 작성하여 정확히 명시해야합니다.

 

 

 

 

 

만약, 어떤 테이블의 column 이름인지 정확히 명시하지 않는다면,

 

SE22016122113401870.jpg

 

SE22016122113402670.jpg

위와 같은 error 메시지를 보게 됩니다.

 

​또한, 앞서 보았던 예제에서 같은 id가 두 번 작성된 것을 한 번만 작성되도록 수정하기 위해서는, column이 어느 테이블의 값인지 명시해야 합니다.

SE22016122113405770.jpg

 

SE22016122113410370.jpg

 

위와 같이 테이블 이름을 변수명 앞에 지정할 때, 테이블 이름이 상당히 길다면, 코드작성이 복잡해지고 번거로울 수 있습니다.

이를 해결하기 위한 방안으로 table alias를 사용할 수 있습니다. 하지만, table alias는 테이블 이름보다는 상대적으로 일시적인 값입니다.

​​

​쿼리는 다음과 같이 작성할 수 있는데, as를 사용하여 table alias를 말하는 것이 일반적입니다.

​이때 사용되는 as는 선택사항으로, 작성하지 않아도 작성한 것과 같은 효과를 얻을 수 있습니다.

SE22016122113415070.jpg

 

 

위와 같은 예제를 통해 살펴보면,

 

SE22016122113423370.jpg

 

SE22016122113424270.jpg

 

SE22016122113422470.jpg

 

Table alias를 사용하면, 쿼리가 간단해지고, 가독성이 좋아짐을 확인할 수 있습니다.

 

두 번쨰 코드인 data step의 merge를 통해서도 같은 결과를 얻을 수 있습니다.

​하지만, data step의 merge문과 proc sql inner join이 항상 같은 결과를 내는 것은 아닙니다.

 

 

 

 

우선예제에 사용할 데이터를 만들어보도록 하겠습니다.

 

SE22016122113440770.jpg

 

SE22016122113441570.jpg

 

SE22016122113443070.jpg

 

SE22016122113443570.jpg

 

 

===============================================================

 

 

SE22016122113445070.jpg

 

SE22016122113445870.jpg

 

위의 proc sql의 inner join의 경우, 같은 id를 갖는 rows에 대한 모든 조합을 보여줍니다.

 

 

 

SE22016122113451670.jpg

 

SE22016122113452270.jpg

 

하지만, data step의 merge를 통해서는 위와 같이 proc sql문장과는 다른 결과를 얻습니다.

 

 

 

 

 

지금까지 예제를 통해 작성해본 쿼리 이외에도 아래와 같이 inner join 쿼리를 작성할 수 있습니다.

 

SE22016122113454770.jpg

 

 

SE22016122113460570.jpg

 

SE22016122113461970.jpg

 

 

 

 

이상으로 proc sql문장의 inner join에 대해 알아보았습니다.

 

​다음시간에는 proc sql문장의 outer join에 대해 알아보도록 하겠습니다.

 

Version history
Last update:
‎06-17-2020 12:06 AM
Updated by:
Contributors

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Article Labels
Article Tags