[주제] SQL 기본 문법 익히기
SQL은 데이터베이스를 다루고, 데이터베이스로 부터 원하는 데이터를 적절하게 추출하기 위한 기초적인 언어입니다. 신입사원 수준에서는 비교적 잘 정리된 RDB에 적재된 데이터를 주로 다루게 됩니다. 1주차에는 이런 RDB에서 원하는 조건에 맞게 데이터를 가공, 추출하는 방법을 알아봅니다. 그리고 이를 활용해 다양한 예시 문제들을 해결해 봅니다.
- SQL 기본 문법 익히기
- 다양한 SQL 활용 예시 익히기
- 데이터 추출 문제를 해결하고 결과 쿼리를 Word로 첨부
문제
- Country 별로 ContactName이 ‘A’로 시작하는 Customer의 숫자를 세는 쿼리를 작성하세요.
- Customer 별로 Order한 Product의 총 Quantity를 세는 쿼리를 작성하세요.
- 년월별, Employee별로 Product를 몇 개씩 판매했는지를 표시하는 쿼리를 작성하세요.

1.Country 별로 ContactName이 ‘A’로 시작하는 Customer의 숫자를 세는 쿼리를 작성하세요.
SELECT Country ,Count(*) FROM Customers
WHERE ContactName LIKE 'A%'
GROUP BY Country;
어떤 Country 고 해당하는 개수가 몇인지 출력하고
LIKE를 이용하여서 문자영 부분일치를 검색
( % ) : 모든문자
( _ ) : 한글자(자리 수 지정)
EX)
WHERE ContactName LIKE 'A'
=> 'A' 만 출력 (=) WHERE ContactName = 'A'
WHERE ContactName LIKE '%A%'
=> A 앞뒤로 뭐가 오던지 상관없이 출력
WHERE ContactName LIKE 'A%'
=> A 로 시작하는 애들만 출력
WHERE ContactName LIKE '%A'
=> A 로 끝나는 애들만 출력
WHERE ContactName LIKE '_ _A% '
=> A 앞에 두글자 있는 애들만 출력 (EX) : CPABCD
WHERE ContactName LIKE '_ _A '
=> A 앞에 두글자 있고 A로 끝나는 세글자 애들만 출력 (EX) : CPA
<답>
SELECT Country ,Count(*) FROM Customers
WHERE ContactName LIKE 'A%'
GROUP BY Country;

2.Customer 별로 Order한 Product의 총 Quantity를 세는 쿼리를 작성하세요.

Orders 와 OrderDetails를 살펴 봐야겠음


찾고 있던 Quantity가 OrderDetails에 있음
CustomerID랑 Quantity 연결을 위해 OrderID로 Join을 진행기준을 Orders로 잡고 left join을 해보자
SELECT CustomerID ,Quantity
FROM Orders AS O
LEFT JOIN
OrderDetails AS OD
ON O.OrderID = OD.OrderID
ORDER BY CustomerID ;

Quantity 가 합쳐지지 않음...
Group By 추가해봤는데
SELECT CustomerID ,Quantity
FROM Orders AS O
LEFT JOIN
OrderDetails AS OD
ON O.OrderID = OD.OrderID
Group By CustomerID
ORDER BY CustomerID ;

결과가 이상함 ㅠㅠ
<질문>
GroupBy 결과가 왜 저렇게 누락되었는지
<답>
SELECT CustomerID ,sum(Quantity)
FROM Orders AS O
LEFT JOIN
OrderDetails AS OD
ON O.OrderID = OD.OrderID
Group by CustomerID
ORDER BY CustomerID ;

3.년월별, Employee별로 Product를 몇 개씩 판매했는지를 표시하는 쿼리를 작성하세요.
문제를
1968-12
Employee1 23
Employee2 45
Employee3 8
1969-01
Employee1 3
Employee2 53
Employee3 2
으런식으로 보여 달라는 것으로 해석

년 월 찾았다!!
개수가 없으니 OrderID하고 개수 있는 테이블 찾아보면

기본 BASE가 될 TABLE을 JOIN으로 만들어 보면
SELECT *
FROM Orders AS O
LEFT JOIN
OrderDetails AS OD
ON O.OrderID = OD.OrderID

ORDER ID가 같은 것이 여러개 생겨 버림
이는 Prouduct 아이디가 달라서 즉, 다른 상품을 주문을 하여서 이런 현상이 생긴걸로 판단하였다
SELECT O.OrderDate, O.EmployeeID, O.OrderID, sum(Quantity)
FROM Orders AS O
INNER JOIN
OrderDetails AS OD
ON O.OrderID = OD.OrderID
GROUP BY O.OrderID

년월일 하고 EmployeeID, 총 Product 개수는 뽑아 냈다
(OrderID는 중복 안되었다는 걸 확인 했으니 빼주고 EmployeeID를 이름으로 바꿔주자)
SELECT O.OrderDate, E.LastName, E.FirstName, O.EmployeeID ,O.OrderID, sum(Quantity)
FROM (Orders AS O
INNER JOIN
OrderDetails AS OD
ON O.OrderID = OD.OrderID) AS TotalOrder
INNER JOIN
Employees AS E
ON TotalOrder.EmployeeID = E.EmployeeID
GROUP BY O.OrderID

여기에서 Select문을 조금 바꿔보면
<답>
SELECT O.OrderDate, E.LastName, E.FirstName, sum(Quantity)
FROM (Orders AS O
INNER JOIN
OrderDetails AS OD
ON O.OrderID = OD.OrderID) AS TotalOrder
INNER JOIN
Employees AS E
ON TotalOrder.EmployeeID = E.EmployeeID
GROUP BY O.OrderID

<질문>
년-월-일 별로 묶었지만
Steven 같은 경우 7월 4일,11일 모두 주문을 했는데
이것을 년-월 별로 묶어서 Sum하고 싶으면 어떻게 수정을 해야하는지?
과제 사이트
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
SQL Tryit Editor v1.6
WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, Opera, and Edge(79). If you use another browser you will still be able to use our Try SQL Editor, but a different ver
www.w3schools.com
'프로젝트 모음 > SQL 입문부터 활용까지' 카테고리의 다른 글
| [SQL 입문부터 활용까지] 데이터 시각화 & 3차 과제 (2) | 2022.12.04 |
|---|---|
| [SQL 입문부터 활용까지] 2차 과제 (3) (0) | 2022.12.01 |
| [SQL 입문부터 활용까지] 2차 과제 (2) (0) | 2022.11.30 |
| [SQL 입문부터 활용까지] 2차 과제 (1) (0) | 2022.11.30 |