TIL(Web)-2020.12.11(SQL JOIN, UNION AND VIEW)

BYEONGJUN KIM(JUN)·2020년 12월 11일
0

TIL(Web)

목록 보기
9/45
post-thumbnail

오늘은 SELECT 구문에서 JOIN, UNION, VIEW를 학습하였습니다.

Today I Learned

  • JOIN
  • UNION
  • VIEW

JOIN

  • 정규화로 쪼개놓은 테이블들을 이어서(합쳐서) 활용할 수 있도록 하는 방법
  • inner join, outer join, self join, cross join(cartesian product)
  • from 절에 들어가는 연산
    • select * from member inner join notice on member.? = notice.?;
    • 평범한 inner join의 모습이다.(이런경우 주인공은 자식이다)

Inner Join

  • 테이블 간에 관계가 있는 것들만 뽑아내는 것.
  • 연습
    • 회원의 목록과 그 회원이 작성한 게시글의 수를 출력하시오
    • select m.*, n.c from member m inner join (select writer_id, count(id) c from notice group by writer_id) n on m.nicnake=n.writer_id;
    • select m.nicname, m.pwd, count(n.id) from member m join notice n on m.nicname=n.writer_id group by m.nicname, m.pwd;
    • 이 두 쿼리는 동일한 결과를 가져온다. 하지만, 서브쿼리는 최대한 안쓰는게 좋다.

Outer Join

  • 관계가 있던 없던 간에 outer들도 모두 포함시켜서 조인하자
  • left, right, full
  • 왼쪽(오른쪽) 또는 양쪽에 있는 outer를 모두 끼워서 조회하자!
    • select * from member left outer join notice on member.nicname=notice.writer_id;
    • 조인 하되, 게시글을 쓰지 않은 멤버도 포함해서 조인하는 것

JOIN시 유의사항

  • 조인은 무조건 주인공이 있어야 한다.
  • 보통 inner join은 자식이 주인공이다.
  • 하지만 부모가 주인공이 될 수도 있다.
    • 부모가 주인공인 경우, 자식의 내용을 붙이려면 통계만 붙일 수 있다.(그렇지 않으면 자식의 갯수만큼 부모가 늘어나는 현상 발생)
  • 누가 중심인지를 정확히 파악하자.
  • outer 조인의 경우 방향쪽이 주인공이다.(left는 왼쪽 것이 주인공)

3중 JOIN

  • 글을 쓴 회원을 게시글과 함께 댓글까지 출력하시오
    • select * from member m right join notice n on m.nicname=n.writer_id left join "comment" c on n.id=c.notice_id;

VIEW

  • 화면상에 보여지는 데이터와, 실제 데이터베이스의 구조는 다르다.
  • 화면상에 보이는 것처럼 테이블을 합쳐서 마치 실제 존재하는 테이블인 것 처럼 두고 쓸 수 있다.
  • 개념적인 가상테이블이다.
  • join으로 만들어 둔 테이블을 VIEW로 만들어서 쓸 수 있음.
  • VIEW에는 order by와 where절을 넣지 않는다.(만들어진 view를 정렬하거나 조건으로 탐색해야함)
  • CREATE VIEW 뷰이름 AS SELECT ~~~~;

UNION

  • 테이블의 레코드들을 통합하고자 할때 사용.
  • 합칠 테이블의 컬럼 수를 맞춰줘야 한다.
    • select col1, col2 from table1 UNION select col3, col4 from table2;
  • UNION, UNION ALL, MINUS, INTERSECT
    • UNION : 중복 제거(한 테이블 내에서 중복되는것도 제거된다)
    • UNION ALL : 중복 포함하여 통합
    • MINUS : 같은 레코드를 제거하고 남은 것(테이블 간 차집합)
    • INTERSECT : 테이블 간 교집합
profile
Web Backend 개발자

0개의 댓글

관련 채용 정보