본문 바로가기

Programming/DataBase

(ORACLE) PROCEDURE 에서 원하는 데이터를 찍어보자! CREATE OR REPLACE PROCEDURE BookInsertOrUpdate( myBookID NUMBER, myBookName VARCHAR2, myPublisher in VARCHAR2, myPrice in NUMBER ) AS mycount NUMBER; BEGIN DBMS_OUTPUT.DISABLE; DBMS_OUTPUT.ENABLE; SELECT count(*) into mycount FROM Book WHERE bookname LIKE myBookName; DBMS_OUTPUT.PUT_LINE(mycount); IF mycount!=0 THEN DBMS_OUTPUT.PUT_LINE('if문 들어옴!'); UPDATE Book SET price = myPrice WHERE bookname..
[DataBase]윈도우 함수(Window Function)에 대해 알아보자! 2편 ◎ 윈도우 함수 1편 주소 : https://rh-cp.tistory.com/91 3-3. 행 순서 관련 함수 ◎ 행 순서 관련 함수는 상위 행의 값을 하위에 출력하거나 하위 행의 값을 상위 행에 출력하게 할 수 있습니다. ◎ 또는 특정 위치의 행을 갖고와 출력 할 수 있습니다. ◎ FIRST_VALUE, LAST_VALUE, LAG, LEAD 함수가 있습니다. ◇ FIRST_VALUE -- 파티션에서 가장 처음에 나오는 값을 구합니다. -- MIN 함수를 사용해 같은 결과를 구할 수 있습니다. ▷ 가장 처음에 나오는 ename을 가져옵니다. PARTITION BY deptno로 파티션을 만들어 deptno가 같은 사원 중 급여가 가장 많은 사원을 가져옵니다. ◇ LAST_VALUE -- 파티션에서 가장..
[DataBase]윈도우 함수(Window Function)에 대해 알아보자! 1편 1. 윈도우 함수(Window Function)란? ◎ 윈도우 함수(Window Function)는 행과 행 간의 관계를 정의하기 위해 제공되는 함수입니다. ◎ 순위, 합계, 평균, 행 위치 등을 조작할 수 있습니다. ◎ 윈도우 함수 2편 주소 : https://rh-cp.tistory.com/92 2. 윈도우 함수의 구조 ◎ SELECT WINDOW_FUNCTION(ARGUMENTS) OVER (PARTITION BY 컬럼 ORDER BY WINDOWING 절) FROM 테이블명; ◇ ARGUMENTS(인수) -- 윈도우 함수에 따라 0~N개의 인수를 설정합니다. ◇ PARTITION BY -- 전체 집합을 기준에 의해 소그룹으로 나눕니다. ◇ ORDER BY -- 항목에 의해 정렬합니다. ◇ WIND..
[DataBase]그룹 함수(Group Function)에 대해 알아보자! 1. 그룹 함수(Group Function)란? ◎ 하나 이상의 행을 그룹으로 묶어 연산하여 하나의 결과를 나타내는 것입니다. 2. 그룹 함수 종류 ◎ ROLLUP - GROUP BY의 컬럼에 대해 소계(Subtotal)를 만들어 줍니다. - GROUP BY에 두 개이상의 컬럼이 오면 순서에 따라 결과가 달라집니다. ROLLUP을 사용해 부서 급여 전체합계를 구합니다. 부서별 합계와 직업별 합계, 전체 합계가 조회됩니다. ◎ GROUPING - ROLLUP, GROUPING SET, CUBE로 생성되는 합계 값을 구분하기 위해 사용합니다. - 계산이 된 곳은 1, 아닌 곳은 0으로 반환하여 표시합니다.소계가 계산된 데이터에는 1로 표시됩니다. ◎ GROUPING SETS - GROUP BY에 나오는 컬럼..
[DataBase]서브쿼리(Subquery)란 무엇일까? 1. 서브쿼리(Subquery)란 무엇인가? ◎ 서브쿼리(Subquery)란 SELECT 문 안에 또다시 SELECT문이 있는 쿼리문입니다. ◎ 서브쿼리는 위치에 따라 명칭이 다릅니다. FROM절에 사용하는 인라인 뷰(Inline view), SELECT문에 사용하는 스칼라 서브쿼리(Scala Subquery), 일반적으로 WHERE절에 사용하는 것을 서브쿼리(Subquery)라고 합니다. 1-1. 서브쿼리 형태 ◎ 서브쿼리(Subquery) - 일반적으로 where절에 사용하는 서브쿼리입니다. ◎ 인라인 뷰(Inline View)- FROM절에 사용하는 서브쿼리입니다. ◎ 스칼라 서브쿼리(Scala Subquery)- SELECT문에 사용하는 서브쿼리입니다. ◎ 연관 서브쿼리(Correlated Sub..
[DataBase]계층형 조회(Connect by)를 사용하는 법을 알아보자! 1. 계층형 조회란? ◎ Oracle Database에서 지원한다. ◎ 계층형으로 데이터를 조회하는 것이다. 즉, 초등학교 학년으로 하면 6학년에서 5학년, 5학년에서 4학년 순으로 트리 형태의 구조를 탐색하며 조회하는 것이다. ◎ 역방향도 가능하다 2. 계층형 조회 실습 ◎ 테스트 테이블 ◎ 계층 level 구하기 -- MAX(level)을 사용하여 트리구조의 최대 깊이를 구합니다. -- START WITH은 시작조건을 의미한다. 즉 mgr이 null인것부터 시작한다는 뜻입니다. -- CONNECT BY PRIOR는 조인조건을 의미한다. 즉 empno와 mgr이 같은것을 조인하는 것. ◎ 계층 구조 조회하기 -- LEVEL을 사용해 계층을 나타내었습니다. -- 계층을 조금 더 명확히 보기 위해 LPAD..
[DataBase]DB에서 조건문을 사용해 보자! 1. 조건문(條件文)이란? 명시한 조건이 비교연산을 통해 참인지 거짓인지에 따라 상황을 수행하는 것.쉽게 말해 참이면 'A'를 수행하고 거짓이면 'B'를 수행하는 것이다. 2. 조건문 구현하기 ◎ 테스트 테이블 ◎ DECODE문을 사용하여 IF문 구현 사용 방법 : DECODE(컬럼, 컬럼과의 조건, 'TRUE', FALSE') SELECT 안에서 DECODE문을 사용해 mgr이 null이면 '존재안함', mgr이 null이 아닐 경우 '존재'가 나오도록 하였음. ◎ CASE문을 사용한 조건문 구현 사용 방법 : CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 WHEN 조건n THEN 결과n ELSE 결과 ENDselect 문 안에서 CASE를 사용해 mgr이 1001이면 '10..
[DataBase]정규화(Normalization)에 대해 알아보자! 1. 정규화(Normalization)란? ◎ 정규화란 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법으로 데이터를 분해하는 과정. ◎ 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법. ◎ 제1정규화부터 제5정규화까지 있으나 보통 제3정규화까지만 수행. ◎ 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화시킬 수 있음. ◎ 정규화를 수행하게 되면 불필요한 데이터를 입력할 필요가 없어 중복데이터가 제거된다. ◎ 정규화를 하지 않을경우 삽입, 삭제, 갱신이상이 발생할 수 있다. 2. 정규화 절차 정규화 절차설명제 1 정규화- 속성(Attribute)의 원자성 확보(도메인이 원자값)- 기본키(Primary key) 설정제 2 정규화- 기본키가 2개 이상의 ..