INNER JOIN (교집합)

문장암기할것

-결과물 총 28개

-멤버 : 25개

-노티스 : 45개

노티스가 멤버의 NICNAME을 참조하고있다.

SELECT * 
FROM 
    MEMBER INNER JOIN NOTICE 
    ON MEMBER.NICNAME = NOTICE.WRITER_ID;

 

OUTER JOIN (합집합)

OUTER도 포함시키는 조인

OUTER(관련없는 것)

부모테이블의 아우터,

자식테이블의 아우터 각각 존재가능

 A의 모든 열 더하기 B에 있는 공통부분

 

LEFT OUTER JOIN 

멤버의 모든열 + 노티스에 있는 공통부분

SELECT * 
FROM 
    MEMBER LEFT OUTER JOIN NOTICE 
    ON MEMBER.NICNAME = NOTICE.WRITER_ID;

6개 만들어진다

RIGHT OUTER JOIN 

NOTICE의 모든열 + 멤버에있는 공통부분

SELECT * 
FROM 
    MEMBER RIGHT OUTER JOIN NOTICE 
    ON MEMBER.NICNAME = NOTICE.WRITER_ID;

노티스의 이너3개+아우터2개 = 5개

FULL OUTER JOIN 

A와 B의 합집합

8개

JOIN은 중요하므로 익숙해져야한다.

필드이름의 충돌문제

두개의 테이블을 합칠경우 컬럼이름이 중복될 수있다.

별칭을 붙여서 사용할수있다.

SELECT N.ID, NAME 
FROM 
    MEMBER M INNER JOIN NOTICE N 
    ON M.NICNAME = N.WRITER_ID;

 

INNER JOIN의 특징 : 

모든회원이 조회되지않고, 글쓴회원만 조회된다.

SELECT M.NICNAME, M.NAME, COUNT(N.ID)
FROM 
    MEMBER M INNER JOIN NOTICE N ON M.NICNAME = N.WRITER_ID
    GROUP BY M.ID, M.NICNAME ,M.NAME;

from에있는걸 먼저 집계한후 진행

 

3개 테이블 조인하기

SELECT N.ID, N.TITLE, N.WRITER_ID, M.NAME WRITER_NAME ,COUNT(C.ID) CMT_COUNT
FROM 
    NOTICE N 
    LEFT JOIN MEMBER M ON N.WRITER_ID = M.NICNAME 
    LEFT JOIN "COMMENT" C ON N.ID = C.NOTICE_ID
    GROUP BY N.ID, N.TITLE,N.WRITER_ID, M.NAME;

자식과합치면 부모가 2,3개씩 늘어난다.(중복발생)

집계해야만 자식을 내 레코드에 껴넣을수있다.

 

페이징시 WHERE절 필요

 

 

stanleykou.tistory.com/entry/SQL-INNER-%EC%A1%B0%EC%9D%B8%EA%B3%BC-OUTER%EC%A1%B0%EC%9D%B8%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94

+ Recent posts