이 기사에서는 프로그래밍의 전문 개념을 설명하고 있지 않습니다. ERD 관계선과 질의문을 적어둔 것만으로도 W3스쿨의 SQL 데이터를 활용해 실습하고 개인적인 감동을 적은 일지임에 유의하세요! 물론 코드 피드백은 환영입니다 🙂 요즘 자의반 타의반으로 SQL과 Python을 호쾌하게 두드리고 있다.데이터를 다루는/다룰 수 있는 언어인데, 그 두 가지는 그 접근법도 느낌도 미묘하게 매우 다르다.아무튼 PMB에서 과제도 받은 김에 개발 공부도 돌아보는 김에 SQL 개발 일지를 써본다.
SQL을 사용하여 데이터를 추출하는 Mission1. 데이터를 기반으로 DB 스키마를 정리합니다. DB 간 객체, 속성, 관계를 알 수 있도록 작성합니다.2. 여러 DB에서 데이터를 추출하여 필요한 내용만 확인할 수 있는 SQL 문장을 3개 이상 만들어 봅니다.
SQL Tryit Editor v1.6SQL 스테이트먼트: SELECT * FROM Customers; SQL 스테이트먼트를 편집한 후 [Run SQL] 을 클릭하여 결과를 표시합니다. 結果: www.w3schools.com
1. DB 스키마 정리(ERD) ERD는 Entity-Relation Diagram의 약자로 말 그대로 객체 관계도입니다.즉, 데이터(속성별 집합)의 관계를 직관적으로 보기 쉽게 도식화한 자료를 말합니다.지금까지 ERD에 관계선에 관계 표현을 그린 적은 없지만 이번에는 제대로 공부하면서 그려봤습니다.tip. 여기서는 PK가 아닌 모든 ID 속성을 FK(외래키)로 써서 그리기 쉬웠습니다.
1. DB 스키마 정리(ERD) ERD는 Entity-Relation Diagram의 약자로 말 그대로 객체 관계도입니다.즉, 데이터(속성별 집합)의 관계를 직관적으로 보기 쉽게 도식화한 자료를 말합니다.지금까지 ERD에 관계선에 관계 표현을 그린 적은 없지만 이번에는 제대로 공부하면서 그려봤습니다.tip. 여기서는 PK가 아닌 모든 ID 속성을 FK(외래키)로 써서 그리기 쉬웠습니다.
SQL 쿼리 문장을 작성하는 우리 김 대리는 개발자가 아니기 때문에 변화구를 던진다.나도 상황을 설정하고 필요한 데이터 가설을 세워 쿼리 글을 써보기로 했다. Q. 고객 중 제품 수량에 상관없이 주문 횟수가 가장 많은 순서대로 선발해 VIP 등급으로 변경하고자 한다.
과제 : 고객 ID별 주문 횟수를 선택하여 내림차순으로 정렬하자 기대효과 : VIP고객을 위한 마케팅을 진행할 수도 있으며, 주문 횟수가 적은 고객을 타깃으로 마케팅하여 리텐션을 높일 수 있음
// * 고객 ID / 주문 고객을 선택 ID는 「ID」, 카운트(고객) ID) [주문]으로부터[주문]으로서 고객 ID 순서대로 그룹화(고객) ID) DESC;
// * 고객 ID / 주문 고객을 선택 ID는 「ID」, 카운트(고객) ID) [주문]으로부터[주문]으로서 고객 ID 순서대로 그룹화(고객) ID) DESC;
Q. 추수감사절을 치르도록 하겠습니다. 어떤 품목을 대상으로 진행하면 될까요?가설 : 팔리지 않고 재고가 남아있는 상품을 가장 잘 팔리는 상품과 함께 세일하면 재고를 정리할 수 있을 것이다 필요한 데이터 : 카테고리별 주문 수량//*품목별 주문 수량을 찾아보고 SELECT Category Name, Description, COUNT(Quantity)as Quantity//*품목명, 설명, 수량(Quantity로 표시)FROM[Categories] ca JOIN[Products]pdON ca.CategoryID=pd.CategoryID//*품목 테이블의 카테고리 IDJOIN[OrderDetails]od ON pd.ProductID=pductID.ProductID.Pod.ProductID//*위 테이블의 프로덕트 ID=주문 상세 테이블의 프로덕트 IDGROUP BY CategoryNAME ORDER BY COUNT(Quantity)DESC;//*품목별 출력// * 품목별 주문 수량 찾아보자 SELECT Category Name, Description, COUNT(Quantity)as Quantity // * 품목명, 설명, 수량(Quantity로 표시) FROM [Categories] ca JOIN [Products] pdON ca.CategoryID = pd.CategoryID/ * 품목 테이블의 카테고리 ID JOIN [OrderDetails]od ON pd.ProductID = pductID.ProductID // * 위 테이블의 프로덕트ID = 주문상세 테이블의 프로덕트IDGROUP BY Category NAME ORDER BY COUNT(Quantity) DESC; // * 품목별 출력Q. 매출이 가장 낮은 나라는 어디인가요? BEP를 넘지 못한 나라가설: 전 세계를 대상으로 한 쇼핑몰인 만큼 국가별 지표도 관리해야 한다. 다양한 나라 중 다행히 매출이 꽤 나오는 곳도 있지만 생각보다 미미한 곳도 있다. 매출이 발생하지 않아도 각국에서 발생하는 유지비와 인건비 등은 비슷하게 지출하고 있다. 따라서 BEP : Break Even Point(Sales_sum : 1000 이상)를 달성하지 못한 국가에서 거래를 중단하고자 한다.필요한 데이터: 국가별 주문량// * 고객님을 선택해주세요.국가, SUM(주문 상세).수량*제품. 가격) Sales_sum//로서 *하는 이보가, FROM 고객, 주문, 주문상세, 제품WHERE 고객.고객ID= 주문. 고객ID 및 오더.Order ID = 주문 상세 정보.오더 ID와 오더 상세 정보.Product ID= 제품.고객의 제품 ID 그룹. 국가 주문 By Sales_sum ASC;/ 별에 게 신, 도착에 은시지 않습니다.// * 고객님을 선택해주세요.국가, SUM(주문 상세).수량*제품. 가격) Sales_sum//로서 *하는 이보가, FROM 고객, 주문, 주문상세, 제품WHERE 고객.고객ID= 주문. 고객ID 및 오더.Order ID = 주문 상세 정보.오더 ID와 오더 상세 정보.Product ID= 제품.고객의 제품 ID 그룹. 국가 주문 By Sales_sum ASC;/ 별에 게 신, 도착에 은시지 않습니다.문장의 마무리:프로그래밍을 공부하게 된 계기, 지금은 영어처럼 프로그래밍도 필수 교육 과정의 하나가 됐다고 한다.물론 경력과 지적 호기심에서 프로그래밍을 배우고 있는데 한쪽에서는 코딩을 배워야 한다고 결심한 것은 나의 어머니 때문이다.저는 학창 시절에 운동 선수 생활을 하느라 새벽 오후, 저녁의 공휴일을 불문하고 매일 트레이닝을 하고 학교 공부는 물론 당연히 과외나 학원 공부를 할 시간이 없었다.그런 나에게 어머니는 시험 기간에는 매일 새벽까지 함께 공부하는 선생님인 공부 메이트였다. 어머니는 실제로 나를 낳기 전까지는 이과의 선생님이었고 그 때문인지 교수를 지낸지 꽤 시간이 지났는데도 중학교 과정까지는 잘 일러 줬다.너무 막연한 미래 하지만 언젠가 가정을 꾸리고 아이를 갖게 되면 나도 엄마처럼 아이와 함께 공부하는 사람이 되고 싶었다.(홍·진경최고!)뭐, 설령 그런 상황이 오지 않아도, 후대에는 프로그래밍이 기초 소양은 아닐까?쓰고 보면 애늙은이 같지만 아무튼 그런 마음이 프로그래밍 공부를 시작한 계기라고는 이야기.