동일 테이블에서 비교하는 문제이다.

각 테이블의 이름을 정해주어 WHERE로 풀었다.

SELECT DISTINCT A.CART_ID FROM CART_PRODUCTS A, CART_PRODUCTS B
 WHERE A.CART_ID = B.CART_ID AND 
 ((A.NAME = 'Milk' AND B.NAME = 'Yogurt') OR (B.NAME = 'Milk' AND A.NAME = 'Yogurt')) 
 ORDER BY cart_id;

크게 어려움 없이 WHERE 써서 Inner join으로 풀었던 문제이다.

SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME FROM ANIMAL_INS I, ANIMAL_OUTS O
 WHERE I.ANIMAL_ID = O.ANIMAL_ID AND I.SEX_UPON_INTAKE LIKE '%Intact%' AND 
 (O.SEX_UPON_OUTCOME LIKE '%Spayed%' OR O.SEX_UPON_OUTCOME LIKE '%Neutered%')
 ORDER BY I.ANIMAL_ID;

CASE 로 조건에 따라 값을 넣고 출력하는 문제이다.

다만 조건이 DATE의 대소비교이므로 TO_CHAR을 이용해야 한다.

SELECT ORDER_ID, PRODUCT_ID, TO_CHAR(OUT_DATE, 'YYYY-MM-DD'), 
    CASE WHEN OUT_DATE IS NULL THEN '출고미정'
         WHEN TO_CHAR(OUT_DATE, 'YYYY-MM-DD') <= '2022-05-01' THEN '출고완료'
         WHEN TO_CHAR(OUT_DATE, 'YYYY-MM-DD') > '2022-05-01' THEN '출고대기'
    END AS 출고여부
 FROM FOOD_ORDER ORDER BY ORDER_ID ASC;

GROUP BY를 이용하여 TYPE 별로 묶은후 MAX값을 찾아내 조건에 맞게 조회하는 문제이다.

익숙한 문제여서 어렵지 않게 풀었다.

SELECT R.FOOD_TYPE, R.REST_ID, R.REST_NAME, R.FAVORITES
    FROM REST_INFO R, (SELECT FOOD_TYPE, MAX(FAVORITES) B FROM REST_INFO
          GROUP BY FOOD_TYPE) T
    WHERE R.FAVORITES = B AND R.FOOD_TYPE = T.FOOD_TYPE
    ORDER BY R.FOOD_TYPE DESC;

앞의 문제와 마찬가지로 INNER JOIN과 DATETIME의 차이를 구하는 문제였다.

크게 어려움은 없었으며 FULL OUTER JOIN으로 한번 풀어 보았다.

SELECT I.ANIMAL_ID, I.NAME 
 FROM ANIMAL_INS I FULL OUTER JOIN ANIMAL_OUTS O ON(I.ANIMAL_ID = O.ANIMAL_ID)
 WHERE O.DATETIME - I.DATETIME < 0
 ORDER BY I.DATETIME ASC;

+ Recent posts