빠르게 자바를 배우고자, SQL은 주말에 시간을 내어 진도를 빼보고자 한다.
SQL은 몇번 배운 적이 있기 때문에 리마인드 하는 느낌으로 문제를 풀어보고자 한다.
[3단계] 상품 주문이 들어왔으니 주문을 처리해봅시다!
9. orders 테이블에서 주문 수량(amount)이 2개 이상인 주문을 진행한 소비자의 ID(customer_id)만 선택하는 쿼리를 작성해주세요!
SELECT customer_id
FROM orders
WHERE amount >= 2
뭐를? 소비자 아이디를.
어디서? orders에서
조건은? amount가 2개 이상인것만.
10. orders 테이블에서 2023년 11월 2일 이후에 주문된 주문 수량(amount)이 2개 이상인 주문을 선택하는 쿼리를 작성해주세요!
SELECT *
FROM orders
WHERE order_date > '2023-11-02' AND amount >= 2
- 날짜도 문자열로 처리해서 이상, 이하(>,<) 주면 됨.
- 뭐를? 모든 열을/ 특정 컬럼을 제시하지 않음.
- 어디서? orders에서
- 조건은? amount >=2 And(그리고) order_date > '2023-11-02'
11. orders 테이블에서 주문 수량이 3개 미만이면서 배송비(shipping_fee)가 15000원보다 비싼 주문을 선택하는 쿼리를 작성해주세요!
SELECT *
FROM orders
WHERE amount < 3 AND shipping_fee > 15000
- 뭐를? 모든 열을/ 특정 컬럼을 제시하지 않음.
- 어디서? orders 에서
- 조건은? amount < 3 AND shipping_fee >= 15000 AND
12. orders 테이블에서 배송비가 높은 금액 순으로 정렬하는 쿼리를 작성해주세요!
- 뭐를? 모든 열을/ 특정 컬럼을 제시하지 않음.
- 어디서? orders에서
- 조건은? 없음
- 정렬은? ORDER BY shipping_fee DESC
SELECT *
FROM orders
ORDER BY shipping_fee DESC
* 정렬은 2가지가 있다. 오름차순과 내림차순.
- ASC 오름차순, DESC 내림차순
- 값이 높은게 올려면 DESC 를 해야한다.
[4단계] 이제 놀만큼 놀았으니 다시 공부해봅시다!
13. sparta_students 테이블에서 모든 학생의 이름(name)과 트랙(track)을 선택하는 쿼리를 작성해주세요!
- 뭐를? name과 track을
- 어디서? sparta_students 에서
SELECT name, track
FROM sparta_students
14. sparta_students 테이블에서 Unity 트랙 소속이 아닌 학생들을 선택하는 쿼리를 작성해주세요!
- 뭐를? 모든 열을/ 특정 컬럼을 제시하지 않음.
- 어디서? sparta_students 에서
- 조건은? track 이 Unity가 아닌 것
SELECT * FROM sparta_students WHERE track != 'Unity'
SELECT * FROM sparta_students WHERE track NOT IN ('Unity')
15. sparta_students 테이블에서 입학년도(enrollment_year)가 2021년인 학생과 2023년인 학생을 선택하는 쿼리를 작성해주세요!
- 뭐를? 모든 열을/ 특정 컬럼을 제시하지 않음.
- 어디서? sparta_students 에서
- 조건은? 2021년, 2023년 학생.
SELECT *
FROM sparta_students
WHERE enrollment_year IN (2021, 2023)
16. sparta_students 테이블에서 Node.js 트랙 소속이고 학점이 ‘A’인 학생의 입학년도를 선택하는 쿼리를 작성해주세요!
- 뭐를? 입학년도를
- 어디서? sparta_students에서
- 조건은? track 이 Node.js 랑 grade 도 'A' 인것.
SELECT enrollment_year
FROM sparta_students
WHERE track = 'Node.js' AND grade = 'A';
[5단계] 공부하다보니 팀 프로젝트 시간이 왔어요!
17. team_projects 테이블에서 AWS 예산(aws_cost)이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리를 작성해주세요!
- 뭐를? name
- 어디서? team_projects 에서
- 조건은? aws_cost >= 40000
SELECT name
FROM team_projects
WHERE aws_cost >= 40000
18. team_projects 테이블에서 2022년에 시작된 프로젝트를 선택하는 쿼리를 작성해주요! 단, start_date < ‘2023-01-01’ 조건을 사용하지 말고 쿼리를 작성해주세요!
- 뭐를? 모든 열을/ 특정 컬럼을 제시하지 않음.
- 어디서? team_projects 에서
- 조건은? start_date LIKE "2023%"
SELECT *
FROM team_projects
WHERE YEAR(start_date) = 2022
SELECT *
FROM team_projects
WHERE start_date LIKE "2022%"
** 두가지 사용 가능하다.
** LIKE 문을 사용하여 "2022%" 와 같이 사용하거나,
** year() 함수를 이용해서 년도만 추출 후 YEAR()= 2022 이런식으로 사용해도 된다.
19. team_projects 테이블에서 현재 진행중인 프로젝트를 선택하는 쿼리를 작성해주세요. 단, 지금 시점의 날짜를 하드코딩해서 쿼리하지 말아주세요!
** 여기서 하드코딩이란? 코드가 동적으로 작동하는 것이 아닌 정적으로 작동되는 걸 말한다. 그러니까 값(오늘 날짜)이 달라지면 값도 달라져야하는데. 하드코딩 해버리면 (즉 오늘이라는 날짜를 값으로 고정시켜버리면), 값이 동적으로 변경되지 않는다는 것이다.
** 그렇다면 어떻게 하여야하나? 바로 "CURDATE()"라는 함수를 이용할 수 있다. 오늘 날짜를 반환해주는 함수로 BETWEEN 과 함께 사용하겠다.
- 뭐를? 모든 열을/ 특정 컬럼을 제시하지 않음.
- 어디서? team_projects 에서
- 조건은? CURDATE() BETWEEN start_date AND end_date
SELECT *
FROM team_projects
WHERE CURDATE() BETWEEN start_date AND end_date
20. team_projects 테이블에서 각 프로젝트의 지속 기간을 일 수로 계산하는 쿼리를 작성해주세요!
** 지속 기간을 어떻게 구하냐? 바로 날짜 간의 차이를 구하면 된다.
** 그런데, SQL 문에는 직접적인 뺄셈 문이 없다. 심지어 String(Date)문은 덧셈 시 에러가 난다. 그리하여 DATEDIFF 라는 함수를 사용해 줄 것이다. 두 날짜 간의 차이를 반환해주는 함수이다.
- 뭐를? DATEDIFF(start, end)
- 어디서? team_projects 에서
SELECT name, DATEDIFF(end_date, start_date)
FROM team_projects
** 여기서 헷갈릴 수 있는 부분이 있다. 바로 DATEDIFF를 SELECT 문제 넣은 것이다. 왜 조건문 같은데 SELECT 에 넣냐? 라고 할 수 있지만, 우리가 조회할 것이 바로 차이값을 낸 컬럼이기 때문이다. WHERE은 어떠한 문에 해당하는 컬럼을 조회하는 것이고 SELECT는 계산된 컬럼을 보여라. 라는 것으로 이 차이를 이해해야 한다. 우리가 '지속 기간'의 조건을 가진 컬럼을 찾는 것이 아니라, 지속기간 이라는 열을 조회하는 것이라고 이해하면 쉬울 거 같다.
오늘은 끝 : >
'백엔드 부트캠프[사전캠프] > 문제풀이' 카테고리의 다른 글
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.21 |
---|---|
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.21 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.20 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.19 |
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이 (0) | 2025.01.17 |