정리_fin1
SQL 문장들의 종류
- DDL : data definition language; CREATE, ALTER, DROP, RENAME
- DML : data manipulation language; INSERT, UPDATE, DELETE, SELECT
- DCL : data control language; GRANT, REVOKE
- TCL : transaction control language; COMMIT, ROLLBACK, SAVEPOINT
비절차적 데이터 조작어는 사용자가 무슨 데이터를 원하는지만 며엣하고, 절차적 데이터 조작어는 어떻게 데이터를 접근해야 하는지 명세한다
PK = UNIQUE & NOT NULL
UNIQUE는 테이블 내에서 중복되는 값이 없지만, NULL 입력이 가능하다
테이블 생성시 주의사항
- 가능한 단수형 권고
- 테이블명과 컬럼명은 반드시 문자로 시작해야함
- 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없음
- 테이블 이름을 지정하고 각 컬럼들은 괄호로 묶어 지정
- 각 컬럼들은 콤마로 구분되고, 테이블 생성문의 끝은 항상 세미콜론으로 끝남
- 칼럼 뒤에 데이터 유형은 반드시 꼭 지정되어야 함
테이블의 불필요한 칼럼 삭제
; ALTER TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;
테이블명 변경
; RENAME A TO B
중복된 데이터가 있는 경우 1건으로 처리해서 출력 : DISTINCT
DROP과 TRUNCATE는 auto commit되어 rollback이 불가능하고, DELETE는 rollback 가능
트랜잭션의 특성
- 원자성 : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다
- 일관성 : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다
- 고립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다
- 지속성 : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다
데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점
- Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
- non - repeatable read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
- phantom read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현상
트랜잭션 : 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개이 상의 데이터베이스 조작
트랜잭션의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 commit과 데이터에 대한 변경사항을 모두 폐기하고 변경 전의 상태로 되돌리는 rollback이 있다
내장함수
- 함수의 입력 행수에 따라 단일행 함수와 다중행 함수로 구분할 수 있음
- 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE의 SET절에 사용 가능
단일행 NULL 관련 함수의 종류
- NVL(표현식1, 표현식2) : 표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다
- NULLIF(표현식1, 표현식2) : 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴
- COALESCE(표현식1, 표현식2, ...) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다
GROUP BY 절에서는 SELECT 절과 달리 ALIAS 명을 사용할 수 없음
SELECT 문장의 실행 순서
; FROM - WHERE - GROUPBY - HAVING - SELECT - ORDER BY
SQL Server의 TOP N 질의문에서 N에 해당하는 값이 동일한 경우 함께 출력되도록 하는 WITH TIES 옵션을 ORDER BY 절과 함께 사용해야함
Join에 대한 설명
- 일반적으로 Join은 PK와 FK 값의 연관성에 의해 성립된다
- DBMS 옵티마이져는 FROM 절에 나열된 테이블들을 항상 2개씩 묶어서 Join을 처리한다
- EQUI Join은 Join에 관여하는 테이블 간의 컬럼 값들이 정확하게 일치하는 경우에 사용되는 방법이다
- EQUI Join은 '=' 연산자에 의해서만 수행되며, 그 이외의 비교 연산자를 사용하는 경우에는 모두 Non EQUI Join이다
- 대부분 Non EQUI Join을 수행할 수 있지만, 때로는 설계상의 이유로 수행이 불가능한 경우도 있다