[SQL]스파르타 코딩클럽1주차, 2주차

또또·2024년 1월 25일

항해99 sql

목록 보기
1/6

1. 1주차

[수업 목표]

  1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
  2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
  3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.

RDBS에서 쓰는 걸로

  • 1주차: Select, Where 👉 데이터를 불러오고 (Select), 조건에 맞게 필터링 하는 것 (Where)!
  • 2주차: Group by, Order by 👉 데이터를 범주에 따라 묶어서 통계치를 구하고 (Group by), 정렬하는 것 (Order by)!
  • 3주차: Join 👉 여러 데이터를 합쳐서 분석하기 (Join), 더 쉽고 깔끔하게 원하는 데이터를 얻기 (Subquery)
  • 4주차: Subquery, 그 외
  • DBeaver는 여러분이 SQL을 보다 손쉽게 사용할 수 있도록 도와주는 도구
    RDBS에서는 mysql은 써봤고 noSQL에서는 몽고디비만 써봤는데 쓸때 워크벤치랑 콤패스만써서 이런게 있는줄 몰랐네
    설치후 선택할 sql중 mysql을 선택하고 서버호스트, 데이터베이스, 유저네임, 비밀번호를 입력한다
    그후 test눌러서 커넥트라고 안뜨면 다운로드 받고 뜨면 설정완료

그후 쿼리 입력창이 안나오는데 이걸 나오게 하기 위해 위 네비바중
sql이라고 되어있는 양피지 모양 클릭

  • select
    select문은 가져오는것 * 사용시 전부 아니면 컬럼을 지정해서 가지고 올 수도 있다
select * from student

이게 기본

  • 스파르타 데이터베이스의 구조
  • checkins: 여러분이 강의실 들어오시며 남기는 '오늘의 다짐'이 들어있어요
  • courses: 스파르타의 개설 강좌 정보가 들어있어요
  • enrolleds: 유저별 강좌 등록정보가 들어있어요
  • enrolleds_detail: 유저별 들을 수 있는 영상과, 들었는지 여부가 들어있어요
  • orders: 주문 (수강등록) 정보가 들어있어요
  • point_users: 유저별 포인트 점수가 들어있어요
  • users: 유저 정보가 들어있어요
  • 특정데이터만 가져오고 싶다면
    where문 사용해 조건 걸어주기 and or사용가능
    예시 :orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘
select * from orders
where payment_method = "CARD" and course_title  = "앱개발 종합반";

성이 황씨인 유저만 뽑아보기

select * from users
where name ="황**";

where절과 자주 같이 쓰는 문법 써보기
- 같지 않음: !=
- 범위 between a and b
- 포함 in
- 문자열 규칙: like 사용
%(특정 문자가 포함되기만 하고 그 이전이나 이후에 어떤 문자가 몇 개가 오든지 상관없다는 의미)
(어떤 문자가 오든 상관없다는 의미로 사용한다.
%와의 차이점은 %는 몇 개의 문자가 오든 상관이 없지만
는 단 한 문자에 대해서만 와일드 카드 역할)
이스케이프시 \ 사용(이거 파이썬 인가도 이랬던거 같은데)

  • 퀴즈] 결제수단이 CARD가 아닌 주문데이터만 추출해보rl
    select * from orders
    where payment_method != 'CARD';
       
  • [퀴즈] 20000~30000 포인트 보유하고 있는 유저만 추출해보기
select * from point_users
WHERE `point`  BETWEEN  20000 and 30000;
  • [퀴즈] 이메일이 s로 시작하고 com로 끝나는 유저만 추출해보기
select * from users
WHERE email  like "s%com";
  • [퀴즈] 이메일이 s로 시작하고 com로 끝나면서 성이 이씨인 유저만 추출해보기
select * from users
WHERE email  like "s%" and name like "이%";
  • 이외 유용한 문법 배워보기
    일부 데이터만 가져오기 :limit 5(5개 제한을 둔다)
    중복 데이터는 제외하고 가져오기 :distinct select distinct(칼럼이름)
    숫자세기: count select count(*)
  • 퀴즈 풀어보기
  1. 성이 남씨인 유저의 이메일만 추출하기
select email  from users
WHERE name like "남%"

3.Gmail을 사용하는 2020/07/12~13에 가입한 유저를 추출하기

