데이터베이스/SQLD

[SQLD] 서브쿼리

Yuco 2023. 3. 17. 21:41

1. 서브쿼리

- 하나의 SQL문에 포함되어 있는 또 다른 SQL문

 

2. 서브쿼리 사용 시 주의사항

1) 서브쿼리는 괄호로 감싸서 사용

2) 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능

3) 서브쿼리에서는 ORDER BY를 사용하지 못함

 

3. 서브쿼리가 사용 가능한 곳

1) SELECT 절

2) FROM 절

3) WHERE 절

4) HAVING 절

5) ORDER BY 절

6) INSERT 문의 VALUES 절

7) UPDATE 문의 SET 절

 

** GROUP BY절에는 사용 불가 

 

4. 서브쿼리의 분류 (WHERE절)

 

* 단일 행 서브쿼리 / 다중 행 서브쿼리의 컬럼은 1개

 

1) 단일 행 서브쿼리

- 서브쿼리가 단일 행 비교 연산자(=, <. >, <=, >=, <>)와 함께 사용될 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 함

- 결과가 2건 이상인 경우 오류 발생 

- WHERE C1(열) <(비교 연산자) (서브쿼리 : 결과 값 1건)

 

2) 다중 행 서브쿼리

- 서브쿼리의 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 동시에 비교되는 것

- 비교 연산자(<, > ..) 대신 IN 사용 

- WHERE C1(열) IN (서브쿼리 : 결과 값 여러 개)

 

* 다중 컬럼 서브쿼리의 컬럼은 여러개 

 

3) 다중 컬럼 서브쿼리

- 서브쿼리의 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 동시에 비교되는 것 

 

4) 연관 서브쿼리

- 서브쿼리 내에 메인 쿼리 컬럼이 사용된 서브쿼리

 

5. 그 밖의 위치에서 사용하는 서브쿼리

1) SELECT 절 

- 스칼라 서브쿼리 : 한 행, 한 컬럼만을 반환하는 서브쿼리

 

2) FROM 절

- 인라인 뷰

- 서브쿼리가 FROM절에 사용되면 동적으로 생성된 테이블인 것 처럼 사용 가능

- 인라인 뷰는 SQL 문이 실행될 때만 임시적으로 생성되는 동적인 뷰이기 때문에 데이터베이스에 해당 정보가 저장되지 않음

 

3) HAVING 절

- 그룹 함수와 함께 사용될 때 그룹핑된 결과에 대해 부가적인 조건을 주기 위해 사용 

 

6. 뷰

- 테이블은 실제로 데이터를 가지고 있는 반면 , 뷰는 실제 데이터를 가지고 있지 않음

- 질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성하여 질의를 수행

- 뷰는 실제 데이터를 가지고 있지 않지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블이라고도 함

 

+ 뷰 사용의 장점

1) 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됨

2) 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있음

3) 보안성 : 숨기고 싶은 정보가 존재하는 경우, 뷰를 생성할 때 해당 컬럼을 빼고 생성하여 정보를 숨길 수 있음