본문 바로가기
프로그래밍 언어/SQL

[SQL] Sub Query

by 거북이의 기술블로그 2024. 10. 21.
1. 서브쿼리?
2. 서브쿼리 문법
3. 예제

서브쿼리?

  • 하나의 SQL 쿼리 내에서 다른 쿼리를 포함하는 구조
  • SELECT , UPDATE, DELTE 문에서 사용될 수 있다
  • 조건문에서 주로 사용됨
  • 서브쿼리는 단일행 / 다중행 서브쿼리가 있다
    • 단일행 : 하나의 값을 반환
    • 다중행 : 여러 값을 반환

 

서브쿼리 문법

  • SELECT 서브쿼리
SELECT [column1] FROM [table1] WHERE column1 = (SELECT [column2] FROM [table2] WHERE [조건]);

 

  • INSERT 서브쿼리
INSERT INTO [table1] [(column1)] SELECT [column2] FROM [table2] WHERE [조건];

 

 

  • UPDATE 서브쿼리
UPDATE [table1] SET [column1] = (SELECT [column2] FROM [table2] WHERE [조건]) WHERE [조건]

 

 

  • DELETE 서브쿼리
DELETE FROM [table1] WHERE [column1] = (SELECT [column2] FROM [table2] WHERE [조건]);

 

예제

  • SELECT 서브쿼리
    • 단일행 : "where sub_id =  (서브쿼리)", 여기서 서브쿼리 결과값이 한개만 나와야함
    • 다중행 : "where sub_id IN (서브쿼리)", 여기서 서브쿼리 결과값이 다중으로 나와도 됨
-- 단일행
SELECT * FROM ex_table1 WHERE sub_id = (SELECT id FROM ex_table2 WHERE sub_name IN('group1'));
-- 다중행
SELECT * FROM ex_table1 WHERE sub_id IN (SELECT id FROM ex_table2 WHERE sub_name IN('group1', 'group2'));

 

  • INSERT 서브쿼리
-- 단일행
INSERT INTO insert_test (name) SELECT name FROM ex_table1 WHERE sub_id = (SELECT id FROM ex_table2 WHERE sub_name='group3');

-- 다중행
INSERT INTO insert_test (name) SELECT name FROM ex_table1 WHERE sub_id IN (SELECT id FROM ex_table2 WHERE sub_name IN('group1', 'group2'));

select * from insert_test;

 

  • UPDATE 서브쿼리
UPDATE ex_table1 SET sub_id = (SELECT id FROM ex_table2 WHERE sub_name = 'group3') WHERE name='testA';

 

  • DELETE 서브쿼리
DELETE FROM ex_table1 WHERE sub_id = (SELECT id FROM ex_table2 WHERE sub_name = 'group3');