Post

OracleSQL 핵심정리7 - 조인과 서브쿼리

JOIN

Cross Join

  • 특별한 키워드 없이 테이블을 콤마로 연결해서 연속으로 기술하는 것(where절 X)
    • ex) SELECT*FROM 테이블명1,테이블명2;

Equi Join

  • 가장 많이 사용하며 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 방법
  • 컬럼 이름이 동일한 경우에는 테이블명을 반드시 기술해야하지만 그렇지 않다면 굳이 테이블명을 명시하지 않아도 됨
  • 테이블명에 별칭을 부여하여 간단한 문장으로 사용가능 (ex. from emp e, dept d where e.name=’홍길동’)

Self Join

  • 자기가 자기자신 테이블과 조인하는 것
  • 같은 테이블에 다른 별칭을 사용하여 두 개의 테이블이 존재하는 것처럼 사용
  • 주로 한 테이블 내에 연관된 컬럼을 나타낼 때 사용

ANSI Join

  • ANSI Cross Join : 쉼표없이 원하는 조인타입을 명확히 지정
    • ex) from emp cross join dept
  • ANSI Inner Join : 공통 컬럼을 ‘=’ 비교를 통해 결과를 구하는 형태
    • ex) from emp e inner join dept d on e.name = d.name
    • 조인의 조건on에 기술하고 다른 조건은 where절에 추가 지정
  • ANSI Outer Join : 한쪽 테이블에 데이터가 존재하고 다른쪽 테이블에는 데이터가 존재하지 않을 경우 출력되지 않는 문제점을 해결하기 위해 사용
    • Outer 조인은 left, right, full 의 3가지 옵션을 제공
    • left-왼쪽에 명시된 테이블 행을 모두 표시, 오른쪽에 명시된 테이블은 값이 없을시 null로 표시
    • right : left와 반대
    • full : left + right 형태

SubQuery

서브쿼리의 기본 개념

  • 메인쿼리의 SELECT 문장에서 그 문장 안에 포함된 또 하나의 SELECT 문장
  • 서브쿼리 안에 서브쿼리가 들어갈 수 있으며 이것을 네스팅이라고 함
  • 일반적인 경우 서브쿼리에서는 하나의 레코드값만을 리턴하므로 GROUP BY, HAVING문을 사용할 수 없음
  • ORDER BY 문은 TOP 연산자와 함께 있을 때만 사용 가능

다중 행 서브쿼리

  • 반드시 다중 행 연산자와 함께 사용
    • 다중 행 연산자 : IN, ANY, SOME, ALL, EXISTS

서브쿼리를 이용하여 테이블을 생성하고 데이터를 조작하기

  • 서브쿼리에 해당하는 조건을 갖춘 테이블 생성
    • ex) CREATE TABLE 테이블명 AS SELECT 복제컬럼명 FROM 복제테이블명 WHERE 조건;
    • 빈 테이블 생성 : WHERE 조건에 1=0을 주어 테이블 구조만 동일하게 생성
  • 서브쿼리에 해당하는 조건을 갖춘 행을 메인쿼리에 삽입
    • ex) INSERT INTO 테이블명 SELECT 복제컬럼명 FROM 복제테이블 WHERE 조건;
  • WHERE 문의 조건에 맞는 메인쿼리 행을 서브쿼리에 해당하는 행으로 변경
    • ex) UPDATE 테이블명 SET 조건컬럼명 = ( 서브쿼리문 ) WHERE 조건;
  • WHERE 문의 서브쿼리에 해당하는 행과 일치하는 메인쿼리 행을 삭제
    • ex) DELETE FROM 테이블명 WHERE 조건컬럼명 = ( 서브쿼리문 );
This post is licensed under CC BY 4.0 by the author.