ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [My SQL] GROUP BY ,JOIN - 여러 테이블 조립하기
    알고리즘/My SQL 2023. 2. 10. 15:08

    GROUP BY - 조건에 따라 집계된 값을 가져옵니다.

    여러 컬럼을 기준으로 그룹화할 수도 있습니다.

    -- 코드를 입력하세요
    SELECT MCDP_CD AS 진료과코드,COUNT(APNT_YMD)	AS 5월예약건수
    FROM APPOINTMENT
    WHERE APNT_YMD LIKE '2022-05%'
    GROUP BY MCDP_CD
    ORDER BY 5월예약건수,진료과코드
    -- 코드를 입력하세요
    SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
    FROM ANIMAL_OUTS
    WHERE HOUR(DATETIME) BETWEEN 9 AND 19
    GROUP BY HOUR(DATETIME)
    ORDER BY HOUR(DATETIME)

    WITH ROLLUP - 전체의 집계값

    • 위의 각 집계함수 쿼리 끝에 WITH ROLLUP 을 추가하면 총 합이 뜬다.
    • ORDER BY 와는 함께 사용될 수 없습니다.

     

    HAVING - 그룹화된 데이터 걸러내기

     WHERE는 그룹하기 전 데이터, HAVING은 그룹 후 집계에 사용합니다.

    -- 코드를 입력하세요
    SELECT NAME	, COUNT(NAME) AS COUNT
    FROM ANIMAL_INS
    WHERE NOT NAME IS NULL
    GROUP BY NAME HAVING COUNT(NAME)>=2
    ORDER BY NAME
     

     

    중복으로 상품을 구매한 회원

    -- 코드를 입력하세요
    SELECT USER_ID,	PRODUCT_ID
    FROM ONLINE_SALE
    GROUP BY USER_ID,	PRODUCT_ID HAVING COUNT(*) >=2
    ORDER BY USER_ID,	PRODUCT_ID DESC

    JOIN(INNER JOIN) - 내부 조인 + ON (키)

    • 양쪽 모두에 값이 있는 행(NOT NULL) 반환
    • 'INNER '는 선택사항

     여러 테이블을 JOIN할 수 있습니다.

    -- 코드를 입력하세요
    SELECT H.FLAVOR
    FROM FIRST_HALF H
    JOIN  ICECREAM_INFO I ON I.FLAVOR = H.FLAVOR
    WHERE H.TOTAL_ORDER >3000 AND INGREDIENT_TYPE LIKE 'f%' 
    ORDER BY TOTAL_ORDER DESC
    SELECT I.ANIMAL_ID,	I.NAME
    FROM ANIMAL_INS I
    
    JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
    
    ORDER BY I.DATETIME - O.DATETIME
    LIMIT 2

     

     

    내부 조인

    음식 종류별로 가장 즐겨찾기가 많은 것을 골라낼 것

    -- 코드를 입력하세요
    SELECT R.FOOD_TYPE,	R.REST_ID,	R.REST_NAME	,R.FAVORITES
    FROM REST_INFO R, (SELECT FOOD_TYPE ,MAX(FAVORITES) AS FAV FROM REST_INFO
                    GROUP BY FOOD_TYPE) B
    WHERE R.FOOD_TYPE = B.FOOD_TYPE AND R.FAVORITES = B.FAV
    ORDER BY FOOD_TYPE DESC

    HOST_ID가 2개 이상 인것

    -- 코드를 입력하세요
    SELECT H.ID,H.NAME,H.HOST_ID
    FROM PLACES H
    WHERE HOST_ID  IN (SELECT HOST_ID FROM PLACES WHERE H.HOST_ID=HOST_ID GROUP BY HOST_ID HAVING COUNT(HOST_ID)>=2)
    ORDER BY ID

    LEFT/RIGHT OUTER JOIN - 외부 조인

    • 반대쪽에 데이터가 있든 없든(NULL), 선택된 방향에 있으면 출력 - 행 수 결정
    • 'OUTER '는 선택사항
    •  

     차집합 구하기

    -- 코드를 입력하세요
    SELECT I.NAME,	I.DATETIME
    FROM ANIMAL_INS I
    
    LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
    WHERE   O.ANIMAL_ID IS NULL
    ORDER BY I.DATETIME
    LIMIT 3

    LEFT 조인을 한 후에 JOIN한 테이블의 아이디가 NULL인 경우만 선택한다.

    또는 아래처럼 NOT IN을 사용할 수 있다.

    SELECT CategoryID AS ID
    FROM Categories
    WHERE 
      CategoryID > 4
      AND CategoryID NOT IN (
        SELECT EmployeeID
        FROM Employees
        WHERE EmployeeID % 2 = 0
      );

     

    CROSS JOIN - 교차 조인

    • 조건 없이 모든 조합 반환(A * B)

     

    합집합 - UNION

    UNION 중복을 제거한 집합
    UNION ALL 중복을 제거하지 않은 집합

    교집합

    SELECT CategoryID AS ID FROM Categories C, Employees E 
    WHERE C.CategoryID > 4 AND E.EmployeeID % 2 = 0 
    		AND C.CategoryID = E.EmployeeID;

    조건을 맞춰서 출력한다.

Designed by Tistory.