MONTHS_BETWEEN : 날짜 간 개월 수 출력 months_between(기준날짜1, 기준날짜2) '기준날짜1'이 '기준날짜2'보다 더 현재에 가까운 날짜여야 함 오늘 날짜를 출력하는 방법 SELECT sysdate FROM dual; EX) 이름과 입사
일반 함수 NVL : NULL 값 대신 다른 데이터 출력 SELECT ename, comm, nvl(comm,0) -- null만 o으로 출력됨 FROM emp; > 데이터에 null값이 존재하는 경우 연산자를 이용한 결과를 출력 시, null값으로 출력됨 연산
데이터 분석 함수 rank : 순위 출력 - 순위가 동일한 경우, 공백을 제외하고 출력 - 1,1,3,4 rank() over (order by 컬럼명 desc) OVER 뒤에 rank를 적용할 수 있는 구문 작성 가능 예제 41) 직업이 ANALYST, MAN
row를 column으로 출력하기 (sum + decode) 예제 47 여기서 0이 아니라 null을 사용하면 성능이 훨씬 좋아짐 (혹은 아예 아무것도 작성하지 않으면, null값을 명시한 것과 같음) oracle은 null값을 연산에서 무시하기 때문에 연산 효율이
데이터 분석 함수 sum over : 누적 데이터 출력 sum(컬럼명) over (order by 기준 컬럼) sum(칼럼명) over () -- 전체 누적값 출력 전체 누적값 출력 예시 예제 50 -- 사원번호를 기준으로 정렬한 것에 대해서 월급 누적치를
JOIN EQUI JOIN join 조건으로 equal 조건을 부여함 (=) 일치하는 행이 없으면 결과에 출력되지 않음 예제 58) 사원 테이블과 부서테이블을 조인해서 이름과 부서위치를 출력하시오 SELECT ename, loc from emp, dep
문자 및 날짜 : 양쪽에 싱글 쿼테이션 마크 / 숫자는 필요없음 SQL문은 대소문자 구분하지 않지만, 데이터는 대소문자를 구분하므로 대소문자를 구분하여 작성 as절에서 표기하고 싶은 문자열을 그대로 나타내려면 더블 쿼테이션 마크 EX) '_', ' ' 등의 문자
1999 ANSI JOIN ON절 조인 조건을 명시 예제 62 조인문법 오라클 조인 EQUI JOIN NON-EQUL JOIN OUTER JOIN SELF JOIN 1999 ANSI JOIN (미국 국립 표준 협회) ON 절을 사용한 조인 USING절 USING(조인 조건에 해당하는 컬럼) 예제 63 NATURAL JOIN on, usi...
집합 연산자 - 데이터를 위아래로 연결 JOIN은 데이터를 양옆으로 연결 UNION ALL 예제 67 SELECT DEPTNO, SUL(SAL) FROM EMP GROUP BY DEPTNO; SELECT SUM(EMP) FROM EMP; 위 두 쿼리문의 결과를 위아래로 연결 SELECT DEPTNO, SUL(SAL) FROM EMP GROUP ...
NOT IN 관리자인 사원들의 이름을 출력하시오 예제) 관리자가 아닌 사원들의 이름을 출력하시오 위 쿼리에서 결과가 안 나온다.. MGR 칼럼에 NULL값이 포함되어 있기 때문 NOT IN = '!=ALL' TRUE AND TREU AND ... AND NULL = NULL 칼럼 값 중에 NULL이 있으면 전체 결과 값이 NULL이 되버림 (NU...
MERGE : 데이터 입력, 수정, 삭제를 동시에 예제 82 예시) alter table emp add loc varchar2(10); merge into emp e using dept d on (e.deptno = d.deptno) when matched then -- 일치하면 update set e.loc = d.loc -- 칼럼...
SELECT FOR UPDATE SELECT절 마지막에 'FOR UPDATE' SELECT를 실행하면서, 해당 행에 대해서 LOCK을 걸 수 있음 검색하는 동안에 그 누구도 갱신이 불가능함 예시 SELECT문을 실행했음에도 COMMIT을 실행해야지, 접근이 가능
계층형 질의문으로 서열을 주고 데이터 출력하기 예제 89 START WITH와 CONNECT BY PRIOR절을 작성하면 LEVEL이라는 칼럼을 출력할 수 있음 SELECT ename, level, sal, job FROM emp START WITH ename = 'KING' -- KING을 서열 1위로 두고, 이후로 서열화 CONNECT BY PRI...
VIEW VIEW를 사용하는 이유 : 보안 VIEW 특정 테이블에 대해서 일부 데이터만 볼 수 있도록 해주는 것 다른 데이터를 못 보게 할 때 사용 (개인정보 보안) 실제 데이터를 가지고 있지 않고(복사의 형태가 아님), 테이블의 데이터를 바라보고 있음 (포인터와 비슷한 느낌..?) CREATE VIEW 뷰이름 AS (서브쿼리절); CREATE VI...
FLASHBACK QUERY : 실수로 삭제한 데이터 복구 실수로 DELETE FROM -- ; COMMIT; 을 실행하여 테이블 내 데이터가 모두 사라졌을 때 복구할 수 있는 기능 아무때나 복구할 수 있는 것은 아님 show parameter undo; 결과 undo_retention : 복구할 수 있는 최대 시간 (900초) 예제 99 롤백...
FLASHBACK VERSION QUERY 변경 이력 확인 COMMIT이 진행되어야 VERSION이 업데이트 됨 versions_starttime의 초기값은 null로 되어있으므로, null first를 order by절에 작성하면 순서대로 확인하기 용이함 to_t
WITH절 사용하기 메인 쿼리와 서브 쿼리문을 실행할 때의 시간이 오래 걸릴 때에 사용함 109번 20분(메인 쿼리) + 20분(서브 쿼리) = 40분 아래와 같이 작성하면, 실행 시간 단축 (동일한 결과) jobsubsal : 임시 테이블명 (as절의 select 결과를 jobsubsal의 데이터로 함) 아래 쿼리문에서 사용된 후, 사라지는 테...
구구단 2단 출력 계층형 질의문 + with 절 with loop_table as (select level as num from dual connect by level <= 9) select '2' || ' x '|| nu
빅데이터 분석 우리나라 남자들이 가장 많이 걸리는 암? select * from cancer where 성 != "남녀전체" and 발생연도='1999' and 발생자수 is not null and 암종 != '모든암' and 성='남자' order by 발생자수
SQL의 실행계획 SQL문을 실행하기 전에 내부적으로 생성한 SQL 실행 계획 PARSER : 사용자의 SQL문이 문제가 있는지를 확인 OPTIMIZER 1) RULE-BASED OPTIMIZER (RBO) : 오라클의 우선 순위에 따라 실행계획 생성 2) CO
최대 공약수 구하기 SELECT 16 NUM1, 24 NUM2 FROM DUAL; WITH NUM_D AS ( SELECT 16 NUM1, 24 NUM2 FROM DUAL; ) SELECT LEVEL, MOD(NUM1, LEVEL), MOD(NUM2, LEVEL) FROM NUM_D CONNECT BY LEVER <= NUM2; WITH NUM...
인덱스 스캔 방법 7가지 인덱스 스캔 방법 INDEX RANGE SCAN - 숫자형 컬럼 인덱스 INDEX RANGE SCAN : 인덱스에서 조건과 일치하는 행을 찾았을 때에, 바로 스캔을 멈추지 않고 아래의 행까지 스캔하는 것 INDEX RANGE SCAN