일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 코딩테스트
- python
- 파이썬
- 주간보고
- 매일매일
- JavaScript
- yolo
- 재미져
- Codestates
- 자료구조
- 선형회귀
- 독서
- 부트캠프
- Ai
- 성실히
- 리뷰
- MYSQL
- selenium
- leetcode
- 딥러닝
- 빅데이터
- 열심히
- 기초통계
- bootcamp
- 꾸준히
- 2021
- 코드스테이츠
- 노마드코더
- SQL
- pandas
- Today
- Total
코딩일기
MySQL 기초부터 훑어보기1(INDEXING, SORTING) 본문
안녕하십니까 다제입니다.
오늘부터는 sql 문법에 대해서 공부를 진행하였습니다.
이에, 간단한 문법들을 정리하여 포스팅 하고자 합니다.
크게는 ①인덱싱 하는 방법과 ②정렬하는 방법에 대해서만 본 포스팅에서는 알아보고자 합니다.
1. 조건문
1) 연도 추출
SELECT * FROM main.member WHERE YEAR(birthday) = "1990";
2) 월(2,3,4) 추출
SELECT * FROM main.member WHERE MONTH(birthday) in (2,3,4);
3) 일 추출
SELECT * FROM main.member WHERE DAYOFMONTH(birthday) BETWEEN 15 AND 31;
4) 특정일자 기준으로 날짜 간의 차이 구하기
SELECT birthday, DATEDIFF(birthday, "2020-01-01") FROM main.member;
5) 현재 일자 기준으로 날짜 간의 차이 구하기
SELECT birthday, CURDATE(), DATEDIFF(birthday, CURDATE()) FROM main.member;
6) 가입할 당시에 유저 나이 구하기
SELECT birthday, sign_up_day, DATEDIFF(sign_up_day, birthday) /365 FROM main.member;
7) 날짜 더하기
SELECT birthday, sign_up_day, DATE_ADD(sign_up_day, INTERVAL 300 DAY) FROM main.member;
8) 날짜 빼기
SELECT birthday, sign_up_day, DATE_SUB(sign_up_day, INTERVAL 300 DAY) FROM main.member;
※ 1553526000 이런 식으로이런 형식의 날짜시간 값을 UNIX Timestamp라고 합니다.
그럴 때는 FROM_UNIXTIME 함수를 사용하여 사람이 읽을 수 있는 날짜 형태로 바꿔서 보면 되는데요.
※ MySQL에서는 0을 False, 0 이외의 숫자는 모두 True로 간주합니다.
9) 여러 조건 걸기
SELECT * FROM main.member
WHERE (MONTH(birthday) in (2,3,4) AND height >= 180)
OR (gender = "f" AND height >= 170);
※ AND가 or 보다면 먼저 실행된다. 그러기 때문에 괄호를 꼭 넣어주는 것이 좋다!
10) 특수문자 인덱싱
SELECT * FROM main.member WHERE test LIKE '%\%%';
SELECT * FROM main.member WHERE test LIKE '%\_%';
SELECT * FROM main.member WHERE test LIKE '%\'%';
SELECT * FROM main.member WHERE test LIKE '%\"%\"%';
테이블에서 sentence 컬럼에 퍼센트 기호(%)가 포함된 row를 찾아야한다고 해봅시다
기존에 배운대로라면 SELECT * FROM main.member WHERE test LIKE %%%;
이렇게 적으면 모든 문자열이 출력되는데 이것은 LIKE에서 쓰이는 표현식으로 간주되기 때문이다.
이를 해결하기 위해서는 아래와 같이 적어야하며, 이와 비슷한 이스케이프 등은 아래와 같습니다.
11) 대문자, 소문자 구분하기
SELECT * FROM main.member WHERE sentence LIKE BINARY '%g%';
SELECT * FROM main.member WHERE sentence LIKE BINARY '%G%';
2. 정렬하기
1) 특정 feature로 오름차순 정렬하기
SELECT * FROM member ORDER BY height ASC;
※ 기본설정이 ASC(오름차순)으로 세팅되어 있음
2) 특정 feature로 내림차순 정렬하기
SELECT * FROM member ORDER BY height DESC;
※ 햇갈리기 때문에 ASC와 DESC를 꼭 써주는 것을 추천
3) 정렬과 조건문 함께 적기
SELECT * FROM member
WHERE gender = 'm'
AND weight >= 70
ORDER BY height ASC;
※ WHERE은 ORDER 앞쪽에 나와야한다.
4) 여러 기준으로 정렬하기
SELECT email, sign_up_day FROM member
ORDER BY YEAR(sign_up_day) DESC, email ASC;
※ 이름을 먼저 쓴 컬럼을 우선으로 해서 정렬이 차례대로 수행됨
※ 만약 어떤 컬럼의 숫자값들이 TEXT 같은 문자열 타입으로 저장돼있지만,
정렬 기준으로 쓸 때는 숫자형으로 사용하고 싶다면 CAST 함수를 이용하면된다.
( ex. SELECT * FROM member ORDER BY CAST ( data AS signed) ASC;
5-1) height로 정렬 후 0부터 10 index까지 나열하기
SELECT * FROM member ORDER BY height ASC LIMIT 10;
5-2) height로 정렬 후 8 index부터 2개 나열하기
SELECT * FROM member ORDER BY height ASC LIMIT 8 2;
지금까지 인덱싱하는 방법과 정렬하는 방법에 대해서 알아보았습니다.
시간이 된다면 판다스와 비교하는 컨텐츠로 수정하여 포스팅하겠습니다.
감사합니다.
'Code > SQL' 카테고리의 다른 글
MySQL 기초부터 훑어보기6(Table) (0) | 2021.03.08 |
---|---|
MySQL 기초부터 훑어보기5( Subquery, view) (0) | 2021.03.07 |
MySQL 기초부터 훑어보기4(ForeignKey, Join) (0) | 2021.03.07 |
MySQL 기초부터 훑어보기3(GROUP BY, SQL Code 실행되는 순서) (0) | 2021.03.06 |
MySQL 기초부터 훑어보기2(NUMBER, NULL, FEATURE연산 외) (0) | 2021.03.06 |