독학/[책 + 인강] SQL

[얄코 MySQL] 섹션 2 SELECT 더 깊이 파보기

최연재 2024. 4. 5. 16:32

1. 쿼리 안에 서브쿼리

서브쿼리 : 쿼리 안에 들어 있는 또 다른 쿼리

1.1. 비상관 서브쿼리

- 연산자

  • ~ ALL : 서브쿼리의 모든 결과에 대해 ~ 하다.
  • ~ ANY : 서브쿼리의 하나 이상의 결과에 대해 ~ 하다.

1.2. 상관 서브쿼리 

: 맞물려 돌아간다.

1.3 EXISTS / NOT EXISTS 연산자

 

 

2. JOIN - 여러 테이블 조립하기

2.1 JOIN (INNER JOIN ) - 내부 조인

- 양쪽 모두에 값이 있는 행을 반환

- 테이블에 있는 중복된 행에 대해서 이 행을 가져올 테이블을 지정하지 않으면 오류 발생.

- 하나의 테이블에만 있는 행이면 굳이 테이블을 지정하지 않아도 된다.

- 여러 테이블을 JOIN할 수 있다.

- SELF JOIN : 같은 테이블끼리 조인한다.

- 대응하는 값이 없으면 가져오지 않는다.

 

 

2.2 LEFT, RIGHT OUTER JOIN -외부 조인

- 해당 데이터에 대응하는 값이 없어도 가져온다. 빈 칸은  NULL

SELECT
  E1.EmployeeID, CONCAT_WS(' ', E1.FirstName, E1.LastName) AS Employee,
  E2.EmployeeID, CONCAT_WS(' ', E2.FirstName, E2.LastName) AS NextEmployee
FROM Employees E1
LEFT JOIN Employees E2
ON E1.EmployeeID + 1 = E2.EmployeeID
ORDER BY E1.EmployeeID;

 

2.3 CROSS JOIN - 교차 조인

- 조건 없이 모든 조합을 반환한다.

 

3. UNION - 집합으로 다루기

3.1 연산자 

- UNION : 중복을 제거한 집합

- UNION ALL : 중복을 제거하지 않은 집합

 

3.2 합집합

3.3 교집합

3.4 차집합

SELECT CategoryID AS ID
FROM Categories
WHERE 
  CategoryID > 4
  AND CategoryID NOT IN (
    SELECT EmployeeID
    FROM Employees
    WHERE EmployeeID % 2 = 0
  );

 

3.5 대칭차집합

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;