본문 바로가기
자기계발/개발일지

[SQL] 스파르타코딩클럽 내일배움단 "엑셀보다 쉬운 SQL" 1주차 개발일지 (내일배움카드 SQL)

by 직업인 2022. 12. 14.
반응형

1주차

1. 개요

  • SQL은 문법이 그리 다양하지 않아서, 정해진 몇 가지 문법을 잘 조합해서 원하는 결과를 여러 방식으로 얻을 수 있는 재미.
  • 많은 강의들이 SQL을 넘어 데이터베이스까지 다루는 경우가 많지만 데이터베이스는 실무단의 기획자나 마케터에게는 불필요한 내용. 데이터베이스를 설계하는 사람이 아니라, 이미 설계된 데이터베이스에 직접 데이터를 꺼내오기 위해서 이걸 배우는 것. 데이터를 수정하거나, 새롭게 인풋하거나, 새로 데이터베이스를 만드는 일은 없을 것임. 가져오는 것만 연습 많이 할 것이다. (특히 select)
  • SQL 왜 필요?
    데이터의 양이 많아지면 엑셀로 관리하기 어려워짐. SQL 쿼리문을 통해 데이터베이스에서 내가 원하는 형태로 데이터를 가져올 수 있다. SQL 쿼리를 작성한다=데이터 가져오는 명령어를 작성한다.
  • 데이터베이스: 데이터를 그냥 쌓아두기 위해서가 아니라, 잘 꺼내오기 위해 쓰는 것임.
  • C(Create): 데이터 생성
    R(Read): 저장된 데이터 읽어옴
    U(Update): 저장된 데이터 변경
    D(Delete): 저장된 데이터 삭제
    이 강의는 Read에 집중할 것임. 나머지는 주로 개발단에서 관리함.
  • 앞으로 배울 것
    1주차: select, where
    2주차: group by, order by
    3주차: join
    4주차: subquery, 그 외

 

2. 프로그램 설치

  • DBeaver 설치 후 기본 세팅

 

3. SQL과 데이터베이스 살펴보기

Select문

  • Select 쿼리 문의 핵심은 결국 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지임
  • 테이블: 데이터가 담겨 있는 표 자체 (엑셀로 치면 시트)
    필드: 각각의 세로 열. (SQL은 세로만 있음. 각 행을 row라고 부르긴 함)
  • DBeaver에서 새 문서를 열고 Databases>sparta>Tables에서 실제 데이터들을 볼 수 있음
  • show tables 를 작성한 후 ctrl+enter 눌러 실행 (강의에서는 맥은 command+enter라고 하는데 그렇게 하니까 안 되고 ctrl을 써야 되었음)
    : 그럼 데이터베이스 안 여러 가지 테이블의 종류들이 나온다.
  • select * from orders : 이 중 orders 테이블의 전체 정보를 읽어보자. (* : 모든 필드라는 뜻)
  • select order_no, created_at, user_id, email from orders : 이번에는 특정 필드만 가져오기

 

4. select문에서 조건을 거는 where절 문법 연습해 보기

예시

1. 테이블에서 결제수단이 카카오페이인 데이터만 가져오기

select * from orders
where payment_method = 'kakaopay'
  • 이때 ' (작은따옴표)를 꼭 붙여줘야 함. 테이블/필드명이 아닌 '문자열'이라는 의미를 준다.
  • 눈에 보기 좋게 줄 바꿈을 잘 해줘야 함 (나중에 길어지면 헷갈린다)

 

2. point_users 테이블에서 포인트가 5,000점 이상인 데이터만 가져오기

select * from point_users
where point >= 5000

 

3. : orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져오기

select * from orders
where course_title = '앱개발 종합반' and payment_method = 'CARD'
  • 대소문자 상관은 없으나 되도록 정확히 맞춰서 쓰는 게 나중에 덜 헷갈림

 

퀴즈

1. 포인트가 20,000보다 많은 유저만 뽑기

select * from point_users
where point > 20000

 

2. 성이 황 씨인 유저만 뽑기

select * from users
where name = '황**'

 

3. 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑기

select * from orders
where course_title = "웹개발 종합반" and payment_method = "CARD"

 

where절 팁

  1. show tables로 어떤 테이블들이 있나 보기
    (왼쪽 창에서도 볼 수 있음)
  2. select * from ___로 원하는 테이블의 값 보기
  3. 필드명과 값 확인해서 where절 걸기

 

where절과 같이 쓰이는 문법들

!= : 같지 않음

