[ Lesson 1. 쿼리 안에 서브쿼리 ]
1. 비상관 서브쿼리
SELECT
CategoryID, CategoryName, Description
FROM Categories
WHERE
CategoryID IN
(SELECT CategoryID FROM Products
WHERE Price > 50);
~ ALL | 서브쿼리의 모든 결과에 대해 ~하다 |
~ ANY | 서브쿼리의 하나 이상의 결과에 대해 ~하다 |
2. 상관 서브쿼리
SELECT
ProductID, ProductName,
(
SELECT CategoryName FROM Categories C
WHERE C.CategoryID = P.CategoryID
) AS CategoryName
FROM Products P;
: 사실 Join 으로 가능
EXISTS / NOT EXISTS 연산자
SELECT
CategoryID, CategoryName
-- ,(SELECT MAX(P.Price) FROM Products P
-- WHERE P.CategoryID = C.CategoryID
-- ) AS MaxPrice
FROM Categories C
WHERE EXISTS (
SELECT * FROM Products P
WHERE P.CategoryID = C.CategoryID
AND P.Price > 80
);
[ Lesson 2. JOIN - 여러 테이블 조립하기 ]
1. JOIN(INNER JOIN) - 내부 조인
- 양쪽 모두에 값이 있는 행(NOT NULL) 반환
- 'INNER '는 선택사항
💡 SELF JOIN - 같은 테이블끼리
2. LEFT/RIGHT (OUTER) JOIN - 외부 조인
- 반대쪽에 데이터가 있든 없든(NULL), 선택된 방향에 있으면 출력 - 행 수 결정
- 'OUTER '는 선택사항
3. CROSS JOIN - 교차 조인
- 조건 없이 모든 조합 반환(A * B)
[ Lesson 3. UNION - 집합으로 다루기 ]
1. 합집합
UNION | 중복을 제거한 집합 |
UNION ALL | 중복을 제거하지 않은 집합 (중복 포함) |
SELECT CustomerName AS Name, City, Country, 'CUSTOMER'
FROM Customers
UNION
SELECT SupplierName AS Name, City, Country, 'SUPPLIER'
FROM Suppliers
ORDER BY Name;
2. 교집합
SELECT CategoryID AS ID
FROM Categories C, Employees E
WHERE
C.CategoryID > 4
AND E.EmployeeID % 2 = 0
AND C.CategoryID = E.EmployeeID;
3. 차집합
SELECT CategoryID AS ID
FROM Categories
WHERE
CategoryID > 4
AND CategoryID NOT IN (
SELECT EmployeeID
FROM Employees
WHERE EmployeeID % 2 = 0
);
4. 대칭차집합
SELECT ID FROM (
SELECT CategoryID AS ID FROM Categories
WHERE CategoryID > 4
UNION ALL
SELECT EmployeeID AS ID FROM Employees
WHERE EmployeeID % 2 = 0
) AS Temp
GROUP BY ID HAVING COUNT(*) = 1;
'DB : MySQL | Oracle | MyBatis' 카테고리의 다른 글
MySQL 문법 정리 (w. 프로그래머스 SQL Lv. 3 문제 풀이) (0) | 2023.06.23 |
---|---|
MySQL Error Code: 1093. You can't specify target table 'table_name' for update in FROM clause 에러 해결 (0) | 2023.01.09 |
MySQL 기본 (4) : MySQL 설치 / 테이블 만들고 데이터 입력 / 자료형 / 데이터 변경, 삭제 (0) | 2022.09.28 |
MySQL 기본 (2) : 시간/날짜 관련 및 기타 함수들 / 조건에 따라 그룹으로 묶기 (0) | 2022.09.27 |
MySQL 기본 (1) : SELECT 전반 기능 훑어보기 / 각종 연산자들 / 숫자와 문자열을 다루는 함수들 (0) | 2022.09.27 |