SQL 요약

2 minute read

이 포스팅은 Database System Concepts(Abraham) 책을 참조하여 작성하였습니다.

SQL

  • SQL 은 다음과 같이 나뉩니다.
    • Data-definition Language(DDL) : 릴레이션 스키마를 정의하거나 릴레이션을 삭제, 스키마를 수정하기 위한 명령어를 제공합니다.
    • Data-manipulation Language(DML) : 쿼리 언어와 튜플을 삽입, 삭제, 수정하는 명령어를 포함합니다.
  • SQL DDL 은 명시된 스키마들을 가진 릴레이션들을 만들기 위해 사용됩니다.
  • 부가적으로 릴레이션 attribute 의 이름과 타임을 명시하면서 SQL 은 integrity 제약 (primary, foreingn-key constraints) 을 명시할 수 있습니다.
  • SQL은 어트리뷰트와 릴레이션 모두 리네임 할 수 있느느 매커니즘을 제공합니다. 그리고 쿼리의 결과가 명시된 어트리뷰트로 정렬되도록 명령할 수 있습니다.
  • SQL 은 릴레이션의 기본적인 집합 연산을 지원합니다.
    union, intersection, except 을 포함합니다. ($\cup, \cap, -$)
  • SQL 은 릴레이션은 null 값을 포함하는 릴레이션을 다룹니다. - 이는 T/F 의 진리 값(truth value)에 진리 값 ‘unknown’ 을 추가하여 다룹니다.
  • SQL 은 aggregation 을 지원합니다. -릴레이션을 그룹들로 나누는 능력을 포함하여, 각 그룹에서 분리적으로 aggregation 을 지원합니다.
    SQL 은 그룹에 대한 집합 연산을 지원합니다.
  • SQL 은 nested subqueries 를 지원합니다. outer query 의 where 와 from 절에서 사용할 수 있습니다.
    이는 또한 scalar subqueries 를 지원합니다.- 한 expression 이 리턴한 값을 사용할 수 있습니다.
  • SQL 은 업데이터, 삽입, 삭제하는 정보에 대한 구성을 지원합니다.

  • SQL 은 여러 종류의 natural join, inner outer join 과 여러 종류의 join conditnion 들을 지원합니다.

    • Natural join 은 where 술어가 각 릴레이션에서 일치하는 이름과 어트리뷰트를 동일시하는 여러 릴레이션에 대한 쿼리를 작성하는 간단한 방법을 제공합니다.(동일한 이름을 가지고 하는 것)
      이는 스키마에 새 어트리뷰트가 추가되면 쿼리 의미가 변경 될 위험이 있습니다.

      select name, title

      from student natural join takes natural join course

    • join-using 구문은 이름이 일치하는 모든 어트리뷰트에 대해 동일성이 요구되는 여러 관계에 대한 쿼리를 작성하는 간단한 방법을 제공합니다.

      select name, title * from (student* natural join takes) join course using (course id)

    • join on 은 조인 조건을 from 절에서 포함하는 방법을 제공하는 구문입니다.

      select * from student join takes on student.ID = takes.ID

    • outer join 은 조인 조건 자 (natural, using , on)로 인해 결과 관계의 어디에도 나타나지 않는 튜플을 유지하는 수단을 제공합니다.
      유지 된 튜플은 결과 스키마를 따르기 위해 null 값으로 채워집니다.

  • view relation 은 쿼리들의 결과를 포함하는 릴레이션으로 정의될 수 있습니다.
    뷰들은 필요하지 않은 정보를 숨기는데 유용하게 사용됩니다. 그리고 하나 이상의 릴레이션으로 부터 정보를 단일 뷰로 모으는 데 유용하게 사용됩니다.

  • 트랜잭션(Transaction) 은 쿼리들의 시퀀스이고 하나의 테스크를 같이 수행하면서 업데이트 합니다.
    트랜잭션은 commit 되거나 롤백 될 수 있습니다.
    트랜잭션이 롤백 된 경우 트랜잭션에서 수행된 모든 업데이트들의 효과가 취소됩니다.

  • Integrity constraint 은 인증된 사용자에 의해 만들어진 데이터베이스의 변화가 데이터의 일관성에서 손실이 되지 않도록 합니다.

  • Referential-integrity 제약은 주어진 어트리뷰트의 집합에 대해,
    한 릴레이션에 나타나는 값이, 다른 릴레이션의 특정 어트리뷰트 집합에 대해서도 나타나도록합니다.

  • Domain constraint 는 한 어트리뷰트와 관련될 수 있는 가능한 값들의 집합을 명시합니다.
    이러한 제약들은 특정 어트리뷰트에 대해 null 값들의 사용을 금지할 수 있습니다.

  • Assertion 는 항상 참이여야만 하는 state predicate(조건자) 를 나타내는 선언적 표현입니다.

  • SQL 의 DDM 은 built-in domain type 을 정의하는 것을 지원합니다. - date 나 time, 사용자 정의 타입 등

  • 쿼리들의 효율적인 처리를 위해 인덱스가 중요합니다. 또한 integrity constraint 을 효줄적으로 강제하기 위해서도 중요합니다.
    SQL 표준의 파트는 아니지만, 대부분의 디비 시스템은 인덱스 생성을 위한 SQL 명령어를 제공합니다.

  • SQL authorization mechanism 을 사용하면 데이터베이스의 다양한 데이터 값에 대해 허용되는 액세스 유형에 대해 데이터베이스 사용자를 구별 할 수 있습니다.

  • 사용자가 조직에서 수행하는 다른 역할에 따라 사용자 권한 집합을 할당 할 수 있습니다.

Comments