select_intro
Redis + SQL
데이터의 새로운 발견
레디스 Key-Value 데이터를
SQL SELECT로 조회할 수 있습니다.
데이터 활용이 획기적으로 향상되었습니다.
형식: SELECT * FROM DATATYPE.KEY*
예 : SELECT * FROM STRING.KEY*
- SELECT의 컬럼은 key, value입니다. ZSet일 경우 Score 컬럼이 추가됩니다.
- Table 부분은 Datatype.key로 구성됩니다.
- Datatype은 String, List, Set, ZSet, Hash를 사용할 수 있습니다.
- Key는 key* 또는 key1 이렇게 지정합니다.
- key*는 key로 시작하는 모든 데이터(key,value)를 조회합니다.
- 다양한 조건(where)로 조회할 수 있습니다. LIKE, BETWEEN, IN, 등
- Group by, Order by, Limit 등을 사용할 수 있습니다.
- SUM(), MIN(), MAX(), LEFT(), TRIM() 등 많은 함수를 사용할 수 있습니다.
- Subquery를 사용할 수 있습니다.
- UNION, INTERSECT, EXCEPT를 사용해서 복합 쿼리를 구성할 수 있습니다.
테스트 데이터 입력
도시 이름 데이터를 입력합니다.
Example
명령> | mset mycity01 Seoul mycity02 Incheon mycity03 Chuncheon mycity04 Daejeon mycity05 Jeonju |
결과> | OK |
명령> | mset mycity06 Daegu mycity07 Gwangju mycity08 Busan mycity09 Jeju |
결과> | OK |
String 데이터 조회
SELECT * FROM STRING.MYCITY*
String에서 mycity로 시작하는 키와 값(value)를 조회합니다.
Example
명령> | select * from string.*; |
결과> |
0) key|value 키로 정렬되어 조회됩니다. 1) mycity01|Seoul 2) mycity02|Incheon 3) mycity03|Chuncheon 4) mycity04|Daejeon 5) mycity05|Jeonju 6) mycity06|Daegu 7) mycity07|Gwangju 8) mycity08|Busan 9) mycity09|Jeju |
명령> | select * from string.mycity*; |
결과> |
0) key|value 1) mycity01|Seoul 2) mycity02|Incheon 3) mycity03|Chuncheon 4) mycity04|Daejeon 5) mycity05|Jeonju 6) mycity06|Daegu 7) mycity07|Gwangju 8) mycity08|Busan 9) mycity09|Jeju |
명령> | select * from string.mycity05; |
결과> |
0) key|value 1) mycity05|Jeonju |
WHERE
Where 조건으로 조회할 수 있습니다.
비교: =, <, <=, >, >=, !=, <>
Example
명령> | select * from string.mycity* where value = 'Daejeon'; |
결과> |
0) key|value 1) mycity04|Daejeon |
명령> | select * from string.mycity* where value <= 'Daejeon'; |
결과> |
0) key|value 1) mycity03|Chuncheon 2) mycity04|Daejeon 3) mycity06|Daegu 4) mycity08|Busan |
명령> | select * from string.mycity* where value > 'Daejeon'; |
결과> |
0) key|value 1) mycity01|Seoul 2) mycity02|Incheon 3) mycity05|Jeonju 4) mycity07|Gwangju 5) mycity09|Jeju |
명령> | select * from string.mycity* where value != 'Daejeon'; |
결과> |
0) key|value 1) mycity01|Seoul 2) mycity02|Incheon 3) mycity03|Chuncheon 4) mycity05|Jeonju 5) mycity06|Daegu 6) mycity07|Gwangju 7) mycity08|Busan 8) mycity09|Jeju |
BETWEEN
Example
명령> | select * from string.mycity* where value BETWEEN 'Daejeon' and 'Jeju'; |
결과> |
0) key|value 1) mycity02|Incheon 2) mycity04|Daejeon 3) mycity07|Gwangju 4) mycity09|Jeju |
명령> | select * from string.mycity* where value NOT BETWEEN 'Daejeon' and 'Jeju'; |
결과> |
0) key|value 1) mycity01|Seoul 2) mycity03|Chuncheon 3) mycity05|Jeonju 4) mycity06|Daegu 5) mycity08|Busan |
IN
Example
명령> | select * from string.mycity* where value IN ('mycity03','mycity05') ; |
결과> |
0) key|value 1) mycity03|Chuncheon 2) mycity05|Jeonju |
명령> | select * from string.mycity* where value NOT IN ('mycity03','mycity05'); |
결과> |
0) key|value 1) mycity01|Seoul 2) mycity02|Incheon 3) mycity04|Daejeon 4) mycity06|Daegu 5) mycity07|Gwangju 6) mycity08|Busan 7) mycity09|Jeju |
LIKE, GLOB
Like는 %(퍼센트), _(밑줄)을 사용하고, 대소문자를 구분하지 않습니다.
Example
명령> | select * from string.mycity* where value LIKE 'dae%'; |
결과> |
0) key|value 1) mycity04|Daejeon 2) mycity06|Daegu |
명령> | select * from string.mycity* where value LIKE '%ju'; |
결과> |
0) key|value 1) mycity05|Jeonju 2) mycity07|Gwangju 3) mycity09|Jeju |
명령> | select * from string.mycity* where value NOT LIKE '%ju'; |
결과> |
0) key|value 1) mycity01|Seoul 2) mycity02|Incheon 3) mycity03|Chuncheon 4) mycity04|Daejeon 5) mycity06|Daegu 6) mycity08|Busan |
GLOB
Glob는 *(별표), ?(물음표)를 사용하고, 대소문자를 구분합니다.
Example
명령> | select * from string.mycity* where value GLOB 'Dae*'; |
결과> |
0) key|value 1) mycity04|Daejeon 2) mycity06|Daegu |
명령> | select * from string.mycity* where value GLOB 'Dae??'; |
결과> |
0) key|value 1) mycity06|Daegu |
ORDER BY
Example
명령> | select * from string.mycity* ORDER BY value; |
결과> |
0) key|value 1) mycity08|Busan 2) mycity03|Chuncheon 3) mycity06|Daegu 4) mycity04|Daejeon 5) mycity07|Gwangju 6) mycity02|Incheon 7) mycity09|Jeju 8) mycity05|Jeonju 9) mycity01|Seoul |
LIMIT
Example
명령> | select * from string.mycity* order by value LIMIT 5; |
결과> |
0) key|value 1) mycity08|Busan 2) mycity03|Chuncheon 3) mycity06|Daegu 4) mycity04|Daejeon 5) mycity07|Gwangju |
명령> | select * from string.mycity* order by value LIMIT 3,4; |
결과> |
0) key|value 1) mycity04|Daejeon 2) mycity07|Gwangju 3) mycity02|Incheon 4) mycity09|Jeju |
FUNCTIONS
COUNT(*)
Example
명령> | select COUNT(*) from string.mycity*; |
결과> |
0) COUNT(*) 1) 9 |
MIN(), MAX()
Example
명령> | select MIN(value),MAX(value) from string.mycity*; |
결과> |
0) min(value)|max(value) 1) Busan|Seoul |
LENGTH()
Example
명령> | select value name, LENGTH(value) length from string.mycity*; |
결과> |
0) name|length 1) Seoul|5 2) Incheon|7 3) Chuncheon|9 4) Daejeon|7 5) Jeonju|6 6) Daegu|5 7) Gwangju|7 8) Busan|5 9) Jeju|4 |
UPPER(), LOWER()
Example
명령> | select UPPER(value), LOWER(value) from string.mycity*; |
결과> |
0) UPPER(value)|LOWER(value) 1) SEOUL|seoul 2) INCHEON|incheon 3) CHUNCHEON|chuncheon 4) DAEJEON|daejeon 5) JEONJU|jeonju 6) DAEGU|daegu 7) GWANGJU|gwangju 8) BUSAN|busan 9) JEJU|jeju |
LEFT(), MID(), RIGHT()
Example
명령> | select LEFT(value,2), MID(value,3,3), RIGHT(value,2) from string.mycity*; |
결과> |
0) LEFT(value,2)|MID(value,3,3)|RIGHT(value,2) 1) Se|oul|ul 2) In|che|on 3) Ch|unc|on 4) Da|eje|on 5) Je|onj|ju 6) Da|egu|gu 7) Gw|ang|ju 8) Bu|san|an 9) Je|ju|ju |
기타 문자열 함수
- REPLACE(): 문자열 바꾸기 REPLACE('ABC','B','D') -> ADC
- INSTR(): 문자열이 포함된 첫 번째 순서 INSTR('ABC','B') -> 2
- TRIM(): 양쪽 공백(space), 문자, 문자열 제거
- LTRIM(): 왼쪽 공백(space), 문자, 문자열 제거
- RTRIM(): 오른쪽 공백(space), 문자, 문자열 제거
숫자 함수
- SUM(): 합계
- AVG(): 평균
- ROUND(): 반올림
- ABS(): 절대값
도시 인구 테스트 데이터 입력
Example
명령> | mset Seoul 9741383 Incheon 2925967 Chuncheon 283742 Daejeon 1525849 Jeonju 654963 |
결과> | OK |
명령> | mset Daegu 2453041 Gwangju 1496172 Busan 3416918 Jeju 489202 |
결과> | OK |
숫자(인구) 데이터 조회
Example
명령> | select * from string.* where key < 'a'; |
결과> |
0) key|value 1) Busan|3416918 2) Chuncheon|283742 3) Daegu|2453041 4) Daejeon|1525849 5) Gwangju|1496172 6) Incheon|2925967 7) Jeju|489202 8) Jeonju|654963 9) Seoul|9741383 |
명령> | select * from string.* where key < 'a' and value < 1000000; |
결과> |
0) key|value 1) Chuncheon|283742 2) Jeju|489202 3) Jeonju|654963 |
명령> | select * from string.* where key < 'a' and value >= 1000000; |
결과> |
0) key|value 1) Busan|3416918 2) Daegu|2453041 3) Daejeon|1525849 4) Gwangju|1496172 5) Incheon|2925967 6) Seoul|9741383 |
SUM(), AVG()
Example
명령> | select sum(value), avg(value) from string.* where key < 'a'; |
결과> |
0) sum(value)|avg(value) 1) 22987237|2554137.44444444 |
명령> | select min(value), max(value) from string.* where key < 'a'; |
결과> |
0) min(value)|max(value) 1) 283742|9741383 |
명령> | select key city, max(value) population from string.* where key < 'a'; |
결과> |
0) city|population 1) Seoul|9741383 |
SET
테스트 데이터 입력
Example
명령> | sadd myset1 Seoul Incheon Chuncheon Daejeon Jeonju |
결과> | 5 |
명령> | sadd myset2 Daejeon Jeonju Daegu Gwangju Busan Jeju |
결과> | 6 |
SET 데이터 조회
Set 데이터를 조회합니다.
Example
명령> | select * from set.myset*; |
결과> |
0) key|value 1) myset1|Seoul 2) myset1|Daejeon 3) myset1|Chuncheon 4) myset1|Incheon 5) myset1|Jeonju 6) myset2|Daegu 7) myset2|Jeonju 8) myset2|Daejeon 9) myset2|Gwangju 10) myset2|Busan 11) myset2|Jeju |
명령> | select * from set.myset1; |
결과> |
0) key|value 1) myset1|Seoul 2) myset1|Daejeon 3) myset1|Chuncheon 4) myset1|Incheon 5) myset1|Jeonju |
GROUP BY
Example
명령> | select key from set.myset*; |
결과> |
0) key 1) myset1 2) myset2 |
명령> | select key, count(*) from set.myset* group by key; |
결과> |
0) key|count(*) 1) myset1|5 2) myset2|6 |
GROUP_CONCAT(*)
Example
명령> | select key, min(value), max(value) from set.myset* group by key ; |
결과> |
0) key|min(value)|max(value) 1) myset1|Chuncheon|Seoul 2) myset2|Busan|Jeonju |
명령> | select key, group_concat(value) from set.myset* group by key ; |
결과> |
0) key|group_concat(value) 1) myset1|Seoul,Daejeon,Chuncheon,Incheon,Jeonju 2) myset2|Daegu,Jeonju,Daejeon,Gwangju,Busan,Jeju |
WHERE
Example
명령> | select * from set.myset1 where value = 'Seoul' ; |
결과> |
0) key|value 1) myset1|Seoul |
명령> | select * from set.myset1 where value glob '*cheon' ; |
결과> |
0) key|value 1) myset1|Chuncheon 2) myset1|Incheon |
UNION, INTERSECT, EXCEPT
Example
명령> | select value from set.myset1 union select value from set.myset2 ; |
결과> |
0) value 1) Busan 2) Chuncheon 3) Daegu 4) Daejeon 5) Gwangju 6) Incheon 7) Jeju 8) Jeonju 9) Seoul |
명령> | select value from set.myset1 intersect select value from set.myset2 ; |
결과> |
0) value 1) Daejeon 2) Jeonju |
명령> | select value from set.myset1 except select value from set.myset2 ; |
결과> |
0) value 1) Chuncheon 2) Incheon 3) Seoul |
SUBQUERY
Example
명령> | select * from string.* where key in (select value from set.myset1); |
결과> |
0) key|value 1) Chuncheon|283742 2) Daejeon|1525849 3) Incheon|2925967 4) Jeonju|654963 5) Seoul|9741383 |
명령> | select sum(value),avg(value) from string.* where key in (select value from set.myset1); |
결과> |
0) sum(value)|avg(value) 1) 15131904|3026380.8 |
HASH
테스트 데이터 입력
Example
명령> | rm Seoul Incheon Chuncheon Daejeon Jeonju Daegu Gwangju Busan Jeju 기존 데이터 삭제 |
결과> | 9 |
명령> | hset Seoul population 9741383 han 서울 area 605.20 mayor Kim |
명령> | hset Incheon population 2925967 han 인천 area 1062.60 mayor Lee |
명령> | hset Chuncheon population 283742 han 춘천 area 1116.35 mayor Cheo |
명령> | hset Daejeon population 1525849 han 대전 area 539.35 mayor Bak |
명령> | hset Jeonju population 654963 han 전주 area 206 mayor Son |
명령> | hset Daegu population 2453041 han 대구 area 883.57 mayor Jeong |
명령> | hset Gwangju population 1496172 han 광주 area 501.24 mayor Gang |
명령> | hset Busan population 3416918 han 부산 area 769.89 mayor Jo |
명령> | hset Jeju population 489202 han 제주 area 977.8 mayor Yun |
HASH 데이터 조회
Example
명령> | select * from hash.*; |
결과> |
0) key|population|han|area|mayor 1) Busan|3416918|부산|769.89|Jo 2) Chuncheon|283742|춘천|1116.35|Cheo 3) Daegu|2453041|대구|883.57|Jeong 4) Daejeon|1525849|대전|539.35|Bak 5) Gwangju|1496172|광주|501.24|Gang 6) Incheon|2925967|인천|1062.6|Lee 7) Jeju|489202|제주|977.8|Yun 8) Jeonju|654963|전주|206|Son 9) Seoul|9741383|서울|605.2|Kim |
Order by field
Example
명령> | select * from hash.* order by han; |
결과> |
0) key|population|han|area|mayor 1) Gwangju|1496172|광주|501.24|Gang 2) Daegu|2453041|대구|883.57|Jeong 3) Daejeon|1525849|대전|539.35|Bak 4) Busan|3416918|부산|769.89|Jo 5) Seoul|9741383|서울|605.2|Kim 6) Incheon|2925967|인천|1062.6|Lee 7) Jeonju|654963|전주|206|Son 8) Jeju|489202|제주|977.8|Yun 9) Chuncheon|283742|춘천|1116.35|Cheo |
Where field
Example
명령> | select * from hash.* where population > 1000000; |
결과> |
0) key|population|han|area|mayor 1) Busan|3416918|부산|769.89|Jo 2) Daegu|2453041|대구|883.57|Jeong 3) Daejeon|1525849|대전|539.35|Bak 4) Gwangju|1496172|광주|501.24|Gang 5) Incheon|2925967|인천|1062.6|Lee 6) Seoul|9741383|서울|605.2|Kim |
계산
Example
명령> | select key,han,round(population/area,1) from hash.*; |
결과> |
0) key|han|round(population/area,1) 1) Busan|부산|4438.2 2) Chuncheon|춘천|254.2 3) Daegu|대구|2776.3 4) Daejeon|대전|2829.1 5) Gwangju|광주|2984.9 6) Incheon|인천|2753.6 7) Jeju|제주|500.3 8) Jeonju|전주|3179.0 9) Seoul|서울|16096.1 |
명령> | select key,han,round(population/area,1) density from hash.* order by density desc; |
결과> |
0) key|han|density 1) Seoul|서울|16096.1 2) Busan|부산|4438.2 3) Jeonju|전주|3179.0 4) Gwangju|광주|2984.9 5) Daejeon|대전|2829.1 6) Daegu|대구|2776.3 7) Incheon|인천|2753.6 8) Jeju|제주|500.3 9) Chuncheon|춘천|254.2 |
SUBQUERY
Example
명령> | select * from hash.* where key in (select value from set.myset1); |
결과> |
0) key|population|han|area|mayor 1) Chuncheon|283742|춘천|1116.35|Cheo 2) Daejeon|1525849|대전|539.35|Bak 3) Incheon|2925967|인천|1062.6|Lee 4) Jeonju|654963|전주|206|Son 5) Seoul|9741383|서울|605.2|Kim |
<< Commands | Select Intro | Select String >> |
---|
조회수 :
Email
답글이 올라오면 이메일로 알려드리겠습니다.