데이터 조회로 기본 다지기

조권휘·2022년 8월 21일
0

데이터베이스

목록 보기
3/4
post-thumbnail

SQL문 작성 형식

  1. SQL문 끝에는 항상 세미콜론(;)을 써줘야한다.
  2. SQL문 안에는 공백이나 개행 등을 자유롭게 넣을 수 있다.
  3. SQL문의 대소문자 구분 문자
    • 일반적으로 키워드(예약어)는 대문자, 나머지 입력부는 실제로 존재하는 것의 이름을 작성
    • 예약어를 소문자로 작성해도 되지만 가독성을 위해 대문자로 작성
  4. 데이터베이스 이름과 테이블 이름
    • USE를 이용하여 데이터베이스 선언을 해준다거나 데이터베이스 뒤에 . 을 사용하여 테이블을 불러오는 것 등 자유롭게 사용. 어떤 테이블을 가리키는지 확인할 것

예약어 & 조건 표현식 & 함수

SELECT & WHERE

  • SELECT : 테이블의 데이터를 조회할 때 사용하는 구문
  • WHERE : 특정 조건을 만족하는 row를 조회할 때 사용
SELECT * FROM copang_main.member WHERE email = '~~~'; // example
  • '*' : 원하는 column 입력
  • FROM ~ WHERE : 데이터베이스.table
  • WHERE ~ : 조회하고 싶은 조건

BETWEEN

WHERE age (NOT) BETWEEN a AND b; // example
  • a와 b 사이의 age / NOT을 붙이면 a~b 범위를 제외한 나머지
  • 'DATE' 타입인 경우 날짜를 a, b에 넣으면 해당 날짜 사이의 row들이 선택된다.

LIKE

SELECT * FROM copang_main.member WHERE a LIKE '서울%'; // example
  • a column에서 LIKE 이후 문자열 패턴을 기준으로 검색 가능하다.
  • % x % 형식으로, x의 앞 뒤로 어떤 문자열 패턴이 오는 것을 의미한다.

여러개의 조건

SELECT * FROM copang_main.member 
WHERE gender != 'm'
	AND address LIKE '서울%'; // example 
    
SELECT * FROM copang_main.member 
WHERE address LIKE '제주%'
	OR address LIKE '서울%'; // example 
  • AND : 조건이 모두 TRUE여야한다.
  • OR : 조건 중 하나만 TRUE면 된다.
  • WHERE절에서 AND가 OR보다 먼저 실행된다.
  • 여러개의 조건을 걸 때 먼저 확인해야 하는 것은 괄호로 묶어준다.
  • id = 1 OR 2 와 같이 작성하면 문제가 되니 주의할 것

같지 않음(!= / <>)

SELECT * FROM copang_main.member WHERE gender != 'm'; // example


SELECT * FROM copang_main.member WHERE gender <> 'm'; // example

이 중에 있는 ~(IN)

SELECT * FROM copang_main.member WHERE age IN (a, b); // example 
  • column의 값이 a 이거나 b인 age 검색
  • 파이썬을 생각하면 됨

한 글자 나타내기( _ )

SELECT * FROM copang_main.member WHERE email LIKE 'c____@%'; // example 
  • c 뒤에 4글자가 있는 row 조회

연도, 월, 일 추출하기

SELECT * FROM copang_main.member WHERE YEAR(birthday) = '1993'; // example 

SELECT * FROM copang_main.member WHERE MONTH(birthday) IN (1, 2, 3); // example 

SELECT * FROM copang_main.member WHERE DAYOFMONTH(birthday) BETWEEN 10 AND 20; //example 
  • YEAR() : 날짜 값에서 연도만 뽑아내기
  • MONTH() : 날짜 값에서 월만 뽑아내기
  • DAYOFMONTH() : 날짜 값에서 일만 뽑아내기

날짜 간 차이 구하기

SELECT age, sign_up_day, DATEDIFF(sign_up_day, '2019-10-01') FROM copang_main.member; //example

SELECT age, sign_up_day, DATE_ADD(sign_up_day, INTERVAL 250 DAY) FROM copang_main.member; //example

SELECT age, sign_up_day, DATE_SUB(sign_up_day, INTERVAL 250 DAY) FROM copang_main.member; //example
  • DATEDIF(a, b) : 날짜 a - 날짜 b 차이 일수
  • CURDATE() : 오늘의 날짜
  • DATE_ADD() : 날짜 더하기
  • DATE_SUB() : 날짜 빼기

UNIX Timestamp

SELECT age, sign_up_day, UNIX_TIMESTAMP(sign_up_day) FROM copang_main.member; //example

SELECT age, sign_up_day, FROM_UNIXTIME(UNIX_TIMESTAMP(sign_up_day)) FROM copang_main.member; //example
  • UNIX_TIMESTAMP(a) : 1970년 1월 1일 0시를 기준으로 a까지 몇초 지났는지 나타내준다.
  • FROM_UNIXTIME(b) : UNIX Timestamp를 원래 날짜로 바꿔준다.

이 외의 날짜, 시간 관련 함수들을 더 알아보기 위해서는 여기를 눌러서 확인해주세요!


문자열 패턴 매칭 주의점

1. 이스케이핑(escaping) 문제

  • 문자열을 나타내거나(', "), 문자열의 패턴을 나타내는 표현식(%, _)이 일반적인 문자일 때 나타날 수 있음
  • 역슬래쉬( \ )를 통해 이스케이핑이 가능하다.
LIKE '%\'%' //' (작은 따옴표) 이스케이핑
LIKE '%\_%' // _ (언더바) 이스케이핑
LIKE '%\"%\"%'  //" (큰 따옴표) 이스케이핑

대소문자 구문 분제

  • Table collation 중 ci라는 값이 있다면 이는 case-insensitive의 약자로 문자열이 동일한지 확인할 때, 대소문자를 구별하지 않겠다는 의미이다.
LIKE BINARY '%g%';
  • BINARY를 이용하여 대소문자를 구분할 수 있다.

데이터 정렬

SELECT * FROM copang_main.member

ORDER BY YEAR(sign_up_day) DESC, email ASC;
  • ORDER BY : 이름을 먼저 쓴 컬럼을 우선으로 해서 정렬이 차례대로 수행된다.
  • 이름 뒤에 ASC(오름차순) / DESC(내림차순)을 적어 순서를 정한다.
  • 주의점 : WHERE절은 ORDER BY 앞에 나와야한다.

데이터 일부 추리기

SELECT * FROM copang_main.member
ORDER BY sign_up_day DESC
LIMIT 8, 2;
  • row는 0번부터 시작한다.
  • LIMIT n : n번까지의 row를 추려준다.
  • LIMIT n, m : n번부터 m개의 row를 추려준다.




본 포스트는 코드잇 강의를 공부하며 정리한 내용입니다! 자세한 설명은 "코드잇 머신러닝 강의를 참고해주세요!

+) 코드잇 강의 바로가기

profile
안녕하세요 :) Data/AI 공부 중인 한국외대 컴퓨터공학부 조권휘입니다.

0개의 댓글