본문 바로가기

데이터베이스/Oracle

[Oracle] Lv. 3 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기, 조건에 맞는 사용자 정보 조회하기

String, Date

1. 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

  • 조회수가 가장 높은 중고거래 게시물
    • 원하는 경로 조회를 위해 두 테이블 함께 참조 & 기준 설정(BOARD_ID)
      • FROM USED_GOODS_BOARD B, USED_GOODS_FILE F
      • WHERE B.BOARD_ID = F.BOARD_ID
    • 가장 높은 조회수 조건(서브쿼리)
      • AND VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD)
  • 첨부파일 경로 조회
    • 기본 파일경로: /home/grep/src/
      • ORACLE에서 문자열 합치는 방법(||, CONCAT)
        • CONCAT('AA', 'BB') => AABB (두 개의 문자열만 연결할 수 있음)
        • 'AA' || 'BB' => AABB (여러 개의 문자열을 연결할 수 있음)
    • 게시글ID를 기준으로 디렉토리 구분 + '/'
    • 파일이름: 파일ID, 파일이름, 파일확장자 순서대로 출력
      • SELECT '/home/grep/src/' || B.BOARD_ID || '/' || F.FILE_ID || F.FILE_NAME || F.FILE_EXT AS FILE_PATH
  • FILE ID를 기준으로 내림차순 정렬
    • ORDER BY F.FILE_ID DESC;
SELECT '/home/grep/src/' || B.BOARD_ID || '/' || F.FILE_ID || F.FILE_NAME || F.FILE_EXT AS FILE_PATH
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_FILE F ON B.BOARD_ID = F.BOARD_ID
WHERE B.VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD)
ORDER BY F.FILE_ID DESC;

 

 

2. 조건에 맞는 사용자 정보 조회하기

  • 사용자ID, 닉네임, 전체주소, 전화번호 조회
    • 사용자ID, 닉네임
      • SELECT USER_ID, NICKNAME,
    • 전체주소: 시, 도로명주소, 상세주소를 ||와 ' '를 이용하여 연결
      • CITY||' '||STREET_ADDRESS1||' '||STREET_ADDRESS2 AS 전체주소,
    • 전화번호: XXXXXXXXXXX → XXX-XXXX-XXXX 형태로 변경필요, SUBSTR과 ||를 이용하여 연결
      • SUBSTR(값, 시작위치, 길이): 원하는 값을 자를 수 있음
      • SUBSTR(TLNO, 1, 3)||'-'||SUBSTR(TLNO, 4, 4)||'-'||SUBSTR(TLNO, 8, 4) AS 전화번호
  • 중고거래 게시물을 3건 이상 등록한 사용자
    • 서브쿼리, IN 연산자를 이용하여
    • USED_GOODS_BOARD 테이블의 WRITER_ID 3번 이상한 사용자와 USED_GOODS_USER 테이블의 USER_IN을 매칭시키기
    • WHERE USER_ID IN (SELECT WRITER_ID
                       FROM USED_GOODS_BOARD
                       GROUP BY WRITER_ID
                       HAVING COUNT(*) >= 3)
  • 회원ID 기준 내림차순 정렬
    • ORDER BY USER_ID DESC;
SELECT USER_ID,
       NICKNAME,
       CITY||' '||STREET_ADDRESS1||' '||STREET_ADDRESS2 AS 전체주소,
       SUBSTR(TLNO, 1, 3)||'-'||SUBSTR(TLNO, 4, 4)||'-'||SUBSTR(TLNO, 8, 4) AS 전화번호
FROM USED_GOODS_USER
WHERE USER_ID IN (SELECT WRITER_ID
                 FROM USED_GOODS_BOARD
                 GROUP BY WRITER_ID
                 HAVING COUNT(*) >= 3)
ORDER BY USER_ID DESC;

 

참고 사이트: https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형