Oracle DBA/SQL 95

063 여러 테이블의 데이터를 조인해서 출력하기 6(USING절)

구조 SELECT 컬럼명 나열 FROM 테이블1 JOIN 테이블2 USING (컬럼명); 주의 사항 : 1) USING절에는 테이블 별칭을 사용하지 않고, 공통 컬럼명 이름만 기입한다. 2) 공통컬럼명만 기입 가능하므로, EQUI JOIN만 가능하고 NON EQUI JOIN은 불가능하다. 3) USING절 괄호 필수 누락시 출력 메세지 ORA-00906: 누락된 좌괄호 00906. 00000 - "missing left parenthesis" 예제. 이름과 부서위치를 출력하는데 USING절을 사용한 조인으로 수행하시오. SELECT e.ename, d.loc FROM emp e JOIN dept d USING (deptno); -- 공통 컬럼명 테이블 별칭 없이 기입 문제 320. employees 테이..

Oracle DBA/SQL 2023.07.03

062 여러 테이블의 데이터를 조인해서 출력하기 5(ON절)

1999 ANSI 조인 문법 (ON절을 사용한 조인) 미국 국립 표준 협회 다음의 ORACLE 조인 문법을 ANSI 조인해서 동일한 결과를 출력해보시오. ORACLE조인 SELECT e.last_name AS 사원명, m.last_name AS 관리자명 FROM employees e, employees m WHERE e.manager_id = m.employee_id AND e.manager_id = 100; 1999 ANSI 조인 문법 (ON절을 사용한 조인) SELECT e.last_name, m.last_name FROM employees e JOIN employees m -- 조인하는 테이블 사이 'JOIN' 표기 ON (e.manager_id = m.employee_id) -- 조인 조건 WHE..

Oracle DBA/SQL 2023.07.03

061 여러 테이블의 데이터를 조인해서 출력하기 4(SELF JOIN)

1. 기본 SELECT 문 SELECT 컬럼 명 FROM 테이블 명 WHERE 검색 조건 GROUP BY 그룹화할 컬럼 ORDER BY 정렬할 컬럼 ; 실행 순서 : FROM - WHERE - GROUP BY - SELECT - ORDER BY 2. 함수 1) 단일행 함수 : 문자, 숫자, 날짜, 변환, 일반 2) 복수행 함수 : max, min, sum,avg, count 3. 조인 일단, 크게 나누면 INNER vs OUTER 조인 OUTER JOIN아니면 다 INNER JOIN 1) 오라클 조인 문법 4가지 (1) EQUI JOIN : 조인하려는 두 테이블의 조인조건이 이퀄(=)조건인 조인 문법 (2) NON EQUI JOIN : 조인하려는 두 테이블의 조인 조건이 이퀄(=) 조건이 아닌 조인 문법..

Oracle DBA/SQL 2023.07.03

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

SELECT * FROM dept; SELECT * FROM emp; 예제. 이름과 부서위치를 출력하시오. SELECT E.ename, D.loc FROM emp E, dept D WHERE E.deptno = D.deptno; 이렇게 출력하면 dept테이블의 1개 데이터가 출력되지 않음. (40번의 BOSTON값이 누락) 왜냐하면, 조인 조건이 E.deptno = D.deptno였기 때문. emp테이블의 deptno는 10,20,30번만 있어, dept 테이블의 deptno 중에서 공통인 세가지 값만 가져오기 때문. SELECT E.ename, D.loc FROM emp E, dept D WHERE E.deptno (+) = D.deptno; 이렇게 하면 BOSTON의 값도 출력됨. (+)를 통해 OU..

Oracle DBA/SQL 2023.06.30

059 여러 테이블의 데이터를 조인해서 출력하기 2(NON EQUI JOIN)

※ 오라클 조인 문법 4가지 1. EQUI JOIN : 조인하려는 두 테이블의 조인조건이 이퀄(=)조건인 조인 문법 2. NON EQUI JOIN : 조인하려는 두 테이블의 조인 조건이 이퀄(=) 조건이 아닌 조인 문법 3. OUTER JOIN 4. SELF JOIN 문제 210. emp 테이블과 salgrade 테이블을 조인해서 이름,월급, grade를 출력하시오. 둘이 똑같은 컬럼은 없지만 비슷한 컬럼은 있음. emp : sal(월급) salgrade : losal(최저월급), hisal(최대월급) emp의 월급값이 salgrade의 최소,최대 월급값의 사이에 있다는 의미로 조인해주는 방식을 택하면 됨. (우회적인 방법으로 연결고리를 찾는 것) SELECT E.ename, E.sal, S.grade ..

Oracle DBA/SQL 2023.06.30

