[SQL] SQLD

G ON·2024년 3월 4일

SQL

목록 보기
19/21
post-thumbnail

데이터 모델링의 이해

데이터 모델링의 이해

중복
여러 장소 같은 데이터 최소화
비유연성
유지보수 관리 및 정의와 프로세스 분리
비일관성
데이터 간 상호 연관 관계 정의

외부 스키마
여러 사용자 관점 "구성"
개념 스키마
조직 전체 관점 "통합"
내부 스키마
물리적 저장 구조

연관 관계
소스 코드. 멤버 변수 선언.
의존 관계
오퍼레이션. 파라미터.

데이터 모델과 SQL

어떤 릴레이션 R이 제2정규형이고, 기본키에 속하지 않은 속성 모두가 기본키에 이행적 함수종속이 아닐 때 제3정규형에 속한다.

정규화논리 데이터 모델 상세화 과정의 대표적인 활동으로, 논리 데이터 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 엔터티에 배치되도록 함으로써 보다 더 신뢰성 있는 데이터 구조를 얻는데 목적이 있다.

식별관계
부모의 식별자를 자식의 식별자에 포함할 때
비식별관계
부모의 식별자를 자식의 일반속성으로 상속할 때

SQL 기본 및 활용

DML
SELECT, INSERT, UPDATE, DELETE

DDL
CREATE, ALTER, DROP, RENAME

DCL
GRANT, REVOKE

TCL
COMMIT, ROLLBACK

GROUP BY
NULL 또한 그룹 처리

JOIN ON절 조건

A LEFT OUTER JOIN B
ON (A.x IN(1, 2) AND A.y=B.z)

IN(1, 2) 조건이 WHERE절이라면 해당 조건 부합 행만 반환하지만, ON절에 조건이므로 A테이블 모든 행을 반환. 즉, 다른 조건 미부합 행은 NULL로 출력.

NULL 연산
SUM(col1). 세로 연산 경우 NULL을 제외한 후 연산, col1 + col2. 가로 연산 경우 NULL을 포함한 행은 NULL 반환

순수 관계 연산자
SELECT 연산 WHERE 절로 구현
PROJECT 연산 SELECT 절로 구현
JOIN 연산 다양한 JOIN 기능으로 구현
DIVIDE 현재 사용 X

DBMS 옵티마이저FROM 절에 나열된 테이블이 아무리 많아도 항상 2개의 테이블씩 짝을 지어 JOIN 수행

FULLOUTER JOIN == LEFT OUTER JOIN UNION(중복 제거) RIGHT OUTER JOIN

서브쿼리
SELECT, FROM, WHERE, HAVING, ORDER BY 절에서, 단일 행 또는 복수 행 비교 연산자와 함께 사용할 수 있으며 연관 서브쿼리는 메인쿼리 컬럼을 포함하고 있는 형태이다. 다중 컬럼 서브쿼리는 서브쿼리 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 비교되는데, ORACLE에서만 지원한다.

서브쿼리 단일행 비교 연산자 +, <, <=, >, >=, <>
서브쿼리 다중행 비교 연산자 IN, ALL ...

VIEW
독립성(응용 프로그램 변경 필요 X), 편리성(복잡 질의 단순하게 작성), 보안성(특정 컬럼 제외 생성 가능)

윈도우 함수의 결과는 함수처리로, 결과 건 수에 영향을 주지 않는다.

RANK
중복 값 동차 순위 적용 후, 중복 순위들을 건너 뛰고 다음 순위 책정(5, 5, 5, 8)

DENSE RANK
중복 값 동차 순위 적용 후, 중복 순위들을 건너 뛰지 않고 순차적으로 다음 순위 책정(5, 5, 5, 6)

REVOKE
권한 취소 경우, 취소 당한 권한자로부터 권한을 부여 받은 권한 역시 연쇄적으로 취소

TRANSACKTION
데이터베이스의 논리적 연산 단위를 가리키는 용어

DELETE(/MODIFY) Action
CASCADE: Master 삭제 시, Child 삭제
Set NULL: Master 삭제 시, Child 해당 필드 NULL
Set Default: Master 삭제 시, Child 해당 필드 Default
RESTRICT: Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용
DEPENDENT: Master 테이블에 PK 값이 없는 경우, Child 테이블에 입력 불가

SELECT 절에 기술되지 않은 컬럼은 ORDER BY 절에 사용될 수 없으나, ORACLE은 행기반 database이므로 데이터를 엑세스할 때 행 전체 컬럼을 메모리에 로드하므로 가능하다.

ORACLE 시간 연산
1/24/60 == 1분
1/12/(60/30) == 1/12/2 == 1/24 == 1시간

ORACLE OUTER JOIN 표기

ORACLE
FROM A, B
WHERE A.x = B.x(+)
AND B.y(+) = 'N'

: ORACLE OTUER JOIN은 (+)표기. ORACLE 조건(+)을 ANSI 문장으로 변경할 경우, ON절에 삽입해야 동일 적용.

ORACLE → ANSI
FROM A LEFT OUTER JOIN B
ON (A.x = B.x == ORACLE ver WHERE A.x = B.x(+) 
AND B.y ='N') == ORACLE ver AND B.y(+) = 'N'

NULL

NULL에는 어떤 연산도 NULL
NULL = NULLFALSE 또는 UNKNOWN

ORACLE

공백 ' '
NULL 처리

NVL(a, b)
a가 NULL이면, b 반환

NVL2(x, a, b)
NULL 대상 x, x가 NULL이 아니면, a 반환, x가 NULL이면, b 반환

SQL server

공백 ' '
공백 ' ' 처리(NULL은 NULL 처리)

NULLIF(a, b)
a == b이면 NULL 반환, a != b이면 a 반환

IFNULL(a, b) / ISNULL(a, b)
a가 NULL이면, b 반환

COALESCE(a, b, ..., n)
NULL이 아닌 인자를 반환

0개의 댓글