자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[PostgreSQL] 3장 - 고급 SQL 활용하기 - 서브쿼리(Subquery)

728x90

▶️ 1. 서브 쿼리(Subquery)란?

서브쿼리(Subquery)는 SQL문 안에 포함된 또 다른 SQL문을 의미합니다. 서브쿼리를 사용하는 위치는 다음과 같습니다.

  • 사용 위치:
    • SELECT 절: 스칼리 서브쿼리, 하나의 값 반환
    • FROM 절: 인라인 뷰처럼 사용
    • WHERE 절: 조건 비교용
    • HAVING 절: 집계 조건 비교
    • INSERT, UPDATE, DELETE 문도 활용 가능

즉, 큰 쿼리(메인 쿼리, Outer Query)안에서 작은 쿼리(서브 쿼리, Inner Query)를 실행시켜 값을 가져오는 구조입니다.


▶️ 2. SELECT 절 안에 사용하는 서브쿼리 (스칼라 서브쿼리)

SELECT 
  c.universe_id,
  c.name,
  c.year,
  (SELECT AVG(year) FROM computers) AS avg_year
FROM computers c;
  • (SELECT AVG(year) FROM computers) 이 부분이 서브쿼리 부분
  • 이 서브쿼리는 전체 학생의 평균 학년을 구함
  • 메인쿼리의 SELECT 절 안에서 avg_year이라는 새로운 컬럼처럼 붙음
  • 결과적으로 각 학생 정보 옆에 전체 학년 평균이 함께 출력

▶️ 3. 학생별 등급 중 가장 높은 학점을 붙여보기

SELECT 
    c.name, 
    c.major,
    (SELECT MAX(d.grade)
     FROM degrees d
     WHERE d.universe_id = c.universe_id) AS best_grade 
FROM computers c;
  • 서브쿼리 (SELECT MAX(d.grade) ...)는 각 학생의 성적 테이블에서 최고 학점을 가져옴
  • WHERE d.universe_id = c.universe_id 로 메인쿼리의 행과 연결.
  • 결과: 학생 별로 "본인 이름, 전공, 최고 학점" 같이 나옴

▶️ 4. SELECT 안 서브쿼리 사용 시 주의점

SELECT 안 서브쿼리 사용 시 주의점은 반드시 하나의 값만 반환해야합니다.

SELECT (SELECT name FROM computers);
  • 여기서 여러 행이 나오면 오류가 발생
  • 여러 값이 필요할 경우 JOIN 또는 FROM 절 서브쿼리를 사용

☑️ 정리

  • 서브쿼리(Subquery) = SELECT 안의 SELECT
  • 예시
    • 모든 학생 정보와 전체 학년 평균 값을 함께 출력
    • 학생 별로 본인 최고 성적을 함께 출력
  • 핵심: 결과가 반드시 단일 값이어야 하고, 컬럼처럼 붙는다는 것이 특징

 

 

GitHub - Koras02/postgresql-bloging: https://thinky.tistory.com/category/Database/PostGresQL

https://thinky.tistory.com/category/Database/PostGresQL - Koras02/postgresql-bloging

github.com

 

728x90
LIST