db sql

이진섭·2023년 3월 30일
0
-- 총 정리
select deptno, count(empno), sum(sal), avg(sal) 
from emp 
where deptno != 10 
group by deptno
having count(empno) >= 3
order by count(empno) desc

## delete, update, insert
-- delete (데이터 삭제)
-- 삭제할 때는 where조건으로 삭제하자
delete from emp;
-- truncate 테이블안에 있는 데이터를 초기화 함
truncate table emp;
-- commit(완전 저장),rollback(이전 상태로 돌아가기)
-- auto commit을 해제 하면 rollback(뒤 돌아가기)으로 돌아갈 수 있음
-- auto commit설정되어 있으면 rollback 명령어 불가능!


-- join****
-- 관계형 데이터베이스(MySQL, Oracle, Tibero ...)
-- 를 사용하면 join은 무조건 사용한다.
-- depno : 부서번호, dname : 부서이름, loc : 부서위치
-- 조인은 컬럼 이름이 같다고 해서 되는게 아니라, 데이터 타입이 서로 같아야 한다. 
-- 컬럼 이름이 같은 이유는 사용자(개발자) 편의성을 위해서 같게 해준다.

-- join 문법 
-- 테이블 이름에도 as를 사용할 수 있다. 
-- 방법 1.
select e.ename,e.deptno,e.dname from emp as e
inner join dept as d
on e.deptno = d.deptno
-- 방법 2. (추천 x)
-- where 조건으로도 사용할 수 있지만
-- where가 나온 목적은 연산자(비교)를 이용해서 필터링을 하는게 목적이다.
-- 때문에 아래 방법보다는 방법 1로 join을 사용하자.
select e.ename,e.deptno,d.dname from emp as e,
dept as d
where e.deptno = d.deptno
-- 사원번호가 7788인 사원의 이름,직책,부서번호,부서이름,근무지역을 조회하시오.
-- 조인 팁 : 두 테이블 교집합 컬럼을 찾자!
select e.ename, e.job, e.deptno, d.dname, d.loc 
from emp as e 
inner join dept as d 
on e.deptno = d.deptno
where e.empno = 7788
-- 부서별로 그룹핑을 하고 부서번호와 (부서이름)을 조회하시오.
-- join 문법은 from과 where 사이에 온다.
select e.deptno, d.dname from emp as e
inner join dept as d 
on e.deptno = d.deptno
group by e.deptno
-- 직책이 manager인 사원들의 이름, 부서이름, 부서위치를 조회하시오.
select 
	e.ename as "사원 이름",
	d.dname as "부서 번호",
	d.loc as "부서 위치"
from emp as e 
inner join dept as d 
on e.deptno = d.deptno
where e.job = 'manager'
-- inner join(교집합)에서 순서는 상관없지만
-- right join과 left join은 상관 있다.
select * from dept as d 
inner join emp as e

-- left join(차집합), right join(차집합) : 아우터(outer) 조인
-- 40번 부서만 조회
select * from dept where deptno = 40;
-- emp테이블에 없는 부서번호 조회
select * from dept as d left join emp as e
on d.deptno = e.deptno
where e.empno is null

-- self join (inner join하고 같음)
-- 그러나 자기 자신을 조인함 즉, 1개 테이블을 사용
-- boss: 상사 ,underling: 부하
select 
	boss.empno as '상사 번호',
	boss.ename as '상사 이름',
	underling.empno as '부하직원 번호',
	underling.ename as '부하직원 이름'
from emp as boss
inner join emp as underling
on boss.empno = underling.mgr

-- emp에 insert 하기
insert into emp (empno, ename, job, sal, hiredate)
values (8000, '손흥민', 'SALESMAN', 7000, now());

-- 문제. 아우터 조인(left or right) 이용하기
-- 부서에 소속되어 있지 않는 사원 번호,이름,입사날짜 조회
-- 결과 흥민 손! 쏘니!
select * from emp as e left join dept as d
on e.deptno = d.deptno
where d.dname is null
-- 사원번호가 8000인 사원의 급여를 8000으로 업데이트 하시오
-- update는 from을 명시하지 않는다.
-- delete from을 써준다.
update emp 
set sal = 8000
where empno = 8000
profile
하루하루성장하기

0개의 댓글