SELECT ANIMAL_ID, O.NAME FROM ANIMAL_OUTS O
LEFT JOIN ANIMAL_INS I USING(ANIMAL_ID)
WHERE I.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID;
이렇게 I와 O를 JOIN하고 WHERE절에 I.ANIMAL_ID IS NULL
을 지정해주면 어느 테이블을 참조하는 걸까?
그냥 I 테이블을 참조한다면 NULL인 값이 없을텐데!
합치고 나서 O와 I 각각 또 다른 테이블이 생기는건가?
SELECT CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
GROUP BY CATEGORY
HAVING PRICE=MAX(PRICE)
HAVING절이 그룹화 후 적용되는 조건문으로 알고있다. 내가 원했던 건 그룹별로 MAX(PRICE) 값을 구하고 그룹에서 PRICE MAX 값을 갖는 데이터만 보고싶었던 건데,
전체에서 MAX(PRICE)를 구해서 하나의 데이터만 조회됐었다.
뭘까?
SELECT MONTH(START_DATE) AS MONTH,
CAR_ID,
COUNT(*) AS RECORDS
WHERE CAR_ID IN (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE,'%Y-%m-%d') BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY 1 HAVING COUNT(*)>4) F
GROUP BY 1,2
WHERE절에 사용한 서브쿼리에 alias를 지정해줬는데 얘때문에 오류가 났다!
join 절이 아닌 다른 구문에 있는 서브쿼리에 alias를 지정하면 안되는건가?
SELECT CAR_ID,
IF(COUNT(IF('2022-10-16' BETWEEN DATE_FORMAT(START_DATE,'%Y-%m-%d') AND DATE_FORMAT(END_DATE,'%Y-%m-%d'),1,NULL))>0, '대여중','대여 가능') AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
IF와 COUNT로 묶인 부분의 반환 타입이 뭔지 궁금했었는데, 대충 뭔지 알 것 같다.
가장 안에 있는 IF문으로 조건에 따라 1과 NULL이 담긴 테이블?이 반환되고, 이를 COUNT하면 NULL 값을 제외하고 COUNT하니까 IF의 조건에 해당하는 데이터만 COUNT될 것이다.
음. 근데 정확히는 모르겠다. 맨 안에 있는 IF문의 반환 타입?이 뭔지.
SELECT A.AUTHOR_ID, AUTHOR_NAME, CATEGORY, SUM(SALES*PRICE) AS TOTAL_SALES FROM BOOK_SALES BS
INNER JOIN BOOK AS B ON B.BOOK_ID=BS.BOOK_ID
INNER JOIN AUTHOR AS A ON A.AUTHOR_ID=B.AUTHOR_ID
WHERE DATE_FORMAT(SALES_DATE,'%Y-%m')='2022-01'
GROUP BY AUTHOR_ID, AUTHOR_NAME, CATEGORY
ORDER BY AUTHOR_ID, CATEGORY DESC;
궁금한 것 하나의 그냥 JOIN을 썼을 때 디폴트는 뭔지였는데 그건 INNER였다.
두번째는 여기서 GROUP BY 할 때 AUTHOR_NAME이 있으니까 AUTHOR_ID는 안해도 되는건지 였는데, 이건 AUTHOR_NAME이 중복되니까 해줘야한다.
오 확실히 SQL을 공부한 초반이랑 지금이랑 보이는 정도가 다르구만.