제 8절. ORDER BY 절

1. ORDER BY 정렬

특정 칼럼을 기준으로 정렬하여 출력하는데 사용한다.

ORDER BY 절에 칼럼명 대신 ALIAS나 칼럼 순서를 나타내는 정수도 사용 가능하다.
기본 정렬 방식은 오름차순이다. (ASC)
SQL 문장 가장 마지막에 위치한다.

ORACLE 에서는 NULL 값을 가장 큰 값으로 간주하기 때문에 오름차순으로 정렬한 경우 NULL값이 가장 마지막에 출력된다.

2. SELECT 문장 실행 순서

ORDER BY 가 가장 마지막이다!

데이터가 있는 테이블을 참조한다 (FROM)
조건식으로 대상이 아닌 데이터를 제거한다 (WHERE)
소그룹화 한다 (GROUP BY)
그룹화 할 때 조건을 만족하는 것만 그룹화한다 (HAVING)
조회한다 (SELECT)
정렬한다 (ORDER BY)

이 순서는 옵티마이저가 SQL 문장의 문법, 구문 에러를 점검하는 순서이기도 하다.

ORDER BY 절에는 SELECT 문에 나타나지 않은 문자형 항목이 포함될 수 있다.
왜냐하면 데이터베이스가 데이터를 메모리에 올릴 때 행 단위로 모든 칼럼을 가져오게 되기 때문이다.
그래서 SELECT 절에서 일부의 칼럼만 선택하더라도 ORDER BY 절에서 메모리에 올라와 있는 다른 칼럼의 데이터를 사용할 수 있다.

5. SELECT 칼럼명
1. FROM 테이블명
2. WHERE 조건식
3. GROUP BY 칼럼이나 표현식
4. HAVING 그룹조건식
6. ORDER BY 칼럼이나 표현식 ;

3. TOP N 쿼리

ROWNUM

ORDER BY 절과 WHERE 절의 ROWNUM 조건을 같이 사용하면 순위가 높은 N 개의 행을 추출할 수 있다.
주의할 점은 오라클에서 데이터가 조회된 후 정렬을 한다는 점이다. (SELECT 이후에 ORDER BY 수행 )

사용 예) 게시판에서 페이지에 맞게 일정 개수의 글목록을 가져올 때 사용한다.

TOP

728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 6 : GROUP BY, HAVING  (0) 2020.05.27
SQL 기본 5 : 함수  (0) 2020.05.27
SQL 기본 4 : WHERE 절  (0) 2020.05.27
SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27

제 7절. GROUP BY, HAVING 절

 

1. 집계함수 (Aggregate Function)

집계함수는 여러 행들이 모여 단 하나의 결과를 돌려준다.

집계함수의 특징

GROUP BY 절은 행들을 소그룹화 한다.
SELECT 절, HAVING 절, ORDER BY 절에 사용할 수 있다.

집계함수의 종류

SUM, AVG, MIN, MAX ,STDDEV(표준편차), VARIAN(분산)

주의할 점

COUNT(*) : 전체 행 수
COUNT(HEIGHT) : 키의 건수
COUNT 안에 컬럼명을 적으면 NULL 값은 제외한 건수를 출력한다.

 

2. GROUP BY 절

GROUP BY 절은 데이터를 소그룹화 하여 항목별 통계 정보를 얻을 때 사용한다.

SELECT [DISTINCT] 칼럼명 
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼이나 표현식]
[HAVING 그룹조건식];

GROUP BY 절과 HAVING 절의 특징

  • GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
  • 집계 함수는 WHERE 절에 올 수 없다.
    (집계 함수를 사용할 수 있는 GROUP BY 보다 WHERE 절이 먼저 수행되기 때문이다. )
  • GROUP BY 절에는 SELECT 절과는 달리 ALIAS 를 사용할 수 없다.
  • GROUP BY 절에서 소그룹별로 집계된 데이터 중에서 HAVING 절에 쓰여진 제한 조건을 만족한 것만 출력한다.
  • 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
  • GROUP BY는 그룹화만 하는 것이지 정렬을 하지 않는다. ORDER BY 절이 데이터 정렬을 해준다.

3. HAVING 절

