SQL 13

SQLD - SQL 활용 (PIVOT 절과 UNPIVOT 절, 정규 표현식)

데이터의 구조LONG DATA (Tidy data)하나의 속성이 하나의 컬럼으로 정의되어 값들이 여러 행으로 쌓이는 구조RDBMS의 테이블 설계 방식다른 테이블과의 조인 연산이 가능한 구조WIDE DATA(Cross table)행과 컬럼에 유의미한 정보 전달을 목적으로 작성하는 교차표하나의 속성값이 여러 컬럼으로 분리되어 표현RDBMS 에서 WIDE 형식으로 테이블 설계 시 값이 추가될 때마다 컬럼이 추가돼야 하므로 비효율적다른 테이블과의 조인 연산이 불가능주로 데이터를 요약할 목적으로 사용 데이터 구조 변경PIVOT : LONG → WIDEUNPIVOT : WIDE → LONG PIVOT교차표를 만드는 기능STACK 컬럼, UNSTACK 컬럼, VALUE 컬럼의 정의가 중요FROM 절에 STACK, U..

SQL 2024.11.16

SQLD - SQL 활용 (Top N 쿼리, 계층형 질의)

TOP N QUERY페이징 처리를 효과적으로 수행하기 위해 사용전체 결과에서 특정 N개 추출예) 성적 상위자 3명TOP-N 행 추출 방법ROWNUMRANKFETCHTOP N(SQL Server) ROWNUM출력된 데이터 기준으로 행 번호 부여절대적인 행 번호가 아닌 가상의 번호이므로 특정 행을 지정할 수 없음(= 연산 불가)첫 번째 행이 증가한 이후 할당되므로 '>' 연산 사용 불가(0은 가능)EQUAL 비교 시 작다(정렬 순서에 따라 출력되는 ROWNUM이 달라짐 FETCH 절출력될 행의 수를 제한하는 절ORACLE 12C 이상부터 제공(이전 버전에는 ROWNUM 주로 사용)SQL-Server 사용 가능ORDER BY 절 뒤에 사용 (내부 파싱 순서도 ORDER BY 뒤)문법OFFSET : 건너뛸 행의..

SQL 2024.11.16

SQLD - SQL 활용 (윈도우 함수)

WINDOW FUNCTION서로 다른 행의 비교나 연산을 위해 만든 함수GROUP BY를 쓰지 않고, 그룹 연산 가능LAG, LEAD, SUM, AVG, MIN, MAX, COUNT, RANK PARTITION BY 절출력할 총 데이터 수 변화 없이 그룹연산 수행할 GROUP BY 컬럼 ORDER BY 절 RANK 의 경우 필수 (정렬 컬럼 및 정렬 순서에 따라 순위 변화)SUM, AVG, MIN, MAX, COUNT 등은 누적값 출력 시 사용ROWS(RANGE BETWEEN A AND B)연산 범위 설정ORDER BY 절 필수※ PARTITION BY, ORDER BY, ROWS 절 전달 순서 중요(ORDER BY를 PARTITION BY 전에 사용 불가)  그룹 함수의 형태SUM, COUNT, AVG..

SQL 2024.11.16

SQLD - SQL 활용 (집합 연산자, 그룹 함수)

집합 연산자SELECT 문 결과를 하나의 집합으로 간주, 그 집합에 대한 합집합, 교집합, 차집합 연산SELECT 문과 SELECT 문 사이에 집합 연산자 정의두 집합의 컬럼이 동일하게 구성되어야 함(각 컬럼의 데이터 타입과 순서 일치 필요)전체 집합의 데이터 타입과 컬럼명은 첫 번째 집합에 의해 결정됨 합집합두 집합의 총 합(전체) 출력UNION과 UNION ALL 사용 가능UNION중복된 데이터는 한 번만 출력중복된 데이터를 제거하기 위해 내부적으로 정렬 수행중복된 데이터가 없을 경우는 UNION 사용 대신 UNION ALL 사용 (불필요한 정렬 발생할 수 있으므로)UNION ALL중복된 데이터도 전체 출력 교집합두 집합 사이에 INTERSECT두 집합의 교집합(공통으로 있는 행) 출력 차집합두 집합..

SQL 2024.11.16

SQLD - SQL 활용(서브 쿼리)

서브 쿼리하나의 SQL 문안에 포함되어 있는 또 다른 SQL 문을 말함반드시 괄호로 묶어야 함 서브쿼리 사용 가능한 곳SELECT 절FROM 절WHERE 절HAVING 절ORDER BY 절기타 DML(INSERT, DELETE, UPDATE) 절※ GROUP BY 절 사용 불가 서브 쿼리 종류동작하는 방식에 따라UN-CORRELATED(비연관) 서브쿼리서브쿼리가 메인 쿼리 컬럼을 가지고 있지 않은 형태의 서브쿼리메인 쿼리에 서브 쿼리가 실행된 결과 값을 제공하기 위한 목적으로 사용CORRELATED(연관) 서브쿼리서브 쿼리가 메인 쿼리 컬럼을 가지고 있는 형태의 서브 쿼리일반적으로 메인 쿼리가 먼저 수행된 후에 서브쿼리에서 조건이 맞는지 확인하고자 할 때 사용위치에 따라스칼라 서브 쿼리SELECT에 사용..

SQL 2024.11.16

SQLD - 데이터 모델과 SQL(모델이 표현하는 트랜잭션의 이해, Null 속성의 이해, 본질 식별자 VS 인조 식별자)

트랜잭션이란하나의 연속적인 업무 단위를 말함트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐하나의 트랜잭션에는 여러 SELECT, INSERT, DELETE, UPDATE 등이 포함될 수 있음 ※ 주의한 트랜잭션에서 연관 사건이 독립적으로 발생하면 안 됨부분 COMMIT 불가동시 COMMIT 또는 ROLLBACK 처리 필수적, 선택적 관계와 ERD두 엔터티의 관계가 서로 필수적일 때, 하나의 트랜잭션을 형성두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현 IE 표기법)원을 사용하여 필수적 관계와 선택적 관계를 구분필수적 관계에는 원을 그리지 않는다.선택적 관계에는 관계선 끝에 원을 그린다.바커 표기법)실선과 점선으로 구분필수적 관계는 관계선을 실선으로 표기선택적 관계는 관계션을 점선으로 표기..

