자격증/SQLD

SQLD(3)-SQL기본1

jhs0129 2021. 8. 11. 17:45
320x100
반응형
  • 관계형 데이터베이스

*데이터베이스의 종류 - 계층형(tree형태 1:N, 부모자식관계표현 쉬움), 네트워크형(Owner-Member형태로 저장 1:N, N:M), 관계형(relation에 저장관리)

 

  • 관계형 데이터베이스 연산 - 집합연산, 관계연산

집합연산 - 합집합, 차집합, 교집합, 곱집합

관계연산 - 선택연산(행(tuple) 조회), 투영연산(조건에 맞는 열(attribute) 조회), 결합연산(join), 나누기연산(중복된 행제거)

 

테이블 구조 - PK, Row(Tuple), Column(Attribute), FK(타 테이블 PK참조 - join연산 사용) 

 

  • SQL종류

DDL - 데이터베이스 구조 정의( CREATE, ALTER, DROP, RENAME )

DML - 데이터 관리( INSERT, UPDATE, DELETE, SELECT )

DCL - 권한 부여, 회수( GRANT, REVOKE, TRUMCAT )

TCL - 트랜잭션 제어( COMMIT, ROLLBACK, SAVEPOINT)

 * 순서 - DCL로 권한주고 DDL로 구조 정의하고 DML로 데이터 관리

 

  • 트랜잭션 - 데이터베이스의 작업을 처리하는 단위 ACID(Atomicity, Consistency, Isolation, Durability)

원자성 - 완전히 실행 혹은 전혀 실행X => 실행 끝나지 않으면 처음과 같아야 함

일관성 - 실행전과 후에도 일관성이 유지되어야 함

고립성 - 실행중에 접근 할 수 없음

영속성 - 트랜잭션 성공시 결과 영구적

 

  • SQL 실행순서 - Parsing, Execution, Fetch

Parsing - 문법확인 구문분석( 구문분석한 문장은 Library Cache에 저장)

Execution - Optimizer가 SQL실행

Fetch - 데이터 전송

 

  • DDL
  • 테이블

생성 - CREATE TABLE [TABLE_NAME]

constraint를 사용해서 기본키의 이름 설정( contraint pk_name primary key (column_name) )

외래키 지정하기 전에 해당 테이블 먼저 생성( foreign key(column_name) reference [table_name] (column_name) )

 * CASECADE - 참조관계가 있을 경우 참조되는 데이터 자동 반영

ON DELETE CASECADE(삭제되면 같이 삭제)

 

변경 - ALTER TABLE [TABLE_NAME] RENAME TO [NEW_NAME] - 테이블 이름변경

         ALTER TABLE [TABLE_NAME] ADD ( ... ) - 칼럼추가

         ALTER TABLE [TABLE_NAME] MODIFY ( ... ) - 칼럼변경( 데이터 타입, 데이터 길이, 제약조건, 기존 데이터타입이                                                                                   변경타입과 일치하지 않으면 에러발생 )

         ALTER TABLE [TABLE_NAME] DROP COLUMN [COLUMN_NAME] - 칼럼 삭제

         ALTER TABLE [TABLE_NAME] RENAME COLUMN [COLUMN_NAME] TO [NEW_NAME] - 칼럼 이름 변경

 

삭제 - DROP TABLE [TABLE_NAME] - CASECADE CONSTRAINT 사용시 외래키로 참조한 테이블 관련된 제약사항 제거

 

  • 뷰 - 테이블로부터 유도된 가상의 테이블

*참조한 테이블 변경시 같이 변경, 원하는 칼럼만 조회-> 보안성향상, 변경불가, 삽입 수정 삭제 제약, 데이터구조 변경X

생성 - CREATE VIEW

삭제 - DROP VIEW

 

  • DML
  • INSERT INTO [TABLE_NAME] (column...) VALUES (expression....)

모든 칼럼에 입력시 칼럼명 생략가능

마지막으로 Commit을 실행해서 최종적으로 데이터 저장 ( Auto Commit사용시 자동으로 설정)

 

SELECT 문으로도 입력가능

INSERT INTO [TABLE1] SELECT * FROM [TABLE2];

 

  • UPDATE [TABLE_NAME] SET COLUMN="VALUE" (WHERE절 사용해서 조건 걸 수 있음)
  • DELETE FROM [TABLE_NAME] (WHERE절 사용해서 조건 걸 수 있음)

삭제를 한다해도 테이블의 용량이 초기화 되지 않음

전체 삭제해도 테이블은 남아 있음

 

*테이블 데이터 전체 삭제

DELETE FROM TABLE   vs   TRUNCATE TABLE TABLE

데이터 삭제 용량 남음          데이터 삭제 용량도 초기화

 

  • SELECT ~FROM ~WHERE

검색시 ORDER BY를 사용해서 정렬 할수 있음( ASC - Default 값, DESC ) - 출력 직전에 정렬

DISTINCT - 중복된 데이터를 한번만 조회

ALIAS - 테이블명이나 칼럼명을 간략히 할때 사용 ( TABLE_NAME AS TN )

 

320x100
반응형