gi_dor

JOIN 복습 본문

First/SQL

JOIN 복습

기돌 2023. 6. 6. 19:56
728x90

 

select * from netflix;
SELECT * from netflix_cast;

select n.video_name ,nc.video_name, nc.cast_member ,n. category , n.view_cnt
from netflix n , netflix_cast nc
where n.video_name = nc.video_name -- 두 테이블의 컬럼 연결고리
;

--------------------------------------------------------------------
select * from s_Emp;
select * from s_dept;

select name , salary ,id
from s_emp
where id = 26
;

select name ,salary , start_date
from s_emp
where start_date < to_date('15.12.31','yy.mm.dd')
;

select * from s_emp
where name like '김__';

select * from s_emp
where name like '김%';



select * from s_emp;
select * from s_dept;
select * from s_region;


SELECT e.name, d.name , r.name
FROM s_emp e, s_dept d , s_region r
where e.dept_id = d.id
and d.region_id = r.id 
;

-------------------------------------------------------------------------------


select *  from idol_member;  
select * from idol_group;

select * 
from idol_group A , idol_member B
where a.group_name = B.group_name
;
-- A테이블과 B테이블의 함께있는 data만 나옴

select  A.group_name , A.company , B.member_name
from idol_group A , idol_member B
where a.group_name = b.group_name
;

select *  from idol_member;  
select * from idol_group;


-- 회사 , 그룹이름 , 멤버수
select B.company , B.group_name , count(member_name)
from idol_member A , idol_group B
where A.group_name = B.group_name
group by b.company , b.group_name
;


select * from idol_member;
select * from idol_group;

select *
from idol_group A , idol_member B 
where A.group_name = B.group_name(+)
;

------------------------------------------------------------
select * from netflix_cast;
select * from netflix;

select A.video_name , A.category , B.cast_member , B.birthday
from netflix A, netflix_cast B
where A.video_name = B.video_name -- 두 테이블 연결고리
;

select A.video_name , A.category , B.cast_member , B.birthday
from netflix A, netflix_cast B
where A.video_name = B.video_name -- 두 테이블 연결고리
and category = '드라마'
;

select * from netflix_cast;

select A.video_name , A.category , B.cast_member , B.birthday
from netflix A, netflix_cast B
where A.video_name = B.video_name -- 두 테이블 연결고리
and category = '예능'
;
-- 두 테이블의 공통적으로 존재하는 data이어야 출력이됨
-- 1:1 , 1:N , M:N
-------------------------------------------------------------------------------------------
select * from s_emp;
select * from s_dept;


-- 이름 부서 부서명
select e.name , e.dept_id , d.name
from s_emp e , s_dept d
where e.dept_id = d.id(+)
;

select * from s_emp;
select * from s_customer;


----------------------------
-- A와 B 두 테이블의 컬럼 간의 값이 서로 정확히 일치함
--EQUIJOIN
-- where절에 JOIN 조건 
-- 직원 테이블과 부서 테이블을 JOIN하여 사원의 이름과 부서 ,부서명을 나타내라

select e.name ,e.dept_id, d.name
from s_emp e , s_dept d
where e.dept_id = d.id
;
select * from s_emp;
select * from s_dept;
select * from s_region;

-- 서울 지역에 근무하는 사원에 대해 각 사원의 이름, 근무하는 부서명 
select e.name 이름 , d.name 부서명 , d.region_id "서울 거주자는 1" , r.name
from s_emp e , s_dept d , s_region r
where e.dept_id = d.id
and d.region_id = 1
and d.region_id = r.id 
;


---------------------------------------------------
-- NON EQUIJOIN
-- ' = '이외의 연산자 사용 함 , 두 컬럼의 값이 정확하게 일치 하지 않을 때 사용 한다고 함
-- 직원 테이블과 급여 테이블을 JOIN하여 사원의 이름과 급여 해당급여의 등급을 나타내라
select * from s_emp;
select * from salgrade;

-- 일치하는 데이터가 없네 ' = ' 연산자 사용불가
select e.name , e.salary , g.grade
from s_emp e, salgrade g
where salary between losal and hisal
;
---------------------------------------------------------
-- outerJOIN
-- 두 테이블 조인할때 어느 한쪽의 테이블의 데이터가 없어도 결과를 모두 확인할때


-- 직원 테이블과 , 고객테이블에서 
-- 사원의 이름과 사번 , 사원의 담당고객이름을 나타내라
-- 조건 ) 사번순으로 오름차순으로 하고 , 담당영업사원이 없어고 고객이름을 나타내라
select * from s_Emp;
select * from s_customer;

select e.name 담당사원 , e.id 사원id , c.name 고객이름 , c.sales_rep_id 담당사원id
from s_emp e , s_customer c
where e.id(+)  = c.sales_rep_id
order by e.id
;

-----------------------------------------------------------------------------
select * from s_emp;

--SELF JOIN
-- 테이블 하나에다가 AS 붙여서 테이블이 여러개인것 마냥 사용해서 JOIN함 

select e.id 사번 , e.name 사원이름 , m.id "담당자 사번" , m.name "담당자 이름"
from s_emp  e, s_emp m
where e.manager_id = m.id
;

-- 직원중에 '김정미'와 '같은 직책을 가진 사원의 이름과 
-- 직책 급여 부서번호를 나타내시오 - selfjoin 사용

select * from s_emp;

select m.name , m.title , m.salary ,m.dept_id
from s_emp e, s_emp m 
where e.name like '김정미'  -- e에 김정미가 저장됨
and e.title = m.title      -- 정미.title = m.title 
;                          -- 김정미와 같은 직급을 가진 사원

-- 테이블에서 사원의 이름과 사번을 보여주고 , 담당자의 이름과 사번을 조회하라
-- 담당자 없는 사람들도 조회

select e.name AS name, e.id AS ID, m.name as incharge_name , m.id
as incharge_id
from s_emp e, s_emp m
where e.manager_id = m.id(+)
;
728x90

'First > SQL' 카테고리의 다른 글

From절에서 SubQuery , Having절에서 SubQuery  (0) 2023.06.08
QUERY - Single Row , Multi Row ,Multi column  (0) 2023.06.08
Sub Query  (0) 2023.04.29
주말) JOIN 복습  (1) 2023.04.23
SQL 손코딩 TEST  (0) 2023.04.18