-
[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;
조건을 맞춰서 출력한다.
'알고리즘 > My SQL' 카테고리의 다른 글
[My SQL] 숫자 연산자 , 문자 연산자 (0) 2023.02.10 [My SQL] 시간 연산자 , 날짜 연산자 (0) 2023.02.10 [My SQL] 전반적인 문법 - select (0) 2023.02.10