A Developing Developer
DAY 42. DataBase(SQL) 본문
- 오늘 한거
선발대 상황파악 테스트
- 문제발생
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 |