걷기 시작한 Coding Novice

SQL 18

본격 쿼리 직접 작성해보기 2 (feat. inner join)

1) 웹개발, 앱개발 종합반의 week 별 체크인 수를 세어보기 활용할 테이블을 먼저 찾아보자. select * from courses c select * from checkins ch 이 두 테이블이면 되겠다. courses에 checkins 테이블을 붙이고, key는 course_id가 되면 좋겠다. select * from courses c inner join checkins ch on c.course_id = ch.course_id group by로 웹개발, 앱개발을 묶어 줘야겠다. select * from courses c inner join checkins ch on c.course_id = ch.course_id group by c.title 더 나아가서, week별로 묶어주는 것도 필요할 ..

SQL 2022.05.31

본격 쿼리 직접 작성해보기 (feat. inner join)

오늘도 예제를 가지고 쿼리를 직접 작성하고 그 과정을 적어내려 갈 것이다. 결제 수단 별 유저 포인트의 평균값 구해보기 결제 수단과 포인트관련 테이블을 먼저 살펴봐야겠다. select * from orders o select * from point_users pu pint_users 테이블을 주체 테이블로 사용할 것 이다. 연결하기 위한 key필드는 user_id가 되겠다. select * from point_users pu inner join orders o on pu.user_id = o.user_id 이제 결제 수단별로 이제 묶어주자. select * from point_users pu inner join orders o on pu.user_id = o.user_id group by o.paymen..

SQL 2022.05.24

Join 연습해보기 2 (feat. Inner Join)

이제까지 배웠던 문법들과 함께 Join을 더 연습해보자. 1. checkins 테이블에 courses 테이블 연결해서 통계치 내보기 '오늘의 다짐' 정보에 과목 정보를 연결해 과목별 '오늘의 다짐' 개수 세기 두개의 테이블을 역시나 확인해 봐야겠지? select * from checkins ch select * from courses c course_id를 공유하고 있다. 이를 key로 연결시켜주자. select * from checkins ch inner join courses c on ch.course_id = c.course_id 과목별 '오늘의 다짐'의 개수를 세줘야 하니까, 일단 과목별로 묶어볼까? select * from checkins ch inner join courses c on ch.c..

SQL 2022.05.23

Join 연습해보기 (feat. Inner Join)

orders 테이블에 users 테이블 연결해보기 직접 해보기에 앞서 두 테이블을 확인 할 필요가 있다. 어떤 테이블에 어떤 내용들이 있는지 항상 확인하는 습관을 길러야 하니까 select * from orders o select * from users u 두개의 테이블에 user_id가 함께 필드로 있는 걸 알 수 있다. 그럼 user_id를 key로 활용하여 연결시키면 되겠다. select * from orders o inner join users u on o.user_id = u.user_id user_id를 기점으로 왼쪽은 orders 테이블이고, 오른쪽은 users 테이블의 내용임을 알 수 있다. users_id를 key로 두 테이블을 붙인 것이다. 일단 왜 inner join으로 했는가? in..

SQL 2022.05.23

Join (Left Join / Inner Join)

