DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
DATETIME 형식을 년, 월, 일로 변형해서 제출해라는 문제들이 SELELCT 문제에서 많이 보임
그러나, Mysql에서는 TO_CHAR가 더 이상 지원이 안되는지, 구글링에서는 해당 답이 있는데 적용이 안됨
이 형식은 필수적으로 암기 필요
WHERE MONTH(DATE_OF_BIRTH) = 3 AND GENDER = 'W' AND TLNO IS NOT NULL
Null 값을 제외한 체로 테이블의 값을 가져오고 싶을 때는 WHERE절에 IS NOT NULL을 이용해야 함
이 역시 암기가 필요함
SELECT A.REST_ID, B.REST_NAME, B.FOOD_TYPE, B.FAVORITES, B.ADDRESS, ROUND(AVG(A.REVIEW_SCORE),2) AS SCORE
FROM REST_REVIEW A
JOIN REST_INFO B ON A.REST_ID = B.REST_ID
GROUP BY A.REST_ID
HAVING B.ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, B.FAVORITES DESC
- SELECT : JOIN하려면 어느 테이블에 있는 컬럼인건지 A.REST_ID와 같이 표시가 필요함
- ROUND : 소수점 표시, AVG : 평균값, AS : 컬럼명 변경
- SELECT문에도 이와 같이 함수를 적용할 수 있음
- FROM, JOIN, ON 순서 기억
- ON에 조건 걸어주기
위와 같이 식당의 이름을 기준으로 그룹화 시킴 (중복제거)
AVG과 같은 그룹화 함수와 같이 많이 사용됌
Group by의 기준을 설정하는 문
- 주소가 서울로 시작하는 식당 다 뽑아오기
- 서울만 해당되면 되므로 '서울%' 이와 같이 표시
정렬할 때도 어떤 테이블에 있는 컬럼인지 명확히 표기해주기
- ORDER BY SCORE DESC, B.FAVORITES DESC
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE MONTH(SALES_DATE) = 3
union all
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, NULL as USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE MONTH(SALES_DATE) = 3
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
두 테이블의 결과를 합쳐주는 것 (JOIN X)
- 병합이 아님
- 각각의 결과를 합쳐주는 것
- 조건
- SELECT : 두 테이블에서 같은 컬럼을 갖고와야됌
- 없는 컬럼은 NULL as USER_ID 처럼 NULL 을 시켜줘야 함
중복을 제거한 체로 쿼리를 합칠 수 있음
SELECT USER_ID,PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID,PRODUCT_ID
HAVING count(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC
groupby 된 테이블에서 개수 조건 거는 것
- LEFT 컬럼명 3 왼쪽에서 몇번째까지 짤라라
LEFT(컬럼, 10) DATETIME TYPE- %
- SUBSET -- slicing
다들 잘 준비해오고, 발표와 공유를 통해서 같이 성장하는 느낌을 받아서 좋다. 네이버 부캠에서 진행한 피어세션 방식 도입하는게 진짜 좋은 것 같다.
DB책을 통해서 DB 관련 이론 학습 및 SQL 공부를 함께 진행하면 시너지 효과가 크게 날 것 같다. 책을 구매하자. (정한 책)