본문 바로가기

Oracle

(101)
SQL [DML문] Truncate 데이터 삭제 복구불가 저장구조만 남긴다. delete 보다 더 삭제가 빠르다. 취소여부 - 불가능 플래쉬백 여부 - 불가능 truncate 와 drop 의 차이는 truncate 는 테이블의 구조를 남겨둡니다. 테이블의 구조를 남겨두면 나중에 데이터를 새로 입력할때 테이블을 생성하지않아도된다. truncate table emp; rollback; select * from emp; → rollback 해도 조회안됨.
SQL [DML문] Delete 데이터삭제 where 절 없이 작성하면 절 대 안 됨 취소여부 - 가능 rollback 플래쉬백 여부 - 가능 휴지통에 없다. undo segment 라는 공간에 들어가기 때문에 flashback table 로 복구해야한다. delete from 테이블 명 where 지울 데이터 조건 예제 80 스캇의데이터 지우기 delete from emp where ename = 'SCOTT'; 문제 390 월급이 3000 이상인 사원들을 지우기 delete from emp where sal >=3000; 모르고 delete → commit 한 자료 복구 방법 delete from emp; —————> 테이블을 모두 지움 commit; —————→ 다 저장되버림 rollback; ——————> 롤백 안됨 select * fro..
SQL [DML문] Update 데이터 수정 DML - data manipulation language 데이터 조작언어 update 수정할데이터테이블명 set 변경할 컬럼 = 값 where 변경할 데이터 조건 1. where 절없이 작성하면 모든행이 갱신된다. 2. UPDATE 절은 모든 절에서 서브 쿼리 작성이 가능하다. update → subquery 가능 set → subquery 가능 where → subquery 가능 예제 79 SCOTT 의 월급을 3900 으로 수정하시오 update emp set sal =3900 where ename = 'SCOTT'; 문제 387 부서번호가 10번인 사원들 커미션을 9000 으로 변경 UPDATE EMP set comm = 9000 where deptno =10 ; 문제 388 부서번호가 10,20..
SQL [DML문] Insert 데이터 입력 DML - data manipluation language 데이터 조작언어 insert into 테이블명 ( 컬럼이름1, 컬럼이름2,컬럼이름3,,,) → 만약 컬럼이름을 기술하지 않았다면 원래있던 순서에 맞게 작성해야한다.. values ( 컬럼값1, 컬럼값2, 컬럼값3 ,,,,,,,,,,,,) —→위에 썼던 컬럼 순서대로 작성 예제 사원테이블에 데이터를 입력하는데 사원번호는 2812 사원이름은 JACK 월급은 3500, 입사일은 2021.11.16 직업은 ANALYST insert into emp(empno, ename, sal, hiredate,job) values (2812, 'JACK', 3500, to_date('2021/11/16', 'RRRR/MM/DD'),'ANALYST'); 숫자는 그냥써..
SQL Sub Query Select 절 = Scalar 서브쿼리 스칼라 서브쿼리는 Where 절이 없다면 데이터 분석함수로 쓰는게 더 속도가 빠르다. 예제 : 사원이름,월급, 사원테이블의 최대월급 출력 select ename, sal, (select max(sal) from emp ) as 최대월급 from emp; 문제 : 사원이름,월급, 사원테이블의 평균월급 출력 select ename, sal, (select avg(sal) from emp ) as 최대월급 ——>컬럼 가공하는것 안좋음 from emp; ——>튜닝전 emp 테이블을 두번 출력했기때문에 성능이 느리다. 스칼라 서브쿼리 대신에 데이터 분석함수를 이용하여 출력 해 보겠다. select ename, sal, avg(sal) over () from emp; sum (sal) over () or avg (..
SQL Sub Query From 절 In Line View from 절의 서브쿼리 라고도 하거나 in line view 라고도 한다. 서브쿼리를 view 로 생성하면 더 간단하게 작성 가능하다. 문제 : 순위를 1등만 출력 select * from ( select ename, sal, rank() over (order by sal desc)as 순위 from emp ) where 순위 =1; 범죄발생 시간 테이블 생성 문제 366 언피봇을 이용하여 컬럼을 데이터로 넣고 살인이 일어나는 시간과 건수 출력하시오 일단 언피봇문 생성 select * from crime_time unpivot (건수 for 시간 in (F0T3, F3T6 , F6T9 , F9T12 , F12T15, F15T18, F18T21, F21T24) ); 살인의 시간, 건수를 구한다. selec..
SQL Sub Query Having 절 서브쿼리 문제 360 직업, 직업별 토탈월급 출력 select job, sum(sal) from emp group by job; 문제 361 위의 결과에서 SALESMAN 의 토탈월급보다 더 큰것만 출력 select job, sum(sal) from emp group by job HAVING SUM(SAL)> (select sum(sal) from emp where job = 'SALESMAN'); salesman 의 토탈월급은 GROUPING 된 결과에대한 조건이므로 HAVING 절에다가 서브쿼리문을 작성 즉 ; 그룹함수로 검색조건을 줄때에는 WHERE 절에 사용하면 안된다. 문제 362 직업, 직업별 인원수를 출력하는데 직업이 어널리스트인 사원들의 인원수보다 더많은것만 출력하시오 select job, coun..
SQL Sub Query Exists / Not Exists 존재여부 EXISTS 예제 74 : dept에서 부서번호, 부서위치를 출력하는데 emp에 존재하는 부서번호에 대한 것만 출력 exists 없이 쓴 쿼리문 (다중행 서브쿼리) select loc, deptno from dept where deptno in (select deptno from emp); 만약 서브쿼리의 emp 테이블이 10억건의 데이터를 구성하고있다면 10억건의 부서번호를 다 출력하여서 메인쿼리로 리턴하기 때문에 성능이 느려진다. 따라서그렇게 되면 성능이 어마어마어마하게 느려진다.서브쿼리를 썼는데 너무 느리다면 exists 를 고려해 보아야한다. emp 테이블의 크기가 증가할 수록 성능이 느려진다. 그리고 10억건의 부서번호를 가지고 dept 테이블에서 데이터를 검색을 해야한다. 2. exists 문..