Join 연산자

리무 rimu ·2023년 5월 30일
0

DataBase

목록 보기
5/8

https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

📌JOIN 5줄 요약

조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말함

INNER JOIN(내부 조인)

: 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 함

SELECT <열 목록>
FROM <첫 번째 테이블>
    INNER JOIN <두 번째 테이블>
    ON <조인 조건>
[WHERE 검색 조건]

#INNER JOIN을 JOIN이라고만 써도 INNER JOIN으로 인식합니다.

OUTER JOIN(외부 조인)


: 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나옴

~하지않으면서 / ~가 없는 이라고 적힌 경우에 아우터조인을 사용

-- 한번도 주문하지 않은 고객의 이름을 구하라
-- 아우터조인이 필요!!!
-- 꺼내 오고자 하는 정보가 왼쪽에 있다는 의미

SELECT *
FROM customers LEFT OUTER JOIN orders 
--FROM orders RIGHT OUTER JOIN customers
ON customers.cust_id = orders.cust_id
WHERE orders.num IS NULL;

CROSS JOIN(상호 조인)

: 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능

SELF JOIN(자체 조인)

: 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용

DB에서 ERD가 중요!

-- 제조사 이름(vend_name)'Bear R Us'인 제조사의 제품을 구매한 모든 고객의 이름(cust_name)을 구하시오
-- 단 중복은 제거한다

SELECT DISTINCT cust_name
FROM customers INNER JOIN orders INNER JOIN orderItems INNER JOIN products INNER JOIN vendors
ON customers.cust_id = orders.cust_id AND orderItems.order_num = orders.order_num AND
orderItems.prod_id = products.prod_id AND products.vend_id = vendors.vend_id
WHERE vend_name = 'Bears R Us';

SELECT DISTINCT cust_name
FROM vendors NATURAL JOIN products NATURAL JOIN orderItems NATURAL JOIN orders NATURAL JOIN customers
WHERE vend_name = 'Bears R Us';

가장 비싼(item_price) 제품을 구매한 구매자의 이름(cust_name)과 판매가격(item_price), 구매수량(quantity)을 구하라

-- where절에선 집계함수를 사용할 수 없음
-- Join + 서브쿼리 동시에 사용

SELECT cust_name, item_price, quantity
FROM customers NATURAL JOIN orders NATURAL JOIN orderItems
WHERE orderItems.item_price = (SELECT MAX(item_price) FROM orderItems); -- 스칼라 
-- 제일 비싼건 한개니까 = 사용

제품을 하나도 생산하지 않은 제조사 이름(vend_name)을 구하라


SELECT DISTINCT vend_name
FROM vendors LEFT OUTER JOIN products
ON vendors.vend_id = products.vend_id
WHERE products.vend_id IS NUll;
-- 모든작물의 이름을 구하라.(crops)
SELECT DISTINCT cname
FROM crops;

-- 관리하는 농작물의 총 종류 수 구하기


-- g로 시작하는 농작물 이름 구하기

SELECT DISTINCT cname 
FROM crops
WHERE cname LIKE 'g%';

-- 작물별 제공 농부수가 2명 이상인 작물을 구하라.  

SELECT DISTINCT fid
FROM farmers

-- 3000원 이상하는 작물의 수를 구하라. 

SELECT DISTINCT cprice
FROM crops
WHERE cprice >= 3000;


-- 작물별로 3000원 이상하는 작물의 수가 2개 이상인 작물을 구하라. 
 

-- 작물별 가장 저렴한 제품의 가격을 구하라.  


-- 작물별 평균가격을 구하라


-- 이름이 4글자가 넘는 작물별 평균가격을 구하라.


-- 이름이 4글자가 넘는 작물별 평균가격을 구하라., 평균가격이 1000원 이상


-- 각 농부별 재배작물의 총 가격을 구하라. 


-- dainel이 재배하는 작물의 이름과 가격을 구하라.  


-- kiwi를 생산하는 농부의 이름과 전화번호를 구하라.	


-- 가장 값이 싼 수박을 납품하는 농부의 이름과 주소를 구하라.


-- 부산에서 재배되는 작물의 이름, 가격, 농부이름 구하라.


-- 옥수수를 재배하지 않는 농부의 이름은? 	


-- 납품을 하지않는 농부의 이름을 구하라	
profile
JAVA / SQL / Spring 을 공부하고 있습니다 🐥

0개의 댓글