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)을 리턴
쿼리문을 작성할 때, 포함할 수 있는 다른 쿼리문을 서브 쿼리라고 한다.
서브쿼리는 실행되는 쿼리에 중첩으로 위치해, 정보를 전달하고, 서브쿼리는 소괄호로 감싸야 한다.
서브쿼리의 결과는 개별 값이나 레코드 리스트, 서브 쿼리의 결과를 하나의 칼럼으로 사용이 가능하다.
From에서도 서브쿼리를 사용할수 있다.
트랙잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛이다.
각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여있는 모든 작업들을 다 완료해야 정상적으로 종료한다. 만약 하나라도 실패하게 되면 트랜잭션도 실패이고, 모든 작업이 성공적이면 트랜잭션 또한 성공한다.
데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다.
ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질입니다.
하나의 트랜잭션 내에서 모든 연산이 성공하거나 실패해야한다.
SQL에서도 마찬가지입니다. 특정 쿼리를 실행했는데 부분적으로 실패하는 부분이 있다면, 전부 실패하도록 구현되어 있습니다. 때때로 충돌 요인에 대해서 선택지를 제공합니다.
하나의 트랙잭션 전 후에 데이터베이스의 일관성 상태가 유지된다.
예를 들어 '모든 고객은 반드시 이름을 가지고 있어야 한다'는 데이터베이스의 제약이 있다고 가정하겠습니다.
다음과 같은 트랜잭션은 Consistency(일관성)를 위반합니다:
데이터베이스의 유효한 상태는 다를수 있지만, 데이터의 상태에 대한 일관성은 변하지 않아야 합니다. 이 예시는 '이름이 있어야 한다' 라는 제약을 위반합니다. 따라서 예시 트랜잭션이 일어난 이후의 데이터베이스는 일관되지 않는 상태를 가지게 됩니다.
Isolation(격리성) 은 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다 는 뜻입니다.
실제로 동시에 여러 개의 트랜잭션들이 수행될 때, 각 트랜젝션은 고립(격리)되어 있어 연속으로 실행된 것과 동일한 결과를 나타냅니다.
Durability(지속성)는 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 합니다. 만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다는 뜻입니다.