정보의 교환이나 DB갱신등 일련의 작업에 대한 연속처리단위
즉, DB상태를 변화시키는 작업의 모음이다.
주로 상태를 변화시키는 DML과 같이 사용된다. (상태가 변화된 것은 데이터베이스의 내용이 변화됨을 의미)
하나의 특정작업으로 시작해 묶인 모든 작업을 완료해야 끝난다. (하나라도 실패하면 트랜잭션도 실패한다.)
COMMIT
1) 트랜잭션은 실행한 뒤 확정신호를 보내야 메모리에 저장된 SQL 구문이 데이터베이스에 반영된다.
2) 확정 신호를 Commit이라고한다.
3) 지금가지 테이블이 생성되고 "INSERT, UPDATE, DELETE"되는 것은 AUTO-COMMIT이 실행되고 있기 때문이다.
4) 원래는 과정을 진행한후 COMMIT; 를 작성해주어야한다.
ROLLBACK
1) Commit과 반대되는 개념, 트랜잭션 수행 중 지금까지 수행한 내용을 취소한다.
2) 깃에서도 Reset과 Revert으로 되돌리기를 할 수 있다.
Atomicity, Consistency, Isolation, Durability 를 의미한다. (트랜잭션의 안전성을 보장하기 위해 필요하다.)
Atomicity (원자성)
1)하나의 트랜잭션을 구성하는 작업들은 전부 성공하거나 전부 실패해야한다.
Consistency (일관성)
1) 트랜잭션 이전과 이후의 데이터베이스의 상태는 이전과 같이 유효해야한다.
2) 예를 들어 id가 꼭있어야한다와 같은 제약이 있을 시 일관되게 id가 있어야한다.
Isolation (고립성)
1) 하나의 트랜잭션이 다른 트랜잭션과 독립되어야 한다.
2) 각 트랜잭션이 다른 연산을 방해하면 안된다.
3) 동시에 실행되더라도 연속으로 실행될때의 데이터베이스 상태 동일해야한다.
Durability (지속성)
1) 하나의 트랜잭션이 성공적으로 수행된다면 로그가 남는다.
2) 오류가 발생해도 기록은 영구적이다.
RDB를 제작할것이 아니면 ACID를 고려하지 않아도 괜찮다.
RDB는 강한 규칙,제약을 가진다.
레코드들을 조회하고 분류한 뒤 특정 작업을 하는 집합연산의 과정을 정리했다.
SELECT * FROM customers
GROUP BY State
ORDER BY CustomerId;
HAVING
1) GROUP BY 로 조회된 결과에 대한 필터다.
2) HAVING 은 그룹화한 결과에 대한 필터이고 WHERE 는 그룹화하기 전에 조회되는 레코드를 필터링한다.
COUNT()
1) 몇 개인지 값을 리턴한다.
SUM()
1) 조회된 값들에 대한 합을 구해 리턴
AVG()
1) 평균값을 구해주는 함수
MAX(), MIN()
1) 최대값, 최소값을 구하는 함수
2) 위의 계산함수들은 GROUP BY가 아니더라도 SELECT문과 같은 부분에서 이용가능하다.
SELECT 실행 순서
1) FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 순으로 이루어진다.
CASE 사용하기
1) 프로그래밍의 if문과 같은 기능이다.
2) 아래와 같은 형태로 이루어진다.
SELECT CASE
WHEN CustomerId <= 25 THEN 'GROUP 1'
WHEN CustomerId <= 50 THEN 'GROUP 2'
ELSE 'GROUP 3'
END
FROM customers
SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId = 2)
FROM customers
WHERE CustomerId < 6
SELECT *
FROM customers
WHERE CustomerId IN (SELECT CustomerId FROM customers WHERE CustomerId < 10)
SELECT *
FROM (
SELECT CustomerId
FROM customers
WHERE CustomerId < 10
)
동일한 결과를 얻을 수 있지만 상황별로 효율이 다르다.
서브쿼리 : 복잡한 SQL쿼리문에 많이 사용된다. 보통 외부쿼리 내에 내부쿼리가 있는 구조를 가진다.
조인 : 여러개의 쿼리를 필요로하지 않는다.
서브쿼리를 조인으로 대체할 수 없는 경우
1) GROUP BY 를 사용한 서브 쿼리가 FROM 절에 들어 있을 때
2) 집계된 값을 반환하는 서브쿼리가 WHERE 절에 있을 때
3) 서브쿼리가 ALL 연산자 안에 들어있을 때
판다스의 concat
1) SQL에서는 합치는 두 데이터프레임의 열이 같아야한다. 다를 경우 에러발생
2) UNION ALL을 이용하면 중복을 제거하지 않고 concat한다.
판다스의 drop_duplicates()
1) SQL에서는 UNION ALL 이 아닌 UNION 을 이용하면 된다.