220923 TIL SQL1

지구데이터·2022년 9월 26일
0
post-thumbnail

<9/23 (금)> - SQL 1
중급이 될 수 있다! 아자

https://www.datarian.io/blog/interview-sqld-certification-cannot-prove-data-analytics-capability
오... 자격증 따위 어필해봤자라네?!

서브쿼리 전까지 알고있으면, 중급
서브쿼리, 윈도우 함수, 숫자~정규표현식
빠삭하게 알고 있어야 코딩 테스트 통과할 수 있음.

드래그+ctrl/command+/ => 주석 처리 (파이썬과 동일)
ctrl/command+enter => 실행 (파이썬과 동일)

사실, 파이썬처럼 공백이나 줄바꿈 같은 문법적인 문제는 SQL 상으로 문제가 안됨
ONLY 가독성 때문에! 다른 사람들과 협업 시 필수

실제로~ sql은 파일을 다운받지 않는 경우가 더 많다! 너무 용량이 커서.
SQL은 대소문자가 구분 됨 (만약 안하고 싶다? 그렇게 세팅할 수도 있음)
따라서, 컬럼명 확실하게 적어줘야 함 (lcd (x), LCD (o))

tab, tab, 띄어쓰기 : 추천 문법!
SELECT ~ AS ~ : 별칭 붙여주기
별칭 안에 띄어쓰기 넣고 싶으면 ‘’ <- 이걸로 감싸줘야, 아니면 언더바 사용
비교 연산자: = > >= < <= != (파이썬이랑 다르다)
AND, OR, IN (행갈이 추천!)
서브쿼리: 쿼리 안의 쿼리 – 길게 늘여쓰는 것 추천

SELECT *
FROM station
WHERE lat > (SELECT lat FROM station WHERE name = '서울북부지방법원')

ORDER BY 컬럼명 DESC/(ASC): 정렬 (DESC: descending 내림차순, ASC: ascending 오름차순/생략가능)
정렬조건은 순서가 중요하다. 2개 이상이면 하나 정렬, 다음 걸로 같은 것들 안에서 정렬.
우선 순위 하나마다 DESC/ASC 각각 지정해줄 수도 있음
*color = ‘white’ 따옴표도 중요하네… => 연습문제 풀다가 오류남!
<정리>
SELECT name, address — SELECT 절: 특정 열 선택하기
FROM station — FROM 절: 테이블 이름
WHERE local = '광진구' — WHERE 절: 특정 행 선택하기
ORDER BY station_id DESC — ORDER BY 절: 정렬하기 LIMIT

<인프런>

테이블: 컬럼+로우
로우: 데이터 한 개
컬럼: 데이터들의 특성

SELECT+컬럼명: 무엇을 가져올 것인지 (*: 아스타 = 다 가져와주세요)

  • , (콤마) <- 로 여러 개 쓸 수 있음
  • SELECT DISTINCT+컬럼명: 중복 없이 추출
    FROM+테이블: 어떤 테이블에서 이 데이터를 가져올 것인지
    LIMIT 숫자: 데이터가 너무 많을 때, 일부만 가져오기

비교 연산자: 특정 컬럼이 특정 값을 가지는 데이터만 불러오기 위해서 사용
=, <>(같지 않다), >=, <=, >, <

  • 문자도 가능! < B면 A로 시작하는 손님만
    논리 연산자: 비교 연산자 이어줌
    AND, OR
    LIKE : 비슷한 문자를 찾아줌 (이스케이프! 예약어 %: 와일드카드)
    WHERE county LIKE ‘%r%’ : r이 들어가는 ex. Br% ~로 시작하는
    (예외: 만약 % 자체를 찾고 싶으면 \%)
    LIKE ‘B_’ => B 뒤에 5개의 문자가 있는 (예약어 _: 한글자 와일드 카드)
  • NOT LIKE
    IN : or 연산을 묶어줌
    WHERE country IN (‘Germany’, ‘France’)
    BETWEEN: AND와 같이 사용하여, 특정 범위 내에 있는 행만 반환 (시작값, 끝값 포함)
    WHERE coustomerID BETWEEN 3 AND 5 ex. 숫자, 날짜, 문자 다 가능
    IS NULL : 비어있는 값(NULL, NaN) 반환 => 비교 연산자가 아닌, 이런 형태로 써주어야 함
    ORDER BY : 정렬하기 (DESC(내림차순), ASC(오름차순)가 디폴트)
    • LIMIT와 조합해주면, 최댓값/최솟값을 구할 수 있음!
      LEFT(컬럼명 또는 문자열, n): 왼쪽에서부터 n개까지 자르기
      RIGHT: 오른쪽에서부터 n개까지 자르기
      SUBSTR(컬럼명 또는 문자열, 시작위치, 길이): 어디부터 어디까지 자르기 (길이 생략이면 끝까지)
      CEIL : 올림
      FLOOR : 내림
      ROUND( ,n) : 반올림

