[SQL] JOIN, 서브쿼리

JOIN?

  • 둘 이상의 테이블에서 데이터가 필요한 경우 테이블 조인이 필요.
  • 일반적으로 조인조건을 포함하는 WHERE 절을 작성해야함
  • 조인 조건은 일반적으로 각 테이블의 PK 및 FK로 구성됨.

JOIN 종류

  • INNER join
  • OUTER join
    1. left outer join
    2. right outer join

JOIN 조건의 명시에 따른 구분

  • NATURAL join
  • Cross Join(FULL join, cartesian join)

JOIN 시 주의

  • 조인의 처리는 어느 테이블을 먼저 읽을 지를 결정한느 것이 중요(처리할 작업량이 상당히 달라진다.)
  • INNER JOIN : 어느 테이블을 먼저 읽어도 결과가 달라지지 않아 Mysql 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있다.
  • OUTER JOIN : 반드시 OUTER 가 되는 테이블을 먼저 읽어야하므로 옵티마이저가 조인순서를 선택할 수 없다.

20210406_103955

20210406_104100


JOIN의 종류

20210406_104153

inner join은 기본 디폴트 조인

20210406_104211

20210406_104229

20210406_104248

20210406_104353

20210406_104403

20210406_104419 20210406_104411 20210406_104427 20210406_104437 20210406_104444


서브쿼리

  • 서브쿼리는 다른쿼리 내부에 포함되어있는 select문을 의미한다.
  • 서브쿼리를 포함하고 있는 쿼리를 외부쿼리 또는 메인쿼리라 부르며 서브쿼리는 내부쿼리라고도 부른다.
  • 서브쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호로 감싸져있어야만 한다.

서브쿼리의 종류

  • 중첩 서브쿼리 where 문 안에 작성하는 서브쿼리
    1. 단일행
    2. 복수(다중)행
    3. 다중컬럼
  • 인라인 뷰: from 문 안에 작성하는 서브쿼리
  • 스칼라 서브쿼리 : select 문안에 작성하는 서브쿼리.

20210406_145148

물음표에 해당하는 치환변수는 값에다만 쓸 수 있지 연산자 하는 컬럼에는 못 씀.

20210406_145037

20210406_145148

20210406_145318 join의 경우 쿼리가 복잡해지거나 카테시안으로 인한 속도 저하가 올 수 있다.

https://jojoldu.tistory.com/520 이 페이지 참고

조인이 무조건 빠른건 아님.

20210406_145325

20210406_145332

20210406_145341

20210406_145352

20210406_145402

20210406_145414

20210406_145428

20210406_145439

20210406_145450


서브쿼리 종류

인라인 뷰(Inline View)

  • From 절에 사용되는 서브쿼리를 인라인뷰라 한다.
  • 서브쿼리가 From 절에 사용되면 뷰처럼 결과가 동적으로 생성된 테이블로 사용 가능
  • 임시적인 뷰이기 때문에 데이터베이스에는 저장되지 않는다.
  • 동적으로 생성된 테이블이기 때문에 컬럼을 자유롭게 참조 가능.

20210406_150207

20210406_154045

20210406_154054

20210406_154103

20210406_154111

20210406_154119

20210406_154152

20210406_154200

20210406_154209

20210406_154218





© 2021.03. by yacho

Powered by github