inner join,Left Join,union,SubQuery

윤주영·2024년 10월 11일

join => 테이블 두개를 서로 연결해서 더 많은 열 정보를 갖는 하나의 테이블로 만들때 쓰인다.

select 테이블1.열이름, 테이블2.열이름
from 테이블1
inner join 테이블2
on 테이블1.열이름 = 테이블2.열이름

예문)
select 고객표.고객이름, 주문내역.세일
from 고객표
inner join 주문내역
on 고객표.고객번호 = 주문내역.고객번호

  1. inner join은 테이블1과 테이블2 공통으로 있는 행만 출력한다.

  2. 테이블이 여러개 나오므로 AS를 이용해서 별칭을 사용하자.

    select 표1.고객이름, 표2.세일
    from 고객표 AS 표1
    inner join 주문내역 AS 표2
    on 표1.고객번호 = 표2.고객번호

  3. select 뒤에 열이름을 사용할 때 같은 열이름이 두개 이상의
    테이블에 있을 때는 테이블의 출처를 표시해야한다.
    (같은 열이름이 없을 경우에는 테이블의 출처를 생략해도 무관)

  4. inner를 생략하고 join 이라고만 써도 된다.

Left Join은 테이블1에 있는 모든 행을 출력한다.


1. 왼쪽 테이블에 있는 데이터만 출력한다.( Left join전에 쓰는 테이블, 즉 from 뒤에 쓰는 테이블)
2. 왼쪽 테이블에 있는 데이터라면 "중복"된 데이터가 있는 행도 다 그대로 출력한다.
3. Left join 혹은 Left outer join은 같은 말이다.

굳이 잘 안씀
Right Join => 오른쪽 테이블 있는 모든 행을 출력한다.
Full Join => 양쪽 테이블 있는 모든 행을 출력한다 (데이터많이잡힘)

union

  1. union 앞에 써있는 쿼리 결과와 union 뒤에 써있는 쿼리를 합쳐준다. (concat)
  2. 이어주는 테이블의 열의 갯수가 같고, 열의 순서도 같아야한다.
  3. 열의 이름은 같을 필요는 없지만 그 열의 데이터 타입은 같아야한다.
    (boolean, date, etc).열의 이름은 union 전에 오는 테이블의 이름을 따른다.
  4. 중복되는 항목이 있을시에는 자동으로 하나만 출력한다.
    중복되는 항목을 모두 출력하고 싶은 경우 union all을 사용한다.

SubQuery

매니저가 가게주문한 사람중에 온라인 주문을 안한사람의 고객번호 리스트를 뽑아오라 할때

예문)
select *
from 가게주문
where 고객번호 not in (select 고객번호 from 온라인주문)

  1. sql 쿼리안에 또 다른 쿼리가 있는것 (괄호로 구별함)
  2. 다음 구분에 SubQuery가 이용된다.
  • where
  • from
  • select
profile
반갑습니다.

0개의 댓글