SQL
교재명 : Do it! 오라클로 배우는 데이터베이스 입문 (이지스퍼블리싱 / 이지훈 지음) [ Q1 ] [ A1 ] SELECT E.JOB, E.EMPNO, E.ENAME, E.SAL, E.DEPTNO, D.DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND JOB = (SELECT JOB FROM EMP WHERE ENAME = 'ALLEN'); [ Q2 ] [ A2 ] SELECT E.EMPNO, E.ENAME, D.DNAME, E.HIREDATE, D.LOC, E.SAL, S.GRADE FROM EMP E, DEPT D, SALGRADE S WHERE E.DEPTNO = D.DEPTNO AND E.SAL BETWEEN S.LOSAL AND S.HISAL..
교재명 : Do it! 오라클로 배우는 데이터베이스 입문 (이지스퍼블리싱 / 이지훈 지음) [ Q1 ] [ A1 ] -- SQL-99 이전 방식 SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.SAL > 2000; -- SQL-99방식 SELECT DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.SAL FROM EMP E NATURAL JOIN DEPT D WHERE E.SAL > 2000; [ Q2 ] [ A2 ] --SQL-99 이전 방식 SELECT D.DEPTNO, D.DNAME, TRUNC(AVG(SAL)) AS AVG_SAL, MAX(SAL) A..
교재명 : Do it! 오라클로 배우는 데이터베이스 입문 (이지스퍼블리싱 / 이지훈 지음) [ Q1 ] [ A1 ] SELECT DEPTNO, TRUNC(AVG(SAL)) AS AVG_SAL, MAX(SAL) AS MAX_SAL, MIN(SAL) AS MIN_SAL, COUNT(*) AS CNT FROM EMP GROUP BY DEPTNO; [ Q2 ] [ A2 ] SELECT JOB, COUNT(*) FROM EMP GROUP BY JOB HAVING COUNT(*) >= 3; 오답 풀이 (내가 쓴 답): SELECT JOB, COUNT(*) FROM EMP WHERE COUNT(*) >= 3 GROUP BY JOB WHERE은 group by 보다 먼저 실행되므로 where 보다는 having절을 사..
교재명 : Do it! 오라클로 배우는 데이터베이스 입문 (이지스퍼블리싱 / 이지훈 지음) [ Q1 ] [ A1 ] SELECT EMPNO, RPAD(SUBSTR(EMPNO, 1, 2), 4, '*') AS MASKING_EMPNO, ENAME, RPAD(SUBSTR(ENAME, 1, 1), LENGTH(ENAME), '*') AS MASKING_ENAME FROM EMP WHERE LENGTH(ENAME) >= 5 AND LENGTH(ENAME) < 6; [ Q2 ] [ A2 ] SELECT EMPNO, ENAME, SAL, TRUNC(SAL / 21.5, 2) AS DAY_PAY, ROUND(SAL / 21.5 / 8, 1) AS TIME_PAY FROM EMP; [ Q3 ] [ A3 ] SELECT..
교재명 : Do it! 오라클로 배우는 데이터베이스 입문 (이지스퍼블리싱 / 이지훈 지음) [ Q1 ] [ A1 ] SELECT * FROM EMP WHERE ENAME LIKE '%S'; [ Q2 ] [ A2 ] SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHERE DEPTNO = 30 AND JOB = 'SALESMAN'; [ Q3 ] [ A3 ] -- 집합연산자를 사용하지 않은 방식 SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHERE DEPTNO IN (20, 30) AND SAL > 2000; -- 집합연산자를 사용한 방식 SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHER..
기록을 조회할 때 가장 최근꺼를 보고싶은 경우, sequence 번호 중 가장 큰 숫자를 조회하는 방법이 있다. [ Ex ] 고객이 프로그램 실행 중에 데이터를 여러 번 수정하다가 마지막에 실수로 upload 대신 delete를 눌러서 데이터를 삭제해버렸다고 하자. 이 고객은 삭제되기 전에 마지막으로 작성한 data를 가져오고싶다는 문의를 남겼다. 이 때, 우리는 어떻게 해야할까? 우선, 고객이 수정했던 기록들이 담긴 테이블을 보자. ID SEQ REMARK A 1 ... A 2 ... A 3 ... 실수한 고객의 ID는 A로 동일하므로 수정할 때마다 매겨진 SEQ (sequence number) 번호로 조회하면 된다. '가장 최근 기록'은 '가장 마지막으로 TABLE에 INSERT되었다'는 것과 같으므..
[ Transaction 사용 순서 ] BEGIN TRANSACTION -- 실행 UPDATE TABLE01 ... -- 실행 COMMIT TRANSACTION -- 실행 (수정사항을 최종 적용) ROLLBACK TRANSACTION -- 실행 (수정취소. 수정하기 이전 상태로 돌아감) UPDATE문 실행 후, 원하는 결과가 나온 것을 확인했다면 COMMIT, 원하는 결과가 나오지 않아서 BEGIN TRAN 이전 상태로 되돌리고싶다면 ROLLBACK 명령을 실행 TRANSACTION 을 줄여서 'TRAN'이라고 작성해도 무방하다. BEGIN TRAN; UPDATE .. COMMIT TRAN; [ Transaction을 사용하는 이유 ] 1. 테이블은 한 번에 1명만 접근하여 수정할 수 있다. 즉, 내가 ..
Data table을 만들고나서 data가 의도치않게 변경되거나 삭제될 경우를 대비하여 항상 data를 백업해주는게 좋다. 백업하는 방법은 아래와 같다. select * into 새로백업할테이블명 from 기존테이블 /* 예시 */ select * into table01_20210616 from table01 syntax : select 모든 데이터 into 백업 -- from 뒤에 내가 앞으로 작업할 table 이름 -- 백업할 테이블명에는 백업한 날짜도 적어주는게 좋다! -- create table 을 미리 작성해줄 필요 없이 바로 백업된 테이블이 생성된다.