WHERE 절의 조건에 맞춰 걸러진 행들만 GROUP BY 의 대상이 된다. (그래서 WHERE 절에는 집계함수 사용이 불가하다.)
GROUP BY가 그룹화를 할 때 HAVING 절에서'조건'을 줄 수 있다.

SELECT  POSITION 포지션, ROUND(AVG(HEIGHT), 2) 평균키
FROM PLAYER
GROUP BY POSITION
HAVING AVG(HEIGHT) >= 180;

4개의 포지션 중에 평균키가 180 이 넘는 데이터를 출력한다.

GROUP BY 절과 HAVING 절의 순서를 바꿔도 에러가 없고 결과물도 동일하다. 하지만 GROUP BY 절 뒤에 HAVING 절을 쓰는 것을 권고한다.

가능한 WHERE 절에서 데이터를 많이 필터링 해둬서 GROUP BY의 계산 대상을 줄이는 것이 효율적인 자원 활용 측면에서 바람직하다.

 

4. CASE 표현을 활용한 월별 데이터 집계

IF-THEN-ELSE-END

IF    SAL > 2000
    THEN REVISED_SALARY = SAL
    ELSE REVIED_SALARY = 2000
END-IF

IF-THEN-ELSE

CASE
    SIMPLE_CASE_EXPRESSION 조건
    ELSE 표현절
END

 

5. NULL 관련 함수 (중요)

 

NULL 값의 특징

  • 아직 정의 되지 않은 값이다.
  • 0 또는 공백과는 다르다. ( 0은 숫자이고, 공백은 문자이다.)
  • 연산에 NULL이 포함되면 결과는 NULL이다.

NVL(exp1, exp2) 함수 NVL/ISNULL

  • 결과값을 "NULL이 아닌 다른 값"으로 얻고자 할 때 NVL/ISNULL 함수를 쓴다.
  • NVL(exp1, exp2)
  • exp1 이 NULL이라면 exp2 를 출력한다.
  • exp2는 대체값인 것이다.

NULLIF(exp1, exp2)

  • 특정 값을 null로 대체하는 경우에 주로 사용한다.
  • exp1 과 exp2가 같으면 NULL을 리턴한다. 다르면 exp1을 리턴한다.

COALESCE(exp1, exp2, ...)

  • 인수 중에서 NULL이 아닌 최초의 인수를 리턴한다.
  • 모든 인수가 NULL이라면 NULL을 리턴한다.
  • 인수의 개수가 무한하다.
728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 7 : ORDER BY  (0) 2020.05.28
SQL 기본 5 : 함수  (0) 2020.05.27
SQL 기본 4 : WHERE 절  (0) 2020.05.27
SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27

제 6절. 함수

1. 내장함수 (Built-In function) 개요

함수를 크게 분류하면 벤더에서 제공하는 내장함수와 사용자가 정의하는 함수가 있다.
입력 값이 단일행 값이 입력되는 단일행 함수와 여러 행의 값이 입력되는 다중행 함수가 있다.

함수는 입력되는 값이 많아도 출력되는 값은 1개다.

함수이름 (칼럼이나 표현식 [, 인수1, 인수2, ...])

단일행 함수의 종류

  • 문자형 함수
  • 숫자형 함수
  • 날짜형 함수 : DATE 타입 값을 연산한다.
  • 변환형 함수
  • NULL 처리 함수

단일행 함수의 특징

  • SELECT, WHERE, ORDER BY 절에 사용 가능하다.
  • 여러 인자를 입력해도 하나의 결과만 리턴한다.
  • 함수의 인자로 함수를 가질 수 있다.

2. 문자형 함수

문자 데이터를 매개 변수로 받아서 문자나 숫자 값의 결과를 돌려준다.

문자형함수 함수 설명
LOWER('SQL Expert') 'sql expert'
UPPER('SQL Expert') 'SQL EXPERT'
ASCII('A') 65
CHAR(65) 'A'
CONCAT('RDBMS', ' SQL') 'RDBMS SQL'
SUBSTR('HELLO', 3, 2) 'LL'
LEN('HELLO') 5
LTRIM('xxxYYZZ', 'x') 'YYZZ'

DUAL 테이블

