[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
      • 프로젝트
      • 생각정리
  • 태그

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

티스토리툴바