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 |