outer join, self join, natural join,union, exists
outer join
특정 테이블 전체에 대한 집계를 하고자 할때 사용
outer join 종류
left outer join: 테이블 순서중 왼쪽에 위치한 테이블 전체
right outer join: 테이블 순서중 오른쪽에 위치한 테이블 전체
full outer join: 왼쪽 오른쪽 전체(오라클 db에서만 사용가능)
outer join 개념
inner join 을 만족해야 함 (inner join 개념을 그대로 적용)
left or right 기준으로 같으면 같은 조건 대로 조회, 다르면 null 조회
outer join은 표준 방식으로만 사용해야하며 일반조건은 무조건 on() 내부에 작성해야함
where 절 사용하시면 outer 전체 개념이 적용안됩니다
/* slef join 으로 처리하기
--셀프 조인시 : 조건은 한쪽 M@ 테이블에 적용
--조회시: M1 테이블에서 조회
*/
SELECT M1.mem_id, M1.mem_name
FROM member m1, member m2
WHERE m2.mem_id = 'b001'
AND m1.mem_mileage > M2.mem_mileage;
-- 자연스러운 조인
-- 칼럼명이 같은 경우
SELECT *
FROM member A, member B
WHERE A.mem_id = B.mem_id;
-- 값에 의한 연결 조인이라고 칭하지는 않음
SELECT *
FROM cart , lprod
WHERE SUBSTR(cart_prod,1,4) = lprod_gu;
left outer join : null 영역도 다 출력함
union
조회결과와 조회결과를 행단위로 합치는기능
조회결과들 간의 컬럼의 갯수는 동일해야함
조회결과들 간의 데이터 타입은 동일해야함
유니온을 사용하여 처리하는 경우는 그렇게 흔치는 않다.
-- union 사용하게 되면 정렬은 제일 마지막에 정의해야함
-- 컬럼명은 첫번째 select 문의 컬럼이름을 따름
-- UNION 중 복제거
-- union all 중복포함 (실제 전체) 제일 많이 씀
-- minus 차집합
-- intersect 교집합
SELECT 'member',mem_id, mem_name
FROM member
UNION all
SELECT 'cart',cart_member, cart_prod
FROM cart;
-- EXISTS()
-- 조회결과가 1건이라도 잇으면 TRUE
-- 0 건이면 FALSE
SELECT MEM_ID,MEM_NAME
FROM member
WHERE EXISTS(SELECT *
FROM cart
WHERE CART_MEMBER= MEM_ID);
-- 구매 내역이 없는 회원만 조회해주세요
-- JOIN을 사용하여 차집합? 하면 복잡해지니 EXISTS를 쓰자.
SELECT MEM_ID,MEM_NAME
FROM member
WHERE NOT EXISTS(SELECT *
FROM cart
WHERE CART_MEMBER= MEM_ID)
-- 수정 및 삭제시 기준 컬럼은 pk값을 기준으로 행을 조건처리 해야합니다.