[sql] mysql 심화 (서브쿼리, join, union)

이유은·2023년 11월 20일

[Sql]

목록 보기
3/5

🔥 쿼리 안에 서브쿼리

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/

profile
우당탕코딩

0개의 댓글