now is better than never
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 9 - 13차시 본문
SQL/초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡)
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 9 - 13차시
김초송 2022. 11. 17. 19:27-- non equi join
select ename, sal, grade
from emp e join salgrade sg on e.sal between sg.losal and sg.hisal;
select e.ename, e.sal
from emp e join salgrade s on e.sal between s.losal and s.hisal
where s.grade = 4
order by e.sal desc;
-- outer join
select e.ename, d.loc
from dept d left join emp e on d.deptno = e.deptno;
insert into emp(empno, ename, sal, deptno)
values (7122, 'JACK', 3000, 70);
commit;
select e.ename, d.loc
from emp e left join dept d on e.deptno = d.deptno;
-- self join
select e1.ename, e1.job, e2.ename, e2.job
from emp e1 join emp e2 on e1.mgr = e2.empno
where e1.sal > e2.sal;
-- using 문법 : 조인절에 테이블 별칭 X
select e.ename, e.job, e.sal, d.loc
from emp e join dept d
using (deptno)
where d.loc='DALLAS';
-- natural join : 알아서 조인 컬럼 찾아서 조인
select e.ename, e.job, e.sal, d.loc
from emp e natural join dept d;
-- full outer join
select e.ename, e.job, e.sal, d.loc
from emp e full outer join dept d
on e.deptno = d.deptno;
-- JACK 삭제
delete from emp
where deptno = 70;
commit;
-- union all : union할 테이블의 컬럼 갯수와 데이터 타입이 같아야 함
-- 컬럼명도 같게 하는게 좋음
--select deptno, sum(sal)
--from emp
--group by rollup(deptno)
--order by deptno;
select job, sum(sal)
from emp
group by job
union all
select to_char(null) job, sum(sal)
from emp
order by job;
-- union : 위 아래 데이터를 정렬해서 연결
--? 난 정렬 안되는디
select deptno, sum(sal)
from emp
group by deptno
union
select to_number(null) deptno, sum(sal)
from emp;
-- 교집합 : 첫번째 컬럼 기준으로 정렬
-- 하지만 난 안 됨
select ename, sal, job, deptno
from emp
where deptno in (10, 20)
intersect
select ename, sal, job, deptno
from emp
where deptno in (20, 30);
-- 차집합 : 앞 테이블에서 뒤 테이블과의 교집합 뺀 나머지
select ename, sal, job, deptno
from emp
where deptno in (10, 20)
minus
select ename, sal, job, deptno
from emp
where deptno in (20, 30);
-- 단일행 서브쿼리
-- = / !=, ^= <> / >(=) / <(=)
select ename, sal
from emp
where sal > (
select sal
from emp
where ename='JONES' );
select ename, sal
from emp
where hiredate > (
select hiredate
from emp
where ename = 'ALLEN' );
-- 다중행 서브쿼리 : return 값이 여러 개
-- in / not in / >all / <all / >any / <any
select ename, sal
from emp
where sal in (
select sal
from emp
where job = 'SALESMAN' );
-- 반드시 null처리 해야 함
select empno, ename
from emp
where empno not in
(select mgr
from emp
where mgr is not null);
-- exist와 not exist
-- exists 함수는 메인쿼리 먼저 실행 -> 서브쿼리 실행
select *
from dept
where exists (select *
from emp
where emp.deptno = dept.deptno);
-- having절 서브쿼리
select job, sum(sal)
from emp
group by job
having sum(sal) > (select sum(sal)
from emp
where job = 'SALESMAN');
-- from절 서브쿼리
select *
from(
select ename, sal
, rank() over (order by sal desc) rnk
from emp)
where rnk = 1;
-- select절 서브쿼리
select ename, sal
, ( select max(sal)
from emp
where job = 'SALESMAN' ) max
, ( select min(sal)
from emp
where job = 'SALESMAN' ) min
from emp
where job = 'SALESMAN';
-- 실행 순서 : from -> where -> group by -> having -> select -> order by
-- group by 빼고 서브쿼리 쓸 수 있음
'SQL > 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡)' 카테고리의 다른 글
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 23 - 25 (0) | 2022.11.27 |
---|---|
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 22 (0) | 2022.11.26 |
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 17 - 20 (0) | 2022.11.23 |
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 14 - 16 (0) | 2022.11.17 |