SQL

View

1space 2025. 7. 17. 10:52

전체 테이블 구성 이해하기

MEMBER 테이블

ID NAME
NEWLEC 뉴렉
YJS 유재석
JUNG 정형돈
KANG 강호동
 

NOTICE 테이블 (게시글)

ID TITLE WRITER_ID
1 ORACLE 개요 NEWLEC
2 SQL 구문 NEWLEC
3 DML 사용하기 NEWLEC
4 DML 사용하기 DRAGON
5 DML 사용하기 DRAGON
 

③ COMMENT 테이블 (댓글)

ID COMMENT NOTICE_ID
1 많은 도움~ 1
2 정리를 잘하네요~ 1
3 감사합니다. 3
 

 

JOIN 순서 및 해석

SELECT N.ID, N.TITLE, N.WRITER_ID, M.NAME,
       COUNT(C.ID) CNT
FROM MEMBER M
RIGHT OUTER JOIN NOTICE N ON M.ID = N.WRITER_ID
LEFT OUTER JOIN COMMENT C ON N.ID = C.NOTICE_ID
GROUP BY N.ID, N.TITLE, N.WRITER_ID, M.NAME;

 

  1. MEMBER M RIGHT OUTER JOIN NOTICE N ON M.ID = N.WRITER_ID
    • MEMBER 테이블 기준이 아닌 NOTICE 기준으로 남김없이 JOIN (즉, NOTICE에 있는 5개 모두 남음)
    • MEMBER에 없는 DRAGON은 M.NAME이 NULL로 나옴
  2. LEFT OUTER JOIN COMMENT C ON N.ID = C.NOTICE_ID
    • 위에서 만들어진 NOTICE 기반 테이블에 COMMENT를 붙임
    • COMMENT가 없는 게시글은 C.ID가 NULL이 됨

 

 

VIEW 생성 쿼리 설명

CREATE VIEW NOTICEVIEW AS
SELECT N.ID, N.TITLE, N.WRITER_ID, M.NAME WRITER_NAME,
       COUNT(C.ID) CNT
FROM MEMBER M
RIGHT OUTER JOIN NOTICE N ON M.ID = N.WRITER_ID
LEFT OUTER JOIN COMMENT C ON N.ID = C.NOTICE_ID
GROUP BY N.ID, N.TITLE, N.WRITER_ID, M.NAME;
  • 이 VIEW는 위 SELECT 결과를 논리적으로 저장해놓은 가상 테이블입니다.
  • 추후 사용자는 SELECT * FROM NOTICEVIEW WHERE ... 으로 손쉽게 필터링해서 사용할 수 있습니다.

'SQL' 카테고리의 다른 글

도메인 제약 조건  (0) 2025.07.17
데이터 딕셔너리  (0) 2025.07.17
UNION  (0) 2025.07.17
ORCAL JOIN  (0) 2025.07.17
SELF JOIN  (0) 2025.07.17