Oracle DBA/SQL 95

073 서브 쿼리 사용하기 3(NOT IN)

예제. 관리자인 사원들의 이름을 출력하시오. (mgr에 자기 사번이 있는 사원들 = 자기 밑에 직속 부하가 한 명이라도 있는 사원들) SELECT ename FROM emp WHERE empno IN (SELECT mgr FROM emp); 예제. 관리자가 아닌 사원들의 이름을 출력하시오. (자기 밑에 직속부하가 한명도 없는 일반 사원들) SELECT ename FROM emp WHERE empno NOT IN (SELECT mgr FROM emp); 전체 사원 14명 중에 6명이 관리자면, 8명의 사원이 출력되야 하는데 출력 결과가 없음. 결과가 나오지 않는 이유 파악 : 위와 같은 의미의 코드 SELECT ename FROM emp WHERE empno != 7788 AND empno != 7902 ..

Oracle DBA/SQL 2023.07.04

072 서브 쿼리 사용하기 2(다중 행 서브쿼리)

* 서브 쿼리의 종류 2가지 1. 단일행 서브쿼리 : 서브쿼리에서 메인 쿼리로 하나의 값이 리턴되는 경우 연산자 : = , >, =, ALL, ANY, < ANY * 주의사항 : 단일, 다중 간 연산자 섞어 써도 결과가 출력되는 경우도 있음. 하지만 oracle이 자체적으로 적절한 연산자로 변경해주는 과정을 한 번 거치게 되므로, 작성 시에 올바른 연산자를 쓰는 것이 좋다. 예제. 사원번호가 7788, 7902, 7369번인 사원의 사원번호, 이름을 출력하시오. SELECT empno, ename FROM emp WHERE empno IN (7788, 7902, 7369); 예제. 이름이 SCOTT인 사원과 월급이 같은 사원들의 이름과 월급을 출력하시오. SELECT ename, sal ..

Oracle DBA/SQL 2023.07.04

071 서브 쿼리 사용하기 1(단일행 서브쿼리)

예제. JONES보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오. 기존의 방법 SELECT ename, sal FROM emp WHERE ename = 'JONES'; 1. JONES의 월급 확인 SELECT ename, sal FROM emp WHERE sal > 2975; 2. 월급 값을 WHERE절에 명시해 최종 확인 서브쿼리를 이용해 쿼리문 두 번 작성하는 대신 한 번에 해결하는 방법 SELECT ename, sal -- 메인 쿼리, OUTER 쿼리 FROM emp WHERE sal > (SELECT sal -- 서브쿼리 FROM emp WHERE ename = 'JONES'); 문제 362. SCOTT과 같은 월급을 받는 사원들의 이름과 월급을 출력하시오. SELECT ename, ..

Oracle DBA/SQL 2023.07.04

070 집합 연산자로 데이터의 차이를 출력하기(MINUS)