ex) 웹개발종합반 빼고 보고 싶다:

select * from orders
where course_title != ' 웹개발 종합반'

 

betweenand B : A부터 B까지 범위

ex) 7월 13일, 14일의 주문 데이터만 보고 싶다:

select * from orders
where created_at between '2020-07-13' and '2020-07-14'

 

() : 포함

ex) 1, 3주차의 오늘의 다짐을 보고 싶다:

select * from checkins
where week in (1,3)

 

like : 패턴

ex) 다음(daum) 이메일만 사용하는 유저만 보고 싶다.

select * from users
where email like '%@daum.net'

%는 (이 앞에 뭐가 있든 간에~)라는 뜻임. 많이 쓰임. 기억할 때는 그냥 "어쩌구"라고 기억하면 될 듯.

 

ex2) a로 시작해서 t로 끝나는 메일 주소:

where email like 'a%t'

 

퀴즈

1. 결제수단이 카드가 아닌 주문 데이터

select * from orders
where payment_method != 'CARD'

 

2. 20000~30000 포인트 보유한 유저 추출

select * from point_users
where point between 20000 and 30000
  • 숫자이기 때문에 따옴표 쓰지 않음.
  • 숫자인지 문자인지는 필드 이름 왼쪽에 아이콘 (ABC, 123) 보면 알 수 있음

 

3. 이메일이 s로 시작하고 com으로 끝나는 유저 추출

select * from users
where email like 's%com'

 

4. 이메일이 s로 시작하고 com으로 끝나면서 성이 이 씨인 유저 추출

select * from users
where email like 's%com' and name like '이%' (or name = '이**')

 

이외의 유용한 문법들

limit : 몇 개만 끊어서 보기

진짜 엄청 큰 테이블을 어떻게 생겼나 조회할 때 다 조회하면 오래 걸리니까 끊어주는 것.

ex) 결제방법이 카카오페이인 데이터 중에 5개만 보고 싶어:

select * from orders
where payment_method = 'kakaopay'
limit 5

 

distinct : 중복 제거하고 보기

orders에서 payment method만 보는데 어떤 종류가 있는지만 보고 싶을 때.

select distinct(payment_method) from orders

 

count : 몇 개인지 숫자 세보기

select count(*) from orders

 

응용: distinct와 count 같이 써보기

전체 유저들은 몇 개의 성씨가 있을까?

 

1) 먼저 distinct로 중복 제거하고 이름만 쭉 나열

select distinct(name) from users

2) 그거의 숫자를 세는 것

select count(distinct(name)) from users

 

5. 같이 삽질해보기

혼자서도 해내려는 노력이 가장 중요

 에러를 만나도 당황하지 말고 에러 메시지를 차근차근 읽어 보자. 에러를 해결해 나가려는 노력이 모여 실력이 된다. 모르는 게 생겨도 바로 답을 보기보다 적어도 5-10분은 혼자서 에러를 읽어보고 어디가 어떻게 잘못되었는지 차근차근 파악하려 노력해 보자.

 

 

6. 퀴즈 풀어보기

1. 성이 남 씨인 유저의 이메일만 추출하기

select email from users
where name='남**'

 

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

select * from users
where email like '%gmail.com'
and created_at between '2020-07-12' and '2020-07-14'

 

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

select count(*)from users u 
where email like '%gmail.com'
and created_at BETWEEN '2020-07-12' and '2020-07-14'

 

 

7. 1주차 끝 & 숙제 설명

숙제

Naver 이메일을 사용하면서, 웹개발 종합반을 신청했고, 결제는 kakaopay로 이루어진 주문 데이터를 추출하세요.
select * from orders
where email like '%naver.com'
and course_title = '웹개발 종합반'
and payment_method = 'kakaopay'

 

 

8. 1주차 소회

내일배움카드 스파르타코딩클럽 내일배움단 SQL
1주차 끝! 🥳

 

강사님이 워낙 기초부터 차근차근 잘 알려 주셔서 그렇겠지만 생각보다 어렵지 않고 재미있다. 수업 내용 & 남자친구 말 들어보니 SQL 자체가 원체 기능이 단순한 듯하다. 아주 매력 있어.

하다 보니 문자를 표기할 때 꼭 작은따옴표를 써야 하나? 큰따옴표는 안 되나?라는 의문이 생겼는데 즉문즉답에 검색해 보니 일반적으로 SQL에서는 작은따옴표만 쓰는 모양이다. 궁금증 해결.

이제 파이썬 들으러 가야지 ><

 

반응형

댓글