🔥 쿼리 안에 서브쿼리
1. 비상관 서브쿼리
- 셀렉트 구문안에 또다른 셀렉트 문이 있음 근데 상관 관계가 아님
- 조건문에 셀렉트가 들어갈 수도
- ALL : all 다음에 나오는 모든 결과에 대해 ~하다.
- ANY : any 다음에 나오는 하나 이상의 결과에 대해 ~하다. / in과도 비슷
- 원래 쿼리와, 안의 쿼리가 독자적으로 실행!
2. 상관 서브 쿼리
- 안,밖 쿼리가 맞물려서 돌아감
- Exists : 존재하는가
- not exists : 존재 x
🔥 JOIN !!!!
- 관계형 데이터베이스에서 가장 중요!!!
- 데이터 중복을 피하기위해 나눔, 그걸 다시 합쳐서 가져오는 과정
- inner 먼저 !
- 양쪽 모두에 값이 있는 행(not null) 반환
- 기본 조인. 조인을 쓰면 inner 조인임
- SELECT * FROM Categories C
JOIN Products P
ON C.CategoryID = P.CategoryID;
이런식으로 사용
// 여러테이블 조인도 가능
SELECT
C.CategoryID, C.CategoryName,
P.ProductName,
O.OrderDate,
D.Quantity
FROM Categories C
JOIN Products P
ON C.CategoryID = P.CategoryID
JOIN OrderDetails D
ON P.ProductID = D.ProductID
JOIN Orders O
ON O.OrderID = D.OrderID;
// join한 테이블 group하기
SELECT
C.CategoryName,
MIN(O.OrderDate) AS FirstOrder,
MAX(O.OrderDate) AS LastOrder,
SUM(D.Quantity) AS TotalQuantity
FROM Categories C
JOIN Products P
ON C.CategoryID = P.CategoryID
JOIN OrderDetails D
ON P.ProductID = D.ProductID
JOIN Orders O
ON O.OrderID = D.OrderID
GROUP BY C.CategoryID;
// self join - 같은 테이블끼리
- SELECT
E1.EmployeeID, CONCAT_WS(' ', E1.FirstName, E1.LastName) AS Employee,
E2.EmployeeID, CONCAT_WS(' ', E2.FirstName, E2.LastName) AS NextEmployee
FROM Employees E1 JOIN Employees E2
ON E1.EmployeeID + 1 = E2.EmployeeID;
-- 1번의 전, 마지막 번호의 다음은?
// left/right outer join - 외부 조인
- 반대쪽에 데이터가 있든 없든(null), 선택된 방향에 있으면 출력 - 행 수 결정
- outer는 선택사항
- 어떤 기준으로 조인을 했는데 그게 한쪽 테이블에만 데이터 값이 있을 때 그 방향에 따라서 그 행을 가져오겠다..
// CROSS JOIN - 교차조인
- 조건 없이 모든 조합 반환 (A*B)
- 모든값들의 조합을 보고 싶을 때 !
🔥 union !!
- union : 중복을 제거한 집합
- union All : 중복을 제거하지 않은 집합
- 서로다른 테이블, 컬럼을 같은 컬럼내에 하나로 이어서 보여줄 수 있는 기능
- 조인하고는 다름, 좌우로 합쳐서 연결하는 거라면 / 유니온은 위아래로 열거하는 식
- 실전에서는 많이 안쓰임...
- 합집합 / 교집합 / 차집합 / 대칭차집합 등이 있음..
- and, , not in, union all, having 등 사용해서~ 필요할 때 공부하자
얄코 mysql 강의 참고
https://www.yalco.kr/@sql/2-3/