DB(SQL)

sql 서브 쿼리,인라인 뷰,CTE

ari0930 2024. 5. 6. 17:11

sql 서브쿼리

SQL 내부에 사용하는 SELECT 문으로 데이터 필터링,집계연산,계산,비교,검증,증접된 데이터 추출등에 사용된다.

select 고객회사명,담당자명
from 고객
WHERE 고객번호=(select 고객번호 
from 주문 
WHERE 주문번호='H0250');

고객 테이블의 고객번호를 SELECT 로 연결하여 주문테이블의 고객 번호와 조인 결와 같은 결과를 나타내도록 한다.

 

조인문을 상요한경우에는 아래와 같다.

select 고객회사명,담당자명
from 고객
inner join 주문
on 고객.고객번호=주문.고객번호
where 주문번호='H0250';

 

 

복수행 서브쿼리

IN 서브쿼리 결과중 일치하는 것이 하나라도 있으면 참인 연산자

SELECT COUNT(*) AS주문건수
FROM 주문
WHERE 고객번호  IN (SELECT 고객번호 FROM 고객 WHERE 도시 = '부산광역시');

고객 테이블에서 도시가 부산광역시인 고객번호중

주문 테이블에서의 고객번화 같은 경우만 출력하는 쿼리문이다.

 

ANY,SOME는 결과중 하나라도 참이면 참인 연산자이다

SELECT 담당자명,고객회사명,마일리지
FROM 고객
WHERE 마일리지 > ANY (SELECT 마일리지 FROM 고객 WHERE 도시='부산광여기');

고객 테이블에 도시 이름이 부산광역시인것들의 마일리지 값중에서 그중 하나보다도 크다면 출력하는 쿼리문으로 결국

부산광역시 고객중 최소값 보다도 크기만 하면 출력된다.

 

 

ALL은 모두 참인경우, EXISTS는 한번이라도 참인경우 나타낸 연산자들이다.

 

인라인 뷰

FROM 절에서도 서크쿼리를 사용할수 있다,

select 담당자명,고객회사명,마일리지,고객.도시,도시_평균마일리지,도시_평균마일리지-마일리지 AS 차이
FROM 고객,(select 도시,AVG(마일리지) AS 도시_평균마일리지 from 고객 group by 도시)AS 도시별요약
WHERE 고객.도시=도시별요약.도시;

위 쿼리문은 고객 테이블과 새로 만든 도시별요약 이라는 테이블을 사용하여 값을 꺼내쓴다

 

CTE

임시 데이터셋 

WITH절을 사용하여 미리 정의 할수 있다 

with 도시별요약 AS 
(select 도시,AVG(마일리지) AS 도시_평균마일리지 
from 고객 
group by 도시

select *
FROM 고객,도시별요약
WHERE 고객.도시=도시별요약.도시;

 

 

 

반응형

'DB(SQL)' 카테고리의 다른 글

SQL JOIN 사용법  (0) 2024.04.28
SQL 함수  (1) 2024.04.28
SQL 조회 SELECT 사용법  (0) 2024.04.25
MYSQL 데이터 베이스 생성 과 테이블 만들기  (0) 2024.04.21