Oracle DBA/SQL 95

095 복잡한 쿼리를 단순하게 하기 1(VIEW)

오라클의 database 오브젝트 5개 1. table : 행(row)과 컬럼(column)으로 이루어진 기본 데이터 저장소 2. view : 데이터를 저장하지는 않고, 테이블의 데이터를 볼 수 있게 해주는 db object 3. index 4. sequence 5. synonym * View의 종류 2가지 단순 VIEW 복합 VIEW 테이블의 갯수 1개 2개 이상 group 함수 또는 GROUP BY절 포함 안 함 포함 DML 여부(Insert, update...) 가능 불가능할 수도 있다 * View를 왜 사용하는가? 1. 보안상의 이유 특정 컬럼을 노출하지 않고 데이터를 액세스 할 수 있게 하려고 ex) 테이블을 공개해야 개발이 가능한데, 특정 데이터를 노출하지 않게 하고 싶을 때 (월급같은 경우)..

Oracle DBA/SQL 2023.07.11

테이블 명, 컬럼명 변경하기 (RENAME)

테이블 명 변경 구조: RENAME 바꿀 테이블 명 TO 대상 테이블 명; DDL 명령어이므로 수행되면서 commit 문제 528. emp 테이블의 이름을 emp_info로 변경하시오. RENAME emp TO emp_info; 확인 (이전 이름으로 테이블 조회) SELECT * FROM emp; 확인 (새로 바꾼 이름으로 테이블 조회) SELECT * FROM emp_info; 잘 변경 된 것을 확인 할 수 있음. 문제 529. 다시 emp_info를 emp로 변경하시오. RENAME emp_info TO emp; 컬럼명 변경 구조: ALTER 대상 테이블 명 RENAME COLUMN 대상 컬럼 명 TO 바꿀 컬럼 명; DDL 명령어이므로 수행되면서 commit 문제 530. emp테이블의 sal 컬럼..

Oracle DBA/SQL 2023.07.11

컬럼 변경 명령어 4가지 (ALTER)

컬럼 변경 명령어 4가지 * 주의사항: 1. 위의 ALTER문을 이용한 변경작업은 업무시간(바쁠 때) 수행하면 안되고, db가 한가한 밤이나 주말에 수행해야함. 2. 컬럼 삭제는 rollback, flashback 둘 다 안됨. 주의해야 함. 1. 컬럼 추가 예: emp 테이블에 email이라는 컬럼 추가 ALTER TABLE emp ADD email VARCHAR2(30); 2. 컬럼 삭제 한 번 삭제되면, rollback, flashback 둘 다 안됨. 조심해서 해야 함. 예 : emp 테이블에 sal 컬럼 삭제 ALTER TABLE emp DROP COLUMN sal; 롤백으로 복구 시도 완료됐다고 출력되지만, 실제 테이블 조회하면 복구 X 플래쉬백으로 복구 시도 플래쉬백도 복구X 해결 방법 : ..

Oracle DBA/SQL 2023.07.11

092 계층형 질의문으로 서열을 주고 데이터 출력하기 4

계층형 질의문의 짝꿍함수 : SYS_CONNECT_BY_PATH (가로로 데이터를 출력함.) 예제1. 다음과 같이 SYS_CONNECT_BY_PATH를 이용한 SQL을 작성하시오. SELECT ename, SYS_CONNECT_BY_PATH(ename, '/') AS path FROM emp START WITH ename = 'KING' CONNECT BY PRIOR empno = mgr; 문제 508. 위의 결과에서 ADAMS 행만 출력하시오. SELECT ename, SYS_CONNECT_BY_PATH(ename, '/') AS path FROM emp WHERE ename = 'ADAMS' START WITH ename = 'KING' CONNECT BY PRIOR empno = mgr; 문제 50..

Oracle DBA/SQL 2023.07.10

091 계층형 질의문으로 서열을 주고 데이터 출력하기 3

계층형 질의문에서 서열의 틀을 깨트리지 않으면서 데이터를 정렬하는 방법 (ORDER BY절에 특별한 키워드를 하나 기술해야 함) 예제1. 다음과 같이 사원 테이블의 전체 서열을 출력하시오. SELECT LEVEL, rpad(' ', (LEVEL-1)*2)|| ename AS employee, sal FROM emp START WITH ename = 'KING' CONNECT BY PRIOR empno = mgr ; 예제2. 위의 결과를 다시 출력하는데, 월급이 높은 사원부터 출력하시오. SELECT LEVEL, rpad(' ', (LEVEL-1)*2)|| ename AS employee, sal FROM emp START WITH ename = 'KING' CONNECT BY PRIOR empno = m..

