TIL 2021년 8월 26일 데이터베이스 SQL

김동찬·2021년 8월 26일
0
post-thumbnail

SQL

Structured Query Language

  • 데이터베이스 용 프로그래밍 언어로 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.
  • MySQL, Oracle, SQLite, PostgreSQL 등 다양한 데이터 베이스에서 SQL구문을 사용할 수 있다.
    *SQL은 데이터가 구조화된 테이블을 사용하는 데이터베이스에서 활용할 수 있다.
SQL은 구조화된 쿼리 언어이다.

query

  • 쿼리(query)란? '질의문'이라는 뜻을 가지고 있다.
    예를 들면 검색을 할때 입력하는 검색어가 일종의 쿼리이다.
    검색을 할 때, 기존에 존재하는 데이터를 검색어로 필터링합니다.
    따라서, 쿼리는 저장되어 있는 데이터를 필터하기 위한 질의문으로 볼수 있다.

SQL 문법 알아보자!

  • SELECT는 데이터셋에 포함될 특성을 특정 - * 는 와일드카드 (wildcard) 로 전부 선택할 때에 사용

  • FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블을 명시

  • WHERE은 필터 역할을 하는 쿼리문(optional)

  • ORDER BY는 돌려받는 데이터 결과를 어떤 기준으로 정렬하여 출력할지 결정(optional)

  • LIMIT은 결과로 출력할 데이터의 갯수를 정할 수 있다.(optional)
    쿼리문에서 사용할 때에는 가장 마지막에 추가

  • SELECT DISTINCT 유니크한 값을 받고 싶을 때 사용

  • INNER JOIN 이나 JOIN 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결

  • CASE
    CASE 를 사용하면, 특정 조건에 따라 다른 결과를 받을 수 있다.
    CASE, WHEN(조건), THEN(결과), ELSE(나머지), END(CASE 종료)

  • IN은 특정한 값이 서브쿼리에 있는지 확인 가능 / NOT IN은 반대

  • EXISTS 또는 NOT EXISTS는 돌려받은 서브쿼리에 존재하는 레코드를 확인
    조회하려는 레코드가 존재한다면 참(TRUE)을, 그렇지 않은 경우에는 거짓(FALSE)을 리턴

SUBQUERY

쿼리문을 작성할 때, 포함할 수 있는 다른 쿼리문을 서브 쿼리라고 한다.
서브쿼리는 실행되는 쿼리에 중첩으로 위치해, 정보를 전달하고, 서브쿼리는 소괄호로 감싸야 한다.
서브쿼리의 결과는 개별 값이나 레코드 리스트, 서브 쿼리의 결과를 하나의 칼럼으로 사용이 가능하다.
From에서도 서브쿼리를 사용할수 있다.

SQL 내장함수

집합연산 : 레코드를 조회하고 분류한뒤, 특정 작업을 하는 연산

  • GROUP BY : 데이터를 조회할 때 그룹으로 묶어서 조회
  • HAVING : GROUP BY 로 조회된 결과를 필터링
  • COUNT(): 레코드의 갯수를 헤아릴 때 사용
  • SUM() : 레코드의 합을 리턴
  • AVG() : 레코드의 평균값을 계산하는 함수
  • MAX(), MIN() : 각각 레코드의 최대값과 최소값을 리턴

트랜잭션/ACID

트랙잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛이다.
각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여있는 모든 작업들을 다 완료해야 정상적으로 종료한다. 만약 하나라도 실패하게 되면 트랜잭션도 실패이고, 모든 작업이 성공적이면 트랜잭션 또한 성공한다.

데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다.

ACID

ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질입니다.

  • Atomicity
  • Consistency
  • Isolation
  • Durability

Atomicity (원자성)

하나의 트랜잭션 내에서 모든 연산이 성공하거나 실패해야한다.

SQL에서도 마찬가지입니다. 특정 쿼리를 실행했는데 부분적으로 실패하는 부분이 있다면, 전부 실패하도록 구현되어 있습니다. 때때로 충돌 요인에 대해서 선택지를 제공합니다.

Consistency (일관성)

하나의 트랙잭션 전 후에 데이터베이스의 일관성 상태가 유지된다.

예를 들어 '모든 고객은 반드시 이름을 가지고 있어야 한다'는 데이터베이스의 제약이 있다고 가정하겠습니다.

다음과 같은 트랜잭션은 Consistency(일관성)를 위반합니다:

  • 이름 없는 새로운 고객을 추가하는 쿼리
  • 기존 고객의 이름을 삭제하는 쿼리

데이터베이스의 유효한 상태는 다를수 있지만, 데이터의 상태에 대한 일관성은 변하지 않아야 합니다. 이 예시는 '이름이 있어야 한다' 라는 제약을 위반합니다. 따라서 예시 트랜잭션이 일어난 이후의 데이터베이스는 일관되지 않는 상태를 가지게 됩니다.

Isolation (격리성, 고립성)

Isolation(격리성) 은 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다 는 뜻입니다.
실제로 동시에 여러 개의 트랜잭션들이 수행될 때, 각 트랜젝션은 고립(격리)되어 있어 연속으로 실행된 것과 동일한 결과를 나타냅니다.

Durability(지속성)

Durability(지속성)는 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 합니다. 만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다는 뜻입니다.

profile
프론트엔드 지망 개발공부를 하는 김동찬입니다 ^^7 코드스테이츠

0개의 댓글