본문 바로가기
제로베이스 데이터 스쿨/일일 스터디 노트

37번째 스터디노트 / SQL 심화 - 서브쿼리, 스칼라 서브쿼리, 중첩 서브쿼리, 인라인뷰

by 김뎀뎀 2023. 2. 23.

wp※제로베이스 데이터 취업스쿨 11기 수강 중

📗 37번째 공부 내용 요약

 

SQL 심화 마지막 파트를 학습 하였다.

1. SQL Subquery : 스칼라 서브쿼리,  인라인뷰, 중첩 서브쿼리 개념 및 문법 학습

 


📖  37번째 공부 내용 자세히

 

1. SQL Subquery

 

1) Subquery

 

■  Subquery 개념

  • 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문
  • 메인 쿼리가 서브쿼리를 포함하는 종속적인 관계

 

■  Subquery 사용시 주의 사항

  • 서브쿼리는 괄호로 묶어서 사용한다
  • 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능하다
  • order by 사용이 불가능하다

 

■  Subquery 종류

  • 스칼라 서브쿼리 : SELECT 절에 사용
  • 인라인 뷰 : FROM 절에 사용
  • 중첩 서브쿼리 : WHERE 절에 사용

 

 

2) 스칼라 서브쿼리 (Scalar Subquery)

  • SELECT 절에서 사용하는 서브쿼리다
  • 결과는 하나의 컬럼이어야 한다
SELECT column1, (SELECT column2 FROM table2 WHERE condition)
FROM table1
WHERE condition;

 

3) 인라인 뷰 (Inline View)

  • FROM 절에 사용하는 서브쿼리
  • 메인쿼리에서는 인라인 뷰에서 조회한 컬럼만 사용 가능하다
SELECT a.column, b.column
FROM table a, (SELECT column1, column2 FROM table2) b
SHERE condition;

 

4) 중첩 서브쿼리 (Nested Subquery)

WHERE 절에서 사용하는 서브쿼리

 

■ Single Row 

  • 하나의 열을 검색하는 서브쿼리
  • 서브쿼리가 비교연산자와 사용되는 경우
SELECT column1
FROM table1
WHERE column2 = (SELECT column1
                FROM table2
                WHERE condition)
ORDER BY column1

 

■ Multiple Row - IN

  • 서브쿼리 결과 중에 포함될 때
  • 서브쿼리 행이 2개 이상
SELECT column1
FROM table1
WHERE column2 IN (SELECT column1
                    FROM table2
                    WHERE condition)
ORDER BY column1

 

■ Multiple Row - EXISTS

  • 서브쿼리 결과에 값이 있으면 반환
SELECT column1
FROM table 1
WHERE EXISTS (SELECT column2
            FROM table2
            WHERE condition)
ORDER BY column1

 

■ Multiple Row - ANY

  • 서브쿼리 결과 중 최소 하나라도 만족하면
SELECT column1
FROM table1
WHERE column2 = ANY (SELECT column1
                    FROM table2
                    WHERE condition)
ORDER BY column1

 

■ Multiple Row - ALL

  • 서브쿼리 결과를 모두 만족하면
SELECT column1
FROM table1
WHERE column2 = ALL (SELECT column1
                    FROM table2
                    WHERE condition)
ORDER BY column1

 

■ Multiple Row - 연관 서브쿼리

  • 서브쿼리 내에 메인 쿼리 컬럼이 같이 사용되는 경우
SELECT column_names
FROM table1 a
WHERE (a.column2, a.column2, ...) IN (SELECT b.column1, b.column2,...
                                        FROM table2 b
                                        WHERE a.column1 = b.column2)
ORDER BY column_names;

 


➰ 37번째 후기

전 파트들에서 실습을 할 때 강사님께서 데이터를 조회할 때 조건마다 끊어서 조회해서 확인해보고, 쿼리들을 합치라고 했었는데 이번 서브쿼리를 학습해보니 그 이유를 알 것 같았다.

전에는 그냥 한번에 쿼리를 작성했는데, 서브쿼리를 작성할 때는 복잡해지니 조건마다 조회해보는 게 중요했다.

중첩 서브쿼리가 좀 헷갈리긴 했는데, 그래도 실습문제들을 푸니까 조금은 익숙해졌다.

SQL 파트가 이렇게 마무리 되고, 이제는 테스트들을 치루면서 그동안 배운것들을 적용해볼 일만 남았다.

잘할 수 있겠지 ~~


※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.