select *  from users
WHERE email like "%gmail.com" and  created_at between "2020-07-12" and "2020-07-14";

4Gmail을 사용하는 2020/07/12~13에 가입한 유저의 수를 세기

select count(*)  from users
WHERE email like "%gmail.com" and  created_at between "2020-07-12" and "2020-07-14";

숙제
naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기

select * from orders
WHERE email like "%naver.com" and payment_method  = 'kakaopay' and course_title  = "웹개발 종합반"; 

2주차

[수업 목표]

  1. 동일한 범주의 데이터를 묶어서 통계를 내주는 Group by를 이해한다.

  2. 출력하는 데이터를 필드의 값으로 정렬하여 출력하는 Order by를 익힌다.

  3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.

  4. 범주의 통계를 내주는 group by
    회원이 각 성씨별로 몇명 있는지를 알아보자

select name, count(*) from users
group by name;

이렇게 하면 같은 값끼리 묶여서 count된다

  • Group by 제대로 알아보기: SQL 쿼리가 실행되는 순서
select name, count(*) from users
group by name;

위 쿼리가 실행되는 순서: from → group by → select
1. from users: users 테이블 데이터 전체를 불러오기
2. group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합치기
3. select name, count(*): name에 따라 합쳐진 데이터가 각각 몇 개 합친건지 count

  • group by 의 기능 알아보기
    주차별 '오늘의 다짐' 개수 구하기
     select COUNT(comment)  from checkins 
    group by week;


- 동일한 범주에서 최솟값 구하기
	count부분을 min으로 

``` sql
 select min(likes)  from checkins 
group by week;
  • 동일한 범주의 평균 구하기
    avg
 select avg(likes)  from checkins 
group by week;
  • 동일한 범주의 최댓값 구하기
select max(likes)  from checkins 
group by week;
  • 동일한 범주의 합계 구하기
 select sum(likes)  from checkins 
group by week;
  1. 정렬이 필요할땐 order by
    order by를 통해 오름차순 또는 내림차순으로 정렬할 수 있다
    오름 차순시 order by 뒤에 기준이 될 칼럼 혹은 값만 오면 되지만
    내림차순시 맨 뒤에 desc가 붙는다 (오름차순도 asc 붙여도 되긴함)
  • Order by 제대로 알아보기: SQL 쿼리가 실행되는 순서
select name, count(*) from users
group by name
order by count(*);
  1. from 사용해 데이터 전체 가져오기
  2. group by로 이름을 기준으로 합치기(where문 있을시 where문 먼저)
  3. select ~from 사용해 이름과 count값 유저에서 가져오기
  4. order by사용
  • Order by, Group by 같이 연습해보기
    1) Order by 연습하기
    문자열을 기준으로 정렬해보기
select * from users
order by email;

이렇게 하면 문자열(알파벳, 한글등) 순으로 정렬

시간을 기준으로 정렬
최근 시간을 보고 싶을때는 뒤에 desc

select * from users
order by created_at desc;

2)group by 연습하기
앱개발종합반의 결제수단별 주문건수 세어보기

select payment_method ,COUNT(payment_method) from orders
where course_title  = "앱개발 종합반"
group by payment_method;

Gmail 을 사용하는 성씨별 회원수 세어보기

SELECT name, count(name) from users 
where email like "%gmail.com"
group by name;

쓸때 먼저 select where 쓰고 group by order by

course_id별 '오늘의 다짐'에 달린 평균 like 개수 구해보기

SELECT  course_id  ,avg(likes) FROM checkins
group by course_id ;
  • 별칭기능 ailas(as)
    이거 나중에 엄청 커졌을떄 알아보기 쉽게 이름 as 별명 하던거
select * from orders o
where o.course_title = '앱개발 종합반'

이렇게 테이블 뒤에 as없이 바로 별명 붙여서도 사용가능하고(이건 다음에 join시 더 직관적이고 쉽게 입력 위해 사용하는 경우가 많았던거 같다)

select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method

이렇게 출력될 필드에 붙이는것도 가능하다

2주차 숙제
네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기

SELECT payment_method, COUNT(payment_method)  from orders o 
where email  LIKE "%naver.com"
and course_title  = "앱개발 종합반"
group by payment_method;

오랜만에 관계형 쓰니까 그때 수업 받을때 느낌 난다

profile
내가 바라던 곳이야 흔들리지 않게 맘을 잡아

0개의 댓글