목록데이터 베이스 (51)
바닥코딩
PL/SQL 기본 구조 PL/SQL은 이전 포스트에 특징에서 다루었듯 블록 구조로 이루어져 있습니다. DECLARE v_str VARCHAR2(100); -- 선언부 BEGIN -- 시작 v_str := 'Hello world'; DBMS_OUTPUT.PUT_LINE(v_str); EXCEPTION WHEN OTHERS THEN -- 예외처리 DBMS_OUTPUT.PUT(SQLERRM); END; -- end 선언부 : DECLARE 와 BEGIN 사이에 위치하며 타입, 상수 , 변수 , 예외 , 커서 서브프로그램들이 오는 구역 BEGIN ~ END : 실행부에 해당하며 실제로 데이터를 처리하는 문장이 놓입니다 실행부는 반드시 있어야 하는 필수 영 역이며 END 는 ; 으로 끝나야 합니다.
PL/SQL? sql을 공부하신 분들이라면 다들 아시는 상식이 있을 겁니다. 관계형 데이터베이스 시스템(RDBMS) 에서 사용하는 표 준 언어인 SQL 은 절차형 언어가 아닙니다 SQL의 DDL/DML/DCL 을 통해 데이터베이스를 정의 조작 제어 하는 것이 가능하지만 SQL은 결국 데이터의 처리 집합 만을 기술할 뿐 어떠한 절차를 걸쳐서 데이터 집합을 얻어야 하는지에대한 절차적 과정을 제공하지는 않습니다. 일반적인 SQL 로직을 작성하면 이 문장의 실행순서는 옵티마이저에 의해 이루어지는데 , 이는 여러가지 데이터베이스 통계를 기초로 실행 게획을 처리하기 때문에 데이터를 일반적으로 빠르게 다루어 주지만 결국 개발자 입장에서는 융통성 있는 데이터 처리는 불가능 합니다. 이러한 단점을 극복하기 위한 대안으로..
2. 집계함수에서 WINDOW 함수 사용 이전에 일반적으로 SELECT 절에서 집계를 할 때나 GROUP 의 조건을 정의하던 집계함수를 통해 파티션별로 윈도우의 값을 구할 수 있습니다 이전 포스팅에서도 진행했던 EMPLOYEES 테이블에서 직업별로 만약 WINDOW FUNCTION을 사용한다고 하면 2-1. SUM 함수 SUM과 같은 집계함수를 통해 직업별로 파티션을 나누고 직업별 합계 컬럼을 구할 수 있습니다 2-2 AVG 함수 문법은 동일합니다 이런식으로 작성을 해주면 이러한 결과를 반환해 줍니다 2-3 COUNT 한가지 예제만 더 해보겠습니다 만약 특정직원의 성과에 -50 ~+150 인 사람의 수를 구하는 통계값을 구하고자 한다면 아래와 같이 작성해 주면 됩니다 3. 그룹 내 행 순서 함수 WIND..
WINDOW 함수? WINDOW 함수는 흔히 분석 함수 또는 순위 함수로도 알려져 있습니다. 윈도우 함수는 데이터 웨어하우스에서 발전한 기술로서 인라인 뷰와 같이 SQL의 주요 기능이라고 할 수 있으며 많은 튜닝팁을 대체할 수 있는 수단이 됩니다 윈도우 함수에는 기존에 사용하던 집계 함수도 있고 새로이 전용함수로 추가된기능도 존재합니다. 그리고 다른 함수와는 달리 중첩해서 사용하지는 못하지만, 서브쿼리에서는 사용이 가능합니다. 또한 윈도우 함수에는 OVER라는 키워드가 필수로 포함되어 있습니다. WINDOW 함수의 기본적인 형식과 종류는 아래와 같습니다 SELECT WINDOW_FUNCTION (ARGUMENTS) OVER ([PARTITION BY 컬럼][ORDER BY절] [WINDOWING 절]) ..
계층형 질의? 계층형 데이터란 말 그대로 계층적인 구조를 가지고 있는 데이터 입니다 상위와 하위데이터가 포함된 데이터를 의미하는데 동일 테이블 내에서 이러한 계층적인 데이터가 있는 경우 조직적으로 상위 하위 관계가 설정이 되기 떄문에 이런 테이블을 조회하기 위해선 계층형 쿼리(Hierarchical Query)를 사용합니다 위와 같은 계층구조는 트리의 형태로 관계를 표현하는 것은 가능하지만 SQL 문으로 관계를 표현하는 것이 불가능하다고 보는게 맞습니다 그러나 PL/SQL 루틴과 CONNECT BY를 사용하면 위와 같은 계층형 구조를 SQL 을 통해 표현할 수 있습니다. 계층형 질의 문법 START WITH 절 : 계층구조의 시작 위치를 지정 CONNECT BY절 : 다음에 전개될 테이블을 지정하는 구문..
서브쿼리? 서브 쿼리란 하나의 SQL문 안에 포함되어 있는 또 다른 SQL을 의미합니다 서브쿼리는 알려지지 않은 기준을 이용한 검색을 위해 사용됩니다 또한 하나의 SQL문 안에 포함되어 있는 SQL 이기 때문에 메인쿼리 가 서브쿼를 포함하는 종속적인 관계라 볼 수 있습니다 서브쿼리를 사용하는 이유 서브쿼리도 메인쿼리와 다를 것이 없이 같은 SQL있습니다. 그렇다면 왜 굳이 쿼리를 메인 쿼리와 서브쿼리로 나누어 종속적으로 문장을 작성하는지 알아가야할 필요가 있을 것입니다 첫번째는 알려지지 않은 기준으로 검색을 할 때 용이하다 예를 들어 테이블내에서 조건을 설정하기가 어려워 다른 데이테이블에서 조건을 가져와야할 경우가 있을 수 있어서 서크쿼리를 사용합니다 예를들어 특정 사원이 속해 있는 부서에 같은 소속을 ..
그룹함수(GROUP FUNCTION) 그룹함수는 결산개념의 업무를 가지는 원가나 , 판매 시스템의 경우 보통 소계, 총계, 합계, 총 합계 순위, 레벨 등 결산할 수 있는 파일을 만드는 것이 중요한 업무중에 하나이다. 개발자들이 이런 보고 파일을 만드는 것을 하려면 SQL에 포함된 대장기능을으로 작성을 하거나 여러단계로 UNION, UNION ALL 을 거치며 복잡한 단계를 거쳐야 한다. 그렇지만 그룹함수를 사용한다면 하나의 SQL로 테이블을 한번만 읽고 원하는 레포트 출력을 만들 수 있다 또한 이러한 GROUP 함수와 CASE문을 적절히 조합하여 사용하면 원하는 포맷의 보고서를 작성하는 것도 용이하게 할 수 있다. 대표적인 GROUP FUNTION 의 종류및 활용 1.ROLLUIP ROLLUP 함수는 ..
STANDARD SQL 기업에서 사용하는 대부분의 RDB의 경우 대부분 오브젝트의 개념을 포함한 객채 기능 지원이 가능한 데이터베이스를 사용하고 있다 STANDARD SQL 은 초기 SQL 문이 성행했던 시기 사용했던 SQL이지만 이것을 기반으로 현재 ORACLE, MYSQL, MS-SQL 등이 발전해 왔으며, 용어들이 많이 달라졌지만 현재에도 집합 연산자나 표준 조인과 같은 자주 사용하는 연산에서 STANDARD SQL을 사용하기 때문에 개념에 대해 이해 한다면 조인이나 집합 연산을 수행할때 효과적으로 사용할 수 있다 일반 집합 연산자 UNION : 합잡합의 개념 SQL 문에서는 동일하게 UNION으로 표기 INTERSECTION : 교집합의 개념 SQL 문에서도 동일하게 INTERSECTION DIF..