SQL 활용

Dogeun Lee·2023년 10월 18일
0

SQLD SQL

SQLD에서는 DDL DML DCL TCL을 분리해서 기억
DDL Create Alter Drop Rename
DML Insert Update Delete Select
DCL Revoke Grant
TCL Commit Rollback Savepoint

DML은 무슨 데이터를 원하는지만을 명세함. As-Is
절차적 데이터 조작어는 어떻게(How) 접근할것인지를 명세한다. PL/SQL, T-SQL

ORACLE SQL 테이블정의 ( PK포함 )

CREATE TABLE PRODUCT (
PROD_ID VARCHAR2(10) NOT NULL,
PROD_NM VARCHAR2(100) NOT NULL,
REG_DT DATE NOT NULL,
REGR_NO NUMBER(10),
CONSTRAINT PRODUCT_PK PRIMARY KEY (PROD_ID)
);

pk 정의 시 CONSTRAINT PK이름 PRIMARY KEY (컬럼)

SQL SERVER 컬럼 재정의

** SQL서버에서는 여러개의 컬럼ㅇ르 동시에 수정하는 구문은 지원하지 않는다.
** 괄호를 사용하지않는다.

기본키

'기본키를 구성하는 컬럼이 복수일 수는 있어도'
'기본키가 복수일 수는 없다'

UNIQUE

테이블에 중복된 값은 허용하지 않으나 NULL값은 허용한다.

NULL을 허용하는 DDL문

CREATE TABLE EMP(
EMP_NO VARCHAR2(10) PRIMARY KEY,
EMP_NM VARCHAR2(30) NOT NULL,
DEPT_CD VARCHAR2(4) DEFAULT '0000' NOT NULL,
JOIN_DATE DATE NOT NULL,
REGIST_DATE DATE NULL <<<<< 이와같이 NULL만 작성 만약 조회시에는 IS NULL
);

집계함수에 대하여

SELECT COUNT(*) FROM PRODUCT;
SELECT COUNT(REGR_NO) FROM PRODUCT;
1번의 조회 결과는 3이나온다.
2번의 결과는 REGR_NO 중 NULL값이 존재하므로 2가 출력된다.

FK

FK는 null값을 가질수있다
여러개도 가질수있다.
테이블생성시 설정 가능하다.
참조무결성제약을 받을수있다.

check 제약조건?


CHECK는 값의 범위 또는 패턴을 정의할 때 사용하는 제약 조건이다.
예를 들면 특정 열에 들어가는 문자열이 반드시 5글자 이상이어야 한다거나, 
특정 열에 들어가는 숫자는 반드시 1000을 넘어야 한다는 조건 등을 설정해 두는 것이다.


인라인(inline) 제약 조건 정의
-- 제약 조건 이름 미기입 시
CREATE TABLE [테이블 이름](
  (다른 열 정의 문법 생략),
  [열 이름] [열 자료형] CHECK [해당 열의 조건 설정]
);

-- 제약 조건 이름 기입 시
CREATE TABLE [테이블 이름](
  (다른 열 정의 문법 생략),
  [열 이름] [열 자료형] CONSTRAINT [제약 조건 이름] CHECK [해당 열의 조건 설정]
);


아웃오브라인(out-of-line) 제약 조건 정의
CREATE TABLE [테이블 이름](
  [지정할 열 이름] [지정할 열 자료형],
  (다른 열 정의 문법 생략),
  CONSTRAINT [제약 조건 이름] CHECK [해당 열의 조건 설정]
);

컬럼의 추가 삭제

Oracle 기준
추가
ALTER TABLE {TABLE_NAME} ADD {COLUMN_NAME}{DATA_TYPE}
제거
ALTER TABLE {TABLE_NAME} DROP COLUMN {COLUMN_NAME};

RENAME

RENAME {BEFORE_TABLE_NAME} TO { NEW_TALBE_NAME }

정의참조동작

CASECADE : 연쇄
RESTRICT : 삭제방지
DEPENDENT : 입력방지로 기억하자 당분간은..

insert

 	컬럼 명시하면 not null이 아닌건 다들어간다
    컬럼을 명시하지않으면 무조건 모든 값을 순서에 맞게 작성

Delete와 Truncate의 차이점

delete는 로그를 남기지만 + 디스크 사용량을 초기화하지않는다
truncate는 로그를 남기지 않는다. + 디스크 사용량을 초기화한다.

T/S 격리성이 낮아서 발생하는 문제점

1. Dirty Read : T/S이 수정되었지만 데이터가 커밋이 되지 않은 것을 읽는 것
2. Non-Repeatable Read : 한T/S에서 같은쿼리를 두번수행 >> 그사이에 다른 T/S이 수행되어 두 쿼리 결과가 다르게 나타남
3. Phantom Read : 한/TS에서 같은 쿼리를 두번실행 >> 1쿼리에서없던 유령 레코드가 두번째 쿼리에서 나타나는것

ORACLE 과 SQLServer의 차이

**조건 : 오토커밋은 꺼져있다.

오라클 DDL 수행후 자동 커밋
SQLS는 DDL 문장 수행 후 자동으로 커밋되지않는다.

profile
오대수

0개의 댓글