SQL/SQLD.

[SQLD] SQL기본

devz0 2023. 3. 17. 12:26
728x90

관계형 데이터베이스

데이터 베이스란 여러 사람이 공유해 사용할 목적으로 체계화하여 통합, 관리하는 데이터의 집합이며 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다.

그중 관계형 데이터 베이스는 릴레이션 형태의 자료구조를 갖고있는 데이터베이스로 릴레이션을 사용해 집합 연산과 관계 연산이 가능하다.

릴레이션 = 테이블 = 엔티티
튜플 = ROW

집합 연산

집합 연산 설명
합집합(Union) - 두 개의 릴레이션을 하나로 합
- 중복된 행(튜플)은 한 번만 조회
차집합(Difference) - 본래 릴레이션에는 존재하고 다른 릴레이션에는 존재하지 않는 것 조회
교집합(Intersection) - 두 개의 릴레이션 간에 공통된 것 조회
곱집합(Cartesian product) - 각 릴레이션에 존재하는 모든 데이터 조합 연산

합집합 - UNION , UNION ALL

  • UNION - 합집합, 데이터 중복 제거, 정렬
  • UNION ALL - 합집합, 데이터 중복 포함, 정렬 X
SELECT EMPNO FROM EMP WHERE SAL <= 2000
UNION -- UNION ALL
SELECT EMPNO FROM EMP WHERE SAL >= 5000;

차집합 - MINUS(ORACLE) / EXCEPT(MS-SQL)

SELECT EMPNO FROM EMP WHERE EMPNO = 7369 OR EMPNO = 7499 OR EMPNO = 7521
MINUS
SELECT EMPNO FROM EMP WHERE EMPNO = 7369;
--결과 7369 데이터 제거

교집합 - INTERSECT

SELECT EMPNO FROM EMP WHERE EMPNO = 7369 OR EMPNO = 7499 OR EMPNO = 7521
INTERSECT
SELECT EMPNO FROM EMP WHERE EMPNO = 7369;

곱집합 - CROSS JOIN

관계 연산

  • 선택 연산 - WHERE 절
  • 투영 연산 - SELECT 절
  • 결합 연산 - JOIN
  • 나누기 연산 - DIVISION

 

연산순위

괄호 > 부정 > 비교 > 논리 AND > 논리 OR


 SQL 종류

  1. DDL(데이터 정의어) - 구조 정의 언어

        - CREATE / ALTER / DROP / RENAME/ TRUNCTATE 

🔥 ORACLE은 DDL 이후 AUTOCOMMIT / SQL-Server는 X

Oracle 과 SQL Server 차이 

# Oracle
ALTER TABLE CONTACTS
MODIFY (
	EMAIL VARCHAR2(500),
	PHONE VARCHAR2(500)
)

# SQL-Server
ALTER TABLE CONTACTS
	ALTER COLUMN(
		EMAIL VARCHAR2(500)
	)
ALTER TABLE CONTACTS
	ALTER COLUMN(
		PHONE VARCHAR2(500)
	)
  • 오라클 다중 컬럼 변경 가능, MS-SQL 다중 컬럼 변경 불가능 하나씩 작성해야함

    2. DML(데이터 조작어) - 입력, 수정, 삭제, 조회

        - SELECT / INSERT / UPDATE / DELETE

🔥 절차적 데이터 조작어
        - 사용자가 무슨(what) 데이터를 원하며, 어떻게(how) 접근하여 처리해야 하는지를 명세하는 저급 데이터 언어
        - 한번에 하나의 레코드(one record as a time)를 검색하여 호스트언어와 함께 처리하는 특성을 가짐
🔥 비절차적 데이터 조작어
         - 사용자가 무슨(what) 데이터를 원하는지만 명세하고, 어떻게(how) 접근하여 처리할 것인가에 대해서는 DBMS가
            처리하는 고급 데이터 언어
         - 한번에 여러 개의 레코드 처리
         - 질의어 (Query Language)

    3. DCL(데이터 제어어) - 권한 부여, 회수

        - GRANT / REVOKE

 

    4. TCL(트랜잭션 제어어) - 트랜잭션 제어

        - COMMIT / ROLLBACK / SAVEPOINT

🔥 ORACLE은 COMMIT 이후 AUTOCOMMIT / SQL-Server는 X

실행 순서

Parsing → Execution → Fetch