꿀팁

테크 블로그 TIL 정말 중요하다!
우아한 형제들 기술 블로그 (팀에 대한 이야기)
깃허브 블로그, 브런치, 네이버, 노션, 벨로그
노션에 참고 링크 보면서 벨로그 꾸미자

데이터 분석가 이력서

책 데이터베이스 첫걸음 추천!
UPDATE
SET
DELETE
INSERT
VALUES

<데이터 베이스의 기본 기능>
1. 데이터의 수집과 갱신 *** 중요 파트! 이걸 잘하면 된다
데이터 검색: SELECT 질의
데이터 갱신: INSERT 등록, UPDATE 수정, DELETE 갱신
2. 동시성 제어
3. 장애 대응
4. 보안

<데이터 베이스의 종류>
관계형 데이터베이스(주류), NoSQL 데이터베이스, 계층형 데이터베이스
RDBMS(알디비) – relational database EX. MySQL, Oracle, PostgreSQL

<SQL: structured Query Lanauage>
관계형 데이터베이스를 조작하기 위한 언어

*** 오름차순과 내림차순이 헷갈려..

<집계함수> : NULL인 데이터는 제외하고 계산
COUNT(): 행 개수 세기

  • count(*) 같은 경우 모든 행의 갯수를 구하는 것이기 때문에, NULL값에 영향을 받지 않는다
  • SELECT SUM(total_bill) / COUNT(*) <= 따라서, AVG() 대신 경우에 따라 이런 계산도 생각해볼 수 있다
    SUM() : 더하기
    AVG() : 평균 구하기
    MIN(), MAX() : 최솟값, 최댓값 구하기
    쿼리: 물어본다
    AS : 별칭 사실 안써도 되는데 가독성 때문에
    GROUP BY : 그룹별로 요약하기
  • SELECT절에서 나눈 그룹의 컬럼명을 꼭 넣어줘야 한다! (중요)
  • 뭘 기준으로 나누어졌는지 알아야 할 필요성이 있으니까.
  • 2개로 그룹핑 하고 싶으면, 뒤에 콤마로 연결해서 쓰면 됨 EX. day, group
    HAVING : GROUP BY 연산 이후, 그 결과물을 필터링 (VS. WHERE: GROUP BY 하기 전 필터링)
  • ex. Q2. 요일별로 여성의 매출액 합계를 구해주세요. 매출액이 200불 미만인 날은 출력에서 제외하세요. <- 여성은 WHERE절, 요일은 GROUP BY 헷갈리지 않도록 조심!
  • HAVING SUM(total_bill) > 200
    ORDER BY : 정렬하기

<수업 요약>

SELECT day
     , SUM(total_bill) AS revenue_daily
FROM tips
WHERE -- WHERE를 쓰고 싶다면 여기에
GROUP BY day
HAVING revenue_daily >= 200
ORDER BY revenue_daily DESC
LIMIT 1 -- 이 쿼리에서는 굳이 필요하지 않지만, 만약 LIMIT를 쓰고 싶다면 ORDER BY 아래에

<소수점 처리 함수>
CEIL() : 올림
FLOOR() : 내림
ROUND() : 반올림

profile
멋쟁이가 될꺼야~

0개의 댓글