# cursor for loop(암묵적 커서) - 따로 커서를 선언하지 않아도 IN안에 SELECT문을 넣으면 자동으로 읽음 - 가장 많이 씀 CREATE OR REPLACE PROCEDURE p_emp_info (p_dept_id s_emp.dept_id%TYPE) IS BEGIN FOR emp_record IN ( SELECT last_name, salary FROM s_emp WHERE dept_id = p_dept_id ) // IN 안에 SELECT문 바로 옴 LOOP DBMS_OUTPUT.PUT_LINE(emp_record.last_name || ' ' || emp_record.salary); END LOOP; END; / # WHERE CURRENT OF DECLARE CURS..
# PL/SQL (Procedural Language/SQL) - SQL명령어에 절차적 언어(C,JAVA 등등)형식을 도입한 언어. - 변수정의, 조건처리(IF), 반복처리(LOOP, WHILE, FOR)등을 지원 [기본SY] DECLARE (안에 선언할게 없으면 생략가능) [변수,상수,CURSOR,USER_DEFINE Exception 선언] BEGIN [SQL, 반복분, 조건문실행] EXCEPTION (예외할게 없으면 생략 가능) [예외처리] END; # SUBPROGRAM - 이름이 있는 PL/SQL 블록 - 나중에 실행할 동작들을 미리 저장 종류 - PROCEDURE(동작수행),FUNCTION(값 반환),PACKAGE(연관된 프로시저 함수 묶은거) # PROCEDURE - J..
WINDOW함수 기본 문법 SUM(컬럼명) OVER( PARTITION BY [컬럼] ORDER BY [컬럼] [ASC/DESC] ROWS / RANGE BETWEEN UNBOUNDED PRECEDING / PRECEDING / CURRENT ROW AND UNBOUNDED FOLLOWING / CURRENT ROW ) -- ROW : 부분집합인 윈도우 크기를 물리적인 단위로 행 집합을 지정 -- RANGE : 논리적인 주소에 의해 행 집합을 지정 -- UNBOUNDED PRECEDING : 윈도우의 시작 위치가 첫번째 ROW -- UNBOUNDED FOLLOWING : 윈도우의 마지막 위치가 마지막 ROW -- CURRENT ROW : 윈도우의 시작 위치가 현재 ROW Temp 의 자료를 이용하여 자신..
RANK() OVER () EX) A-90점 , B-90점 C-80점 인 1등이 2명인 동일 순위인 경우 순위는 1,1,3 1등이 2명되고 3번째애가 3등으로 표시 즉, A=1등 B=1등 C=3등 ROW_NUMBER() OVER () : 제일 중요 EX) A-90점 , B-90점 C-80점 인 1등이 2명인 동일 순위인 경우 순위는 1,2,3 즉, A=1등 B=2등 C=3등 A와 B가 점수가 같지만 A가 1등인 이유는 데이터를 뽑아낼때 A의 행이 더 빨리오기때문(즉,정렬방식에따라 등수가 바뀜) 즉,함수이름처럼 ROW_NUMBER.. ROW(행)의 순위에 따라 그냥 번호를 매김. 동일 순위인 경우 1,2,3 DENSE_RANK() OVER () 중복 RANK의 수와 무관하게 numbering을 한다. EX..
LEAD 구문 형식 : 지정한 칼럼 뒤의 값을 가져옴 LEAD ( expr, offset, default ) OVER ( order BY 절 ) expr(표현식): 명시된 값을 기준으로 이후 로우의 값을 반환 offset : 생략가능, 기본값:1, 몇번째 후의 row 값을 넣을건지 default: 생략가능, off에 지정된 로우가 존재하지 않을 경우 LEAD 함수가 반환하는 기본 값 LAG 구문 형식 : 지정한 칼럼 앞의 값을 가져옴 LAG ( expr, offset, default ) OVER ( order BY 절 ) expr(표현식): 명시된 값을 기준으로 이전 로우의 값을 반환 offset : 생략가능, 기본값:1, 몇번째 후의 row 값을 넣을건지 default: 생략가능, off에 지정된 로우..
## IMPORT (DUMP 파일 계정만들어서 집어넣기) 준비물 : dump 파일을 c드라이브 밑에 넣어두자.(딴대줬다가 경로에한글있고 그러면 골치아프니꺄 걍 C나D) 1.스키마 생성 sqlplus /nolog -- sqlplus 접속 conn /as sysdba -- 관리자 로그인 create user 계정명 identified by 비밀번호; -- 계정생성(이미있는계정에 넣을꺼면 생략 가능) grant resource,dba,connect to 계정명; -- 계정에 권한주기(권한이미 있으면 생략 가능) 2.import % sql 나와서 일반 그냥 콘솔창 % cd c:// imp 계정명/비밀번호 file=파일명.dmp full=y ## EXPORT (내 파일 DUMP파일로 저정하기) 준비물 : C드라이..
※ 스크롤하면 정답 나옴 -- 1. EMP 테이블에서 부서 인원이 4명보다 많은 부서의 부서번호, 인원수, 급여의 합을 출력하라. select deptno, count(*), sum(sal) from emp group by deptno having count(*)>4 -- 2. EMP 테이블에서 가장 많은 사원이 속해있는 부서의 부서번호와 사원수를 출력하라. select deptno, count(*) from emp group by deptno having count(deptno) = (select max(count(*)) from emp group by deptno) -- 3. EMP 테이블에서 가장 많은 사원을 갖는 MGR의 사원번호를 출력하라. select mgr empno from emp ..
시퀀스(Sequence) -고유한 숫자를 자동으로 생성 -시퀀스를 생성하면 순차적으로 증가하는 칼럼을 만들 수 있다. -주로 primary key값을 사용하기위해 사용 CREATE SEQUENC SequenceName 스퀸스 사용 -NEXTVAL(증가) , CURRVAL(일정) --> NEXTVAL 최소 한번 사용 후에 사용 가능 사용가능한 곳 -INSERT 할때 value, subquery 의 select -select문의 select list (subquery 제외) -update문의 set절 뷰(view) - 하나 또는 그 이상의 테이블 데이터의 부분집합을 보기 위한 가상의 테이블 - 창문같은거 테이블의 내용중 필요한것,보고싶은것만 따로 뷰로 만들어서 손쉽게 사용 - 따로 테이블을 만들거나 조건을 ..
계층 구조 질의 - 내용이 계층구조를 이루고 있을때 레벨별 조회 가능 - START WITH, CONNECT BY, PRIOR 절 사용 START WITH -> 첫번째로 조회할 행의 조건, 레벨 1 CONNECT BY, PRIOR --> 다음 번 조회할 행의 조건 ( prior id-->직전레벨에 찾아진 행들의 id 값) ex) select level, last_name from s_emp start with manager id is null conncect by prior id = manager_id order by level;
집합연산자 -테이블들을 집합시킴 UNION, UNION ALL : 합집합 union 합치는데 중복제거(정렬하고나서) (연결되는 두 문장의 칼럼수가 같아야되고, 같은칼럼순서는 데이터 타입도 같아야함) ex) select * from s_ord08 union // 합치는데 중복제거(정렬하고나서) select * from s_ord09 union all 둘 합침 ex) select * from s_ord08 union all //둘 합침 select * from s_ord09 INTERSECT 교집합(두 행의 집합중 공통된 행을 반환) ex) SELECT deptno FROM emp INTERSECT SELECT deptno FROM dept; MINUS 차집합(첫 번째 SELECT문에 의해 반환되..