728x90
반응형

🐧 사용된 데이터 ERD

 

🐧 SubQuery (서브쿼리)

📍 단일 컬럼에 단일 행 1 

  • 비교연산자를 이용하는 서브쿼리 특징
  • 하나의 컬럼에 하나의 값만 조회가능해야 함
  • 단일 컬럼에 단일 행이라고 표현
  • 예시
    - 아이디 a001인 회원이 가지고 있는 마일리지보다 큰(이상) 회원들 조회 
    - 조회 컬럼 : 회원아이디, 회원 마일리지
SELECT mem_id, mem_mileage
FROM member
WHERE mem_mileage >= (SELECT mem_mileage FROM member WHERE mem_id = 'a001');

 

📍 단일 컬럼의 단일 행 2 

  • SELECT 뒤에 조회할 컬럼명 대신해서 서브쿼리 특징
  • 하나의 컬럼에 하나의 값만 조회가능
  • 단일 컬럼에 단일 행
  • 예시
    - 주문번호, 주문자 아이디, 주문자이름, 주문상품코드, 주문수량 조회
SELECT cart_no, cart_member, (SELECT mem_name FROM member WHERE mem_id = cart_member) AS mem_name, cart_prod, cart_qty
FROM cart;

 

📍 단일 컬럼에 다중 행 

  • IN 함수를 이용해서 서브쿼리를 사용할 경우 규칙
  • 하나의 컬럼을 여러개의 값을 조회 할 수 있음
  • 단일 컬럼에 다중 행이라고 칭함
  • 예시
    - 한번도 주문한적이 없는 회원을 조회하기
    - 조회 컬럼 : 회원아이디, 회원이름

SubQuery 문제

문제 1

- 상품 정보에 존재하지 않는 상품분류정보를 조회
- 조회컬럼 : 상품분류코드, 상품분류명

SELECT lprod_gu, lprod_nm
FROM lprod
WHERE lprod_gu NOT IN (SELECT prod_lgu FROM prod);


문제 2

- 주문번호, 주문상품코드, 주문 수량, 주문상품명, 상품분류명 조회하기

- 단, 회원의 거주지역이 서울 또는 대전인 경우
- 정렬은 주문번호를 기준으로 오름차순, 주문수량을 기준으로 내림차순

select cart_no, cart_prod, cart_qty,
	(SELECT prod_name
    	FROM prod
        WHERE prod_id = cart_prod) AS prod_name,
	(SELECT lprod_nm
    	FROM lprod
        WHERE lprod_gu = SUBSTRING(cart_prod, 1, 4)) AS lprod_nm
FROM cart
WHERE cart_member IN (SELECT mem_id FROM member WHERE SUBSTRING(mem_add1, 1, 2) IN('서울','대전'))
ORDER BY cart_no, cart_qty desc;


문제 3

- 조회 컬럼 : 상품코드, 상품명, 상품판매가격, 거래처명 
- 조건 : 회원의 마일리지 값 100이상, 주문수량 5이상, 상품분류명에 컴퓨터 포함
- 거래처 주소지 지역이 서울 또는 대전 또는 광주 인 경우

SELECT prod_id, prod_name, prod_sale, (SELECT buyer_name FROM buyer WHERE prod_buyer = buyer_id) AS buyer_name
FROM prod
	WHERE prod_id IN (SELECT cart_prod FROM cart 
    						WHERE cart_member in (SELECT mem_id FROM member where mem_mileage >= 100))
	AND prod_id IN (SELECT cart_prod from cart 
    					where cart_qty >=5)
	AND prod_lgu IN (SELECT lprod_gu FROM lprod 
    					where lprod_nm LIKE '%컴퓨터%')
	AND prod_buyer IN (
    	SELECT buyer_id from buyer 
        	where SUBSTRING(buyer_add1,1,2) IN('서울','대전','광주'));

728x90
반응형

+ Recent posts