본문 바로가기

Study/class note

(247)
sql 중급 / flashback query,table, drop 099 실수로 지운 데이터 복구하기 1(FLASHBACK QUERY) (참고로 mysql은 플래시백 기능 없음) 과거의 데이터를 오라클은 확인할 수 있는데 그 기능이 바로 flashback query -- 데이터를 삭제하시오 delete from emp; commit; rollaback; select * from emp; 위와 같은 상황이 벌어졌다면 flashback query로 과거의 데이터를 확인하고 복구하면 됨. ㅇ복구방법 1. 현재시간 확인(반드시 오라클 프로그램의 시간을 확인할 것) select systimestamp from dual; 21/11/26 15:12:43.075000000 +09:00 2. 현재시간에서 10분전 emp테이블의 상태를 확인 select * from emp as of ..
sql중급 / sequene 098 절대로 중복되지 않는 번호 만들기(SEQUENE) 특정 테이블에 번호를 반드시 중복되지 않게 순서대로 입력하는 경우에 시퀀스를 사용하면 안전하게 입력할 수 있음. insert into emp(empno, ename, sal) values(1,'scott',3000); : : 이런식으로 사람이 일일이 수작업으로 입력할 경우 실수할 수 있음. ex.)오타발생, 일일이 데이터를 조회해서 이전 번호를 찾아야 함(다음번호 부여를 위해서) --(시퀀스 사용)사원번호에 번호를 입력할 때 데이터가 중복되지 않고 순서대로 입력되게 하시오 insert into emp(empno, ename, sal) values(seq1.nextval, 'allen',3000); ㅇ시퀀스 만드는 법 create sequence s..
sql중급 / DDL문 (index) ㅁ인덱스 복습 1. 인덱스의 구조 : 인덱스를 생성하려는 컬럼의 데이터 + rowid(행의 물리적 주소) 컬럼의 데이터가 asc하게 정렬되어있음 2. 빅데이터를 검색할 때 검색속도를 향상시키기 위해서는 인덱스를 생성하고 인덱스를 통해서 데이터를 검색하는게 필수 문제526. 아래의 sql의 검색속도를 향상 시키시오(인덱스 생성) select ename, hiredate from emp where hiredate = to_date('1981/11/17','RRRR/MM/DD'); create index emp_hiredate on emp(hiredate); -- 인덱스 생성 후 다시 검색하면 성능 빨라짐 select ename, hiredate from emp where hiredate = to_date('..
sql중급 / DDL문(global temporary table, view,index) +) 대량의 컬럼 데이터타입 변경방법 (notepad++ 이용) 마우스 커서로 alt키 누르고 드래그하면 여러 행을 한번에 작성 및 선택할 수 있음 -- sql developer로 하는 방법 select 'alter table crime_loc_type modify ' || column_name || 'number(38);' from user_tab_columns where table_name='CRIME_LOC_TYPE' order by column_id; -- 을 작성하여 출력물을 복사하여 다시 쿼리실행하면 됨 +) 특정테이블의 컬럼명만 뽑아내는 방법 select column_name from user_tab_columns where table_name='CRIME_LOC_TYPE' order by ..
문제7. SQL / 데이터 정제(문장부호 제거) [코드를 쓴 상황] 텍스트를 어절별로 나누어 키워드를 분석하시오 [코드 작성] 1. speech테이블의 텍스트(speech_text)를 regexp_substr 함수를 이용하여 어절로 나눈다. 이때 텍스트를 소문자로 바꿔준다(어절별로 나눈 뒤에 바꿔줘도 상관없음) select regexp_substr(lower(speech_text),'[^ ]+',1,n) as word from speech, ( select level as n from dual connect by level
문제6. SQL / 새로운 컬럼에 값을 갱신할 때 null값 없애기 [코드를 쓴 상황] merge문을 이용해서 emp테이블과 dept테이블을 조인 후 dept 테이블의 sumsal 컬럼을 갱신하려고함. dept 테이블에서 조인되지 않은 데이터는 null으로 갱신되는데, 이때 null 대신에 0값이 출력되게 하려고 함. (단, 이때 dept테이블에 사전에 sumsal컬럼을 만들어야 함) [내가 쓴 코드 + 에러] merge into dept d using (select deptno, sum(sal) as sumsal from emp group by deptno ) v on (d.deptno = v.deptno) when matched then update set d.sumsal = v.sumsal when not matched then insert (d.deptno, d...
sql중급 / DDL문(create) 093 일반 테이블 생성하기(CREATE TABLE) ㅁSQL의 종류 5가지 1. Query : select문의 6가지절, 함수, 조인, 집합연산자, 서브쿼리 2. DML : insert, update, delete, merge 3. DDL : create, alter, drop, truncate, rename 4. DCL : grant, revoke 5. TCL : commit, rollback, savepoint ㅁcreate문으로 만들 수 있는 데이터베이스 오브젝트 5개 1. table : 데이터베이스에 데이터를 저장하는 기본 저장소 2. view : 복잡한 쿼리를 간단하게 엑세스 하기 위한 db object 3. index : 대용량 데이터에서 특정 데이터의 검색을 빠르게 할 수 있음 4. seq..
sql중급 / 계층형 질의문3,4 091 계층형 질의문으로 서열을 주고 데이터 출력하기 3(데이터 정렬) 복습문제. 이름과 월급을 출력하는데 월급이 높은 사원부터 출력하시오 select ename, sal from emp order by sal desc; 복습문제. KING을 시작으로 해서 서열을 부여한 결과를 출력하는데 이름, 서열, 직업, 월급을 출력하시오 select rpad(' ',level*3)||ename as employee, level, job, sal from emp start with ename = 'KING' connect by prior empno = mgr; 문제474. 위의 결과를 다시 출력하는데 서열에 대한 시각화된 틀이 흐트러지지 않는 범위 내에서 월급이 높은 사원순으로 결과를 출력하시오 select rpad..
문제5. SQL / 서브쿼리 튜닝 및 조인 [코드를 쓴 상황] 사원이름, 월급, 부서번호가 20번인 사원들의 토탈월급, 부서번호가 20번인 사원들의 최대월급, 부서번호가 20번인 사원들의 최소월급을 출력하시오. [내가 쓴 코드 + 에러] -- 내가 쓴 코드 1 select ename, sal, sum(sal) over() as sum_s, max(sal) over() as max_s, min(sal) over() as min_s from emp; sum,max,min 그룹함수를 over()를 사용하여 ename,sal 컬럼과 같이 출력시키기까지는 풀었으나 deptno=20이라는 조건을 충족시키지 못함. -- 내가 쓴 코드 2 select ename, sal, (select sum(sal), max(sal), min(sal) from emp whe..
sql중급 / 계층형 질의문1,2 089 계층형 질의문으로 서열을 주고 데이터 출력하기 1 계층형 질의문은 서열이 있는 데이터에서 서열을 출력하는 SQL문법 사원 테이블에는 서열이 존재 > 숨어있는 서열을 화면에 표시하는 것 서열에 관련된 컬럼은 mgr > mgr을 이용해서 서열을 출력 -- 사원번호, 이름, 관리자번호 출력 select empno, ename, mgr from emp; -- 사원이름, 서열, 월급, 직업을 출력하세요 select ename, level, sal, job from emp start with ename = 'KING' -- 보고 싶은 서열1위에 해당하는 사원 connect by prior empno = mgr; -- empno 가 mgr인 사원 > ... > empno가 mgr인 사원 으로 엮어서 서열을 부..

반응형