둘 이상의 테이블에서 테이블을 조회하기 위해서 사용
일반적으로 조인 조건은 PK(Primary Key), FK(Foregin Key)로 구성된다.
PK 및 FK 관계가 없더라도 논리적인 연관만으로도 JOIN 가능
JOIN의 종류
INNER JOIN : 조인 조건에 해당하는 칼럼 값이 양쪽 테이블에 모두 존재하는 경우에만 조회
OUTER JOIN : 조인 조건에 해당하는 칼럼 값이 한 쪽 테이블에만 존재하더라도 조회 기준 테이블에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN으로 구분
SELECT empno, ename, job, emp.deptno, dept,deptno, dname
FROM emp, dept;
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
SELECT e.ename, e.job, e.depno, d.dname
FROM emp e
INNER JOIN dept d
ON e.depno = d.deptno
WHERE e.empno = 7788;
using 알아보기
INNER JOIN을 쓰지 않고 WHERE 절 만으로도 INNER JOIN 가능
SELECT column_name(s)
FROM table1, table2
WHERE table1.column_name = table2.column_name;
두 테이블에서 하나의 테이블에 조인 조건 데이터가 존재하지 않더라도 데이터를 조회하기 위해 사용
기준 테이블에 따라 LEFT OUTER JOIN (LEFT JOIN), RIGHT OUTER JOIN(RIGHT JOIN)으로 구분
서브 쿼리란 하나의 SQL 문안에 포함되어 있는 SQL문을 의미한다.
서브 쿼리를 포함하는 SQL을 외부 쿼리(outer query) 또는 메인 쿼리라고 부르며, 서브 쿼리는 내부 쿼리 (inner query) 라고도 부른다.
중첩 서브 쿼리 (Nested Subquery) - WHERE 절에 작성하는 서브 쿼리
인라인 뷰 (Inline-view) - FROM 절에 작성하는 서브 쿼리
스칼라 서브 쿼리 (Scalar Subquery) - SELECT 문에 작성하는 서브 쿼리
SELECT, FROM, WHERE, HAVING, ORDER BY
INSERT문의 VALUES
UPDATE문의 SET
서브 쿼리는 반드시 ()로 감싸서 사용한다.
서브 쿼리는 단일 행 또는 다중 행 비교 연산자와 함께 사용 가능하다.
SELECT *
FROM t1
WHERE column1 = ANY (SELECT column1 FROM t2
WHERE t2.column2 = t1.column2);
서브 쿼리의 FROM에는 t1에 대한 선언이 존재하지 않는다. 따라서 서브 쿼리는 외부 쿼리에서 t1을 참조한다.
테이블에서 행을 먼저 읽어서 각 행의 값을 관련된 데이터와 비교하는 방법 중 하나이다.
기본 질의에서 고려된 각 후보행에 대해 서브 쿼리가 다른 결과를 반환해야 하는 경우 사용한다
서브 쿼리에서는 메인 쿼리의 컬럼명을 사용할 수 있으나, 메인 쿼리에서는 서브 쿼리의 컬럼명을 사용할 수 없다.
FROM 절에서 사용되는 서브 쿼리
동적으로 생성된 테이블로 사용 가능하다. 뷰(View)와 같은 역할
SELECT ... FROM (subquery)[AS] tbl_name(col_list) ...
Top-N은 생략. 공부하면 좋고
하나의 행에서 하나의 컬럼 값만 반환하는 서브 쿼리
아래 경우 사용 가능
- group by를 제외한 select의 모든 절
서브 쿼리를 이용한 CREATE 문
emp table을 emp_copy라는 이름으로 복사 (컬럼 이름 동일)
CREATE TABLE emp_copy (SELECT * from emp);
CREATE TABLE emp_blank (SELECT * FROM emp WHERE 1 = 0);
사용자 부문의 처리 현상 분석
중요 실체(Entity)와 관계(Relation)를 파악하여 ERD 작성
실체에 대한 상세 정의
식별자 정의 및 식별자 업무규칙 지정
실체별 속성 상세화
필요한 속성 및 영역 상세 정의
속성에 대한 업무규칙 정의
각 단계를 마친 후 사용자와 함께 모델 검토
개체 (Entity) : 사용자와 관계가 있는 주요 객체 (데이터로 관리 되어야 하는 것)
Entity 찾는 법
속성 (Attribute)
식별자 : 한 개체(Entity) 내에서 인스턴스를 구분할 수 있는 단일 속성 또는 속성 그룹
후보키 (Candidate Key) : 개체 내에서 각각의 인스턴스를 구분할 수 있는 속성 (기본 키가 될 수 있음)
기본 키 (Primary Key) : 개체에서 각 인스턴스를 유일하게 식별하는데 적합한 Key
대체키 (Alternative Key) : 후보키 중에서 기본 키로 선정 되지 않은 Key
복합키(Comosite Key) : 하나의 속성으로 기본키가 될 수 없는 경우 둘 이상의 컬럼을 묶어 식별자로 정의
대리키 (Surrogate Key) : 식별자가 너무 길거나 여러 개의 속성으로 구성되어 있는 경우 인위적으로 추가
관계 (Relationship) : 두 Entity 간 업무적 연관성 또는 관련 사실
각 Entity 간에 특정한 존재 여부 결정
현재의 관계 뿐 아니라 장래에 사용될 경우도 고려
관계형 데이터베이스 설계에서 중복을 최소화하게 데이터를 구조화 하는 프로세스
목적
제 1 정규화 (Atomic Columns)
제 2 정규화 (부분함수 종속 제거)
제 3 정규화 (이행적 함수 종속 제거)
논리적 데이터베이스 모델링 단계에서 얻어진 db 스키마를 좀더 효율적으로 구현하기 위한 작업
DBMS 특성에 맞게 실제 db 내의 개체들을 정의하는 단계
데이터 사용량 분석과 업무 프로세스 분석을 통해 보다 효율적 db가 될 수 있도록 인덱스를 정의하고 상황에 따른 역정규화 작업을 수행
역정규화 (Denomalization)
역정규화 방법