ORACLE의 DUMMY 테이블이다.
사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.
DUMMY라는 문자열 유형의 칼럼에 'X'라는 값이 들어있는 행을 1건 포함한다.
반면 Sybase나 SQL Server에는 SELECT 절만으로도 SQL문장이 수행되므로 더미 테이블이 필요없다.

3. 숫자형 함수

숫자 데이터를 입력받아 처리하고 숫자를 리턴하는 함수다.

숫자형함수 함수 설명
ABS(-15) 15 절대값을 리턴한다.
SIGN(-20) -1
SIGN(0) 0
SIGN(20) 1
MOD(7, 3) 1
CEIL(38.123) 39
CEILING(-38.123) -38
FLOOR(38.123) 38
ROUND(38.523, 2) 38.52
ROUND(38.523, 0) 38
TRUNC(38.523, 1) 38.5
TRUNC(38.523) 38

4. 날짜형 함수

날짜형 함수 함수 설명
SYSDATE 현재 날짜와 시각을 출력
EXTRACT('YEAR' 'MONTH'
TO_NUMBER(TO_CAHR(D, 'YYYY') 날짜에서 연도만 출력하여 숫자로 변환

5. 변환형 함수

  • 명시적 데이터 유형 변환 : 데이터 변환형 함수 이용

  • 암시적 데이터 유형 변환 : 데이터베이스가 자동으로 데이터유형을 변환하여 계산

  • TO_NUMBER(문자열)

  • TO_CHAR(숫자 | 날짜 [, FORMAT])

  • TO_DATE(문자열 [, FORMAT])

728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 7 : ORDER BY  (0) 2020.05.28
SQL 기본 6 : GROUP BY, HAVING  (0) 2020.05.27
SQL 기본 4 : WHERE 절  (0) 2020.05.27
SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27

제 5절. WHERE절

1. WHERE 조건절 개요

WHERE 절에는 2개 이상의 테이블에 대한 JOIN 조건을 기술하거나, 결과를 제한하기 위한 조건을 기술한다.

SELECT 칼럼명
FROM 테이블명
WHERE 조건식;

2. 연산자의 종류

  • 비교연산자 : = (같다) <>, ^=, != (같지 않다), >, >=, <, <=

  • SQL 연산자 : BETWEEN A AND B, IN(list), IS NULL, LIKE '비교문자열'

  • 논리 연산자 : AND, OR, NOT

  • 부정 비교 연산자 : NOT 칼럼명 = (와 같지 않다), NOT 칼럼명 > (보다 크지 않다)

연산자의 우선순위

  1. 괄호 ()
  2. 부정 연산자 (not)
  3. 비교 연산자 ( <, >, BETWEEN, IN (list)
  4. 논리 연산자 AND OR

3. 비교 연산자

비교 연산자 오른쪽에 문자열을 사용할 경우, 따옴표로 묶어서 처리해야 한다.

SELECT PLAYER_NAME 선수이름
FROM PLAYER
WHERE TEAM_ID = 'K02'

WHERE TEAM_ID = K02 와 같이 쓰면 에러가 난다.
CHAR, VARCHAR 데이터유형일 때 주의해야 한다.

문자 유형마다 '비교'연산이 다르다.

기본적으로 서로 다른 문자가 나올 때 까지 비교한다.

  • CHAR 끼리 비교 : 길이가 다르면 짧은 쪽에 공백을 추가하여 길이를 같게 한 후 비교.
  • 한 쪽이 VARCAHR 인 경우 비교 : 길이가 다르다면, 길이가 긴 쪽을 크다고 판단. 길이가 같고 다른 것이 없다면 같다고 판단.
  • 문자를 상수와 비교 : 상수 쪽을 변수 쪽의 타입으로 바꾸고 비교

4. SQL 연산자

예약어로 된 연산자로서 모든 데이터 타입에 대한 연산이 가능하다.

  • BETWEEN a AND b : a와 b 를 포함하는 범위인지 비교
  • IN (list) : (list) 에 하나라도 속해 있다면 참이다.
  • LIKE '비교문자열' : %와 _을 사용한 와일드카드로 비교문자열을 만든다
  • IS NULL : NULL 값인지 비교한다. NULL 값과 비교하면 FALSE를 리턴한다.
NULL 값의 비교
  • NULL 값은 비교 할 수 없으므로 비교 연산자를 쓰면 FALSE를 리턴한다.
  • 수치 연산자와 연산해도 NULL 값을 리턴한다.
  • NULL 값의 비교연산은 반드시 IS NULL, IS NOT NULL 문구로 연산한다.
와일드 카드의 종류
  • % : 0개 이상의 어떤 문자
  • _ : 1개인 단일 문자
728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 6 : GROUP BY, HAVING  (0) 2020.05.27
SQL 기본 5 : 함수  (0) 2020.05.27
SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27
SQL 기본 1 : RDB 개요, DDL  (0) 2020.05.27

제 4절. TCL (Transaction Control Language)

1. 트랜잭션 개요

트랜잭션이란?

데이터베이스의 논리적 연산단위이다.
분할할 수 없는 최소 단위의 데이터베이스 조작이다.
최소 단위 이므로 ALL or NOTHING 의 개념이다.

트랜잭션 명령

  • COMMIT : 연산이 올바르게 반영된 데이터를 데이터베이스에 반영시킨다.
  • ROLLBACK : 트랜잭션 이전의 상태로 되돌린다.

트랜잭션의 특성

  • 원자성 : 트랜잭션의 연산이 모두 실행되거나 아니면 전혀 실행되지 않은 상태로 남아야한다. ALL or NOTHING
  • 일관성 : 데이터베이스 내용이 정상적이라면 트랜잭션이 실행된 이후에도 데이터베이스의 내용은 정상이어야 한다.
  • 고립성 : 트랜잭션이 실행되는 도중 다른 트랜잭션의 영향을 받지 않는다.
  • 지속성 : 트랜잭션이 성공적으로 수행되면, 그 결과는 데이터베이스에 영구적으로 저장된다.

트랜잭션의 특성을 충족시키기 위해 데이터베이스는 다양한 레벨의 잠금기능(LOCKING)을 제공한다.
잠금이 걸린 데이터는 잠금을 수행한 트랜잭션만이 해제할 수 있다.

2. COMMIT

트랜잭션을 완료하는 명령어.

  • COMMIT 이전
    DML로 데이터를 변경하는 것은 단지 메모리 버퍼에만 영향을 준것이므로 데이터 변경 이전의 상태로 복구할 수 있다.
    변경한 행은 잠금(LOCKING)되어서 다른 사용자가 변경할 수 없다.

  • COMMIT 이후
    데이터에 대한 변경 사항이 데이터베이스에 반영된다.
    이전 데이터는 영원히 잃어버리게 된다.
    모든 사용자가 결과를 볼 수 있다.

cf) ORACLE의 경우 DML 실행 시 COMMIT을 수행해줘야 DB에 반영된다.
반면, SQL SERVER는 기본적으로 모두 AUTO COMMIT이다.

데이터베이스를 정상적으로 접속 종료하면, 자동으로 트랜잭션이 커밋된다.

3. ROLLBACK

COMMIT 이전에 DML로 변경한 사항을 취소한다.
롤백을 하면 변경 사항이 취소되면서 조작한 행에 대한 잠금이 풀리고 다른 사용자들이 데이터를 변경할 수 있게 된다.

cf) SQL SERVER는 기본으로 AUTO COMMIT되므로, 롤백을 하려면 명시적으로 트랜잭션을 선언해야 한다.

COMMIT과 ROLLBACK의 효과

  • 데이터 무결성 보장
  • 논리적으로 연관된 작업을 그룹핑하여 처리 가능

4. SAVEPOINT

저장점을 정의하면 현 시점을 기준으로 특정시점(SAVEPOINT)까지 트랜잭션의 일부만 롤백할 수 있다.

SAVEPOINT SVP1;

ROLLBACK TO SVP1;

SQL SERVER의 경우, SAVE TRANSACTION 을 사용하여 동일한 기능을 수행한다.

SAVE TRANSACTION SVTR1;

ROLLBACK TRANSACTION SVTR1;

INSERT작업, SAVEPOINT1, UPDATE작업, SAVEPOINT2, DELETE, 현 시점 순으로 작업했을때,
SAVEPOINT1로 돌아간 후에, SAVEPOINT2로 (미래 방향으로) 돌릴 수는 없다.

왜냐하면 SAVEPOINT1으로 실행한 시점에는 SAVEPOINT2 저장점이 존재하지 않기 때문이다.

728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 5 : 함수  (0) 2020.05.27
SQL 기본 4 : WHERE 절  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27
SQL 기본 1 : RDB 개요, DDL  (0) 2020.05.27
Toad TNS file 검증 에러  (0) 2020.02.21

제 3절 DML (Data Manipulation Language)

테이블의 자료들을 입력, 수정, 삭제, 조회 하는 DML 사용 방법을 정리한다.

 

1. INSERT

두 가지 방법이 있다. 한 번에 한 건만 입력 된다.

INSERT INTO 테이블명 (COLUMN1, COLUMN2, COLUMN3) VALUES (DATA1, DATA2, DATA3);
INSERT INTO 테이블명 VALUES (DATA1, DATA2, DATA3);

첫 번째 유형은 작성한 칼럼 순서에 맞게 뒤에 값들 순서도 맞춰준다. (테이블 칼럼 순서에 맞출 필요 없다)
두 번째 유형은 테이블 칼럼 순서에 맞게 써야 하며 빠짐 없이 모든 칼럼에 대해 값을 넣어야 한다.

 

2. UPDATE

UPDATE 테이블명 
SET 칼럼명 = 새로운값;

UPDATE PLAYER
SET BACK_NO = 99
WHERE ID = 'MF2';

조건절 WHERE를 명시하지 않으면 모든 행에 대해 수정된다.

 

3. DELETE

조건절 WHERE를 명시하지 않으면 모든 행이 삭제된다.

DELETE [FROM] 테이블명 
WHERE 조건절;

DDL의 경우 명령어 입력과 동시에 AUTO COMMIT 되어어 테이블에 영향을 미친다.
DML의 경우, 테이블을 메모리 버퍼에 올려두고 작업한다. 그래서 DML 명령 후에 COMMIT 명령어 실행으로 TRANSACTION을 종료해야 테이블에 반영된다.

데이터를 삭제할 때 DELETE 명령은 삭제된 데이터를 로그로 저장한다.
이에 반해 TRUNCATE TABLE의 경우 로그 저장을 안하므로 ROLLBACK이 불가능하다.

 

4. SELECT

SELECT ALL/DISTINCT 칼럼명, 칼럼명, 칼럼명 ... 
FROM 테이블명;

ALL: 디폴트 옵션. 중복된 데이터도 모두 출력한다.
DISTINCT : 중복된 데이터는 1건으로 처리해서 출력한다.

SELECT PLAYER_ID, PLAYER_NAME, POSITION, HEIGHT
FROM PLAYER;

 

WILDCARD 사용하기

아스트리크(*) 를 사용하여 해당 테이블의 모든 칼럼을 조회할 수 있다.
SELECT * FROM 테이블명;

ALIAS 부여하기 (별명 붙이기)

칼럼명 바로 뒤에 적는다.
칼럼명 바로 뒤에 AS 키워드를 사용하여 별명을 붙여도 된다.
띄어쓰기를 포함한 경우에는 별명을 ""로 감싸준다.

SELECT PLAYER_NAME AS 선수명, HEIGHT AS 키
FROM PLYAER;

 

5. 산술 연산자와 합성 연산자

산술 연산자

NUMBER 와 DATE 자료형에 적용된다.
사칙연산이 가능하다.
괄호를 이용하여 우선순위 적용이 가능하다.

SELECT PLAYER_NAME 이름, ROUND(WEIHGT/(HEIGHT/100), 2) "BMI 비만지수"
FROM PLAYER;

합성 연산자 (CONCATENATION)

문자와 문자를 연결한다.

  • ORACLE 의 경우 || , SQL SERVER 의 경우 + 표시로 연결한다.
  • CONCAT(STRING1 , STRING2) 함수를 사용할 수 있다.
  • 문자 표현식의 결과로 새로운 칼럼을 생성한다.

아래 예시는 3개의 컬럼의 데이터들을 이어붙여서 '체격정보'라는 새로운 칼럼을 생성한다.

SELECT PLAYER_NAME ||'선수' || HEIGHT || 'cm' || WHEIGHT || 'kg' 체격정보
FROM PLAYER;
728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 4 : WHERE 절  (0) 2020.05.27
SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 1 : RDB 개요, DDL  (0) 2020.05.27
Toad TNS file 검증 에러  (0) 2020.02.21
실습 환경 만들기 - Toad 설치  (0) 2020.02.21

제 1절 관계형 데이터베이스 개요

1. 데이터베이스

관계형 데이터베이스

정규화를 통한 합리적인 테이블 모델링을 통해 이상(anomaly)현상을 제거하고 데이터 중복을 피할 수 있으며, 동시성 관리, 병행 제어를 통해 많은 사용자들이 동시에 데이터를 공유 및 조작할 수 있는 기능을 제공한다.

2. SQL (Structured Query Language)

관계형 데이터베이스에서 데이터 정의, 조작, 제어를 하기 위해 사용하는 언어다.
ANSI/ISO 를 통해 표준화 되고 있다.

SQL 명령의 종류

DML (데이터 조작어)

SELECT (== retrieve), INSERT, UPDATE, DELETE

DDL (데이터 정의어)

CREATE, ALTER, DROP, RENAME

DCL (데이터 제어어)

GRANT, REVOKE
권한을 주거나 회수한다

TCL (트랜젝션 제어어)

COMMIT, ROLLBACK

3. Table

테이블은 데이터를 저장하는 객체(OBJECT)로서 관계형 데이터베이스의 기본 단위이다.
관계형 데이터베이스는 모든 데이터를 칼럼과 행의 2차원 구조로 나타낸다.
칼럼은 특정 속성을 나타낸다.
칼럼과 행이 겹치는 하나의 공간을 필드라고 한다.

정규화 : 테이블을 분할하여 데이터의 정합성을 확보하고, 불필요한 중복을 줄이는 프로세스
기본키(PRIMARY KEY) : 테이블의 각 행들을 식별할 수 있는 한 개 이상의 칼럼
외래키(FOREIGN KEY) : 다른 테이블의 기본키로 사용되고 있는 관계를 연결하는 칼럼

4. ERD (Entity Relationship Diagram)

ERD 의 구성요소는 엔터티, 관계 속성 3가지 이다.

제 2절 DDL (Data Definition Language)

1. 데이터 유형

character(s)

s 만큼의 고정 길이 문자열 정보
기본 1byte 최대 2000byte

varchar(s)

가변 길이 문자열 정보

char 와 varchar의 '비교 방법'
char는 비교할 때 공백을 채워서 비교한다. 
varchar 공백이 다르면 다른 문자로 판단한다. 공백도 하나의 문자로 취급한다. 

numeric

정수, 실수 등 숫자 정보
처음에 전체 자리수, 뒤에 소수 부분 자리 수를 지정한다
전체 8자리이고 소수 부분2자리 라면 number(8, 2)

date

날짜와 시각 정보

2. CREATE TABLE

구문 형식

CREATE TABLE 테이블명(
    PLAYER DATATYPE [DEFAULT 형식] NOT NULL,
    TEAM DATATYPE [DEFAULT 형식] NOT NULL,
    STADIUM_ID CHAR(3) NOT NULL,
    CONSTRAINT PALYER_PK PRIMARY KEY (PLAYER),
    CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);

주의사항

테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.
한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.
칼럼 뒤에 데이터유형은 반드시 지정해야 한다.
벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.
A-Z, a-z, 0-9, '_', '$', '#' 문자만 허용한다.

칼럼에 대한 제약조건이 있으면 CONSTARINT 를 이용하여 추가할 수 있다.
DATETIME 데이터 유형에는 별도로 크기를 지정하지 않는다.
제약조건은 칼럼의 데이터 유형 뒤에 작성하는 칼럼 LEVEL 정의 방식이 있고, CONSTRAINT 로 테이블 LEVEL 정의 방식이 있다. 기능은 동일 하다.

제약조건의 종류

  • PRIMARY KEY (기본키)
    행 데이터를 고유하게 식별하기 위한 기본키를 정의한다.
    하나의 테이블에 하나의 기본키 제약만 정의할 수 있다.
    ( PK = NOT NULL + UNIQUE KEY )

  • UNIQUE KEY (고유키)
    행 데이터를 고유하게 식별하기 위한 고유키를 정의한다.
    단, NULL은 고유키의 제약 대상이 아니다. (NULL 여러개 가능)

  • NOT NULL
    NULL 값 입력을 금지한다.

  • CHECK
    입력할 수 있는 값의 '범위'를 제한한다.
    제약으로는 TRUE or FALSE 로 평가할 수 있는 '논리식'을 지정한다.

  • FOREIGN KEY
    테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우에 외래키가 생성된다.

SELECT 문장을 통한 테이블 생성

CTAS (create table ~ as select ~)
기존 테이블을 이용하여 테이블을 생성하면 데이터유형을 재정의 안 해도 된다는 장점이 있다.
단, 주의할 점은 기존 테이블의 제약조건 중에 NOT NULL만 새로운 복제 테이블에 적용이 된다. 나머지 PK, FK 등의 다른 제약 조건은 없어진다. ALTER TABLE로 제약조건 추가하는 작업이 필요하다.

3. ALTER TABLE

ADD COLUMN

ALTER TABLE 테이블이름 
ADD 칼럼이름 DATATYPE;

주의 할 점은 추가할 칼럼의 위치를 지정할 수 없다는 것이다.

ALTER TABLE TEAM
ADD ADDRESS VARCHAR(20);

DROP COLUMN

ALTER TABLE 테이블이름
DROP COLUMN 삭제할 칼럼이름;

주의 할 점은 한 번 삭제된 칼럼은 복구가 불가능하다.

ALTER TABLE TEAM
DROP COLUMN ADDRESS;

MODIFY COLUMN

칼럼의 제약조건, 디폴트값, 데이터유형을 변경할 수 있다.

ALTER TABLE 테이블이름
MODIFY (칼럼이름1 데이터유형 [DEFAULT 값] [NOT NULL],
        칼럼이름2 데이터유형);
  • 해당 칼럼이 NULL값만 가지고 있거나 테이블에 아무 행 도 없으면 칼럼의 폭을 줄일 수 있다.
  • 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못한다. (기존 데이터가 훼손될 수 있기 때문이다.)
  • 해당 칼럼의 DEFAULT값을 변경 할 수 있지만, 변경 작업 이후 발생한 행에만 영향을 미친다.
  • 해당 칼럼에 NULL 값이 없는 경우에만 NOT NULL 제약조건을 추가할 수 있다.

RENAME COLUMN

칼럼명을 변경해야 하는 경우에 RENAME COLUMN 문구를 사용한다.

ALTER TABLE 테이블이름
RENAME COLUMN 변경해야 할 칼럼 TO 새 칼럼이름;

ALTER TABLE TEAM
RENAME COLUMN ADDREEE TO ADDRESS;

DROP CONSTRAINT

제약조건을 삭제하는 명령어.

ALTER TABLE 테이블이름
DROP CONSTARINT 제약조건이름;

ADD CONSTRAINT

제약조건을 추가하는 명령어.

ALTER TABLE 테이블이름 
ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);

ALTER TABLE PLAYER
ADD CONSTRAINT TEAM_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);

4. RENAME TABLE

RENAME으로 테이블이름을 변경할 수 있다
RENAME 테이블이름 TO 새 테이블이름

5. DROP TABLE

테이블의 구조 및 데이터 전부를 삭제한다.

DROP TABLE 테이블이름 [CASCADE CONSTRAINT];

CASCADE CONSTRAINT : 삭제 할 테이블과 관계 있는 제약조건까지 전부 삭제하는 옵션

6. TRUNCATE TABLE

테이블의 모든 행들을 삭제하고 재사용하기 위한 명령.
테이블 구조 자체가 삭제되는 것은 아니다.

TRUNCATE TABLE 테이블이름;

DELETE 보다 시스템 부하가 적다.
단, TRUNCATE TABLE의 경우 정상적인 복구가 불가능하므로 주의하여 사용해야 한다.

728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 3 : TCL  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27
Toad TNS file 검증 에러  (0) 2020.02.21
실습 환경 만들기 - Toad 설치  (0) 2020.02.21
실습 환경 만들기 - Oracle XE 설치  (0) 2020.02.21

+ Recent posts