2-1. 들어가며


  • 학습 목표
  • SQL 사용하기 : 테이블 지정, 데이터 조회 쿼리 만드는 방법 학습하기
  • DB 데이터 -> 조건을 통한 데이터 필터링하기
  • 특정 필드 데이터 정렬하기
  • 연산자로 데이터 세부 조건 만들어보기

  • 학습 준비
  • Cloud Shell에 다음 명령어 입력
mkdir -p aiffel/sql_basic
ln -s ~/data/* aiffel/sql_basic/

  • Cloud Jupyter에서 데이터 확인 : aiffel > sql_basic

  • pandasql 라이브러리 설치

!pip3 install pandasql
  • 데이터가 있는지 확인!

    • 이때, FileNotFoundError가 발생한다면 생성한 ipynb 파일의 위치를 확인하자.

      • 필자의 경우, 루트 폴더가 /가 아닌 /aiffel 였기 때문에 데이터 확인 코드의 폴더 위치 부분을 바꿔야 했음!

        • 이전
        data_dir = 'aiffel/sql_basic/'

        • 이후
        data_dir = 'sql_basic/'

또 다른 방법은 ipynb 파일 자체를 / 위치로 옮겨주는 것!



2-2. 쿼리문 작성과 데이터 필터링


해당 내용부터는 별도의 개인 Google Colab을 이용해 진행했음을 알려드립니다.

주피터 노트북 또는 구글 코랩에서 쿼리문을 작성하려면?

mysql("""

쿼리문 작성

""")

쿼리문 작성하기(SELECT, FROM)

  • 전체 컬럼 조회 : *은 모든 컬럼 조회
SELECT *
FROM 테이블명

  • 특정 컬럼 추출 : bike 테이블의 날짜, 계절, 날씨 컬럼

전체 데이터 필터링하기(WHERE)

  • 쿼리 결과 필터링!
  • FROM 절 다음에 WHERE절 작성!
  • 연산자 사용
SELECT 원하는 컬럼
FROM 테이블명
WHERE 조건절
  • 2012년 기준 데이터 확인하기


2-3. 비교 연산자 사용하기


비교 연산자

  • A = 'value' : A와 'value'는 같음
  • A !=(<>) 'value' : A와 'value'는 같지 ❌
  • A > n : A가 n보다 큼
  • A >= n : A가 n보다 크거나 같음
  • A < n : A가 n보다 작음
  • A <= n : A가 n보다 작거나 같음

  • =

    • 특정 데이터 선택 시 사용

    • 2012년 기준 날짜, 계절, 날씨 컬럼 확인(LIMIT은 100만 보겠다는 의미)

    • 같다의 의미로 사용할 경우

      • 계절이 봄인 전체 데이터

  • != 또는 <>
    • 같지 않다는 의미
    • 특정 데이터 제외 시 사용

  • >, >=
    • > : 크다, >= : 크거나 같다
    • 숫자 타입(금액) 또는 날짜 타입 사용 시 용이
    • 23시 이후 대여건 전체 데이터

  • <, <=
    • < : 작다, >= : 작거나 같다
    • 온도가 0.2 미만인 전체 데이터
    • 전체 대여 건수가 100건보다 작은 데이터


2-4. 논리 연산자 사용하기


  • 여러 조건을 줄 때 사용(복잡한 조건도 필터링 가능!)
  • 논리 연산자 종류
    • AND : 앞 뒤 조건 모두 만족해야 참 -> 여러개 조건 존재
    • OR : 앞 조건 또는 뒤 조건 중 하나라도 만족해야 참 - >여러 개 조건 존재
    • IN : 값 리스트 중 하나라도 만족하는 해당 결과 출력 시 사용
    • NOT : 조건 부정(논리 연산자 의미 반전

  • AND

    • 앞 뒤 조건 둘 다 만족해야 True
    • 조건 지속 추가 시 사용
      WHERE [조건1] AND [조건2]
    조건1조건2Result
    TTT
    FTF
    TFF
    FFF
    • bike 테이블에서 2011년도 봄 시즌 데이터 보기

    • 2011년도 봄시즌 22시 발생한 데이터 보기

    • 2011년도 봄시즌 일요일에 발생한 데이터 보기


  • OR

    • 앞 조건과 뒤 조건 중 한쪽이 만족하면 True
    • 즉, 앞 조건과 뒤 조건 모두 만족하지 않아야 False!
    WHERE [조건1] OR [조건2]
    조건1조건2Result
    TTT
    FTT
    TFT
    FFF
    • hr이 10이거나 11인 행을 추출하고 싶은 경우

    WHERE hr = 10 OR 11은 왜 안될까?

    • 쿼리문의 경우, 비교하고자 하는 컬럼명까지 명확하게 지정해줘야 하기 때문!
    • bike 테이블에서 2011년 또는 봄시즌 데이터 보기

  • ⭐️ IN ⭐️

    • 컬럼이 어떤 값들의 집합에 속할 경우

    • 조회 데이터가 여러 개일 경우 사용

    • 리스트의 값 중 하나라도 만족하면 해당 결과값 무조건 출력!

      =와의 차이점

      • = : 값 1개 비교 가능
      • IN : 여러 개 list로 저장해서 비교 가능

      그럼 OR을 쓰면 안되나요?

      • 상관없지만..! 하나의 컬럼에서 같은 인자에 대한 조건을 줄 때는 IN이 효율적이겠죠?
    • 1월(Jan), 3월(Mar), 5월(May) 전체 데이터


  • NOT

    • 조건을 부정으로 만들어 부정 연산자!

    • 조건에 대한 반대 결과

    • 1월(Jan), 3월(Mar), 5월(May)이 아닌 전체 데이터

    • 연습 : 1월(Jan), 3월(Mar), 5월(May)이 아니고, 전체 대여 건수가 10보다 큰 데이터?


  • NULL
    • 값 지정 안된 알수 없는 값
    • 값이 없는게 아니다! -> 미지정!
      • 0 : 숫자, "" : 문자열
    • 날씨 데이터 값 NULL
    • 날씨 데이터 값 IS NOT NULL

  • Between A and B
    • A와 B를 포함해 사이값 찾기
    • 범위에 해당하는 행 출력
    • 날짜 사이 간격을 주기 위해 주로 사용
    • 최소값, 최대값을 지정해주고, 그 범위 내의 값을 검색하는 것!

      비교 연산자와 동일한 출력을 보인다!

      • number Between 3 AND 5
      • number>=3 AND number<=5
    • 2011년 3월 30일 ~ 31일 사이 데이터


2-5. 산술 연산자 사용하기


산술연산자

  • 계산에 사용

  • SELECT, WHERE문에 사용

  • 주로 숫자에 사용(문자열이나 날짜 타입 데이터는 명확한 결과 나오기 어려움)

  • 실무에서 많이 사용한다!!

  • 산술연산자 종류 : +, -, *, / 등

    ⭐️우선 순위⭐️ : () > *, / > +,-

    • dteday에 2를 더하고, weekday에 3을 더한다면?

      주의 : RDBMS 종류에 따라 에러 발생될 수 있음. 숫자가 아닌 데이터는 산술 연산자 사용을 지양하는 것이 좋다!

    • temp에 +2, -2, *2, /2 추가

profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE&Data Science 개발 기록 노트☘️

0개의 댓글