[MySQL] USING, HAVING, CONCAT

박경희·2024년 1월 4일

코딩테스트

목록 보기
17/69

문제1 - 없어진 기록 찾기

풀이1

SELECT O.ANIMAL_ID, O.NAME
FROM  ANIMAL_OUTS O 
LEFT JOIN ANIMAL_INS A ON A.ANIMAL_ID = O.ANIMAL_ID
WHERE A.DATETIME IS NULL

풀이2

SELECT ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS USING(ANIMAL_ID) 
WHERE INTAKE_CONDITION IS NULL

USING 구문 사용

  • USING(ANIMAL_ID) 구문은 JOIN 조건에서 두 테이블(ANIMAL_OUTSANIMAL_INS)이 같은 이름의 컬럼(ANIMAL_ID)을 가지고 있을 때 사용할 수 있다.

  • 이 구문은 ON 구문과 같은 역할을 하지만, ON A.ANIMAL_ID = O.ANIMAL_ID 와 같이 명시적으로 양쪽 테이블의 컬럼을 지정하는 대신, USING(ANIMAL_ID)로 더 간결하게 표현할 수 있다.

USING(ANIMAL_ID) 구문은 단지 두 테이블을 ANIMAL_ID를 기준으로 조인하는 데 사용되기 때문에
정확한 필터링하기에는 풀이1이 적절하다.

문제2 - 조건에 맞는 사용자 정보 조회하기

SELECT 
    U.USER_ID, 
    U.NICKNAME, 
    CONCAT(
    	U.CITY, ' ', 
    	U.STREET_ADDRESS1, ' ', 
        U.STREET_ADDRESS2) AS '전체주소',
    CONCAT(
        SUBSTRING(U.TLNO, 1,3), '-', 
        SUBSTRING(U.TLNO, 4,4), '-', 
        SUBSTRING(U.TLNO, 8,4)) AS '전화번호'
FROM USED_GOODS_BOARD B 
JOIN USED_GOODS_USER U
ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(BOARD_ID) >= 3
ORDER BY U.USER_ID DESC

✅ HAVING - GROUP BY 절의 결과에 조건을 적용할 때 사용

HAVING COUNT(BOARD_ID) >= 3 // 그룹화된 결과 중에서 게시글이 3건 이상인 그룹만을 필터링

HAVING 왜이렇게 생각이 잘 안날까,,

  • HAVING 절은 GROUP BY 절의 결과에 조건을 적용할 때 사용한다는 것 기억하자..!!

✅ CONCAT - 문자열을 결합하는데 사용

CONCAT(left(TLNO,3),'-',mid(TLNO,4,4),'-',right(TLNO,4)) 전화번호
  • 이렇게 left, mid, right로 사용할 수 있다.
  • 이 형식은 전화번호의 형식이 일관되지 않거나 다른 국가의 전화번호 형식을 다루어야 한다면 추가적인 로직을 고려해야 할 수도 있다.

0개의 댓글