운영DB와 테스트DB간의 데이터 차이를 확인할 때 사용하곤 함. 문제 354. 2017년도에는 존재했는데 2022년도에 사라진 카페베네 매장은 총 몇 개인가? SELECT COUNT(*) FROM ( SELECT 상가업소번호, 상호명 FROM market_2017 WHERE 상호명 LIKE '%카페베네%' MINUS SELECT 상가업소번호, 상호명 FROM market_2022 WHERE 상호명 LIKE '%카페베네%' ); 문제 355. 2017년도에는 존재했는데 2022년도에 사라진 스타벅스 매장은 총 몇 개인가? SELECT COUNT(*) FROM ( SELECT 상가업소번호, 상호명 FROM market_2017 WHERE 상호명 LIKE '%스타벅스%' MINUS SELECT 상가업소번호, ..

Oracle DBA/SQL 2023.07.04

069 집합 연산자로 데이터의 교집합을 출력하기(INTERSECT)

문제 351. market_2017 테이블에서 상호명이 카페베네를 포함하고 있는 상가업소번호, 상호명을 출력하시오. SELECT 상가업소번호, 상호명 FROM market_2017 WHERE 상호명 LIKE '%카페베네%'; 72건 문제 352. market_2022 테이블에서 상호명이 카페베네를 포함하고 있는 상가업소번호, 상호명을 출력하시오. SELECT 상가업소번호, 상호명 FROM market_2022 WHERE 상호명 LIKE '%카페베네%'; 51건 문제 353. 2022년도와 2017년도에 모두 있었던 상호명 카페베네의 상가업소번호와 상호명을 출력하시오. SELECT 상가업소번호, 상호명 FROM market_2017 WHERE 상호명 LIKE '%카페베네%' INTERSECT SELECT ..

Oracle DBA/SQL 2023.07.04

068 집합 연산자로 데이터를 위아래로 연결하기 2(UNION)

* union이 union all과 다른점 1. 중복행 제거 2. 맨 앞의 컬럼을 기준으로 결과가 정렬됨. 문제 344. 부서번호가 10,20번인 사원들의 부서번호, 부서번호별 토탈 월급을 출력하시오. SELECT deptno, sum(sal) FROM emp WHERE deptno in (10,20) GROUP BY deptno; 문제 345. 부서번호가 20,30번인 사원들의 부서번호, 부서번호별 토탈 월급을 출력하시오. SELECT deptno, sum(sal) FROM emp WHERE deptno in (20,30) GROUP BY deptno; 문제 346. 문제 344번의 결과와 문제 345번의 결과를 위,아래로 연결해서 출력하시오. (UNION ALL) UNION ALL의 경우, 중복 그대..

Oracle DBA/SQL 2023.07.03

067 집합 연산자로 데이터를 위아래로 연결하기 1(UNION ALL)

JOIN : 두 테이블의 결과를 양옆으로 연결해서 보여주는 문법 집합 연산자 : 두 테이블의 결과를 위 아래로 연결해서 보여주는 문법 * 집합 연산자의 종류 4가지 1. UNION ALL 2. UNION 3. INTERSECT 4. MINUS 문제 336. 부서번호, 부서번호 별 토탈월급을 출력하시오. SELECT deptno, sum(sal) FROM emp GROUP BY deptno; 문제 337. 사원테이블의 전체 토탈 월급을 출력하시오. SELECT sum(sal) FROM emp; 문제 338. ROLLUP을 이용해서, 부서번호, 부서번호별 토탈월급을 출력하는데, 맨 밑에 전체 토탈 월급을 출력되게 하시오. SELECT deptno, sum(sal) FROM emp GROUP BY ROLLUP..

Oracle DBA/SQL 2023.07.03

066 여러 테이블의 데이터를 조인해서 출력하기 9(FULL OUTER JOIN)

예제. 아래의 오라클 조인 문법이 수행되는지 확인하시오. SELECT e.ename, d.loc FROM emp e, dept d WHERE e.deptno(+) = d.deptno(+); ORA-01468: outer-join된 테이블은 1개만 지정할 수 있습니다 01468. 00000 - "a predicate may reference only one outer-joined table" ORACLE로는 불가능 / ANSI 가능 ANSI) SELECT e.ename, d.loc FROM emp e FULL OUTER JOIN dept d ON (e.deptno = d.deptno); 문제 335. 위의 SQL의 실행계획을 확인하시오. EXPLAIN PLAN FOR SELECT e.ename, d.loc..

Oracle DBA/SQL 2023.07.03

065 여러 테이블의 데이터를 조인해서 출력하기 8(LEFT/RIGHT OUTER JOIN)

예제. 이름과 부서위치를 출력하는데 OUTER JOIN을 사용해서 사원테이블에는 없는 부서번호인데, 부서 테이블에는 있는 부서번호에 대한 부서위치를 출력하시오. 방법 1) ORACLE SELECT e.ename, d.loc FROM emp e, dept d WHERE e.deptno(+) = d.deptno; 자료가 없는 쪽에 (+)를 기입해야 출력됨. 방법2) ANSI SELECT e.ename, d.loc FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno); 자료가 있는 쪽을 파악해서 LEFT / RIGHT OUTER JOIN (오른쪽에 outer한 데이터가 있다면, RIGHT OUTER JOIN ) 참고. LEFT OUTER JOIN 케이스 방..

Oracle DBA/SQL 2023.07.03

064 여러 테이블의 데이터를 조인해서 출력하기 7(NATURAL JOIN)

오라클이 알아서 조인 조건을 찾아서 조인 예제. 이름과 부서위치를 출력하는데 natural join으로 수행하시오. SELECT e.ename, d.loc FROM emp e NATURAL JOIN dept d; 문제 330. 부서위치, 부서위치별 토탈월급을 출력하시오. 방법1) EQUI JOIN SELECT d.loc, sum(e.sal) FROM emp e, dept d WHERE d.deptno = e.deptno GROUP BY d.loc; ORACLE 조인 문법 EQUI JOIN이므로 WHERE절에 조인 조건 명시 방법2) ANSI (USING) SELECT d.loc, sum(e.sal) FROM emp e JOIN dept d USING (deptno) GROUP BY d.loc; USING..

Oracle DBA/SQL 2023.07.03