포스트

3. sql

3. sql

3. SQL (23. 10. 19)

SQL

  • SQL(Structured Query Language)는 가장 널리 사용되는 상용 관계 데이터베이스 언어
  • IBM에서 수행한 System-R 프로젝트의 수행 결과
  • SQL이 발표된 후 많은 RDBMS 벤더들이 SQL을 자사 제품에 구현, 현재는 표준으로 사용됨
    • RDBMS 뿐만 아닌 비 관계 데이터베이스에서도 SQL을 구현
    • ANSI/ISO등의 표준 기관에서 SQL 표준을 정의
  • 비 절차적 언어

SQL 구성

  • 데이터 조작어(Data Manipulation Language – DML)
    • 데이터베이스의 데이터를 조회하거나 검색하기 위한 명령 및 데이터베이스 테이블의 데이터에 변형(삽입, 수정, 삭제)을 가하는 질의어
  • 데이터 정의어(Data Definition Language – DDL)
    • 테이블, 무결성 등의 데이터 구조를 정의하는데 사용되는 명령어들로 데이터 구조와 관련된 질의어
  • 데이터 제어어(Data Control Language – DCL)
    • 데이터베이스에 접근하고 개체들을 사용하도록 권한을 주고 회수하는 질의어
  • 트랜잭션 제어어(Transaction Control Language – TCL)
    • 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 트랜잭션별로 제어하는 질의어

DDL

  • CREATE

    릴레이션(테이블), 뷰, 인덱스, 저장 프로시저 등 데이터베이스 객체 생성

  • DROP

    존재하는 데이터베이스 객체 삭제

  • ALTER

    존재하는 데이터베이스 객체 수정

  • TRUNCATE

    테이블 내 데이터의 완전 삭제

DML

  • SELECT
    • 관계 대수에서 프로젝션(Projection - π) 연산과 일치, 결과에 나타날 속성을 나열하는데 사용됨
  • FROM
    • 관계 대수의 카티션 프로덕트에 해당하며, 질의에서 조회할 릴레이션을 나열
  • WHERE
    • 관계대수에서 셀렉션(Selection - σ) 연산과 일치, FROM 절에 나타나는 릴레이션 속성들의 조건으로 구성

Set operation

UNION

  • 일반적으로 합집합 연산
  • 두 SQL 질의의 결과가 합병 가능 조건이면 UNION 연산 가능
  • SELECT 절과는 다르게 기본적으로 중복을 제거함

INTERSECT

  • 교집합
  • SELECT 절과는 다르게 기본적으로 중복을 제거함
  • 중복을 유지하고자 한다면 INTERSECT ALL 을 사용
  • MySQL은 릴레이션 집합 간의 교집합을 산출하는 INTERSECT 연산을 지원하지 않는다.

EXCEPT

  • 차집합
  • 두 SQL 질의의 결과가 합병 가능 조건이면 EXCEPT 연산 가능
  • SELECT 절과는 다르게 기본적으로 중복을 제거함
  • EXCEPT ALL을 사용하여 모든 중복을 유지할 수 있음

Subquery

  • 단일 질의 안에 질의가 포함된 형태의 쿼리
    • 관계 대수 질의 결과는 릴레이션을 반환함
    • 서브 쿼리의 결과를 주 쿼리에서 받아서 처리는 형식으로, 포함된 쿼리(Nested Query) 라라고도 부름
  • 서브 쿼리 (Subquery)
    • 가장 많이 사용되는 형태로, WHERE 절에서 셀렉션 연산의 값을 산출하기 위해 사용하는 질의
  • 인라인 뷰(Inline View)
    • FROM 절에서 질의의 결과를 테이블처럼 사용하는 용도의 질의
  • 스칼라 서브 쿼리(Scala Subquery)
    • SELECT 문에서 사용되는 서브 쿼리로, 주로 계산 결과값을 쿼리 결과에 포함시키는데 사용되는 질의
  • 연관 서브 쿼리
    • 서브 쿼리에서 주 쿼리의 필드값과 연관되어 사용하는 질의

ORDER BY

  • 데이터베이스 질의의 결과는 테이블 내의 투플의 위치(삽입된 순서)대로 산출됨
  • ORDER BY 절에 사용되는 컬럼을 기준으로 데이터를 정렬
    • 오름차순(DESC)와 내림차순(ASC – 기본 값)으로 데이터를 정렬 함
  • limit 1 등으로 최댓값을 추출가능
  • offset 2 등으로 몇번 부터 출력할지도 조절 가능
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.