본문 바로가기
책과 부동산과 주식이야기

(SQLP SQLD 핵심 정리 3) SQL기본

by HB1오춘 2023. 12. 23.

명령어의 종류 및 설명

명령어의 종류 명령어 설명
데이터 조작어
(DML  : Data Manipulation Language)
SELECT 데이터베이스에 들어 있는 데이터를 조회하거나 검증하기 위한 명령어를 말하는 것으로 RETRIEVE라고도 한다.
INSERT
UPDATE
DELETE
데이터베이스의 테이블에 들어있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블에 새로운 행을 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML이라고 부른다.
데이터 정의어
(DDL  : Data Definition Language)
CREATE
ALTER
DROP
RENAME
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다.
데이터 제어어
(DCL : Data Control Language)
GRANT
REVOKE
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다.
트랜잭션 제어어
(TCL : Transaction Control Language)
COMMIT
ROLLBACK
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다. 

 

제약조건의 종류

 

1. PRIMARY KEY(기본키)

2. UNIQUE KEY(고유키)

3. NOT NULL

4. CHECK

5. FOREIGN KEY(외래키)

 

테이블 생성의 주의사항

 

- 테이블 명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.

- 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.

- 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.

- 테이블 이름을 지정하고 각 칼럼들은 괄호 "( )"로 묶어 지정한다.

- 각 칼럼들은 콤마 "."로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.

- 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.(데이터 표준화 관점)

- 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.

- 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.

- 벤더에서 사전에 정의한 예약어(Reserved Word)는 쓸 수 없다.

- A-Z, a-z, 0-9, _, $, # 문자만 허용된다. 

 

TRUNCATE TABLE

 

테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행이 제거되고 저장 공간을 재사용할 수 있도록 해제한다.

테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE을 실행하면 된다.

 

트랜잭션의 특성

 

- 원자성(Atomicity)
트랜잭션에서 정의도니 연산들은 모두 성공적으로 실행되든지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (all or nothing)

- 일관성(consistency)
트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.

- 고립성(isolation)
트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.

- 지속성(durability)
트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

COMMIT, ROLLBACK

 

테이블 내 입력한 데이터나, 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경 사항을 취소할 수 있는데 데이터베이스에서는 롤백(ROLLBACK) 기능을 사용한다.

 

롤백(ROLLBACK)은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다

 

SAVEPOINT

 

저장점(SAVEPOINT)을 정의하면 롤백(ROLLBACK) 할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.

 

연산자의 우선순위

 

1. 괄호로 묶은 연산

2. 부정 연산자(NOT)

3. 비교 연산자(=, >, >=, <, <=)와 SQL 비교 연산자(BETWEEN, IN, LIKE, IS NULL)

4. 논리 연산자 중 AND, OR의 순으로 처리

 

NULL의 연산

 

- NULL 값과의 연산(+, -, *, / 등)은 NULL 값을 리턴

- NULL 값과의 비교연산(=, >, >=, <, <=)은 거짓(FALSE)을 리턴

- 특정 값보다 크다, 적다라고 표현할 수 없음

 

DUAL 테이블의 특성

 

- 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.

- SELECT ~ FROM ~ 의 형식을 갖추기 위한 일정의 DUMMY 테이블이다.

- DUMMY라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다. 

 

NULL의 특성

 

- NULL 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.

- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL 값을 포함할 수 있다. 

- NULL 값을 포함하는 연산의 경우, 결과 값도 NULL 값이다. 모르는 데이터인 것과 같다.

- 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL / ISNULL 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(ZERO)으로, 문자유형 데이터인 경우는 블랭크보다는 'x' 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다. 

 

GROUP BY 절의 특성

 

- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.

- 집계 함수의 통계정보는 NULL 값을 가진 행을 제외하고 수행한다.

- GROUP BY 절에서는 SELECT 절과 달리 ALIAS 명을 사용할 수 없다.

- 집계 함수는 WHERE 절에는 올 수 없다. (집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행된다.)

- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거시킨다.

 

HAVING 절의 특성

 

- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.

- GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.

- HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.

 

ORDER BY 절 특징

 

- 기본적인 정렬 순서는 오름차순(ASC)이다.

- 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된다.

- 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 빠른 값이 먼저 출력된다.

- Oracle에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 마지막에, 내림차순으로 정렬했을 경우에는 가장 먼저 위치한다.

- 반면, SQL SERVER에서는 NULL 값을 가장 작은 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 먼저, 내림차순으로 정렬했을 경우에는 가장 마지막에 위치한다.

 

SELECT 문장 실행 순서

 

- 발췌 대상 테이블을 참조한다. (FROM)

- 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)

- 행들을 소그룹화 한다. (GROUP BY)

- 그룹핑된 값의 조건에 맞는 것만을 출력한다. (HAVING)

- 데이터 값을 출력/계산한다. (SELECT)

- 데이터를 정렬한다. (ORDER BY)