YJ의 새벽
sqld (3) - SQL 기본 본문
- 관계형 데이터베이스
관계형 데이터베이스는 정규화를 통해 합리적인 모델링으로 이상현상을 제거하고 데이터 중복을 피할수 있다.
동시성 관리, 병행제어를 통해 많은 사용자가 동시에 데이터를 공유 및 조작할 수 있다.
보안기능을 제공하며, 데이터 무결성을 보장한다.
- SQL문 종류
1) DDL : 데이터 정의어
CREATE / ALTER / DROP / RENAME
2) DML : 데이터 조작어
SELECT / INSERT / UPDATE / DELETE
3) DCL : 데이터 제어어
GRANT / REVOKE
4) TCL : 트랜잭션 제어어
COMMIT / ROLLBACK
- 테이블명 설정 시 유의사항
- 단수형 권고
- 다른 테이블명과 중복 X
- 데이터 유형 반드시 지정
- A-Z , a-z , 0-9 , _ , $ , # 문자만 허용 함
- 테이블 명과 컬럼 명은 문자로 시작
- 주요 데이터 타입
1) CHAR : 고정길이 문자열
2) VARCHAR : 가변길이 문자열
3) NUMBER : 정수 및 실수
4) DATE : 날짜와 시각
- 제약 조건
1) 기본키 (PK)
하나의 테이블에 단 하나의 기본키만 정의 가능.
UNIQUE & NOT NULL
2) 고유키
UNIQUE
NULL 입력가능
3) NOT NULL
4) CHECK
입력할수 있는 값 종류 및 범위 제한
5) 외래키 (FK)
NULL 가능 ,
여러개 생성 가능.
- 테이블 구조 변경
-- 추가 : ALTER TABLE 테이블명 ADD ( 컬럼명 VARCHAR2(100));
-- 삭제 : ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
-- 수정 : ALTER TABLE 테이블명 MODIFY ( 컬럼명 VARCHAR2(100) DEFALUT '20240306' NOT NULL );
-- 제약조건 삭제 : DROP CONSTRAINT 조건명;
-- 제약조건 추가 : ADD CONSTRAINT 조건명 조건 ( 컬럼명 );
-- 테이블명 변경 : RENAME 테이블명 TO 바뀔테이블명 ;
-- 컬럼명 변경 : RENAME COLUMN 컬럼명 TO 바뀔컬럼명 ;
*** 제약조건 생성 / 추가
1) CREATE TABLE 테이블명 CONSTRAINT 테이블명_PK PRIMARY KEY (컬럼명 ) ;
2) ALTER TABLE 테이블명 ADD CONSTRAINT 테이블명_PK PRIMARY KEY ( 컬럼명 );
- DELETE // TRUNCATE // DROP
DELETE FROM 테이블명 : 로그 쌓음, 롤백 가능 , 사용자 COMMIT
TRUNCATE TABLE 테이블명 : 로그 쌓지않음, ( 테이블 스키마 구조 유지 ) AUTO COMMIT
DROP TABLE 테이블명 : 테이블 구조마저 완전 삭제 ( 테이블 정의 삭제 ) AUTO COMMIT
- 트랜잭션
트랜잭션은 데이터베이스의 논리적 연산단위
하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함됨
트랜잭션은 분할할 수 없는 최소의 단위이며 전부 적용하거나 전부 취소한다.
- 트랜잭션의 4가지 특성
1) 원자성 : 모두 성공적으로 끝나거나 모두 실패해야 함.
2) 일관성 : 실행되기 이전 데이터가 온전하다면, 실행된 이후에 데이터베이스 내용에 잘못이 있으면 안됨
3) 고립성 : 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안됨
4) 지속성 : 성공적으로 트랜잭션이 수행되면 영구적으로 저장됨.
- COMMIT / ROLLBACK / SAVEPOINT
1) COMMIT
COMMIT 이전에는 데이터 변경 이전 상태로 복구 가능함.
또한 현재 사용자는 결과를 확인할 수 있지만, 다른 사용자는 현재 사용자가 수행한 명령을 확인할 수 없음.
다른사용자가 변경 불가능.
COMMIT 이후에는 이전 데이터를 영원히 잃어버리게 됨.
모든 사용자가 결과를 확인할 수 있으며, 잠금이 풀리고 다른 사용자들이 조작할 수 있음.
2) ROLLBACK
3) SAVEPOINT
- 단일 행 함수
1) 문자형 함수
LOWER, UPPER, SUBSTR, LENGTH, RTRIM, LTRIM 등
2) 숫자형 함수
ABS, MOD, ROUND, TRUNC, SIGN, CEIL, FLOOR 등
3) 날짜형 함수
SYSDATE, EXTRACT 등
4) 변환형 함수
TO_NUMBER, TO_CHAR, TO_DATE 등
5) NULL 함수
NVL : NULL 이면 다른 값으로 바꾸는 함수.
NVL( MGR, 0 ) == MGR 컬럼이 NULL 이면 0 으로 바꾼다.
NVL2 : NVL 함수와 DECODE를 하나로 만든것.
NVL2( MGR, 1 , 0 ) == MGR 컬럼이 NULL 이 아니면 1 , NULL 이면 0 을 반환
NULLIF : 두 개의 값이 같으면 NULL , 같지 않으면 첫번째 값을 반환한다.
NULLIF ( exp1, exp2 ) == exp1 과 exp2 가 같으면 NULL, 같지 않으면 exp1 을 반환.
COALESCE : COALESCE ( MGR , 1 ) == MGR 이 NULL 이 아니면 1을 반환
- GROUP BY 절
- 집계함수의 통게 정보는 NULL 값을 가진 행을 제외하고 수행함.
예외적으로 COUNT(*) 는 NULL 값을 포함한 행의 수를 출력.
- GROUP BY 절에는 ALIAS 명을 사용할 수 없음 ( FROM 절에도 ALIAS 사용 불가 )
- HAVING 절은 GROUP BY 절에 조건을 주는 역할로 일반적으로 GROUP BY 절 뒤에 위치하지만
앞에도 위치할 수 있음.
- ORDER BY 절
- 특정 컬럼을 기준으로 정렬할 때 사용
- SELECT 절에 사용된 ALIAS 명이나, 컬럼 순서를 나타내는 정수도 사용할 수 있음
- 기본적으로 오름차순 ( ASC )
- ORACLE 내에서는 NULL 값을 가장 큰 값으로 간주함
- SELECT 절 내에 위치하고 있지 않는 컬럼도 ORDER BY를 수행할 수 있음.
'SelfStudy > sqld' 카테고리의 다른 글
sqld (4) - SQL 활용 (0) | 2024.03.06 |
---|---|
sqld (2) - 데이터 모델과 성능 (0) | 2024.02.21 |
sqld (1) - 데이터 모델링의 이해 (0) | 2024.02.21 |