SQL 2024.11.15

SQLD - 데이터 모델과 SQL (관계와 조인의 이해)

관계의 개념엔터티의 인스턴스 사이의 논리적인 연관성엔터티의 정의, 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있음관계를 맺는다는 의미는 부모의 식별자를 자식에 상속하고, 상속된 속성을 매핑키(조인키)로 활용→ 부모, 자식을 여녁ㄹ함 관계의 분류관계는 존재에 의한 관계와 행위에 의한 관계로 분류존재 관계는 엔터티 간의 상태를 의미ex) 사원 엔터티는 부서 엔터티에 소속행위 관계는 엔터티 간의 어떤 행위가 있는 것을 의미ex) 주문은 고객이 주문할 때 발생 조인의 의미결국 데이터의 중복을 피하기 위해 테이블은 정규화에 의해 분리된다. 분리되면서 두 테이블은 서로 관계를 맺게 되고, 다시 이 두 테이블의 데이터를 동시에 출력하거나, 관계가 있는 테이블을 참조하기 위해서 데이터를 연결해야 하는데 이 ..

SQL 2024.11.15

SQLD - 데이터 모델과 SQL (정규화)

모델링 시 최대한 중복 데이터를 허용하지 않아야 저장공간의 효율적 사용과 업무 프로세스의 성능을 기대할 수 있다. 이러한 중복 데이터를 허용하지 않는 방식으로 테이블을 설계하는 방식을 정규화라고 한다. 정규화(DB Normalization)의 개념 :하나의 엔터티에 많은 속성을 넣게 되면, 해당 엔터티를 조회할 때마다 많은 양의 데이터가 조회될 것이므로 최소한의 데이터만을 하나의 엔터티에 넣는 식으로 데이터를 분해하는 과정을 정규화라고 한다.데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성 위한 과정이라고 볼 수 있음데이터의 중복을 제거하고, 데이터 모델의 독립성을 확보데이터 이상 현상을 줄이기 위한 데이터 베이스 설계 기법엔터티를 상세화하는 과정으로 논리 데이터 모델링 수행 시점에서 고려..

SQL 2024.11.15

SQLD - 데이터 모델링의 이해 (식별자)

식별자 개념하나의 엔터티에 구성된 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 나타냄하나의 유일한 식별자가 존재해야 함식별자는 논리 모델링에서 사용하는 용어, 물리 모델링에서는 키(key)라고 표현ex) 학생 엔터티의 주식별자는 학생 번호 속성 => 학생 테이블의 기본키는 학생번호 컬럼 주식별자 특징유일성 : 주식별자에 의해 모든 인스턴스를 유일하게 구분함ex) 학생 엔터티에서 이름 속성은 동명이인이 발생할 수 있으므로 모든 인스턴스를 완벽하게 구분할 수 없으므로 학생 번호와 같은 유일한 식별자를 주식별자로 사용최소성 : 주식별자를 구성하는 속성은 유일성을 만족하는 최소한의 속성으로 구성ex) 학생 엔터티의 주식별자는 학생 번호만으로 충분한데, 학생번호 + 이름으로 구성할 필요 없음불변성 : 주..

SQL 2024.11.15

SQLD - 데이터 모델링의 이해(관계)

관계의 종류존재적 관계한 엔티티의 존재가 다른 엔터티의 존재에 영향을 미치는 관계엔터티 간의 연관된 상태를 의미ex) 부서 엔터티가 삭제되면 사원 엔터티의 존재에 영향을 미침행위적 관계엔터티 간의 어떤 행위가 있는 것을 의미ex) 고객 엔터티의 행동에 의해 주문 엔터티가 발생※ ERD에서는 존재 관계와 행위 관계를 구분하지 않는다.  관계의 구성관계명차수(Cardinality)선택성(Optionality) 관계의 차수(Cardinality)한 엔터티의 레코드(인스턴스)가 다른 엔터티의 레코드(인스턴스)와 어떻게 연결되는지를 나타내는 표현주로 1:1, 1:N, N:M 등으로 표현1대 1 관계완전 1대 1 관계하나의 엔터티에 관계되는 엔터티가 반드시 하나로 존재하는 경우ex) 사원은 반드시 소속 부서가 있어..

SQL 2024.11.15