국비수업/수업정리

오라클 SQL / 8

밀김 2023. 5. 1. 11:16
728x90

 

 

 

 

 

 

 

 

 

 

< INNER,OUTER JOIN 정리 >

https://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

 

[SQL] INNER 조인과 OUTER조인이 무엇인가요?

[광고] HWP 를 웹페이지에서 바로 열고, 편집하고, 저장하고 싶다면? 온라인으로-한글-HWP-파일-편집하기-폴라리스-오피스 폴라리스오피스 웹 한글 - 브라우저에서 무료로 사용하는 한글 한글 뷰어

stanleykou.tistory.com

 

 

 

 

- VIEW 만들기

CREATE VIEW MEMBER_VIEW //회원 뷰 만들기
AS
SELECT 
    M.ID, 
    M.NAME, 
    COUNT(N.ID) COUNT 
FROM MEMBER M LEFT JOIN NOTICE N ON M.ID = N.MEMBER_ID
GROUP BY M.ID, M.NAME, M.EMAIL;

//이렇게 만든 뷰는 SELECT * FROM MEMBER_VIEW; 로 조회할수가 있다

 

 

 

- 뷰는 '볼수만 있게'함 (수정 안됨)

 

- 주인공은 무조건 모든컬럼 모든 로우가 다 나와야함(아우터 다 포함되어야함)

 

- INNER JOIN이면 자식이 무조건 주인공이다. 자식에게 없는건 포함 안됨!!

 

 

 

 

 

- 항상 조인에서 주인공은 하나다!

 

 

 


 

 

< SELF JOIN >

 

 

 

사원이 참조하는것은 그의 부모(즉,상사)로 가기 때문에

 

 

-  SELF JOIN : 테이블이 하나밖에 없는데 그 하나가 하나를 또 합치는것. 어느 경우에 그러냐? ▶ 사원 목록을 뽑으면서 그들의 사장 이름도 뽑고싶을때 (댓글 안에 댓글, 카테고리 안에 카테고리 / 분류의 포함관계가 정해져있지 않을때 자기 참조 형태로 간다)

 

 

 - 내가 원하는 컬럼만 추출하는것 : 매핑

 

 

 

 

 

//내 아이디에 보스 아이디값 넣기
//기존 있는거에 넣는거라 INSERT가 아닌,UPDATE를 써야한다
UPDATE MEMBER
SET BOSS_ID = 235
WHERE ID = 236;
COMMIT;
// 사원들이 참조하고 있는 보스 아이디들 보기 
//(사원들 ID에 보스 ID값을 넣고 뽑아보면 각 사원들의 보스가 누군지, ID를 알수있다)
SELECT M.ID, M.NAME, B.NAME FROM MEMBER M JOIN MEMBER B ON M.BOSS_ID = B.ID;
//특정값의 컬럼 삭제하기 !!복습!!
DELETE FROM MEMBER
WHERE AGE IS NULL;
COMMIT;

 

 

 

- CROSS JOIN(잘안씀) : 이상한 조인?ㅋㅋㅋ  오른쪽 테이블이 열개고 왼쪽이 열두개면 120개가 나오는..곱하기 조인

 

 

 


 

 

 

 

 

< ORACLE JOIN > 

 

 

 

- 이제껏 배운건 ANSI JOIN 이었다~~~~~~~~~이게 많이 쓰니 이걸로 외우길! 오라클 조인은 걍 필요할때만 써라!

 

 

 

선생님왈 :&nbsp; 오라클 조인은 망한 조인이다 ㅋ 개별로다

 

 

 

 

- 오라클은 FULL OUTER JOIN을 지원하지 않는다

 

 

 


 

 

 

 

 

< UNION >

 

 

- 컬럼이 늘지 않는데 결합하는것을 레코드 결합 이라고 하는데 ▶ 이걸 할때 유니온으로 한다

(댓글이면 댓글, 아이디면 아이디.. 여러 테이블 돌아다니면서 검사하기 힘드니까 한번에 같은 속성인 애들을 싹 검사하고 싶을때)

 

 

유니온 예시

 

 

- 유니온은 컬럼의 갯수만 같으면 가능하다

 

- 한테이블에있는 모든글들중에 공지사항만 상단에 고정해놓고 나머지 게시글은 정상출력할때 유니온 같은걸 쓴다

 

 

 

 

SELECT * FROM(
    SELECT ID,NAME,'MEMBER' "TABLE" FROM MEMBER
    UNION
    SELECT ID,TITLE,'NOTICE' "TABLE" FROM NOTICE)
    A
    WHERE A.NAME LIKE '%을%';
    //홑따욤표를 쓰는 이유는 어떤 테이블의 어떤 컬럼인지 구분하기 위해 '상수'를 붙여주는 개념이라고 보면됨

 

 

 

 

 

마이너스: 동일한거는 빼고 그외 /&nbsp; 인턴셉트 : 동일한것만 냄기기 (교집합)

 

- 인터셉트는 유니온(위아래결합)을 했을때 교집합되는것들을 남김

 

 

 

 

- 뷰는 '목록페이지' 에서만 사용한다 (상세페이지에선 사용 X 상세페이지는 하나만 보여주는것이기 때문에)

 

 

 

 

 

 

 

 

 

 

 

728x90