A Developing Developer

DAY 42. DataBase(SQL) 본문

내일배움캠프 4기/TIL

DAY 42. DataBase(SQL)

H-JJOO 2023. 1. 11. 21:03
  • 오늘 한거

선발대 상황파악 테스트

 

  • 문제발생

SQL 다 까먹음

 

  • 시도

해설 강의 수강

 

  • 해결방안

가능한 정답 쿼리문을 구하려고 노력 (구글링 X)

 

  • 알게 된 것 

Q1.

  • 다음과 같은 스키마의 employees라는 테이블이 있습니다.
    • department_id(부서 ID. INT), salary(연봉. INT), comm(커미션. INT)

Q.

연봉이 최대 5,000만원을 넘지 않는 부서 ID가 17인 사원들 및 부서 ID가 5번인 모든 사원들 및 커미션을 받는 사원들의 목록을 찾고 싶습니다. 어떻게 쿼리문을 작성하면 될까요?

 

A. 

SELECT * FROM employees WHERE (salary <= 50000000) 

AND department_id = 17 department_id = 5 OR comm > 0

 

KEY WORD :

 

- SELECT * FROM

 

- WHERE

 

- AND

 

- OR

 

Q2. 

  • 다음과 같은 스키마의 students라는 테이블이 있습니다.
    • student_name(학생 이름. VARCHAR), track(트랙. VARCHAR)

Q. track이 “Node.js”이거나 “React”인 학생들 중 성이 “김”씨거나 끝의 이름이 “호”로 끝나는 학생들의 명단(student_name)을 알고 싶습니다. 어떻게 쿼리문을 작성하면 될까요?

 

A.

SELECT student_name FROM students

WHERE (track IN ('Node.js', 'React') AND (student_name LIKE '김%' OR student_name LIKE '%호'))

 

KEY WORD :

 

- IN

 

- LIKE

 

- %

 

Q3.

  • 다음과 같은 스키마의 lol_players라는 테이블이 있습니다.
    • player_id(플레이어 ID, INT), name(플레이어 이름, VARCHAR), rank_score(랭크게임 점수, INT)

Q. rank_score가 1000 이하면 “IRON”, 1001 ~ 2000 사이면 “BRONZE”, 2001 ~ 3000 사이면 “SILVER” 3001 이상이면 “GOD”을 출력하는 rank_result라는 이름의 컬럼을 포함하여 name과 같이 결과를 알고 싶습니다. 어떻게 쿼리문을 작성하면 될까요?

Bonus Q. 위의 문제에서 rank라는 컬럼으로 결과를 알 수 있을 것 같은데 왜 굳이 제가 rank_result라는 이름의 컬럼으로 썼을까요?

 

A.

SELECT name CASE

WHEN rank_score <= 1000 THEN 'IRON'

WHEN rank_socre <= 2000 THEN 'BRONZE'

WHEN rank_score <= 3000 THEN 'SLIVER'

ELSE 'GOD' END AS rank_result FROM lol_players

 

KEY WORD :

 

- CASE

 

- WHEN

 

- THEN

 

- ELSE

 

- END

 

- AS

 

- 왜 rank 를 쓰지않고 rank_result 를 썼을까? 이유는 SQL 예약어에 RANK 가 약속 되어있기 때문이다.

 

Q4. 

문제 설명

PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 나타냅니다. ID는 기본키입니다.

문제

이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.

예시

예를 들어, PLACES 테이블이 다음과 같다면

  • 760849번 유저는 공간을 3개 등록했으므로 이 유저는 헤비유저입니다.
  • 30900122번 유저는 공간을 2개 등록했으므로 이 유저는 헤비유저입니다.
  • 21058208번 유저는 공간을 1개 등록했으므로 이 유저는 헤비유저가 아닙니다.

따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.

 

A.

SELECT ID, NAME, HOST_ID FROM PLACES

WHERE HOST_ID IN (SELECT HOST_ID FROM PLACES

GROUP BY HOST_ID HAVING COUNT(HOST_ID) > 1) ORDER BY ID

 

KEY WORD :

 

- 서브쿼리 : 쿼리 안의 쿼리, HOST_ID 를 가져오기 위한

 

- GROUP BY

 

- HAVING

 

- COUNT

 

- ORDER BY

 

 

 

[결론]

 

인간은 망각의 동물

 

반복하자

 

 

'내일배움캠프 4기 > TIL' 카테고리의 다른 글

DAY 44.  (0) 2023.01.16
DAY 43. 진수 변환  (0) 2023.01.12
DAY 41. day17 알고리즘 부족한 금액 계산하기  (0) 2023.01.11
DAY 40. Websocket  (0) 2023.01.09
DAY 39. 노드 심화 프로젝트 (발표)  (0) 2023.01.08