[DB] Join

2024. 8. 29. 19:05·Database

[작성일: 2023. 03. 26]

 

Join

  • 테이블 A와 테이블 B를 병합할 수 있음.
  • 여러 테이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 한 줄의 결과로 만들기 위한 방법
  • 조회할 테이블이 나뉘어져 있다면 두 번 이상의 테이블 검색이 필요함. 
-- table join1
create table ticket_price as select movie_name from movie;
alter table ticket_price add column price int(6);
update ticket_price set price = 15000 where movie_name in('멍뭉이', '서치2', '소울메이트');
update ticket_price set price = 1000 where movie_name in('베놈2');
update ticket_price set price = 2000 where movie_name in('인셉션');
select * from ticket_price;

-- 영화의 제목과 개봉일자와 요금을 구하시오.
-- 데이터 건이 많을 경우
select m.movie_name, m.open_date, t.price, case when price > 10000 then '고가' 
when price = 1000 then '저렴' when price between 1001 and 10000 then '꼭 보기'
end as '최종 나의 결정' from movie as m 
join ticket_price as t where m.movie_name = t.movie_name;


-- scalar subquery
-- 데이터 건이 별로 없을 경우
select m.movie_name, m.open_date, (select price from ticket_price 
where movie_name = m.movie_name) as price from movie m;

 

 

 

inner join(내부 조인)

  • 조건에 일치하는 값이 양쪽 테이블에 모두 존재할 때 
  • 테이블명1 inner join 테이블명2 on 조인 조건
-- inner join
SELECT t1.hptl_nm, t2.sido_cd_nm 
FROM hptl_mast AS t1, sido_cd_dt1 AS t2
WHERE t1.sido_cd = t2.sido_cd
AND t1.hptl_nm LIKE '%부부%';

SELECT t1.hptl_nm, t2.sido_cd_nm 
FROM hptl_mast AS t1 
INNER JOIN sido_cd_dt1 AS t2 ON (t1.sido_cd = t2.sido_cd)
WHERE t1.hptl_nm LIKE '%부부%';

 

 

 

natural join(자연 조인)

  • 두 개의 테이블을 조인할 때 컬럼명이 같은 컬럼은 자동으로 inner join 수행
  • 테이블명1 natural join 테이블명2
  • 데이터가 잘못 추출될 가능성이 높으므로 실무에서는 절대 쓰지 말기...! 

 

 

 

outer join(외부 조인)

  • 한 쪽의 데이터가 없더라도 기준이 되는 테이블의 모든 정보가 검색되어야 할 때 사용함.
  • left outer join   왼쪽 테이블 기준으로 조회
  • right outer join   오른쪽 테이블 기준으로 조회
  • full outer join   양쪽 테이블 기준으로 조회

 

고객 테이블
1 삼성동
2 역삼동
3 가산동

 

직원 테이블
1 대리
2 사원

 

고객 중 직원여부 테이블
1 삼성동  
2 역삼동 사원
3 가산동  

 

select 고객.id, 고객.dong,
case when 직원.position is null then "직원 아님"
else 직원.position end as "직급"
from 고객 left outer join 직원 on 고객.id = 직원.id;



-- in only Oracle
-- 정보가 없을 수도 있는 쪽에 (+)를 붙임.
select 고객.id, 고객.dong,
case when 직원.position is null then "직원 아님"
else 직원.position end as "직급"
from 고객, 직원
where 고객.id = 직원.id(+);

-- full outer join일 경우, 양 쪽에 붙임.
고객.id(+) = 직원.id(+)

 

 

 

 

 

 

 

 

 

 


🐣 해당 게시글은 입문 개발자가 요약/정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지 (새창열림)
'Database' 카테고리의 다른 글
  • [DB] Database
  • [DB] 반정규화
  • [DB] 데이터베이스 정규화
  • [DB] function
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    자바
    알고리즘
    JPA
    스프링
    다형성
    자바스크립트
    생성자
    javascript
    sql
    HTTP
    최주호
    게시판만들기
    Java
    백준
    김영한
    spring
    Swift
    데이터베이스
    MVC
    프로그래머스
    Database
    html
    Security
    DB
    의존성주입
    객체
    성능최적화
    변수
    jsp
    Spring Security
  • hELLO· Designed By정상우.v4.10.0
뚜비
[DB] Join
상단으로

티스토리툴바