[내일배움캠프-사전캠프] SQL 단계별 문제 풀이

2025. 1. 18. 22:31·백엔드 부트캠프[사전캠프]/문제풀이

빠르게 자바를 배우고자, 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 단계별 문제 풀이  (1) 2025.01.21
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (3) 2025.01.21
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (0) 2025.01.20
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (1) 2025.01.19
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이  (1) 2025.01.17
'백엔드 부트캠프[사전캠프]/문제풀이' 카테고리의 다른 글
  • [내일배움캠프-사전캠프] SQL 단계별 문제 풀이
  • [내일배움캠프-사전캠프] SQL 단계별 문제 풀이
  • [내일배움캠프-사전캠프] SQL 단계별 문제 풀이
  • [내일배움캠프-사전캠프] SQL 단계별 문제 풀이
sintory-04
sintory-04
🚀🚀🚀
  • sintory-04
    Sintory Dev Blog
    sintory-04
    글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (289)
      • 백엔드 부트캠프 (111)
        • TIL (97)
        • WIL (0)
        • 문제풀이 (7)
        • 기타 (6)
      • 백엔드 부트캠프[사전캠프] (35)
        • TIL (16)
        • 문제풀이 (17)
        • 기타 (1)
      • Troubleshooting (11)
      • 코딩 공부 (118)
        • Java (28)
        • Baekjoon-Java (24)
        • Programmers-Java (40)
        • Spirngboot (11)
        • typescript (1)
        • JavaScript (6)
        • Spring 입문 (8)
      • 프로젝트 (8)
        • ToDoApp(FireBase) (3)
        • ToDoApp(Spring) (5)
      • 기타 (4)
  • 블로그 메뉴

    • 소개
    • Github
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
sintory-04
[내일배움캠프-사전캠프] SQL 단계별 문제 풀이
상단으로

티스토리툴바