OracleSQL 핵심정리7 - 조인과 서브쿼리
JOIN
Cross Join
- 특별한 키워드 없이 테이블을 콤마로 연결해서 연속으로 기술하는 것(where절 X)
- ex)
SELECT*FROM 테이블명1,테이블명2
;
- ex)
Equi Join
- 가장 많이 사용하며 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 방법
- 컬럼 이름이 동일한 경우에는 테이블명을 반드시 기술해야하지만 그렇지 않다면 굳이 테이블명을 명시하지 않아도 됨
- 테이블명에 별칭을 부여하여 간단한 문장으로 사용가능 (ex. from emp
e
, deptd
wheree
.name=’홍길동’)
Self Join
- 자기가 자기자신 테이블과 조인하는 것
- 같은 테이블에 다른 별칭을 사용하여 두 개의 테이블이 존재하는 것처럼 사용
- 주로 한 테이블 내에 연관된 컬럼을 나타낼 때 사용
ANSI Join
ANSI Cross Join
: 쉼표없이 원하는 조인타입을 명확히 지정- ex)
from emp cross join dept
- ex)
ANSI Inner Join
: 공통 컬럼을 ‘=’ 비교를 통해 결과를 구하는 형태- ex)
from emp e inner join dept d on e.name = d.name
- 조인의 조건은
on
에 기술하고 다른 조건은 where절에 추가 지정
- ex)
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)
- 서브쿼리에 해당하는 조건을 갖춘 행을 메인쿼리에 삽입
- ex)
INSERT INTO 테이블명 SELECT 복제컬럼명 FROM 복제테이블 WHERE 조건;
- ex)
- WHERE 문의 조건에 맞는 메인쿼리 행을 서브쿼리에 해당하는 행으로 변경
- ex)
UPDATE 테이블명 SET 조건컬럼명 = ( 서브쿼리문 ) WHERE 조건;
- ex)
- WHERE 문의 서브쿼리에 해당하는 행과 일치하는 메인쿼리 행을 삭제
- ex)
DELETE FROM 테이블명 WHERE 조건컬럼명 = ( 서브쿼리문 );
- ex)
This post is licensed under CC BY 4.0 by the author.