[Computer Science] Database(SQL, JOIN)

Arkiee·2022년 10월 26일
0

Computer Science

목록 보기
7/9
post-thumbnail

구조적 쿼리언어 (SQL: Structured Query Language)

관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어입니다. 관계형 데이터베이스는 정보를 표 형식으로 저장하며, 행과 열은 다양한 데이터 속상과 데이터 값 간의 다양한 관계를 나타냅니다.

특징

  • 비절차적 언어
  • 관계 DB의 표준 언어
  • 관계 대수와 관계 해석에 기반한 혼합 언어
  • 데이터 정의(DDL), 조작(DML), 제어(DCL) 기능을 모두 갖춘 언어
  • 대화식 질의어로 사용 가능
  • 다른 프로그램 언어(COBOL, PL/1, C, PASCAL)에 삽입된 형태로 사용 가능

SQL에서 사용하는 테이블의 종류

  • 기본 테이블(Base Table): CREATE by DDL, 독립적으로 존재, 테이블명을 기록해야함
  • 뷰 테이블(View Table): CREATE by DDL, 기본 테이블에서 유도된 가상 테이블
  • 임시 테이블(Temporary Table): Make by DML, 질의 처리 과정에서 임시적으로 만들어지는 테이블

※ Select 쿼리 실행 순서


뷰(View)

View에 대해서

  • View의 의미는 하나의 select문과 같다. 물론 뷰를 통해 insert, update, delete가 가능하지만 대개의 경우는 select를 위해 사용한다. View란 한 개 이상의 기본 테이블이나 다른 뷰를 이용하여 생성되는 가상 테이블(virtual table)이다.

  • View는 기존에 생성된 테이블 또는 다른 View에서 접근할 수 있는 전체 데이터 중에서 일부만 접근할 수 있도록 제한하기 위한 기법이다.

장점

  • 논리적 데이터 독립성을 제공
  • 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원
  • 사용자의 데이터관리를 간단하게 함
  • 접근 제어를 통한 자동 보안이 제공됨

단점

  • 독립적인 인덱스를 가질 수 없다
  • ALTER VIEW문을 사용할 수 없다. 즉 View의 정의를 변경할 수 없다.
  • View로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약이 따른다.

서브쿼리(Subquery)

  • 하나의 SQL문 안에 포함되어있는 또 다른 SQL

  • 서브쿼리 내부에 order by 사용 불가능

  • 서브쿼리는 메인 쿼리의 칼럼을 사용할 수 있지만 메인쿼리는 서브쿼리의 칼럼을 사용 불가능

  • 성능

    • Mysql 5.5이하 버전에서 IN절에 사용하는 경우, Exists 형태로 변환되어 최적화 되지 못하고 외부 쿼리는 테이블 Full Scan 동작해서 속도가 느림
    • join문으로 풀어서 사용하는 것이 좋음

조인(JOIN)

두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법입이다. 테이블을 연결하려면, 적어도 하나의 Attribute를 서로 공유하고 있어야 합니다.

종류

※ 예시를 돕기위한 A,B 테이블

  • INNER JOIN
    • 교집합으로, 기준 테이블과 join 테이블의 중복된 값을 보여줌

  • LEFT OUTER JOIN
    • INNER JOIN 결과를 구한 후, 우측 릴레이션의 어떤 튜플과도 맞지 않는 좌측 릴레이션의 튜플들에 NULL값을 붙인다.
    • LEFT에 있는거만(A-B)를 원할 경우: WHERE B.ID IS NULL 붙임

  • RIGHT OUTER JOIN
    • LEFT OUTER JOIN과 반대로 우측 릴레이션의 튜플에 NULL을 붙인다.
    • 마찬가지로 (B-A) 원할 경우: WHERE A.ID IS NULL 추가

  • FULL OUTER JOIN
    • LEFT OUTER JOIN + RIGHT OUTER JOIN
    • 우측 릴레이션에 NULL 추가 후 좌측 릴레이션에 NULL 추가
    • 교집합 부분을 빼기 위해: WHERE A.ID IS NULL or B.ID IS NULL

  • CROSS JOIN
    • 조인 테이블에 있는 튜플들의 순서쌍을 반환한다.
    • 결과 행의 수: A테이블, B테이블의 행 수를 곱한 것과 같다.
    • 카르테시안 곱과 같은 연산.
  • SELF JOIN
    • 동일 테이블에서 2개의 속성을 연결해 EQUI JOIN하는 것
    • FROM 절에 동일 테이블이 2번 이상 나타나므로 컬럼 이름이 모두 동일해서 반드시 테이블 별칭(Alias)를 사용해야함
    • 컬럼에도 테이블 별칭을 이용해 어느 테이블의 컬럼인지 식별해줘야 함

[참고]
https://pearlluck.tistory.com/46

profile
꿈을 꾸는 개발자

0개의 댓글