Oracle DBA/SQL 2023.07.10

090 계층형 질의문으로 서열을 주고 데이터 출력하기 2

계층형 질의문 결과에서 검색 조건을 주는 방법 문제 504. 사원테이블에서 이름과, 월급을 출력하되, 직급 순으로 서열을 부여하고, 이름이 BLAKE인 사원은 제외하고 출력하시오. (가독성 좋게 rpad로 공백 넣기) SELECT LEVEL, rpad(' ', (LEVEL-1)*2)|| ename AS employee, sal FROM emp WHERE ename != 'BLAKE' START WITH ename = 'KING' CONNECT BY PRIOR empno = mgr ; 문제 505. 이번에는 BLAKE뿐 아니라 팀원들도 전부 안나오게 하시오. SELECT LEVEL, rpad(' ', (LEVEL-1)*2)|| ename AS employee, sal FROM emp START WITH e..

Oracle DBA/SQL 2023.07.10

089 계층형 질의문으로 서열을 주고 데이터 출력하기 1

: 데이터에서 서열을 발견해서 출력하는 쿼리 예제1. 사원 테이블의 서열을 계층형 질의문으로 출력하시오. SELECT LEVEL, empno, ename, mgr FROM emp START WITH ename = 'KING' -- 서열 1위 결정 CONNECT BY PRIOR empno = mgr; -- 계층형 질의문의 서열 연결고리 SELECT절에 LEVEL을 같이 적어주면 출력 결과에 대한 이해가 조금 더 쉬움. 구조 : START WITH 조건 CONNECT BY PRIOR PK(부모키) = FK(자식키) 앞 행의 empno가 본인 mgr이 되도록 연결 즉 LEVEL 1 KING의 사원번호(7839)가 관리자 번호인 사원들이 LEVEL 2 (JONES, BLAKE, CLARK) LEVEL 2의 사원..

Oracle DBA/SQL 2023.07.10

086 서브 쿼리를 사용하여 데이터 수정하기

UPDATE문에서 서브쿼리를 쓸 수 있는 절 UPDATE 서브쿼리 가능 SET 서브쿼리 가능 WHERE 서브쿼리 가능 WHERE절의 서브쿼리 문제 486. 사원 테이블에 ALLEN보다 늦게 입사한 사원들의 월급을 9000으로 변경하시오. UPDATE emp SET sal = 9000 WHERE hiredate > (SELECT hiredate FROM emp WHERE ename = 'ALLEN'); 문제 487. SCOTT과 같은 부서번호에서 일하는 사원들의 월급을 8000으로 수정하시오. UPDATE emp SET sal = 8000 WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'SCOTT'); SET절의 서브쿼리 문제 488. KING의 월급을 AL..

Oracle DBA/SQL 2023.07.07

083 락(LOCK) 이해하기

LOCK : 세션(유저)이 특정 데이터를 수정하게 되면 COMMIT하기 전까지 수정한 행(row)에 락을 검. 특정 세션이 변경한 데이터를 다른 세션이 변경하지 못하도록 막는 기능 -> 만약 lock이 없다면 데이터의 일관성이 깨짐 예시) 위에서 아래로 시간 순서상 진행된다고 이해해보기 c##scott c##scott A session B session UPDATE emp SET sal = 9000 WHERE ename = 'KING'; UPDATE emp SET sal = 0 WHERE ename = 'KING'; COMMIT; SELECT ename, sal FROM emp; 세션 A에서 마지막 쿼리문 수행할 때 0으로 나온다면? 데이터의 일관성이 깨져버림. ∴ 해당 행에다 락(lock)을 걸어, 다..

Oracle DBA/SQL 2023.07.07

082 데이터 입력, 수정, 삭제 한번에 하기(MERGE)

MERGE는 INSERT와 UPDATE와 DELETE를 한번에 수행하는 명령에 UPSERT로 많이 알려져있음. 튜닝방법으로 많이 쓰임. 문제 460. (복습문제) emp와 dept를 조인해서 이름과 부서위치를 출력하시오. SELECT e.ename, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno; * db 모델링 중에 반정규화란? : 위와 같이 조인을 자주 해야하는 상황인데 조인을 할 때 너무 성능이 느리면 그냥 loc컬럼을 emp 테이블에 추가시킴. (조인하지 않고 아래와 같이 검색해도 같은 테이블에서 조회되게 하는 것) SELECT ename, loc FROM emp; 문제 461. emp 테이블에 loc 컬럼을 추가하시오. (컬럼 추가 작업) ALTER ..

Oracle DBA/SQL 2023.07.06