본문 바로가기

MSSQL

distinct_중복제거하여 출력하기 & join_테이블 연결하기


select dName from consulttel order by dName
↑ 다음과 같은 쿼리를 실행하면 consulttel의 모든 dName 결과가 출력된다.
consulttel 테이블의 dName을 검색하고는 싶지만, 중복되는 데이터는 한번만 검색하고 싶다.
 
distinct는 중복되는 데이터 없이 검색하고 싶을 때 사용된다.
distinct_before                                                  
select dName from consulttel order by dName                    




















distinct_after   
select distinct dName from consulttel order by dName


자~ 이번에는 join !  
consulttel 테이블과 MEMBERMANAGER 테이블을 연결해서 두 테이블의 연결한 결과를 출력하자.
(※ consulttel 테이블 에는 dName에 작성자 번호가 있고, MEMBERMANAGER 테이블에는 작성자 이름이 있다.)



select distinct 검색을 원하는 컬럼명
from 테이블명 inner join 테이블명
on 조건 order by 정렬기준

조인을 하지 않고 검색 할 때는 select뒤에 컬럼명만 적어주면 충분했다.
하지만, join을 하게 되면 검색에 사용되는 테이블이 두 개 이상이 되기때문에
반드시 컬럼명 앞에 점(.)을 찍고 어느 테이블에서 검색 할 지 명시해줘야 한다.
(나는 consulttel 테이블의 dName과 MEMBERMANAGER 테이블의 dName을 검색한다.)

무엇을 select 할 지  정했다면 다음은 어느 테이블에서 select 할 지를 정해야한다.
이때! join(inner join)이 쓰인다!
(outer join, cross join등등 join에도 여러가지 종류가 있다. 내가 사용한 inner join은 같은 교집합만을 연결한다)


마지막으로 조건을 지정해 줘야한다.
조건 역시 select와 마찬가지로 컬럼명 앞에 점(.)을 찍고 테이블명을 써주면 된다.(테이블명.컬럼명)
이때! 자칫 잘못 생각하면  consulttel.dName과 MEMBERMANAGER.dName을 검색한다고
조건에도 같은 코드를 작성하게 되면 결과는 나오지 않는다.
조건에는 같은 컬럼명을 비교하는 것이 아니라, 해당 컬럼의 내용을 비교하는 것이라는 걸 잊지말자!
[X]consulttel.dName (숫자) = MEMBERMANAGER.dName(문자)
↑ 숫자와 문자가 같을 수 없다.
[O]consulttel.dName (숫자) = MEMBERMANAGER.idx(숫자)
↑ 같은 숫자끼리 연결 해 준다.

이렇게 join하면, 다음과 같이 두개의 테이블을 연결한 결과를 얻을 수 있다.
join_after   

※ 참고로, 점(.) 앞에 테이블명이 너무 길다고 느낀다면 임의로 별칭을 지어 줄 수 있다.