스파르타코딩클럽 엑셀보다 쉬운, SQL -1

몽슈뜨·2022년 10월 24일
0

엑셀보다 쉬운, SQL

목록 보기
1/4
post-thumbnail

✨데이터베이스(DB)와 SQL이 왜 필요할까?

  • 내가 배달음식점의 사장이라면?

    • 자, 배달음식점 사장이 되었다고 상상해봅시다!
      아직까지는 규모가 크지 않아서, 혼자서 이렇게 엑셀 시트에 주문내역을 정리하고 있어요.

    • 그런데 어느날, 장사가 엄청 잘 되기 시작했어요!
      이제는 혼자서는 힘들어져서, 주문을 기록해주고 일을 도와줄
      직원 여러명을 채용했어요.

    • 그런데 문제가 생겼어요!
      데이터가 많아지면서 엑셀 시트가 점점 느려지고, 여러사람이 작업하는 내용이 충돌하면서 취소된 주문에 배달이 나가는 등의 문제가 생겨나기 시작했어요.

  • 고민을 하다가, 데이터베이스에 모든 주문데이터를 저장하기 시작했어요.

    1) 필요한 데이터만 불러와서 작업할 수 있어서 속도는 빨라졌고
    2) 충돌이 생겼을 경우 에러를 띄우는 기능을 추가해서 충돌로
    생기는 문제도 사라졌어요.

  • 아주 작은 회사에서는 불필요하겠지만, 많은 양의 데이터를 효과적으로 저장/수정/사용하기 위해서는 데이터베이스가 필요합니다. 그래서 거의 모든 회사의 데이터는 데이터베이스에 저장되어 있어요.

  • 데이터베이스 기초 개념

    • 데이터베이스란? 여러 사람들이 같이 사용할 목적으로 데이터를 담는 통이라고 생각하면 되어요.
    • 원하는대로 데이터를 저장하고 사용하기 위해서는 다양한 기능이 있어야겠죠? 그래서 통상적으로, 모든 데이터베이스는 CRUD에 해당하는 기능을 지원해요.

    C (Create): 데이터의 생성을 의미합니다
    R (Read): 저장된 데이터를 읽어오는 것을 의미해요
    U (Update): 저장된 데이터를 변경!
    D (Delete): 저장된 데이터를 삭제하는 것을 의미해요

  • SQL이 왜 필요할까?

    • SQL은 왜 필요할까요?
      데이터를 읽어오는 과정인 "R (Read)"를 엄청나게 편하게 만들어줍니다. 그리고, 데이터를 손쉽고 깔끔하게 정리/분석하는 기능도 지원한답니다!

      SQL은 Structured Query Language의 약자인데요,
      결국 데이터베이 스에 요청 (Query)을 날려서 원하는 데이터를 가져오는 것을 도와주는 언어라는 의미에요!

💡 짧은 SQL 쿼리 한 줄이면 저장된 데이터를 이렇게 간단히
가져올 수 있어요!



✨SQL과 데이터베이스 살펴보기

  • Select 쿼리문의 개념

    • 쿼리(Query)문이란? 쿼리는 질의를 의미하죠. 데이터베이스에 명령을 내리는 것을 의미합니다.

      여기서 Select 쿼리문은, 데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미입니다.

    • Select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지 로 구성됩니다.

  • 테이블과 필드가 뭘까요?

    • 테이블: orders라는 엑셀 시트명 보이시죠? 테이블은 데이터가 담긴 엑셀 시트와 동일합니다. 이런 형태의 값이 데이터베이스에 담기면, orders라는 이름의 테이블이 되겠죠.
    • 필드: order_no, created_at, course_title, user_id, payment_method, email 각각이 필드입니다.
  • 스파르타 데이터베이스의 테이블 보기

    show tables;


  • orders 테이블의 데이터 가져와보기

    select * from orders;

  • orders 테이블의 특정 필드만 가져와보기

    select created_at, course_title, payment_method, email from orders;

  • 스파르타 데이터베이스의 구조

    • checkins: 여러분이 강의실 들어오시며 남기는 '오늘의 다짐'이 들어있어요
    • courses: 스파르타의 개설 강좌 정보가 들어있어요
    • enrolleds: 유저별 강좌 등록정보가 들어있어요
    • enrolleds_detail: 유저별 들을 수 있는 영상과, 들었는지 여부가 들어있어요
    • orders: 주문 (수강등록) 정보가 들어있어요
    • point_users: 유저별 포인트 점수가 들어있어요
    • users: 유저 정보가 들어있어요


