DATA BASE 2일차 강의_Join

김용진·2023년 7월 19일
0

1. 조인

1-1 조인(JOIN)이란?

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

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

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

1-3. Inner Join

  • 각 테이블에서 조인 조건에 일치되는 데이터만 가져온다.
  • 교집합

2. Outer Join

  • 조인 조건에 일치하는 데이터 및 일치하지 않은 데이터를모두 select한다.
  • 조인 조건에 일치하는 데이터가 없다면 NULL로 가져온다.
  • Outer Join은 inner 와는 다르게 주 테이블이 어떤 테이블이 되는지가 중요하다.
    그래서 어떤 테이블이 중심이 되느냐에 따라 다시 Left Outer Join, Right Join, Full
    Outer Join으로 세분화 할 수 있다.

2-1. Left Outer Join

  • 왼쪽 테이블이 기준이 된다.
  • 조인 조건에 부합하는 데이터가 조인 당하는 테이블(오른쪽)에 있으면 해당 데이터를, 부재하면 NULL로 select된다.
 select * from tableA t1 left outer join table B t2

여기서 T1, T2는 각 테이블에 대한 알리아스 이므로 헤깔리지 않도록 주의 한다.

왼쪽 기준으로 OUTER한 결과, 왼쪽에 없는 부분은 불러오지못하고, 오른쪽에 값이 없는 것들은 NULL로 출력 시킨다.

2-2. Right Outer Join

  • 오른쪽 테이블이 기준이 된다.
  • 조인 조건에 부합하는 데이터가 조인 당하는 테이블에 있으면 해당 데이터를,
    부재하면 NULL로 select된다.
  select * from tableA t1 right outer join tableB t2

2-3. Full Outer Join

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

    사용 빈도가 낮음, 양쪽 데이터를 기준으로 하다보니, 읽어오는데 시간이 걸린다.

2-4. ANSI Join vs ORACLE Join

  • SQL은 데이터 베이스를 관리하기 위해 만들어진 프로그래밍 언어이며,
    데이터베이스를 관리해주는 대부분의 Management System DBMS들은 SQL을
    사용한다. 물론 DBMS자체의 특수성 때문에 SQL의 사용법이 조금씩 다르기도 하지만, 큰 틀에서 보면 나름대로의 보편성을 가지고 있다. 왜나하면 데이터베이스를 관리한다는 본질은 바뀌지 않기 때문이다.
  • 이를 위해 미국 국립 표준 협회(American National Standards Institute, ANSI)에서도 SQL에 대한 보편적인 문법을 제시하고 있는데, 그것이 바로 ANSI Query이다. Join도 마찬가지로 ANSI문법을 사용하는 경우가 대부분이긴 하지만, 편의에 따라 DBMS만의 자체 문법을 사용하기도 한다. 대표적으로 Oracle에서 사용하는 Oracle Join이 있다.

3. 서브쿼리(Subqurey)란?

  • Main Qurey에 반대되는 개념으로 이름을 붙인것
  • 메인쿼리를 구성하는 소단위 쿼리
  • select, insert, delete, update절에서 모두 사용 가능
  • 서브쿼리의 결과 집합을 메인 쿼리가 중간 결가값으로 사용
  • 서브쿼리 자체는 일반 쿼리와 다를 바가 없다.

4. Oracle Data Type

4-1. 데이터 타입

  • 데이터 타입이란 컬럼이 저장되는 데이터 유형을 말한다. 기본 데이터 타입은 문자형, 실수, 소수, 자료형 등의 여러 데이터를 식별하는 타입이다.

4-2. 문자 데이터 타입

NCHAR, NVARCHAR 타입은 잘 사용하지 않는다고 한다.

4-3. char vs varchar2

  • 예를 들어 가변형 문자형 데이터 타입인 varchar2에 10이라는 공간을 할당하고 abc라고 데이터를 입력했다고 치면 그 데이터는 10이라는 데이터 공간을 할당했기 때문에 10byte까지만 데이터를 입력받을 수 있고, 3글자만 입력되었으므로 그 데이터 공간은 3byte가 된다.
  • 반대로 고정형 문자형 데이터타입인 char에 10이라는 데이터 공간을 할당하고, 마찬가지로 abc라는 데이터를 입력했다고 치면, 그 데이터는 3글자만 입력되었지만 할당 된 데이터 공간은 10byte가 된다.

  • 남/여 같이 고정된 글자만 입력되는것이 아니라면 대부분 varchar2를 사용한다.

  • LOB에 관한건 밑에 계속 서술하기로 한다.

4-4. 숫자형 데이터 타입

  • Number(P,S)
  • 가변 숫자
  • P는 소수점을 포함한 전체 자릿수를 의미하고, S는 소수점 자릿수를 의미한다.
    NUMBER는 가변숫자이므로 P와 S를 입력하지 않으면 저장 데이터의 크기에 맞게
    자동으로 조절된다.
입력값		타입 (P,S)		저장되는값
123.89		NUMBER			123.89
123.89		NUMBER(3)		124
123.89		NUMBER(4,2)		에러
123.89		NUMBER(3,2)		에러
123.89		NUMBER(5,2)		123.89
123.89		NUMBER(6,1)		123.9

지정한 소수점 자리 미만은 반올림하여 값이 출력, 소수점, 자릿수 맞지 않을 경우 에러가 나옴

4-5. 날짜 데이터 타입

  • DATE를 일반적으로 사용한다.

    DATE타입에 관해서는 이전 포스팅 명령어모음 2 를 보면 상세하게 서술 하였다.

4-6. LOB 데이터 타입.

  • LOB란 Large Object의 약자로 대용량 데이터를 저장할 수 있는 데이터 타입입니다. 일반적으로 그래픽, 이미지, 사운드등 비정형 데이터를 저장할때 LOB타입을 사용한다.

  • 문자형 대용량 데이터는 CLOB나 NCLOB, 그래픽, 이미지, 동영상 등의 데이터는 BLOB을 주로 사용한다.

5. DDL(Data Definition Language)

  • 데이터의 구조를 정의하기 위한 테이블 생성, 삭제 같은 명령어
  • CREATE : 테이블 생성
  • DROP : 테이블 삭제
  • ALTER : 테이블 수정
  • TRUNCATE : 테이블에 있는 모든 데이터 삭제

다음 회차에 계속...

profile
메모리폼

2개의 댓글

comment-user-thumbnail
2023년 7월 20일

글이 많은 도움이 되었습니다, 감사합니다.

1개의 답글