-
SQL 3. SQL 문법_SUB QUERYSYNC 기술면접 준비 2023. 11. 13. 22:14
서브쿼리 SUB QUERY : SELECT 문 안에 또 다른 SELECT 문이 있는 명령어

/***************SELECT절 서브 쿼리***************/
/* SELECT 명령문 안에 SELECT 명령문 */
SELECT * , (SELECT GENDER FROM CUSTOMER WHERE A.MEM_NO = MEM_NO) AS GENDER
FROM SALES AS A;
/* 확인 */
SELECT * FROM CUSTOMER
WHERE MEM_NO = '1000970';
/* SELECT 서브 쿼리 VS 테이블 결합(JOIN) 처리 속도 비교 */
SELECT A.*, B.GENDER
FROM SALES AS A
LEFT JOIN CUSTOMER AS B
ON A.MEM_NO = B.MEM_NO;
/***************FROM절 서브 쿼리***************/
/* FROM 명령문 안에 또다른 SELECT 명령문 */
/* FROM 절 괄호 안에는 테이블이 와야하며, 이는 GROUP BY절로 생성된 새로운 테이블을 사용할 수 있고, 테이블 명을 지정해야된다.*/
SELECT *
FROM (SELECT MEM_NO, COUNT(ORDER_NO) FROM SALES GROUP BY MEM_NO) AS A;
/* FROM절 서브 쿼리: 열 및 테이블명 지정 */
/***************WHERE절 서브 쿼리***************/
/* WHERE 명령문 안에 SELECT 명령문 */
/* 2019년도에 가입한 회원의 주문 횟수 구하기 */
SELECT COUNT(ORDER_NO) AS 주문횟수
FROM SALES
WHERE MEM_NO IN(SELECT mem_no FROM customer WHERE YEAR(JOIN_DATE) = 2019);
/* IN 연산자 뒤에는 LIST 형태가 와야한다. */
/* YEAR : 날자형 함수 / 연도 변환 */
SELECT * , YEAR(JOIN_DATE)
FROM CUSTOMER;
/* LIST */
SELECT mem_no FROM customer WHERE YEAR(JOIN_DATE) = 2019;
/* 밑에와 동일한 내용 */
SELECT COUNT(ORDER_NO) AS 주문횟수
FROM SALES
WHERE MEM_NO IN ('1000001','1000002','1000004','1000005','1000006','1000010','1000011','1000012','1000013','1000014','1000015','1000019','1000020','1000021','1000022','1000023','1000024','1000025','1000026','1000027','1000045','1000046','1000047','1000048','1000055','1000056','1000057','1000058','1000059','1000060','1000061','1000062','1000066','1000067','1000068','1000069','1000070','1000071','1000072','1000073','1000074','1000075','1000076',....);
/* WHERE 서브쿼리 VS 데이터 결합(JOIN) 결과 값 비교 */
SELECT COUNT(ORDER_NO) AS 주문회수
FROM SALES AS A
INNER JOIN CUSTOMER AS B
ON A.MEM_NO = B.MEM_NO
WHERE YEAR(B.JOIN_DATE) = 2019;SELECT 서브쿼리 > 스칼라 서브 쿼리 > JOIN 보다 작업속도가 늦음
FROM 서브쿼리 > FROM 절안에 테이블로 사용되는 서브쿼리, 열 이름 및 테이블 이름을 지정해주어야 한다.
WHERE 서브쿼리 > 리스트 형태로 사용할 수 있는 명령어
/***************서브 쿼리(Sub Query) + 테이블 결합(JOIN)***************/
/* 임시테이블 생성 */
CREATE temporary TABLE SALES_SUB_QUERY;
SELECT A.구매횟수, B.*
FROM(select MEM_NO, COUNT(ORDER_NO) AS 구매횟수
FROM SALES
GROUP BY MEM_NO) AS A
INNER JOIN CUSTOMER AS B
ON A.MEM_NO = B.MEM_NO;
/* 임시테이블 조회 */
SELECT * FROM SALES_SUB_QUERY;
/* 성별이 남성인 조건으로 필터링 */
SELECT *
FROM SALES_SUB_QUERY
WHERE GENDER = 'MAN';
/* 거주지역별로 필터링 */
SELECT ADDR, SUM(구매횟수) AS 구매횟수
FROM SALES_SUB_QUERY
WHERE GENDER = 'MAN'
GROUP BY ADDR;
/* 구매횟수가 100회 미만 , 정렬*/
SELECT ADDR, SUM(구매횟수) AS 구매횟수
FROM SALES_SUB_QUERY
WHERE GENDER = 'MAN'
GROUP BY ADDR
HAVING SUM(구매횟수) < 100
ORDER BY SUM(구매횟수) ASC;<From절 서브쿼리 명령어 작성>
/***************FROM절 서브 쿼리(Sub Query) 작성법***************/
select a.구매횟수, b.*
from ( select mem_no, count(order_no) as 구매횟수
from sales
group by mem_no) as a
inner join customer as b
on a.mem_no = b.mem_no;
select a.구매횟수, b.*
from ( select mem_no,
count(order_no) as 구매횟수
from sales
group by mem_no) as a'SYNC 기술면접 준비' 카테고리의 다른 글
SQL 4. SQL 활용_연산자 및 함수(1) (1) 2023.11.13 SQL 3. SQL 문법_총정리 (0) 2023.11.13 SQL 3. SQL 문법_JOIN (0) 2023.11.13 SQL 3. SQL 문법_SELECT (0) 2023.11.13 SQL 2. SQL 명령어_총정리 (0) 2023.11.13