코딩일기

MySQL 기초부터 훑어보기1(INDEXING, SORTING) 본문

Code/SQL

MySQL 기초부터 훑어보기1(INDEXING, SORTING)

daje 2021. 3. 6. 16:01
728x90
반응형

 

 

https://dev.mysql.com/

 

 

 

안녕하십니까 다제입니다. 

오늘부터는 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;

 

 

지금까지 인덱싱하는 방법과 정렬하는 방법에 대해서 알아보았습니다. 

시간이 된다면 판다스와 비교하는 컨텐츠로 수정하여 포스팅하겠습니다. 

 

감사합니다. 

728x90
반응형
Comments