오늘 드디어... 이번주 팀과제의 발표회가 지나갔다!!
매니저님들의 귀여운(?) 실수로 우리조가 제일 첫번째 발표였지만 6번째로 밀려나게 되었다ㅠㅠ
너무너무 아쉬웠지만 그래두 발표에 참석을 하였는데..
첫발표부터 완벽에 가까운 발표를 해버렸다
우리만 너무 기본에 충실해서 간단하게 한 것은 아닌지 걱정했지만, 다른 사람은 이상하지 않고 깔끔하게 잘 했다고 얘기해줘서 너무 고마웠다🥺
팀원 모두 공통 세부주제를 가지고 알아볼 코드의 주제를 잡아서 각자 코드를 작성해서 추후에 공유 및 취합하는 방향으로 진행하였다
코드를 열심히 짜보았지만 팀원들의 뒤를 따라가는 것도 버거워서 자원해서 PPT의 기본 템플릿을 만들었다
몇몇은 코드 정리를 할 때, 나는 일단 해결하지 못한 코드 완성에 의의를 두었다
또한, 이번주 개인과제를 진행하면서 알게 된 ROUND( )함수를 통해 백분율을 구하는 공식을 정확히 이해하여 풀지못한 쿼리를 완성할 수 있었다.
📢 정확한 내용은 WIL 게시물을 참고!!
두 테이블 이상을 연결하여 원하는 데이터를 추출하기 위해 SQL에서 활용!
≑ 엑셀의 VLOOKUP 함수
SELECT *
FROM orders o INNER JOIN customers c ON o.customer_id=c.customer_id ;
--- INNER 생략 가능 JOIN의 default 값이 INNER이기 때문!
SELECT *
FROM customer c LEFT JOIN orders o ON c.customer_id=o.customer_id
WHERE o.customer_id IS NULL ;
-- 왼쪽에 있는 테이블을 다 가져옴으로 주문 테이블에는 없는고객의 정보를 알 수 있음!
SELECT *
FROM customer c RIGHT JOIN orders o ON c.customer_id=o.customer_id
WHERE c.customer_id IS NULL ;
-- 오른쪽에 있는 테이블 전체를 가져옴 -> 고객 테이블에 없는 주문을 알 수 있음!
모든 가능한 조합 조회 (리그 매치 같은 너낌..?) - CROSS JOIN
'예시는 너무 어려우니 넘어가도록 하자.....'
동일 테이블 내 데이터 비교, 그룹화 - SELF JOIN
(예시 이해는 했는데, 쿼리 짜는건 모르겠당)
예) 같은 연령대, 다른 성별에 속한 고객 간 매칭결과를 조회하세요 (중복제거)
SELECT c1.연령대,
c1.고객ID AS 고객1_ID,
c1.이름 AS 고객1_이름,
c1.성별 AS 고객1_성별,
c2.고객ID AS 고객2_ID,
c2.이름 AS 고객2_이름,
c2.성별 AS 고객2_성별
FROM customers c1
INNER JOIN customers c2
ON c1.연령대 = c2.연령대
AND c1.성별 != c2.성별
AND c1.고객ID < c2.고객ID; #중복제거!!
실무에서는 왼쪽을 기준으로 데이터를 가져오기 때문에 RIGHT JOIN을 잘 활용하지 않음
CROSS JOIN, SLEF JOIN은 실무 활용도 낮음
FULL OUTTER JOIN은 MYSQL에서만 기능을 제공하지 않음!!
SELECT문의 결과를 수직으로 결합 + 중복 제거 => 성능 떨어질 수 있음
SELECT문의 열 수와 데이터 형식이 동일!!
예) 여자인 고객의 아이디와 결제한 고객의 아이디
SELECT customer_id
FROM customers
WHERE gender='female'
UNION -- 두 결과를 수직으로 합치면서 중복제거!
SELECT customer_id
FROM payments ;
UNION과 비슷하지만 중복도 포함!
예) 여자인 고객의 아이디와 결제한 고객의 아이디
SELECT customer_id
FROM customers
WHERE gender='female'
UNION -- 두 결과를 수직으로 합치기! (중복포함)
SELECT customer_id
FROM payments ;
= LEFT JOIN + UNION + RIGHT JOIN
예) 고객 테이블과 주문 테이블의 모든 데이터 조회 (중복 제거)
SELECT *
FROM customer c LEFT JOIN orders o ON c.customer_id=o.customer_id
WHERE o.customer_id IS NULL ; -- LEFT JOIN 이용한 주문을 안한 고객ID
UNION
SELECT *
FROM customer c RIGHT JOIN orders o ON c.customer_id=o.customer_id
WHERE c.customer_id IS NULL ; -- RIGHT JOIN 이용한 고객 테이블에 없는 주문
특징
1. SELECT, FROM, WHERE, HAVING, JOIN 등 다양하게 올 수 있음
2. 외부 QUERY와의 관계 - 비/상관
3. 외부 QUERY보다 먼저 실행 , 결과 -> 외부 QUERY