domsam - IT 기술 블로그

DAY.09 본문

MSA/SQL

DAY.09

domsam 2025. 4. 24. 18:14
반응형

렌더링 (A:HTML코드 생성)
           (B:객체 생성해서 화면에 표시)

SSR (Server Side Rendering) - HTML코드 생성을 백엔드 처리, B는 브라우저

CSR (Client Side Rendering) - HTML코드 생성을 브라우저의 JS 처리, B는 브라우저

 

데이터 가공은 프론트엔드, 백엔드 DB에서 처리할 수 있다. 

가능한 프론트엔드에서 처리할 수 있으면 처리하는데 백엔드에서 처리하는 것이 효율적이면 백엔드에서도 가능하다. 하지만 가능한 DB는 안 할 수 있으면 안 하는 방향으로 처리하는 것이 좋다. DB는 괴롭히지 않는다.

-- 02-(11) 고객의 이름과 고객이 구매한 도서 목록 
SELECT C.name, B.bookname
  FROM orders O
 INNER JOIN customer C
    ON C.custid = O.custid
 INNER JOIN book B
    ON B.bookid = O.bookid;
    
-- 02-(12) 도서의 가격(Book 테이블)과 판매가격 (Orders 테이블)의 차이가 가장 많은 주문
-- orders 테이블에 있는 내용 모두 출력

-- [1] 가장 큰 차이 금액 (6,000원)
SELECT O.saleprice, B.price, B.price - O.saleprice
FROM orders O
INNER JOIN book B
ON B.bookid = O.bookid;


SELECT MAX(B.price - O.saleprice)
FROM orders O
INNER JOIN book B
ON B.bookid = O.bookid;


-- [2] 6,000원 차이가 있는 책을 찾는다. 

SELECT O.orderid, O.custid, B.bookname
FROM orders O
INNER JOIN book B
ON B.bookid = O.bookid
WHERE B.price - O.saleprice = 6000;

-- [3] 1,2번 작업 조합
SELECT O.orderid, O.custid, B.bookname
FROM orders O
INNER JOIN book B
ON B.bookid = O.bookid
WHERE ( B.price - O.saleprice ) = ( SELECT MAX(B.price - O.saleprice)
												FROM orders O
												INNER JOIN book B
												ON B.bookid = O.bookid ); 


-- 02-(13) 도서의 판매액 평균보다 자신의 구매액 평균이 더 높은 고객의 이름
 
-- [1] 도서 평균 판매액 (11800.0)
SELECT AVG(saleprice)
FROM orders;

-- [2] 고객 별 평균 판매액(구매액)
SELECT custid, AVG(saleprice)
FROM orders
GROUP BY custid;

SELECT custid, AVG(saleprice) AS avg_saleprice
FROM orders
GROUP BY custid
HAVING avg_saleprice > 11800;


-- [3] 1,2 조합
SELECT C.name
  FROM orders O
 INNER JOIN customer C
    ON C.custid = O.custid
 GROUP BY C.name
HAVING AVG(saleprice) > ( SELECT AVG(saleprice)
 									FROM orders );


/* p.221 숫자 함수


*/

SELECT 4.0, 4.1, ceil(4.0), ceil(4.1), ceil(4.0000001), 4.99999999, FLOOR(4.99999);

-- p.230 IFNULL함수

SELECT custid, NAME, address, IFNULL(phone, '폰번호없음') AS phone
FROM customer;
/* := (대입연산자) >> B의 결과값을 A에 복사한다.
  A:=B
  
  @변수명 >> 값을 저장할 수 있는 공간 할당(변수 선언)
  초기화: 변수에 최초 값을 복사해서 넣을 때
  
  변수는 read(읽기), write(쓰기)
  
  @seq:=@seq+1 실행 순서
  (1) @seq값 읽기 
  (2) 읽어온 값 + 1 >> 결과값
  (3) 결과값을 @seq에 대입
  
*/
SET @seq:=0; -- seq라는 이름을 가진 공간(변수)에 0을 집어넣겠다.
SELECT @seq:=@seq+1; -- @seq:=0+1, @seq:=1+1

SELECT @seq;


SELECT (@seq:=@seq+1) '순번', custid, NAME, phone
FROM customer;

SELECT @seq;

SELECT custid
FROM customer
WHERE address LIKE '%대한민국%';

-- p.236 

SELECT saleprice
FROM orders
WHERE custid = 3;

SELECT *
FROM orders
WHERE saleprice > ALL (  SELECT saleprice
									FROM orders 
									WHERE custid = 3 );
									
SELECT *
FROM orders
WHERE saleprice > (  SELECT max(saleprice)
							  FROM orders 
							 WHERE custid = 3 );


SELECT *
FROM orders
WHERE saleprice > SOME (  SELECT saleprice
									FROM orders 
									WHERE custid = 3 );
									

SELECT *
FROM orders
WHERE saleprice > (  SELECT MIN(saleprice)
							  FROM orders 
							 WHERE custid = 3 );

-- p.241

SELECT cs.name, SUM(od.saleprice) 'total'
  FROM ( 
	  SELECT custid, NAME
       FROM customer
      WHERE custid <= 2
    ) cs
INNER JOIN orders od
   ON od.custid = cs.custid
GROUP BY cs.name;      
      
      
-- p.244 VIEW   

CREATE OR REPLACE VIEW v_vorders
AS 
SELECT O.orderid, O.custid, O.bookid, O.saleprice, O.orderdate
     , B.bookname, C.name 
  FROM orders O
 INNER JOIN book B
    ON B.bookid = O.bookid
 INNER JOIN customer C
    ON C.custid = O.custid;     
       

SELECT * FROM v_vorders;

'MSA > SQL' 카테고리의 다른 글

DAY.11  (1) 2025.04.28
DAY.10  (0) 2025.04.25
DAY.08  (0) 2025.04.23
DAY.07  (0) 2025.04.22
DAY.06  (0) 2025.04.21