상세 컨텐츠

본문 제목

[정보처리기사 실기 공부] SELECT 쿼리 활용 (2)

정보처리기사 공부지식

by 소란한소란 2024. 5. 13. 20:53

본문

728x90

SQL의 하위 쿼리 이해

중첩 쿼리라고도 하는 하위 쿼리는 다른 SQL 쿼리 내에 포함된 SQL 쿼리입니다. 기본적으로 이는 또 다른 'SELECT' 문 내의 'SELECT' 문으로, 데이터 검색 작업의 유연성과 깊이를 향상시키는 강력한 도구를 제공합니다. 하위 쿼리는 한 쿼리의 결과를 다른 쿼리의 조건으로 사용하여 단일 쿼리에 대한 여러 쿼리가 필요한 작업을 수행해야 하는 경우 필수적입니다.


서브쿼리

  • 개념
    • SELECT문 안에 다시 SELECT문이 기술된 형태의 쿼리

서브쿼리의 종류

  • 스칼라 서브쿼리(Scalar SubQuery)
    • 반드시 단일행이거나, SUM/COUNT 등의 집계함수를 거친 단일값이 리턴되어야 한다.
  • 인라인뷰 서브쿼리(Inilne View SubQuery)
    • FORM절 안에 서브쿼리 존재
    • 서브쿼리의 결과는 반드시 하나의 테이블로 리턴되어야 한다.
  • 중첩 서브쿼리(Nested SubQuery)
    • WHERE절 안에 서브쿼리 존재
    • 단일행 서브쿼리 연산자 종류
      • ' > '
      • ' >= '
      • ' < '
      • ' <= '
      • ' = ' 
    • 다중행 서브쿼리 연산자
연산자 설명
IN 서브쿼리의 결과값을 포함하고 있으면 출력한다.
EXISTS 서브쿼리 결과값의 행 존재 여부를 확인하여 출력한다.
ANY(SCME) 서브쿼리 결과값이 여러 개 나온 경우,
서브쿼리의 결과값이 하나라도 만족하면 출력한다.
ALL 서브쿼리 결과값이 여러 개 나온 경우,
서브쿼리의 결과값을 모두 만족하는 값을 출력한다.

 


서브쿼리 예제

1. 스칼라 서브쿼리 예제

  • 예제 테이블: 직원
직원ID 이름 연봉
1 Alice 70,000
2 Bob 80,000
3 Charlie 55,000

 

  • 예제 쿼리: 평균 연봉보다 많이 받는 직원 찾기
SELECT 이름, 연봉
FROM 직원
WHERE 연봉 > (SELECT AVG(연봉) FROM 직원);
  • 결과 테이블
이름 연봉
Bob 80,000

 

2. 인라인 뷰 서브쿼리 예제

  • 예제 테이블: 판매
지역 판매액
동부 1,500
서부 1,200
동부 900
북부 800
  • 예제 쿼리: 지역별로 판매액을 집계한 후 작업 수행
SELECT 지역, 총판매액
FROM (
    SELECT 지역, SUM(판매액) AS 총판매액
    FROM 판매
    GROUP BY 지역
) AS 지역별판매
ORDER BY 총판매액 DESC;
  • 결과 테이블
지역 총판매액
동부 2,400
서부 1,200
북부 800

 

3. 중첩 서브쿼리 예제

  • 예제 테이블: 주문
주문ID 제품ID
1 A
2 A
3 B
4 C
  • 예제 테이블 : 제품 판매
제품ID 판매수량
A 30
B 20
C 10

 

  • 예제 쿼리: 평균 판매수량보다 많이 판매된 제품 찾기
SELECT 제품ID
FROM 제품판매
WHERE 판매수량 > (
    SELECT AVG(판매수량) FROM 제품판매
);
  • 결과 테이블
제품ID
A

 


다중행 서브쿼리 연산자 예제

1. IN 연산 예제

  • 예제 테이블: Employees
EmployeeID Name DepartmentID
1 Alice 101
2 Bob 102
3 Charlie 103
4 David 101
  • 예제 테이블: Departments
DepartmentID DepartmentName
101 Sales
102 Engineering
  • 예제 쿼리: Sales 또는 Engineering 부서에 속하는 직원 찾기
SELECT Name, DepartmentID
FROM Employees
WHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE DepartmentName IN ('Sales', 'Engineering'));
  • 결과 테이블
Name DepartmentID
Alice 101
Bob 102
David 101

 

2. EXISTS 연산 예제

  • 예제 테이블: Employees
EmployeeID Name DepartmentID
1 Alice 101
2 Bob 102
3 Charlie 103
4 David 101
  • 예제 테이블: Departments
DepartmentID DepartmentName
101 Sales
102 Engineering
  • 예제 쿼리: Sales 부서에 속하는 직원 찾기
SELECT Name
FROM Employees e
WHERE EXISTS (
    SELECT 1
    FROM Departments d
    WHERE d.DepartmentID = e.DepartmentID AND d.DepartmentName = 'Sales'
);
  • 결과 테이블
Name
Alice
David

 

3. ANY 연산 예제

  • 예제 테이블: Salaries
EmployeeID Salary
1 70000
2 80000
3 75000
4 90000
  • 예제 쿼리: 평균 연봉보다 많이 받는 직원 찾기
SELECT Name
FROM Employees e
WHERE e.Salary > ANY (SELECT Salary FROM Salaries WHERE Salary < 80000);
  • 결과 테이블
Name
Bob
Charlie
David

 

4. ALL 연산 예제

  • 예제 테이블: Employees
EmployeeID Name DepartmentID
1 Alice 101
2 Bob 102
3 Charlie 103
4 David 101
  • 예제 테이블: Departments
DepartmentID DepartmentName
101 Sales
102 Engineering
  • 예제 쿼리: 모든 직원보다 더 높은 연봉을 받는 직원 찾기
SELECT Name
FROM Employees e
WHERE e.Salary > ALL (SELECT Salary FROM Salaries WHERE EmployeeID != e.EmployeeID);
  • 결과 테이블
Name
David

 


서브쿼리는 SQL에서 더 동적이고 효율적인 데이터 조작 및 쿼리를 가능하게 하는 기본 개념입니다. 다양한 유형의 서브쿼리를 적절하게 활용하는 방법을 이해하는 것은 복잡한 데이터 구조를 다루고 SQL 쿼리 내에서 고급 데이터 분석 작업을 직접 수행하는 능력을 크게 향상시킬 수 있습니다. 동적 조건에 기반한 데이터 필터링, 즉석에서 임시 테이블 생성, 또는 데이터의 다른 세그먼트 간 결과 비교 등, 서브쿼리는 강력한 해결책을 제공합니다. 2024년에 정보처리기사를 따기 위해 노력하는 모두에게 행운을 빕니다!

 

 

728x90

관련글 더보기