058 여러 테이블의 데이터를 조인해서 출력하기 1(EQUI JOIN)

JOIN : 보다 더 좋은 정보를 테이블에서 뽑아내려면 '조인'을 사용해야 한다. 하나의 테이블로는 알 수 없는 정보를 다른 테이블과 조인함으로써 알 수 있게 해주는 기술 2개 이상의 테이블에서 각각 컬럼의 데이터를 모아서 하나의 결과로 출력해주는 SQL문법 예제. KING은 어느 부서에서 근무하는가? 부서 위치가 어떻게 되는가? SELECT ename, loc FROM emp, dept; 이렇게 1) 조인 조건을 주지 않거나(omit join condition), 2) 잘못된 조인조건(incorrect join condition)을 기술하면 원하는 결과값이 나오지 않음. → 모든 조합을 다 구해 출력 -> Cartisian product ename (14명) * loc (4지역) = 56개행 SELEC..

Oracle DBA/SQL 2023.06.30

057 출력되는 행 제한하기 2(Simple TOP-n Queries)

정렬된 결과에서 상위 몇 개의 데이터를 가져오는 방법 2가지 1. ORDER BY 컬럼명 ASC/DESC FETCH FIRST 숫자 ROWS ONLY 2. ORDER BY 컬럼명 ASC/DESC FETCH FIRST 숫자 PERCENT ROWS ONLY 문제 287. 사원 테이블에서 이름, 월급을 출력하는데 월급이 높은 사원 4명만 출력하시오. SELECT ename, sal FROM emp ORDER BY sal DESC FETCH FIRST 4 ROWS ONLY; 문제 288. 위의 결과를 fetch 대신 다른 방법으로 출력하시오. SELECT ename, sal FROM(SELECT ename, sal FROM emp ORDER BY sal DESC) WHERE ROWNUM 비효율 문제 289. 사..

Oracle DBA/SQL 2023.06.30

056 출력되는 행 제한하기 1(ROWNUM)

ROWNUM 주로 사용하는 곳 : 큰 테이블의 일부만 보고 싶을 때 SELECT * FROM market_2022 WHERE rownum < 6; SELECT * FROM market_2022; 로 데이터를 전체 조회할 경우, 데이터의 갯수가 적은 테이블의 경우 부하가 걸리지 않지만, 대용량 데이터의 경우 문제가 됨. 일부만 조회하는 것이 부담이 덜 되는 쿼리라고 할 수 있음. * rownum과 row_number()함수의 차이? 1. row_number() 함수는 정렬된 결과에서 번호를 넘버링하고 싶을 때 사용 SELECT row_number() over(order by sal desc) as 번호, ename, sal FROM emp WHERE job = 'SALESMAN'; 2. rownum은 쿼리..

Oracle DBA/SQL 2023.06.30

055, 056 : 데이터 분석 함수로 출력 결과 넘버링 하기(ROW_NUMBER, ROWNUM)

예제. 직업이 SALESMAN인 사원의 이름, 월급, 직업을 출력하시오. SELECT ename, sal, job FROM emp WHERE job = 'SALESMAN'; 예제. 위의 SQL에서 출력되는 결과에 번호를 순서대로 앞에 부여하시오. SELECT ROWNUM, ename, sal, job FROM emp WHERE job = 'SALESMAN'; 문제 278. 위의 결과를 다시 출력하는데 월급이 높은 사원부터 출력하시오. SELECT ROWNUM, ename, sal, job FROM emp WHERE job = 'SALESMAN' ORDER BY sal DESC; 문제 279. 위의 결과에서 앞의 번호가 1,2,3,4로 나오게 하시오. 방법1. 서브쿼리 SELECT ROWNUM, ename..

Oracle DBA/SQL 2023.06.29

054 : 데이터 분석 함수로 집계 결과 출력하기 3(GROUPING SETS)

예제. 부서번호, 부서번호별 토탈 월급을 출력하는데 맨 아래에 전체 토탈 월급을 출력하시오. SELECT deptno, SUM(sal) FROM emp GROUP BY GROUPING SETS(deptno, () ); 예상되는 결과 1. deptno 2. () : 전체 * ()를 쓰지 않으면, 전체 총합 행은 나오지 않음. 그때 그때 총합을 보고 싶으면 () 쓰고, 안필요하면 안써도 돼서, ROLLUP이나 CUBE보다 사용이 쉬움. 문제 275. 아래의 sql 결과를 grouping sets로 구현하시오. SELECT deptno, job, SUM(sal) FROM emp GROUP BY ROLLUP(deptno, job); ▼ SELECT deptno, job, SUM(sal) FROM emp GROU..

Oracle DBA/SQL 2023.06.29