1. 관계형 데이터베이스
2. DDL(Data Definition Language): 데이터 정의어
3. DML(Data Manipulation Language): 데이터 조작어
4. TCL
5. WHERE절
6. 함수
7. Group By, Having 절
8. Order By 절
9. JOIN
==========================================================
. 데이터 제어어(DCL: Data Control Language)
– 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어
. 테이블 컬럼 정의 변경
– Oracle
– SQL Server
. NULL(ASCII 코드 00번)은 공백(BLANK, ASCII 코드 32번)이나 숫자0(ZERO, ASCII 48)과 전혀 다른 값이며, 조건에 맞는 데이터가 없을 때의 공집합과도 다르다.
. ‘NULL’은 ‘아직 정의되지 않은 미지의 값’, ‘현재 데이터를 입력하지 못하는 경우’ 의미
. 제약조건의 종류
– PRIMARY KEY(기본키)
– UNIQUE KEY(고유키)
– NOT NULL
– CHECK
– FOREIGN KEY(외래키)
. 테이블 생성 주의사항
– 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고
– 테이블 명은 다른 테이블 이름과 중복되지 않아야 한다.
– 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.
– 테이블 이름을 지정하고 각 컬럼들은 괄호 “( )”로 묶어 지정한다.
– 각 컬럼들은 콤마 “,”로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 “;”으로 끝난다.
– 칼럼에 대해서는 다른 테이블 까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.(데이터 표준화 관점)
– 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
– 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
– 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.
– A-Z, a-z, 0-9, _, $, # 문자만 허용 된다.
. 테이블의 불필요한 컬럼 삭제
. 테이블에 입력된 데이터 조회
. WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성
– Column명(보통 조건식의 좌측에 위치)
– 비교 연산자
– 문자, 숫자, 표현식(보통 조건식의 우측에 위치)
– 비교 칼러명(JOIN 사용시)
. 연산자의 우선순위
1. 괄호로 묶은 연산
2. 부정 연산자(NOT)
3. 비교 연산자 (=, >, >=, <, <=)와 SQL 비교 연산자 (BETWEEN a AND b, IN (list), LIKE, IS NULL)
4. 논리 연산자 중 AND, OR의 순으로 처리
. NULL의 연산
– NULL 값과의 연산(+, -, *, / 등)은 NULL 값을 리턴
– NULL 값과의 비교연산 (=, >, >=, <, <=)은 FALSE 리턴
– 특정 값보다 크다, 적다라고 표현 할 수 없음
. 부정 비교 연산자
– != : 같지 않다.
– ^= : 같지 않다.
– <> : 같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능)
– NOT 칼럼명 = : ~와 같지 않다.
– NOT 칼럼명 > : ~보다 크지 않다.
. BETWEEN a AND b
– a와 b의 값 사이에 있으면 된다.(a와 b 값이 포함됨)
. IN(list)
– 리스트에 있는 값중에서 어느 하나라도 일치하면 된다.
. 함수는 벤더에서 제공하는 함수인 내장 함수(Built-in function)와 사용자가 정의할 수 있는 함수(User Defined Function)로 나눌 수 있다.
. 내장 함수는 다시 단일행 함수(Single-Row Function)와 다중행 함수(Multi-Row Function)로 나눌수 있다.
. 다중행 함수는 집계 함수(Aggregate Function), 그룹 함수(Group Function), 윈도우 함수(Window Function) 구분된다.
. DUAL 테이블의 특성
– 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.
– SELECT ~ FROM ~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.
– DUMMY라는 문자열 유형의 칼럼에 ‘x’라는 값이 들어 있는 행은 1건 포함하고 있다.
. NULL의 특성
– 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고 공백은 하나의 문자이다.
– 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널값을 포함할 수 있다.
– 널 값을 포함 하는 연산의 경우 결과 값도 널 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다.
– 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다.
– NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0으로, 문자 데이터인 경우는 블랭크보다는 ‘x’같이 해당 시스템에서 의미없는 문자로 바꾸는 경우가 많다.
. NULL 포함 연산의 결과
– NULL + 2, 2 + NULL
– NULL – 2, 2 – NULL
– NULL * 2, 2 * NULL
– NULL / 2, 2 / NULL
– 결과 모두 NULL
. NULL 관련 함수
. GROUP BY 문장
. GROUP BY 절과 HAVING 절의 특성
– GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
– 집계 함수의 통계 정보는 NULL값을 가진 행을 제외하고 수행한다.
– GROUP BY 절에서는 SELECT절과는 달리 ALIAS 명을 사용할 수 없다.
– 집계 함수는 WHERE절에는 올 수 없다.(집계 함수를 사용할 수 있는 GROUP BY절보다 WHERE절이 먼저 수행된다.)
– WHERE절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거시킨다.
– HAVING절은 GROUP BY절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.
– GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력
– HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.
. ORDER BY 문장