Join이란? 두 테이블의 공통된 정보(key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미한다. 예를 들어 user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어! 같은 거다. 그럴 때를 대비해서 무언가 연결된 정보가 있을 때, user_id처럼 동일한 이름과 정보가 담긴 필드를 두 테이블에 똑같이 담아 놓는다. 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 'key'라고 부른다는 걸 잊지 말자! Left Join 왼쪽에 있는 테이블을 기준으로 테이블을 붙인다는 의미이다. 여기서 A와 B는 각각의 테이블을 의미하고, 둘 사이의 겹치는 부분은 테이블 A와 B의 key 값이 연결되는 부분이다. Inner Join 여기서도 A와 B는 각각의..

SQL 2022.05.22

Join을 왜 배우고 왜 써야하는가?

Join이라는 문법은 테이블과 테이블을 붙이는 거다. 거의 모든 쿼리에 join이 들어가고 실무에서 항상 사용한다고 생각해도 된다. 만약, 가지고 있는 데이터 중 '오늘의 다짐'을 남긴 회원의 이름을 알아야 한다. 이유는 '오늘의 다짐' 이벤트 당첨자를 선정하여 특정 상품을 기프티콘으로 지급해야 하는 상황이다. 그렇다면 일단 '오늘의 다짐'테이블을 불러와서 살펴보자. select * from checkins c 해당 테이블에서는 users_id만 존재하고 name이 존재하지 않는다. 하지만 이름도 알아야 하는걸?.. 어쩌지? 반대로 users 테이블에서는? select * from users u 해당 유저 id별로 name과 email이 포함되어 있다. 하지만 여기에는 '오늘의 다짐'의 자료가 없다. 결..

SQL 2022.05.22

별칭을 사용하여 group by, order by, where 연습해보기

네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기 실습으로 위의 내용을 도출하기 위해 작성해보기 연습을 해보자. 우선 어느 테이블이 해당 내용의 데이터를 뽑아내는데 적절한지 살펴보자. select * from orders orders테이블이 적당한 것 같다. 추가로 앱개발 종합반을 신청한 부분만 필요하니, where문구로 선택해주자. select * from orders o where o.course_title = '앱개발 종합반' 이후 결제수단별로 묶어 주는게 좋겠지? select * from orders o where o.course_title = '앱개발 종합반' group by payment_method 이제 naver를 사용하는 email 것들로만 추려보자. 아..

SQL 2022.05.22

SQL 별칭 기능 (Alias)

쿼리가 점점 길어지면 헷갈리는 일이 자주 발생한다. 그래서 SQL은 Alias라는 별칭 기능을 지원한다. select * from orders where course_title = '앱개발 종합반' orders 테이블에서 '앱개발 종합반'만 보고 싶어서 where절을 이용하여 확인해보았다. 여기서 쿼리가 길어지게 되면 이 course_title이 어느 테이블의 필드인거지? 라는 의문과 동시에 헷갈릴 수 있다. 그럴 경우 다음과 같이 별칭을 정해줄 수 있다. select * from orders o where o.course_title = '앱개발 종합반' from orders 옆에 띄워쓰기 후 o라는 별칭을 입력했다. "그러면 앞으로 orders를 o라고도 부르겠다" 라는 말이 된다. 그리고 아래 whe..

SQL 2022.05.22

Group by, Order by 연습해보기

이제 예제를 가지고 조금 연습을 추가로 해볼꺼다. 예제는 다음과 같다. (1) 앱개발 종합반에 결제 수단별 주문건수. (2) Gmail을 사용하는 성씨별 회원수 세어보기. (3) Course_id별 ‘오늘의 다짐’에 달린 평균 like 개수 구해보기. (1) 앱개발 종합반에 결제 수단별 주문건수. 주문건수니까 count를 활용하려나? show tables로 살펴보니 테이블은 orders를 활용해야 할꺼 같다. 일단 orders 테이블을 불러오자. select * from orders 결제 수단별이니까 group by로 결제수단별로 묶어주었다. select * from orders group by payment_method 앱개발 종합반만 남겨기위해 where을 사용해주었고 select * from ord..

SQL 2022.05.11

Order by 문자열은 정렬이 되는가?

Order by는 문자열 기준으로도 정렬이 된다. select * from users order by email Users 테이블에서 email을 오름차순 정렬해줘! 의 결과다. 보이는봐와 같이 문자열도 오름차순이 된 화면이다. 물론 내림차순도 가능하다. select * from users order by email desc 문자열인 이름도 가능하겠지? select * from users order by name Users 테이블에서 name을 오름차순 정렬해줘! 이 경우에도 역시나 내림차순도 마찬가지다. select * from users order by name desc 날짜 및 시간도 가능하다. select * from users order by created_at Users 테이블에서 create..

SQL 2022.05.11

group by 사용할 때 자주 하는 실수

가장 자주하는 실수? 오류? 를 한번 짚고 넘어가자. 범주에 따른 통계치를 구하고 싶어 group by를 사용해 보았는데.. select * from orders group by payment_method 하지만, 통계치는 나오지 않고 4개의 데이터만 출력된 것을 알 수 있다. group by로 묶어 주긴 했지만 무엇을 통계내라는 건지 명령이 없어서 이렇게 나온다. 그래서 대표적으로 하나씩 보여준 것이다. 몇 개의 값이 있는지에 대한 명령을 넣어보자. select count(*) from orders group by payment_method payment_method라는 범주를 group by로 묶어주었으나, 첫번째 줄에서 그저 세기만 하라고 명령을 내려서 구분이 안된다. 그러면? 아! 범주를 첫번째 ..

SQL 2022.05.05

order by 사용해보기

◆Order by 전에 group by로 같은 성씨의 데이터를 하나로 묶고, 각 성씨의 회원수를 구했었다. select name, count(*) from users group by name 이것을 정렬을 해보자. 무엇을 정렬하던 계산할 것은 하고, 자료를 추출 한 후 마지막에 이루어져야 한다. 그 말은? 마지막에 와야한다! select name, count(*) from users group by name order by count(*) 기본적으로 작은 것부터 나온다. (즉, 오름차순으로 나온다) 큰 것부터 보고싶다면(즉, 내림차순으로 보고싶다면) 추가적인 descending의 약자인 desc라는 문구가 필요하다. (참고로 오름차순은 asc, ascending의 약자인데 써주지 않아도 된다) selec..

SQL 2022.05.05

group by 사용해보기

범주의 통계를 내주는 group by 성씨별로 몇 명의 회원이 있는지 알아보자. 성씨별로 몇 명이 회원이 있는지 구하려고 where 절을 사용해서 수십개의 쿼리를 작성하는 것은 너무 비효율적이다. 이 문제를 group by를 사용해서 바로 해결이 가능하다. select name, count(*) from users group by name 성씨별로 카운터가 되어지며 맨 아래 숫자를 확인하면 54개의 성씨가 있다는 정보도 알 수 있다. 여기서 SQL 쿼리가 실행되는 순서 select name, count(*) from users group by name​ 위 쿼리가 실행되는 순서는 from → group by → select 1. from users : users 테이블 데이터 전체를 가져온다 2. gro..

SQL 2022.05.05

group by, order by 가 뭔데? (통계 관련 최대 / 최소 / 평균 / 개수)

데이터베이스 테이블에 저장된 데이터는 쌓여있는 날 것의 데이터이다. 쌓여있는 날 것의 데이터를 뽑아 썻다면, 이후에는 이를 가지고 의미를 갖는 '정보'로 변환하여 데이터베이스 테이블에 저장된 데이터를 사용할꺼다. 예를들어 가장 많은 like를 받은 사람의 이름, 전체 신청자수, 평균 연령 등은 의미있는 '정보'이다. (더 나아가면 범주(category) 각각의 정보가 궁금할 수 있다) 우선 과목별 신청자수를 구한다고 한다면? select count(*) from orders where course_title = '앱개발 종합반' select count(*) from orders where course_title = '웹개발 종합반' 총 두 개의 과목이 있으니, 두 개의 쿼리를 작성해서 각각 위의 사진처럼..

SQL 2022.05.05

Select, Where 실전 퀴즈 풀어보며 익히기

Select 쿼리문, Where 절 연습하기 성이 남씨인 유저의 이메일만 추출하기 select email from users where name = '남**' Where 절과 자주 같이 쓰는 문법 연습하기 Gmail을 사용하는 2020/07/12~2020/07/14에 가입한 유저를 추출하기 select user_id from users where email like '%gmail.com' and created_at between '2020-07-12' and '2020-07-14' 이외 유용한 문법 연습하기 Gmail을 사용하는 2020/07/12~2020/07/14에 가입한 유저의 수를 세기 select count(user_id) from users where email like '%gmail.com'..

SQL 2022.05.05