실행 순서 설명
Parsing -SQL문의 문법 확인, 구문 분석
- 분석이 끝난 SQL문 Library cache에 저장
Execution -옵티마이저가 수립한 실행 계획에 따라 SQL문 실행
Fetch - 데이터 인출

제약조건(CONSTRAINT)

제약조건 설명
PRIMARY KEY (기본키) NOT NULL + UNIQUE
FOREIGN KEY (외래키) 참조 무결성
CHECK 속성 도메인 (값의 범위)
NOT NULL 필수 값
UNIQUE 유일한 값 NULL 가능

 

트랜잭션

데이터베이스의 상태를 변화시키기 해서 수행하는 논리적인 작업 단위를 의미한다

특징  설명
원자성(ATOMICITY) All or Nothing
일관성(CONSISTENCY) 실행되기 전의 DB가 잘못되어 있지 않다면 트랜잭션 실행 이후에도 잘못이 있어선 안된다
고립성 = 격리성(ISOLATION) 실행도중 다른 트랜잭션의 영향을 받아 잘못된 결과가 있어선 안된다
영속성(DURABILITY) 성공적으로 수행되면 영구적으로 저장된다

트랜잭션 격리레벨

  • READ UNCOMMITED - TRANSACTION 격리 레벨 0
    • 다른 트랜잭션에서 아직 커밋되지 않은 내용도 참조 가능
    • DIRTY READ 발생
      • 아직 커밋되지 않은 데이터
  • READ COMMITED - 트랜잭션 격리 레벨 1
    • 다른 트랜잭션에서 커밋된 내용만 참조 가능
    • 온라인 서비스에서 가장 많이 사용하는 격리 레벨 수준
    • 오라클 기본 격리 수준
    • Non-Repetable Read
      • 한 트랜잭션 내에 같은 쿼리 두번 수행시 그 사이에 다른 트랜잭션이 값을 수정,삭제해 두 쿼리 값이 다름
  • Repeatble Read - 트랜잭션 격리 레벨 2
    • 트랜잭션에 진입하기 이전에 커밋된 내용만 참조 가능
    • Mysql InnoDB 기본 격리 수준
    • Phantom Read 발생
      • 한 트랜잭션 내에 같은 쿼리 두번 수행시 첫번째 쿼리에서 없든 유령 레코드가 두번째 쿼리에 발생
  • SERIALIZABLE - 트랜잭션 격리 레벨 3
    • 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션에 접근 할 수 없음

VIEW

가상의 테이블이다. 테이블을 참조해 원하는 컬럼만 조회가 가능하다.

VIEW의 특징

  • 참조된 테이블이 변경되면 뷰도 변경된다.
  • 검색은 참조된 테이블과 동일하게 가능하며 입력,수정,삭제는 제약된다.
  • 한번 생성되면 변경할 수 없어 삭제 후 재생성 해야한다.
  • ALTER 사용할 수 없다.

VIEW의 장점과 단점

장점  단점
- 특정 컬럼만 조회 = 보안 기능
- 데이터 관리 간편
- SELECT문 간단
-하나의 테이블에 여러개 뷰 생성 가능
- 독자적인 인덱스 불가
- 삽입, 수정,삭제 연산 제약
- 데이터 구조 변경X

형 변환

두 개의 데이터의 데이터 타입(형)이 일치하도록 변환하는 것을 의미한다.

 

형 변환 함수  설명
TO_NUMBER(str) 문자열을 숫자로 치환
TO_CHAR(int / date, [FORMAT]) 숫자 혹은 날짜를 지정된 format의 문자로 변환
TO_DATE(str, [FORMAT]) 문자열을 지정된 FORMAT의 날짜형으로 변환

명시적 형 변환

형 변환 함수를 사용해 데이터 타입을 일치 시킨다.

암시적 형 변환

개발자가 형 변환을 하지 않았을 경우에 자동으로 형 변환을 수행한다.

ROWNUM & ROWID

ROWNUM

SELECT문 결과에 대해 논리적인 일련번호 부여한다.

# 출력되는 값은??
SELECT *
FROM EMP e
WHERE ROWNUM > 1;

조회되지 않음 → 1행 가져와서 rownum 붙여주려고 하지만 조건에 맞지않아 날아감

  • 보통 10 이하의 데이터 추출시 사용

ROWID

데이터를 구분할 수 있는 유일한 값

728x90
반응형