관계형 데이터베이스의 테이블
기본키(primary key)
- 테이블에 저장된 행을 식별할 수 있는 유일한 값이어야 한다. (eg. 주민등록번호)
- 값의 중복이 없어야 한다.
- NULL값을 가질 수 없다.
후보키(candidate key), 대체키(alternative key)
- 기본키가 될 수 있는 모든 키는 후보키이다. (eg. 학번, 아이디, 주민등록번호)
- 후보키 중에서 기본키가 아니게 된 모든 키를 대체키라고 한다. (eg. 주민등록번호가 기본키가 된 경우 학번, 아이디가 대체키)
외래키(foreign key)
- 특정 테이블에 포함되어 있으면서 다른 테이블의 기본키로 지정된 키
- 외래키를 통해 테이블 간 참조가 이루어지며 관계를 맺게 된다. 만약 한 테이블에 모든 정보를 넣었을 때 불필요한 중복을 피하기 위해 테이블을 나누게 되고, 이 테이블 간 연결은 외래키를 통해 이루어진다.
복합키(composite key)
- 만약 특정 열로만 행을 식별하기 어려울 경우, 여러 열을 조합하여 기본키를 만드는데 이를 복합키라고 한다.
- 예를 들어 대학에서 동일한 과목명을 가진 강의가 여러 개 있고, 한 교수님이 여러가지 강의를 담당한다고 할 때 교수님도 과목명도 기본키가 될 수는 없다. 이 경우 과목명 & 교수님을 조합하여 기본키로 만들 수 있다.
SELECT 문의 기본 형식
오라클 SQL 기준
SELECT * FROM TAB;
모든 테이블을 포함한 구조 출력
DESC TABLE_NAME;
해당 테이블의 구조 출력
SELECT * FROM TABLE;
테이블 전체 내용 출력
SELECT COLUMN1, COLUMN2 FROM TABLE;
해당 테이블에서 선택된 열만 출력. 열을 쉼표로 구분하여 여러 열 출력 가능.
SELECT DISTINCT COLUMN1, COLUMN2 FROM TABLE;
중복된 데이터 삭제. 열이 여러개이면 선택된 열의 값이 모두 중복된 것만 제외하고 출력.
(eg. MANAGER, 20 / MANAGER, 30 은 매니저가 중복되었지만 숫자가 다르므로 출력)
연산식 사용하기, 별칭 붙이기
예시
SELECT ENAME, SAL, SAL * 12 + NVL(COMM,0) AS ANNSAL, COMM FROM EMP;
SAL * 12 + NVL(COMM,0)
은 연산식을 추가하여 새로이 열을 출력하라는 명령이다. 월급(SAL)에 12를 곱한 뒤 커미션(COMM)을 더하여 연봉을 구하는 식인데, 이 때에 커미션 값이 null인 경우 계산되지 않게 된다. 그러므로 이 때에 NVL(col, default)을 사용하는데, 해당 열의 값이 null일 때엔 0으로 전제하고 계산하라는 의미이다.AS ANSAL
은 별칭을 붙이는 명령이다. 그냥 연산식만 써버리면 그대로 그것이 열의 이름이 된다. 열의 이름은 연산식과 다르게 설정하고자 하면AS COLUMN_NAME
으로 설정하면 된다.SELECT * FROM TABLE ORDER BY COLUMN1, COLUMN2;
특정 열을 기준으로 정렬하고자 할 때
ORDER BY
를 사용한다. 정렬 기준은 특별히 지정하지 않으면 오름차순(ASC
)이 되고 내림차순으로 지정하고자 하면 열 뒤에DESC
를 붙여주면 된다.열을 여러 개 선택하면 앞에 오는 열을 우선순위로 먼저 정렬한 다음, 뒤에 오는 열을 후순위로 정렬한다.
WHERE절과 연산자
WHERE
은 특정 조건을 만족하는 행을 출력하고자 할 때 사용된다.SELECT * FROM TABLE WHERE COLUMN = VALUE;
테이블에서 열의 값이 지정한 값과 일치하는 행만 출력. 여기서 등가연산자는
=
이다.여기서 산술연산자를 추가적으로 사용할 수도 있다. 즉 단순히 val과 일치하는 것을 찾을 수도 있고, val * 12와 일치하는 값만 출력할 수도 있다.
AND
나OR
은 조건식을 여러개 쓸 때 사용된다. (갯수의 제한은 없다)- SELECT * FROM TABLE WHERE COLUMN1 = VALUE1 AND COLUMN2 = VALUE2;
- 만약 같은 열에 대하여 and나 or이 많이 쓰일 때에는
IN
을 사용하여 처리할 수 있다. - SELECT * FROM TABLE WHERE COLUMN = VALUE1 OR COLUMN = VALUE2 ...
- SELECT * FROM TABLE WHERE COLUMN IN (VALUE1, VALUE2 ...);
논리부정 연산자
SELECT * FROM TABLE WHERE NOT COLUMN = VALUE;
SELECT * FROM TABLE WHERE COLUMN != VALUE;
두 명령이 같은 결과를 출력한다.
특정 범위 내의 값 출력하기
SELECT * FROM TABLE WHERE COLUMN BETWEEN VAL1 AND VAL2;
VAL1(최솟값), VAL2(최댓값) 사이의 값 출력하기. 물론 비교연산자 <= 를 두번 사용하여 해도 된다.
LIKE 연산자
SELECT * FROM TABLE WHERE COLUMN LIKE 'S%';
SELECT * FROM TABLE WHERE COLUMN LIKE '_L%';
SELECT * FROM TABLE WHERE COLUMN NOT LIKE '%AM%';
S로 시작하는 값 출력.
%
은 뒤에 몇 개의 문자가 오든 관계없고, 특정 개수를 지정하고 싶으면_
을 사용하면 된다.두번째 명령의 경우 L이 두번째 문자인, 즉 L앞에 문자 한개가 있고 그 뒤에는 몇개가 와도 상관없는 값을 출력하라는 의미이다.
세번째 명령은 AM이 포함되어 있지 않은 값을 출력하는 명령이다.
IS NULL / IS NOT NULL
- 값이 비어있거나 비어있지 않은 값만 출력하는 명령
- SELECT * FROM TABLE WHERE COLUMN IS NOT NULL;