2개의 테이블에 대해 연관된 튜플을 결합해 하나의 새로운 릴레이션을 반환
JOIN
을 이용해서 테이블을 연결해준다. 이때 ON
을 사용해주는 것을 잊지말기!
SELECT A.FLAVOR
FROM FIRST_HALF AS A
JOIN ICECREAM_INFO AS B
ON A.FLAVOR = B.FLAVOR
WHERE B.INGREDIENT_TYPE="fruit_based" AND A.TOTAL_ORDER>3000
ORDER BY A.TOTAL_ORDER DESC;
JOIN ~ ON
을 이용해서 두 테이블을 조인해주고, ON에 조건을 넣어 출력
SELECT A.BOOK_ID, B.AUTHOR_NAME, DATE_FORMAT(A.PUBLISHED_DATE,'%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK AS A
JOIN AUTHOR AS B
ON A.AUTHOR_ID = B.AUTHOR_ID
WHERE CATEGORY='경제'
ORDER BY PUBLISHED_DATE;
SELECT B.INGREDIENT_TYPE, SUM(A.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF AS A
JOIN ICECREAM_INFO AS B
ON A.FLAVOR = B.FLAVOR
GROUP BY INGREDIENT_TYPE
ORDER BY SUM(A.TOTAL_ORDER);
SELECT A.TITLE, B.BOARD_ID, B.REPLY_ID, B.WRITER_ID, B.CONTENTS,
DATE_FORMAT(B.CREATED_DATE,"%Y-%m-%d") AS CREATED_DATE
FROM USED_GOODS_BOARD AS A
JOIN USED_GOODS_REPLY AS B
ON A.BOARD_ID = B.BOARD_ID
WHERE DATE_FORMAT(A.CREATED_DATE,"%Y-%m")='2022-10'
ORDER BY B.CREATED_DATE, A.TITLE;
왼쪽에 ANIMAL_OUTS 를 두고 LEFT JOIN
을 사용하여, ANIMAL_INS 의 키가 NULL 인 데이터를 찾으면, ANIMAL_OUTS 에만 존재하는 데이터를 찾을 수 있다.
SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_OUTS AS B
LEFT JOIN ANIMAL_INS AS A
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID IS NULL
ORDER BY B.ANIMAL_ID;
보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS AS A
JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME
ORDER BY A.DATETIME;
JOIN
과 GROUP BY
를 모두 사용하는 문제
SELECT A.CATEGORY, SUM(B.SALES) AS TOTAL_SALES
FROM BOOK AS A
JOIN BOOK_SALES AS B
ON A.BOOK_ID = B.BOOK_ID
WHERE DATE_FORMAT(B.SALES_DATE,"%Y-%m") = '2022-01'
GROUP BY A.CATEGORY
ORDER BY A.CATEGORY
JOIN
을 이용한 풀이SELECT A.CART_ID
FROM CART_PRODUCTS AS A
JOIN CART_PRODUCTS AS B
ON A.CART_ID = B.CART_ID
WHERE A.NAME LIKE 'Yogurt' AND B.NAME LIKE 'Milk'
ORDER BY A.CART_ID
2.GROUP BY
를 이용한 풀이
CART_ID를 기준으로 그룹화 하고, Yogurt가 카트에 두개 이상 들어갈 수 있기 때문에 DISTINCT을 사용해줘야만 한다
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk','Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME)=2
SUM
함수를 이용해 총 매출 금액을 구해주면 된다.
SELECT A.PRODUCT_ID, A.PRODUCT_NAME,
SUM(A.PRICE*B.AMOUNT) AS TOTAL_SALES
FROM FOOD_PRODUCT AS A
JOIN FOOD_ORDER AS B
ON A.PRODUCT_ID = B.PRODUCT_ID
WHERE DATE_FORMAT(PRODUCE_DATE,'%Y-%m')='2022-05'
GROUP BY A.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, A.PRODUCT_ID
AVG
를 이용해 평균을 구하고, ROUND
를 사용해 소수점 자리에서 반올림 해주면 된다.
LIKE "%서울%"로 작성했더니 오답이 되었는데, 만약 경기도 서울시 라는 주소가 있으면 서울에 위치했다고 판단되어 오답처리가 되는 것
따라서 "서울%"로 작성해주면 된다.
SELECT A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS,
ROUND(AVG(B.REVIEW_SCORE),2) AS SCORE
FROM REST_INFO AS A
JOIN REST_REVIEW AS B
ON A.REST_ID = B.REST_ID
WHERE A.ADDRESS LIKE "서울%"
GROUP BY A.REST_ID
ORDER BY SCORE DESC, A.FAVORITES DESC
세개의 테이블 조인 가능, WHERE를 사용해 조건을 달아주면 된다.
SELECT C.APNT_NO, A.PT_NAME, A.PT_NO, C.MCDP_CD, B.DR_NAME, C.APNT_YMD
FROM APPOINTMENT AS C
JOIN PATIENT AS A ON A.PT_NO = C.PT_NO
JOIN DOCTOR AS B ON C.MDDR_ID = B.DR_ID
WHERE DATE_FORMAT(C.APNT_YMD,"%Y-%m-%d")='2022-04-13'
AND C.MCDP_CD = 'CS'
AND C.APNT_CNCL_YN = 'N'
ORDER BY C.APNT_YMD;