키보드워리어

[databases] 서브쿼리 본문

개발 관련/Database

[databases] 서브쿼리

꽉 쥔 주먹속에 안경닦이 2023. 7. 30. 15:17
728x90

안녕하세요 블로그 방문자 여러분, 반갑습니다.

오늘은 databases - 서브쿼리를 포스팅하려고 합니다.

서브쿼리
서브쿼리


서브 쿼리

서브쿼리란? Select 명령에 의한 데이터 질의로, 상부가 아닌 하부의 부수적인 질의를 의미합니다.

 

ex)
(Select명령)

SELECT * FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');

 

하부 select명령을 괄호로 묶어 사용합니다.
selcet구, from구, where구 등 명령의 각 구를 기술할 수 있습니다.

1.delete의 where구에서 서브쿼리 사용

select * from sample 54;

no | a
1 | 100
2 | 90
3 | 20
4 | 80

sample54테이블에서 a 열의 값이 가장 작은 행을 삭제하려 한다. 지금이야 카디날러티가 4개밖에 없지만,
수십 수백개라면 전혀 파악하기 힘들 것이다.

이때 필요한 쿼리는 두 가지이다.

  1. 제일 낮은 값은 무엇인가?
  2. 1번의 결괏값을 삭제하라

이렇게 두 가지의 쿼리문이 생겼는데 이걸 해결하는 것이 서브쿼리다.

delete from sample54 where a = (select min(a) from samlple54);
  • 참고로 이 구문에서 mysql은 delete가 아니라 select을 사용
  • 그리고 sql에서는 순차형 언어에서처럼 변수가 존재하지 않는다.

변수가 존재한다면 변수를 지정해 주고 아래 쿼리문을 쓰는 것도 가능합니다.

구현 방법에는 여러 가지가 있으므로 변수를 사용할 수 있다는 것 정도는 알아두겠습니다.

2. 스칼라 값

통상 서브쿼리를 사용하는 4가지 패턴이 있습니다.

  1. 1개의 값을 반환하는 패턴
  2. 복수의 행이 반환되지만 열은 하나인 패턴
  3. 하나의 행이 반환되지만 열이 복수인 패턴
  4. 복수의 행, 복수의 열이 반환되는 패턴

이 중에서 1번의 패턴은 다른 패턴과 달리 하나의 값만 반환합니다.

  • Point:SELECT명령이 하나의 값만 반환하는 것을 '스칼라 값을 반환한다'라고 한다

스칼라 값을 반환하려면 select문에서 단일 열을 지정해줘야 합니다.

그리고 group by로 그룹화를 하면 몇 가지의 그룹으로 나눠질 가능성이 있기 때문에 결과적으로 단일한 값이 반환되지 않을 수 있습니다.

또한, where 조건으로 하나의 행만 검색할 수 있다면 단일 값이 되므로 스칼라값을 반환하는 명령이 됩니다.

  • (=) 연산자를 사용하여 비교할 경우에는 스칼라 값끼리 비교할 필요가 있다.

TIP) 서브쿼리를 활용한다면 select, set, from 구 등에서 활용해 볼 수 있다.

 


이상 부족한 콘텐츠 읽어주셔서 감사드립니다.

내용 피드백이 있는 경우 댓글 부탁드립니다!

다음 포스팅 때 뵙겠습니다! 감사합니다 🤗

728x90