전체 글
-
PL/SQL IF문, CASE문 FOR LOOP문SQL/PL. SQL 2020. 2. 24. 04:02
PL/SQL IF문 (조건 제어문) SYNTAXS IF 조건문 THEN 실행문; ELSIF 조건문 THEN 실행문; ELSE 실행문; END IF 실습 declare p NUMBER(2) := 2; -- 변수 선언과 동시에 값을 대입 begin if p = 1 then dbms_output.put_line('1입니다'); elsif p = 2 then DBMS_OUTPUT.PUT_LINE('2입니다'); else DBMS_OUTPUT.PUT_LINE('알려지지 않았습니다'); end if; end; / CASE문 SYNTAXS case expression when value then 실행문; when value then 실행문; else 실행문; end case; 실습 declare p NUMBER(2)..
-
PL/SQL 실습SQL/PL. SQL 2020. 2. 23. 19:48
PL/SQL 실습 실습 1 - 프로시저명 : printtemp - p_empno 변수를 파라미터로 가짐 ( emp테이블의 empno 데이터 타입을 가짐 ) - v_dname 변수 선언 (dept 테이블의 dname컬럼의 데이터 타입) - v_eame 변수 선언 (emp 테이블의 ename 컬럼의 데이터 타입) - dept 테이블과 emp 테이블을 조인해서 ename, dname의 값을 선언한 변수에 저장 - 조인 조건은 아래와 같음 create or replace procedure printtemp(p_empno IN emp.empno%type) is v_dname dept.dname%type; v_ename emp.ename%type; begin select ename, dname into v_dnam..
-
PL/SQLSQL/PL. SQL 2020. 2. 23. 19:23
PL/SQL PL / SQL란? - PL(Procedural Langugae) / SQL 의 약어 - 오라클 DB 환경에서 실행되는 절차적인 데이터베이스 프로그래밍 언어 - 표준 SQL과 3세대 언어의 강력한 일부 기능을 포함한 SQL의 확장 언어 - PL/SQL 에서는 프로그램 단위를 블록(BLOCK)이라 부르며, 애플리케이션 로직들을 작성 오라클 환경에서 PL/SQL을 학습하는 이유 - 오라클 개발 도구를 수행하는 모든 프로그래밍의 기초 - 클라이언트가 아닌 서버 상에서 프로세스를 수행하는데 PL/SQL을 사용함 - PL/SQL을 사용하면 업무 규칙이나 복잡한 로직을 캡슐화(Encaptulation)할 수 있어, 모듈화(Modularity)와 추상화(Abstraction) 가능 - 데이터베이스 트리거..
-
효율적인 쿼리 검색!!!!!SQL 2020. 2. 20. 20:27
효율적인 쿼리 검색!!!!! - 더미 데이터 생성 --> 현재 날짜에서 -30, + 30 사이의 값을 랜덤하게 더하고 빼서 백만개의 row생성 이중에서 2월1일부터 29일까지 데이터만 중복되지 않게 뽑아라 - 처음에 나는 WHERE절의 dt 테이블을 가공해서 사용했는데 그러면 인덱스를 사용하지 못하기 때문에 효율이 굉장히 떨어짐 * 칠거지악에 위반 ! 왼쪽 테이블을 가공하지 말아라!! - BETWEEN을 사용해서 1일부터 29일 23시 59분 59초 사이의 값을 검색, DISTINCT로 중복되지 않게 검색 -- 더 효율적으로 검색하기!! 우리가 구해야하는 데이터 ROW수가 총 29행 (1일부터 29)인 것을 알고 있기 때문에 FROM절의 IN-LINE VIEW에 2월1일부터 레벨을 29까지 증가시키면서 ..
-
계층 쿼리 누적 합 구하기SQL 2020. 2. 20. 19:48
계층 쿼리 누적합 구하기 * 난이도 ★★★★★★★★★★ 주어진 상황 : 특성 부서의 조직원 수 하고싶은 것 : 해당 부서와 하위 부서의 누적 조직원수 사용할 테이블 no_emp 1. LEAF 노드 구하기, LEVEL 구하기 * LEAF 노드를 알기 위해서는 하향식으로 전개를 해봐야 함 * LEVEL은 상향 탐색시 그룹을 묶기 위해 필요한 값 -> parent_org_cd가 NULL인 'XX회사'를 부모노드로 설정하고 부모노드의 org_cd와 parent_org_cd가 같은 조건으로 계층을 구성함 ==> 하향식 전개 -> LEAF 컬럼이 1인 ROW가 LEAF 노드 2. 구한 LEAF 노드부터 상향 탐색하고 ROWNUM을 구해줌 * 몇번째로 해당 ROW를 탐색 했는지 구해 주기 위해서 ****** 왜 아까..
-
계층형 쿼리 (Hierarchiacal Query)SQL 2020. 2. 18. 08:36
계층형 쿼리 (Hierarchiacal Query) 1) 상향식 : 최상위 노드에서 시작하여 하위 노드로 내려가는 계층 쿼리 2) 하향식 : 전체 노드를 방문하는게 아니라 자신의 부모노드만 방문 - 오라클에서만 지원하고 있는 막강한 기능 중 하나 - 관계형이라는 의미가 서로 평등하고 수평적인 관계를 의미하는 반면 계층형 구조는 이와는 다르게 평등한 관계가 아닌 계급적이고 수직적인 관계를 가진다. 한마디로 말해서 관계형이 평면적이라고 한다면 계층형은 수직적 구조라고 할 수 있다. ex) 사회적인 의미의 계급구조 소프트웨어 관점에서 보면 웹 사이트의 답변형 게시판이나 BOM(Bill Of Material) 등 * BOM : 하나의 완제품이 만들어지는데 필요한 구성품목들의 내역 혹은 조합도 - 용어 정리 1)..
-
달력 쿼리SQL 2020. 2. 17. 20:01
달력 쿼리 - 데이터의 행을 열로 바꾸는 방법 - 레포트 쿼리에서 많이 활용 사전에 알아야 할 거 - CONNECT BY LEVEL 구문 -> 10개의 'X' 데이터 ROW 생성 -> SELECT LEVEL로 조회하면 1부터 10까지 ROW 생성 (LEVEL은 1씩 증가한다는 것을 알 수 있음) 이를 활용해 달력 쿼리 만들기 실습 TO_CHAR 종류 -- 특정 년월의 모든 일자 구하기 일자의 주차, 요일 구하기 - 세로 데이터 가로로 변경 -> GROUP BY와 MIN함수를 사용해서 NULL값이 들어있던 ROW들을 모아준다.
-
WITH절SQL 2020. 2. 17. 00:37
WITH절 - 하나의 쿼리에서 반복되는 SUBQUERY가 있을 때 사용 - 해당 SUBQUERY를 별도로 선언하여 재사용 - MAIN 쿼리가 실행될 때 WITH에서 선언한 쿼리 블럭이 메모리에 임시적으로 저장 -> MAIN쿼리가 종료되면 메모리 해제 - SUBQUERY 작성시에는 해당 SUBQEURY의 결과를 조회하기 위해서 I/O가 반복적으로 일어나지만 WITH절 안에 있는 SUBQUERY는 한번의 I/O만 일어남 * 단, 하나의 쿼리에서 동일한 SUBQERY가 반복적으로 나오는 것은 효율적이지 않은 SQL일 확률이 있음 SINTAXS WITH 쿼리블록이름 AS{ 서브 쿼리 내용 } SELECT * FROM 쿼리블록이름