ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 9. SELECT2
    개발자 수업/DB 2021. 11. 11. 17:50

    1. where절과 having절의 사이
        1) where
            - '집계 전' 데이터를 필터링
        2) having
            - '집계 후' 데이터를 필터링
        3) where절에는 집계함수가 올 수 없고 having절에는 집계함수만 올 수 있음

    2. SELECT [컬럼명], ... FROM [테이블명] WHERE [조건절]
       GROUP BY [컬럼명] HAVING [집계함수 조건절] ORDER BY [컬럼명]
       해석 순서는 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY

    3. select절에서 많이 하는 실수
        1) 컬럼명을  별칭으로 새로 명명할 경우
            - 띄어쓰기, 숫자로 시작하는 단어, 특수문자가 포함된 단어는 올 수 없음
        2) 컬럼명을 큰따옴표("")로 감싸준 경우에는 위 1)의 경우 다 가능

    4. where절 조건
        의미                            긍정                    부정
        -----------------------------------------------------------------------
        일치/불일치 조건                 =                      !=, <>
        대소 조건(숫자와 많이 씀)                   >, >=, <, <=
        범위 조건(숫자와 많이 씀)        BETWEEN ~ AND ~         NOT BETWEEN ~ AND ~
        다수의 값 일치/불일치 조건       IN (~, ~, ~)            NOT IN (~, ~, ~)
        특정문자열 포함/불포함 조건      LIKE '%~%'              LIKE '%~%'
        null값 포함/제외 조건           IS NULL                 IS NOT NULL

    5. where절에 and와 or를 함께 쓸 때는 반드시 ()로 의미 단위끼리 묶을 것

    6. group by절에서 가장 많이 하는 실수
        1) select절에 등장한 컬럼이 group by에 모두 명시되지 않은 경우 (집계함수 제외)
            - SELECT category, yyyy, sum(gav) as gmv
              FROM gmv_trend GROUP BY category, yyyy;
        2) 집계함수 빼고는 모두 group by에 명시할 것
        3) 집계함수 앞의 컬럼을 추가하거나 뺄 때 group by절도 같이 수정해줘야 함

     

    -- 도서 테이블에 있는 모든 출판사를 검색하시오
    select publisher from book;
    
    
    -- 중복을 제거하고 출력
    select DISTINCT publisher from book;
    
    
    -- 모든 도서의 이름과 가격을 검색하시오
    SELECT bookname, price FROM book;
    
    
    -- 모든 도서의 도서번호, 도서이름, 출판사, 가격을 검색하시오
    select bookid, bookname, publisher, price from book;
    select * from book;
    
    
    -- 가격이 20,000원 미만인 도서를 검색하시오
    SELECT * FROM book
    WHERE price < 20000;
    
    
    -- 가격이 10,000원 이상 20,000원 이하인 도서를 검색하시오
    SELECT * FROM book
    WHERE price between 10000 and 20000;
    
    SELECT * FROM book
    WHERE price >= 10000 and price <= 20000;
    
    
    -- 출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하시오
    SELECT * FROM book
    WHERE publisher IN ('굿스포츠', '대한미디어');
    
    
    -- 출판사가 '굿스포츠' 혹은 '대한미디어'가 아닌 도서를 검색하시오
    SELECT * FROM book
    WHERE publisher NOT IN ('굿스포츠', '대한미디어');
    
    
    -- '축구의 역사'를 출간한 출판사를 검색하시오
    SELECT bookname, publisher FROM book
    WHERE bookname LIKE '축구의 역사';
    
    
    -- 도서이름에 '축구'가 포함된 책제목과 출판사를 검색하시오
    SELECT bookname, publisher FROM book
    WHERE bookname LIKE '%축구%';
    
    
    -- 도서이름의 왼쪽 두번째 위치에 '구'라는 문자열을 갖는 도서를 검색하시오
    SELECT * FROM book
    WHERE bookname LIKE '_구%';
    
    
    -- 축구에 관한 도서 중 가격이 20000원 이상인 도서를 검색하시오
    SELECT * FROM book
    WHERE bookname LIKE '%축구%' AND price >= 20000;
    
    
    -- 출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하시오
    SELECT * FROM book
    WHERE publisher = '굿스포츠' OR publisher = '대한미디어';
    
    
    -- 도서를 이름순으로 검색하시오
    SELECT * FROM book ORDER BY bookname;
    
    
    -- 도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색하시오
    SELECT * FROM book ORDER BY price, bookname;
    
    
    -- 도서를 가격의 내림차순으로 검색하시오 만약 가격이 같다면 출판사의 오름차순으로 검색하시오
    SELECT * FROM book ORDER BY price DESC, publisher;
    
    
    -- 고객이 주문한 도서의 총 판매액을 구하시오
    -- : 의미있는 열 이름 출력시 속성이름의 별칭을 지칭하는 AS 키워드를 사용하여 열이름을 부여
    SELECT SUM(sellprice) AS 총매출 FROM orders;
    
    
    -- 2번 김연아 고객이 주문한 도서의 총 판매액을 구하시오
    SELECT SUM(sellprice) AS total FROM orders WHERE custid = 2;
    
    
    -- 고객이 주문한 도서의 총판매액, 평균값, 최저가, 최고가를 구하시오
    -- total, average, minimum, maximum 
    SELECT SUM(sellprice) AS total, 
            AVG(sellprice) AS average, 
            MIN(sellprice) AS minimum, 
            MAX(sellprice) AS maximum 
    FROM orders;
    
    
    -- 도서 판매 건수를 구하시오
    SELECT COUNT(*) FROM orders;
    
    
    -- 고객별로 주문한 도서의 총 수량과 총 판매액을 구하시오
    SELECT CUSTID, COUNT(*) 도서수량, SUM(sellprice) 총액
    FROM ORDERS o GROUP BY CUSTID;
    
    
    -- 가격이 8,000원 이상인 도서를 구매한 고객에 대하여 고객별 주문 도서의 총 수량을 구하시오
    -- 단, 2권 이상 구매한 고객만 구하시오
    SELECT CUSTID, COUNT(*) 도서수량 FROM ORDERS o 
    WHERE SELLPRICE >= 8000 GROUP BY CUSTID HAVING COUNT(*) >= 2;
    SELECT * FROM GMV_TREND gt;
    
    SELECT * FROM GMV_TREND gt WHERE rownum <= 5;
    
    /*
     * 2017년부터 2021년 3월까지의 전자상거래 추정거래액
     */
    
    -- 1) 특정 컬럼 추출하기
    SELECT CATEGORY, YYYY, MM FROM GMV_TREND gt;
    
    
    -- 2) 중복값 없이 특정 컬럼 추출하기
    SELECT DISTINCT CATEGORY FROM GMV_TREND gt;
    
    SELECT DISTINCT YYYY, MM FROM GMV_TREND gt;
    
    
    -- 3) 특정 연도의 매출 탐색
    -- 	3-1) 조건이 하나일 때, 숫자열
    SELECT * FROM GMV_TREND gt WHERE YYYY = 2021;
    
    SELECT * FROM GMV_TREND gt WHERE YYYY >= 2019;
    
    SELECT * FROM GMV_TREND gt WHERE YYYY BETWEEN 2018 AND 2020;
    
    SELECT * FROM GMV_TREND gt WHERE YYYY != 2021;
    
    SELECT * FROM GMV_TREND gt WHERE YYYY <> 2021;
    
    
    --	3-2) 조건이 하나일 때, 문자열
    SELECT * FROM GMV_TREND gt WHERE CATEGORY = '컴퓨터 및 주변기기';
    
    SELECT * FROM GMV_TREND gt WHERE CATEGORY != '컴퓨터 및 주변기기';
    
    SELECT * FROM GMV_TREND gt WHERE CATEGORY IN ('컴퓨터 및 주변기기', '생활용품');
    
    SELECT * FROM GMV_TREND gt WHERE CATEGORY NOT IN ('컴퓨터 및 주변기기', '생활용품');
    
    SELECT * FROM GMV_TREND gt WHERE CATEGORY LIKE '%패션%';
    
    SELECT * FROM GMV_TREND gt WHERE CATEGORY NOT LIKE '%패션%';
    
    
    --	3-3) 조건이 여러 개일 때
    --		a) and 조건
    SELECT * FROM GMV_TREND gt WHERE CATEGORY = '컴퓨터 및 주변기기' AND YYYY = 2021;
    
    --		b) or 조건
    SELECT * FROM GMV_TREND gt WHERE GMV > 1000000 OR GMV < 10000;
    
    --		c) and, or 조건 혼용
    SELECT * FROM GMV_TREND gt WHERE (GMV > 1500000 OR GMV < 100000) AND YYYY = 2021;
    
    
    SELECT CATEGORY "카테 고리", GMV "2021_gmv", MM "#mm" FROM GMV_TREND gt WHERE YYYY = 2021;
    
    
    -- 4) 카테고리별 매출 분석
    -- 카테고리별, 연도별 매출
    SELECT CATEGORY cate, YYYY, SUM(GMV) total_gmv FROM GMV_TREND gt GROUP BY CATEGORY, YYYY;
    
    SELECT CATEGORY cate, MM, SUM(GMV) total_gmv FROM GMV_TREND gt GROUP BY CATEGORY, MM;
    
    SELECT YYYY, MM, PLATFORM_TYPE, SUM(GMV) gmv FROM GMV_TREND gt GROUP BY YYYY, MM, PLATFORM_TYPE;
    
    SELECT SUM(GMV) gmv, MIN(YYYY), MAX(YYYY), AVG(GMV) 
    FROM GMV_TREND gt;
    
    
    -- '컴퓨터 및 주변기기' 카테고리인 연도별 매출액을 추출하시오
    SELECT CATEGORY, YYYY, SUM(GMV) FROM GMV_TREND gt
    WHERE CATEGORY = '컴퓨터 및 주변기기' GROUP BY CATEGORY, YYYY;
    
    -- 매출이 높은(50000000 이상) 주요 카테고리만 추출하시오
    SELECT CATEGORY , SUM(GMV) FROM GMV_TREND gt 
    GROUP BY CATEGORY HAVING SUM(GMV) >= 50000000;
    
    -- 2020년에 매출이 10000000 이상인 주요 카테고리와 매출액을 추출하시오
    SELECT CATEGORY, SUM(GMV) FROM GMV_TREND gt 
    WHERE YYYY = 2020 GROUP BY CATEGORY HAVING SUM(GMV) >= 10000000;
    
    
    -- 매출이 높은 순으로 정렬 추출하시오
    SELECT * FROM GMV_TREND gt ORDER BY GMV DESC;
    
    SELECT * FROM GMV_TREND gt ORDER BY CATEGORY, YYYY, MM, PLATFORM_TYPE;
    
    SELECT CATEGORY, SUM(gmv) gmv FROM GMV_TREND gt 
    GROUP BY CATEGORY ORDER BY GMV DESC;
    
    SELECT CATEGORY, YYYY, SUM(gmv) gmv FROM GMV_TREND gt 
    GROUP BY CATEGORY, YYYY ORDER BY 1 DESC, 3 DESC;

    '개발자 수업 > DB' 카테고리의 다른 글

    11. 조인  (0) 2021.11.12
    10. 내장함수  (0) 2021.11.11
    8. SELECT  (0) 2021.11.10
    7. DML  (0) 2021.11.10
    6. DDL  (0) 2021.11.09

    댓글