DBMS 세번째

Park In Kwon·2022년 11월 18일
0

1. JOIN(조인)

1-1. join이란

  • 두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법으로
  • 두 개의 테이블을 마치 하나의 테이블인 것처럼 보여주는 것이다.

1-2. join의 기본 사용 방법

  • 두 개의 테이블에 하나라도 같은 컬럼이 있어야 한다.
  • 두 컬럼의 값은 공유 되어야 한다.
  • 보통 조인을 위해서 기본키(Primary Key)와 외래키(Foreign Key)를 활용한다.

1-3. inner join

  • 각 테이블에서 조인 조건에 일치되는 데이터만 가져온다.
  • inner join은 '교집합'이라고 말한다.
  • inner join
SELECT	e.EMPLOYEE_ID 
	,	e.FIRST_NAME 
	,	e.DEPARTMENT_ID 
	,	d.DEPARTMENT_ID 
	,	d.DEPARTMENT_NAME 
FROM 	EMPLOYEES e INNER JOIN DEPARTMENTS d 
	ON 	e.DEPARTMENT_ID  = d.DEPARTMENT_ID 
--WHERE 	e.EMPLOYEE_ID  = 178
--WHERE 	d.DEPARTMENT_ID  = 270
ORDER BY e.EMPLOYEE_ID 
;

1-4. outer join

  • 조인 조건에 일치하는 데이터 및 일치하지 않는 데이터를 모두 select 한다.

  • 조인 조건에 일치하는 데이터가 없다면 NULL로 가지고 온다.

  • Outer Join은 inner join과는 다르게 주(main) 테이블이 어떤 테이블인지가 중요하다,
    그래서 어떤 테이블이 중심이 되느냐에 따라 다시 left outer join, right outer join, full outer join 으로 세분 할 수 있다.

    • left outer join : 왼쪽 테이블이 중심
    • right outer join : 오른쪽 테이블이 중심
    • full outer join : 양쪽 테이블 모두가 중심

2. left outer join

selcet *
from tableA
left outer join tableB

-> 왼쪽 테이블 tableA가 기준이 된다.
-> 조인 조건에 부합하는 데이터가 조인 당하는 테이블(오른쪽)에 있으면 해당 데이터를 가지고 오고,
부재하면 NULL로 select 하게 된다.

  • left outer join
SELECT	e.EMPLOYEE_ID 
	,	jh.EMPLOYEE_ID 
	,	e.FIRST_NAME 
	,	e.HIRE_DATE 
	,	jh.EMPLOYEE_ID 
	,	jh.START_DATE 
	, 	jh.END_DATE 
	,	jh.JOB_ID 
FROM 	EMPLOYEES e 
	LEFT OUTER JOIN JOB_HISTORY jh 	ON e.EMPLOYEE_ID = jh.EMPLOYEE_ID 
ORDER BY e.EMPLOYEE_ID 
;         

3. right outer join

  selcet *
  from   tableA
             right outer join tableB

  -> 오른쪽 테이블 tableA가 기준이 된다.
  -> 조인 조건에 부합하는 데이터가 조인 당하는 테이블(왼쪽)에 있으면 해당 데이터를 가지고 오고,
     부재하면 NULL로 select 하게 된다.

4. full outer join

selcet *
from tableA full outer join tableB

-> 양쪽 테이블 모두가 기준이 된다.
-> 조인 조건에 부합하는 데이터가 조인 당하는 테이블에 있으면 해당 데이터를, 부재하면
NULL 로 select 하게 된다.

5. ANSI join vs ORACLE join (작업은 거의 대부분 ANSI join방식으로 처리한다)

  • SQL 은 데이터베이스를 관리하기 위해 만들어진 프로그래밍 언어이며, 데이터베이스를 관리해주는
    대부분의 DBMS 들은 SQL을 사용한다. 물론, DBMS 자체의 특수성 때문에 SQL의 사용법이 조금씩
    다르기도 하지만, 큰 틀에선 나름대로의 보편성을 가지고 있다.
  • 이를 위해 미국 국립 표준 협회 (ANSI) 에서도 SQL에 대한 보편적인 문법을 제시하고 있는데,
    그것이 바로 ANSI Query이다.
  • ansi inner join
  • 사원이 first_name, last_name, email, department_id,
  • department_name, job_id, job_title, city
  • 단, city = 'Seattle'
SELECT	e.FIRST_NAME 
	,	e.LAST_NAME 
	,	e.EMAIL 
	,	d.DEPARTMENT_ID 
	,	d.DEPARTMENT_NAME 
	,	e.JOB_ID 
	,	j.JOB_TITLE 
	, 	l.CITY 
FROM 	EMPLOYEES e 
	INNER JOIN DEPARTMENTS d 	ON e.DEPARTMENT_ID = d.DEPARTMENT_ID 
	INNER JOIN JOBS j 			ON e.JOB_ID = j.JOB_ID 
	INNER JOIN LOCATIONS l 		ON d.LOCATION_ID = l.LOCATION_ID 
WHERE 	l.CITY = 'Seattle'
;

6. 서브쿼리(subQuery)란?

  • MainQuery에 반대되는 개념으로 이름을 붙인 것
  • 메인쿼리를 구성하는 소단위 쿼리
  • selcet, insert, delete, update 절에서 모두 사용 가능
  • 서브쿼리의 결과 집합을 메인 쿼리가 중간 결과값으로 사용
  • 서브쿼리 자체는 일반 쿼리와는 다를 바가 없다.
profile
개발자로 진로 변경을 위해 준비하고 있습니다

0개의 댓글