반응형
# SQLD 2과목_2 기본
## SQL 문장 종류
1. DML (데이터 조작어)
- SELECT : 데이터를 조회, 검색하기 위한 명령어로 RETRIEVE라고도 함
- INSERT / UPDATE / DELETE : 데이터에 변형을 가하는 종류의 명령어
2. DDL (데이터 정의어)
- CREATE / ALTER / DROP / RENAME : 테이블과 같은 데이터 구조를 정의하는데 사용
3. DCL (데이터 제어어)
- GRANT / REVOKE : 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고, 화수하는 명령어
4. TCL (트랜잭션 제어어)
- COMMIT / ROLLBACK / Savepoint : 논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명렁어
## 테이블 칼럼에 대한 정의 변경
1. 오라클
- ALTER TABLE 테이블명 MODIFY (컬럼명1 데이터 유형, 컬럼명2 데이터 유형 ...);
2. SQL Server
- ALTER TABLE 테이블명 ALTER (컬럼명1 데이터 유형, 컬럼명2 데이터 유형 ...);
## NULL
- 공백, 숫자 0과는 전혀 다른 값
- 조건에 맞는 데이터가 없을 때의 공집합과도 다름
- 아직 정의되지 않은 미지의 값 또는 현재 데이터를 입력하지 못하는 경우를 의미.
- (모르는 값, 값의 부재를 의미, NULL과의 모든 비교는 알 수 없음(Unknown을 반환)
## 남아있는 데이터 관련 문제 풀이
- DELETE CASCADE 시 모두 삭제
- DELETE SET NULL 시 필드 값 NULL로 변경
## 제약 조건의 종류
- PRIMARY KEY (기본키) : 주키로 테이블당 1개만 생성 가능
- UNIQUE KEY (고유키) : 테이블 내에서 중복값이 없으며, NULL 입력 가능
- NOT NULL : 명시적으로 NULL 입력 방지
- CHECK : 데이터의 무결성을 유지하기 위해 특정 칼럼에 설정하는 제약
- FOREIGN KEY (외래키) : 테이블 생성 시 설정할 수 있고, NULL값을 가질 수 있으며, 테이블당 여러 개 생성 가능하고, 외래키 값은 참조 무결성 제약을 받을 수 있다.
## 테이블 생성의 주의사항
- 테이블명은 객체를 의미할 수 있는 적절한 이름 사용, 가능한 단수명 사용
- 테이블명은 다른 테이블의 이름과 중복되지 않아야 함
- 한 테이블 내 칼럼명은 중복되게 지정할 수 없음
- 테이블명을 지정 후 각 칼럼들은 괄호로 묶어 지정
- 각 칼럼은 콤마로 구분, 테이블 생성문 끝은 항상 세미콜론으로 끝남
- 칼럼에 대해 다른 테이블까지 고려, 일관성 있게 사용하는 것이 좋다
- 칼럼 뒤에 데이터 유형은 꼭 지정해야 함
- 테이블명, 칼럼명은 반드시 문자로 시작, 벤더별로 길이에 대한 한계 존재
- 벤더에서 사전에 정의한 예약어는 사용 불가
- A-Z, a-z, 0-9, _, $, # 문자만 허용된다
## COUNT(*), COUNT(PK칼럼)
- PK는 NULL값을 가질 수 없고, COUNT(*), COUNT(PK칼럼)은 항상 같은 값이 나온다.
## 테이블 칼럼 삭제 SQL 구문
- ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명;
## 테이블 이름 변경 SQL 구문
- RENAME 기존테이블명 TO 신규테이블명;
## 데이터 입력 SQL 구문
- INSERT INTO 테이블명 (칼럼 리스트) VALUES (칼럼 리스트에 넣을 VALUE값 리스트);
- INSERT INTO 테이블명 VALUES (전체 칼럼에 넣을 VALUE값 리스트);
## 데이터 수정 SQL 구문
- UPDATE 테이블명 SET 수정할 칼럼명 = 수정될 새로운 값;
## 데이터 조회 SQL 구문
- SELECT [ALL / DISTINCT] FROM 테이블명;
- ALL : Default 옵션, 중복된 데이터 모두 출력
- DISTINCT : 중복된 데이터 1건으로 처리해서 출력
## 참조동작
- CASCADE : Master 테이블 삭제 시 같이 삭제
- RESTRICT : Master 테이블에 PK없을 경우 외부키를 NULL값 처리
- AUTOMATIC : Master 테이블에 PK없을 경우 PK생성 후 입력
- DEPENDENT : Master 테이블에 PK 존재할때만 입력 허용
## 로그 관련
- DELETE : 로그를 남김
- DROP / TRUNCATE : 로그를 남기지 않음
## TRUNCATE TABLE
- 해당 테이블에 들어있던 모든 행들이 제거, 저장 공간을 재사용 가능하도록 해제 한다. (데이터 삭제, 디스크 사용량 초기화, 스키마 정의 유지)
- 테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE 실행.
## TRUNCATE vs DELETE 비교
- TRUNCATE : DDL, ROLLBACK 불가, AUTO COMMIT, 테이블을 최초 생성된 초기상태로 만든다.
- DELETE : DML, COMMIT와 ROLLBACK 사용 가능, 사용자 COMMIT, 데이터만 삭제한다.
## 트랜잭션의 특성
- 원자성 : 트랜잭션에서 정의된 연산은 모두 성공적으로 실행되던지, 전혀 실행되지 않은 상태로 남아야 함
- 일관성 : 트랜잭션 실행 전 데이터베이스 내용이 잘못 되어있지 않다면 트랜잭션 실행 후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
- 고립성 : 트랜잭션이 실행되는 도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
- 지속성 : 트랜잭션이 성공적으로 수행되면 트랜잭션이 갱신한 데이터베이스 내용은 영구적으로 저장된다.
## ROLLBACK
- 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.
- 롤백 구문을 만나면 최초의 BEGIN TRANSACTION시점까지 모두 롤백이 수행된다.
## 저장점 (SAVEPOINT)
- 롤백할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아닌, 현 시점에서 저장점까지 트랜잭션의 일부만 롤백할 수 있다.
1. 오라클
- SAVEPOINT 저장점;
- ROLLBACK TO 지정한 저장점;
2. SQL SERVER
- SAVE TRANSACTION 저장점;
- ROLLBACK TRANSACTION 지정한 저장점;
## 용어 설명
- 트랜잭션은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한개 이상의 데이터베이스 조작을 의미
- 트랜잭션의 종료를 위한 대표적인 명령어로서 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 커밋과 데이터에 대한 변경사항을 모두 폐기하고 변경전의 상태로 되돌리는 롤백이 있다.
## WHERE 절
- SQL을 사용하면서 테이블의 데이터를 조회할 때 원하는 데이터만 검색하기 위해 SELECT, FROM 절과 함께 WHERE 절을 이용, 조회되는 데이터의 조건을 지정하여 데이터를 제한할 수 있다.
## NULL의 연산
- NULL 값과의 연산은 NULL 값을 리턴
- NULL 값과의 비교연산은 거짓(FALSE)를 리턴
- NULL 값은 특정 값보다 크다, 작다라고 표현할 수 없다.
- NULL 값을 조건절에서 찾는 경우 IS NULL , IS NOT NULL만 사용한다.
## BETWEEN a AND b
- a와 b의 값 사이에 있으면 됨
## IN (리스트)
- 리스트에 있는 값 중 어느 하나라도 일치하면 됨
## 내장함수
- 함수의 입력 행수에 따라 단일행 함수, 다중행 함수로 구분한다.
- 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE의 SET절에 사용 가능하다.
- 1:M 조인이라도 M쪽에 출력된 행이 하나의 단일행 함수의 입력값으로 사용되므로 단일행 함수는 사용할 수 있다.
- 다중행 함수도 단일행 함수와 동일하게 단일값만을 반환한다.
## 단일행 문자형 함수 종류
- LOWER : 소문자로 바꿔줌
- UPPER : 대문자로 바꿔줌
- CONCAT (문자열1, 문자열2) : 문자열1, 2를 연결
- SUBSTR / SUBSTRING (문자열, m, n) : 문자열 중 m위치에서 n개의 문자 길에 해당하는 문자를 반환
- LENGTH / LEN : 문자열의 개수 반환
- LTRIM (문자열, 지정문자) : 첫 문자부터 확인, 지정 문자가 나타나면 해당 문자 제거
- RTRIM (문자열, 지정문자) : 마지막 문자부터 확인, 지정 문자가 나타나면 해당 문자 제거
- TRIM : 문자열에서 머리말, 꼬리말 또는 양쪽에 있는 지정 문자 제거
## NULL 관련 함수 종류
- NVL / ISNULL (표현식1, 표현식2) : 표현식1의 결과값이 NULL이면 표현식2 값을 출력
- NULLIF (표현식1, 표현식2) : 표현식1이 표현식2와 같으면 NULL을, 다르면 표현식1 출력
- COALESCE (표현식1, 표현식2, ..) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 값이 NULL이면 NULL 리턴
## 집계함수의 종류
- COUNT (*) : NULL 포함, 행 수 출력
- COUNT(표현식) : 표현식 값이 NULL인 값 제외, 행 수 출력
- SUM (표현식) : NULL 값 제외 합계 출력
- AVG (표현식) : NULL 값 제외 평균 출력
- MAX (표현식) : 최대값 출력
- MIN (표현식) : 최소값 출력
- STDDEV (표현식) : 표준 편차 출력
- VARIAN (표현식) : 분산 출력
## DUAL 테이블 특징
- SYS가 소유, 모든 사용자가 액세스 가능한 테이블
- 일종의 DUMMY 테이블
- DUMMY라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다.
## ORDERY BY 절
- 기본적인 정렬 순서는 오름차순(ASC : 낮->높)
- 숫자형 데이터는 가장 작은 값부터 출력
- 날짜형 데이터는 가장 빠른 값부터 출력
- 오라클에서는 NULL 값을 가장 큰 값으로 간주
- SQL SERVER는 NULL 값을 가장 작은 값으로 간주
## SELECT 문장 실행 순서
- FWGHSO : FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
## TOP 관련
- EMP 테이블에서 급여가 높은 2명 내림차순으로 출력 : SELECT TOP(2) WITH TIES NAME, SAL FROM EMP ORDER BY SAL DESC;
## JOIN 조건 개수
- 여러 테이블로부터 원하느 데이터 조회 시 전체 테이블 개수에서 최소 (N-1)개 만큼의 JOIN 조건 필요
## JOIN
- 일반적으로 조인은 PK와 FK 값의 연관성에 의해 성립된다.
- DBMS 옵티마이저는 FROM 절에 나열된 테이블이 아무리 많아도 항상 2개의 테이블씩 짝지어 조인을 수행한다.
- EQUI JOIN은 조인에 관여하는 테이블 간의 컬럼 값들이 정확하게 일치하는 경우 사용되는 방법이다.
- EQUI JOIN은 '=' 연산자에 의해서만 수행, 그 외의 비교 연사자를 사용하는 경우 모두 NON EQUI JOIN이다.
- 대부분 NON EQUI JOIN을 수행할 수 있지만, 때로는 설계상의 이유로 수행이 불가능한 경우도 있다.
반응형
'자격증 > SQLD & SQLP 자격증' 카테고리의 다른 글
SQLD 2과목_4 SQL 최적화 기본 원리 (0) | 2021.09.04 |
---|---|
SQLD 2과목_3 SQL 활용 (0) | 2021.09.04 |
SQLD 2과목_1 데이터 모델과 성능 (0) | 2021.09.02 |
SQLD 1과목 데이터 모델링의 이해 정리 (0) | 2021.09.02 |
SELECT 문장 실행 순서 (0) | 2021.08.26 |