✨Select, Where 절 등 문법 연습해보기

  • Where 절의 개념
    💡 Where 절은, Select 쿼리문으로 가져올 데이터에 조건을
    걸어주는 것을 의미해요.

    예1) orders 테이블에서 결제수단이 카카오페이인 데이터만 가져와줘!
    예2) point_users 테이블에서 포인트가 5000점 이상인 데이터만 가져와줘!
    예3) orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘!

  • Select 쿼리문에 Where 절 함께 써보기

    select * from orders
    where payment_method = "kakaopay";

    • 만약 "kakaopay"가 아니라 kakaopay라고 쓰면?
      당연히 에러가 납니다! 🥳
      [Unknown column 'kakaopay' in 'where clause'] 에러문구를 천천히 읽어볼까요?

      👉Where 절에 있는 kakaopay라는 컬럼은 없다! 는 뜻이에요. 여기서 컬럼은 필드를 의미해요. 정말, kakaopay라는 글자를 컬럼(필드명)으로 인식해버렸죠?

  • 여러 조건을 걸어주기 위해서는?

    select * from orders
    where course_title = "앱개발 종합반" and payment_method = "kakaopay";

  • Select 쿼리문에 Where 절 함께 써보기 연습

    • 포인트가 20000점보다 많은 유저만 뽑아보기!
      select * from point_users
      where point > 20000;
    • 성이 황씨인 유저만 뽑아보기
      select * from users
      where name = "황**";
    • 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑아보기!
      select * from orders
      where course_title = "웹개발 종합반" and payment_method = "CARD";

  • [꿀팁🍯] 이렇게 쿼리를 작성하면 편해요!
    1) show tables로 어떤 테이블이 있는지 살펴보기
    2) 제일 원하는 정보가 있을 것 같은 테이블에 select from 테이블명
    쿼리 날려보기
    3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
    4) 테이블을 찾았다! 조건을 걸 필드를 찾기
    5) select
    from 테이블명 where 조건 이렇게 쿼리 완성!

  • Where 절과 자주 같이쓰는 문법 배우기

    • '같지 않음' 조건 걸어보기
      '!=' 에서 ! (느낌표)는 부정 (not)을 의미합니다. '='는 같음을 의미하니, '!='는 같지 않음이겠죠!
      select * from orders
      where course_title != "웹개발 종합반";
  • '범위' 조건 걸어보기

    • '범위' 조건은 between 으로 걸 수 있어요.
      select * from orders
      where created_at between "2020-07-13" and "2020-07-15";
  • '포함' 조건 걸어보기

    • '포함' 조건 걸어보기
      select * from checkins 
      where week in (1, 3);
  • '패턴' (문자열 규칙) 조건 걸어보기

    • '패턴' 조건은 like 으로 걸 수 있어요.
      select * from users 
      where email like '%daum.net';
    • [꿀팁🍯] Like의 다양한 사용법
      where email like 'a%': email 필드값이 a로 시작하는 모든 데이터
      where email like '%a' email 필드값이 a로 끝나는 모든 데이터
      where email like '%co%' email 필드값에 co를 포함하는 모든 데이터
      where email like 'a%o' email 필드값이 a로 시작하고 o로 끝나는 모든 데이터

  • 결제수단이 CARD가 아닌 주문데이터만 추출해보기

    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%com' and name = "이**";

  • 일부 데이터만 가져오기: Limit

    select * from orders 
    where payment_method = "kakaopay"
    limit 5;
  • 중복 데이터는 제외하고 가져오기: Distinct
    1) orders 테이블을 모두 불러와서, 한줄한줄씩 읽으며 어떤 결제수단들이 있는지 확인한다
    2) distinct 기능을 사용해서 한 방에 본다

    select distinct(payment_method) from orders;
  • 몇 개인지 숫자 세보기: Count
    1) orders 테이블의 데이터를 모두 불러와서, 한줄한줄씩 센다
    2) count 기능을 사용해서 한방에 본다

    select count(*) from orders
  • Distinct와 Count를 같이 써보기

    select distinct(name) from users;
    • 이렇게 하면 성씨가 쭉 나오죠?

      SELECT count(distinct(name)) from users;
    • 그리고, 여기에 count를 입혀주면 몇 개의 성씨가 있는지 알 수 있습니다.


참고자료

profile
개발자되면 맥북사줄께

0개의 댓글