SQL

SQL 서브쿼리 연산자

봄다온 2025. 1. 20. 16:28

이전글 https://spring0691.tistory.com/59

서브쿼리 연산자

# 1개이상의 행을 반환하면 true, 아무것도 없으면 false
EXISTS (서브쿼리)
select exists(select * from current_time); ㅡ> true

# 서브쿼리에서 같은 행이 하나라도 있으면 true, 아니면 false
select * from table where amount in (10,20,30);
  id |    name    | amount  |        |  id |  name  | amount  
-----+------------+--------+        +-----+--------+--------
   1 | apple      |     30  |        |   1 | apple  |     30  
   2 | banana     |     19  |        |   3 | melon  |     10  
   3 | melon      |     10  |        |   5 | kiwi   |     30  
   4 | strawberry |     43  |        | 
   5 | kiwi       |     30  |        | 


# 서로 같지 않은 서브쿼리 행이 하나라도 있으면 true, 동일한 로우가 있으면 false
select * from table where amount not in (10,20,30);
 id |    name    | amount           id |    name    | amount
----+------------+--------           ----+------------+--------
  1 | apple      |     30            2 | banana     |     19
  2 | banana     |     19            4 | strawberry |     43
  3 | melon      |     10
  4 | strawberry |     43
  5 | kiwi       |     30

# 서브쿼리에서 같은 행이 하나라도 있으면 true, 아니면 false + 비교 연산자
<표현> <비교 연산자> ANY (서브쿼리)
<표현> <비교 연산자> SOME (서브쿼리)
select * from table where 10 =  any (select amount from assumption_amount);
assumption_amount = [30, 20, 10, 60, 30]
 id |    name    | amount
----+------------+--------
  1 | apple      |     30
  2 | banana     |     19
  3 | melon      |     10
  4 | strawberry |     43
  5 | kiwi       |     30

# 표현과 서브쿼리가 완전히 동일하다면 true, 하나라도 다르다면 false
<표현> <비교 연산자> ALL (서브쿼리)
<표현> <>ALL (서브쿼리) == not in 연산자
select * from real_amount where 10 <= all (select amount from assumption_amount);
assumption_amount = [30, 20, 10, 60, 30] 
각 원소값이 모두 10보다 크기때문에 true가 되고 따라서 real_amount의 모든 값이 출력됨

'SQL' 카테고리의 다른 글

SQL 문자열 연산자  (0) 2025.01.20
SQL 패턴매칭 연산자  (0) 2025.01.20
SQL 날짜 & 시간 연산자, 날짜 & 시간 함수  (0) 2025.01.20
SQL JSON 생성,처리 함수  (0) 2025.01.20
SQL 배열 연산자  (0) 2025.01.20