SELECT String


SELECT로 String 데이터를 조회

SQL SELECT로 String 데이터를 조회합니다.

테스트 데이터 입력

Example

명령>rm (ls *)     기존 데이터 삭제  
명령>mset myint1 10 myint2 30 myint3 50 myint4 20 myint5 40
결과>OK
명령>mset mynum1 12.3 mynum2 35.5 mynum3 54.4 mynum4 25.6 mynum5 49.8
결과>OK
명령>mset mystr1 value10 mystr2 value30 mystr3 value50 mystr4 value20 mystr5 value40
결과>OK

키 이름

SQL을 사용하려면 키 이름을 알파벳으로 시작해서 '_' 또는 숫자를 사용하시는 것이 편리합니다.
특수 기호를 사용하면 키 이름에 따옴표를 사용해야 합니다.
KEY_001, 'KEY-001', 'KEY:001'

SELECT * FROM STRING.MYINT*

String에서 key 시작하는 키와 값(value)를 조회한다.

Example

명령>select * from string.myint*;     key와 value 조회  
명령>select key,value from string.myint*;
결과> 0) key|value
1) myint1|10
2) myint2|30
3) myint3|50
4) myint4|20
5) myint5|40
명령>select key from string.myint*;     key만 조회  
결과> 0) key
1) myint1
2) myint2
3) myint3
4) myint4
5) myint5
명령>select value from string.myint*;     value만 조회  
결과> 0) value
1) 10
2) 30
3) 50
4) 20
5) 40
명령>select * from string.myint1;     키 하나만 조회  
결과> 0) key|value
1) myint1|10

ORDER BY

정렬(sort)해서 보여준다.

Example

명령>select * from string.myint* order by key;
결과> 0) key|value
1) myint1|10
2) myint2|30
3) myint3|50
4) myint4|20
5) myint5|40
명령>select * from string.myint* order by value;
결과> 0) key|value
1) myint1|10
2) myint4|20
3) myint2|30
4) myint5|40
5) myint3|50
명령>select * from string.myint* order by key desc;
결과> 0) key|value
1) myint5|40
2) myint4|20
3) myint3|50
4) myint2|30
5) myint1|10
명령>select * from string.myint* order by value desc;
결과> 0) key|value
1) myint3|50
2) myint5|40
3) myint2|30
4) myint4|20
5) myint1|10

정렬(sort) 순서: 숫자 < 문자

Example

명령>select * from string.my* order by value;
결과> 0) key|value
1) myint1|10
2) mynum1|12.3
3) myint4|20
4) mynum4|25.6
5) myint2|30
6) mynum2|35.5
7) myint5|40
8) mynum5|49.8
9) myint3|50
10) mynum3|54.4
11) mystr1|value10
12) mystr4|value20
13) mystr2|value30
14) mystr5|value40
15) mystr3|value50

LIMIT

출력 행 수를 제한한다.

Example

명령>select * from string.my* limit 5;
결과> 0) key|value
1) myint1|10
2) myint2|30
3) myint3|50
4) myint4|20
5) myint5|40
명령>select * from string.my* order by value limit 5;
결과> 0) key|value
1) myint1|10
2) mynum1|12.3
3) myint4|20
4) mynum4|25.6
5) myint2|30

LIMIT OFFSET

몇 행 건너 출력

Example

명령>select * from string.my* limit 5 offset 3; --> 3행 건너 5행 출력
결과> 0) key|value
1) myint4|20
2) myint5|40
3) mynum1|12.3
4) mynum2|35.5
5) mynum3|54.4
명령>select * from string.my* limit 5, 3; --> 3행 건너 5행 출력
결과> 0) key|value
1) myint4|20
2) myint5|40
3) mynum1|12.3
4) mynum2|35.5
5) mynum3|54.4
명령>select * from string.my* order by value limit 5 offset 3;
결과> 0) key|value
1) mynum4|25.6
2) myint2|30
3) mynum2|35.5
4) myint5|40
5) mynum5|49.8
명령>select * from string.my* order by value limit 3, 5;
결과> 0) key|value
1) mynum4|25.6
2) myint2|30
3) mynum2|35.5
4) myint5|40
5) mynum5|49.8

FUNCTIONS

COUNT()

개수를 조회한다.

Example

명령>select count(*) from string.myint*;
결과> 0) count(*)
1) 5

VALCNT(key)

키가 가지고 있는 값(value)의 개수를 조회한다.
1) select key,valcnt(key) from zset.*
2) select key,count(*) from zset.* group by key
2번과 같이 group by를 사용하는 것보다 valcnt를 사용하는 것이 훨씬 속도가 빠르다.

Example

명령>select key,count(key) from list.my*;
결과> 0) key|valcnt(key)
1) myint1|5
2) myint2|5

MAX(), MIN()

최댓값, 최솟값을 조회한다.

Example

명령>select max(key) from string.myint*;
결과> 0) max(key)
1) myint5
명령>select min(key) from string.myint*;
결과> 0) min(key)
1) myint1
명령>select min(key),max(key) from string.myint*;
결과> 0) min(key)|max(key)
1) myint1|myint5
명령>select min(value),max(value) from string.myint*;
결과> 0) min(value)|max(value)
1) 10|50
명령>select max(key),max(value) from string.myint*;
결과> 0) max(key)|max(value)
1) myint5|50

이렇게 사용해도 됩니다. MAX(key)과 value를 같이 조회할 경우

Example

명령>select max(key), value from string.myint*;
결과> 0) max(key)|value
1) myint5|40
명령>select min(key), value from string.myint*;
결과> 0) min(key)|value
1) myint1|10
명령>select max(value), key from string.myint*;
결과> 0) max(value)|key
1) 50|myint3

데이터 타입이 다른 경우 비교: 숫자 < 문자

Example

명령>select min(value),max(value) from string.my*;
결과> 0) min(value)|max(value)
1) 10|value50

MAX(value1, value2), MIN(value1, value2)

Example

명령>select max(10,20)
결과> 0) max(10,20)
1) 20
명령>select key,value,max(value,25) from string.myint*
결과> 0) key|value|max(value,25)
1) myint1|10|25
2) myint2|30|30
3) myint3|50|50
4) myint4|20|25
5) myint5|40|40
명령>select key,value,min(value,25) from string.myint*
결과> 0) key|value|min(value,25)
1) myint1|10|10
2) myint2|30|25
3) myint3|50|25
4) myint4|20|20
5) myint5|40|25

숫자 함수

SUM(), AVG()

합계, 평균을 구한다.

Example

명령>select sum(value) from string.myint*;
결과> 0) sum(value)
1) 150
명령>select avg(value) from string.myint*;
결과> 0) avg(value)
1) 30.0

문자, 숫자가 섞여 있을 경우에는 숫자만 계산한다.

Example

명령>select sum(value) from string.my*
결과> 0) sum(value)
1) 327.6

ABS() 절대값

절대값을 구한다.

Example

명령>set myint6 -15
결과>OK
명령>select abs(value) from string.myint6;
결과> 0) abs(value)
1) 15

ROUND() 반올림

반올림한다. ROUND(숫자, [자릿수])

Example

명령>select value,round(value) from string.mynum*;
결과> 0) value|round(value)
1) 12.3|12.0
2) 35.5|36.0
3) 54.4|54.0
4) 25.6|26.0
5) 49.8|50.0

문자 함수

LENGTH()

길이를 구한다. 이 경우 숫자도 문자로 취급해서 길이를 계산한다.

Example

명령>select key,length(key),value,length(value) from string.my*;
결과> 0) key|length(key)|value|length(value)
1) myint1|6|10|2
중간 생략...
6) mynum1|6|12.3|4
중간 생략...
11) mystr1|6|value10|7
이하 생략...

UPPER(), LOWER()

UPPER: 대문자로 변경한다.
LOWER: 소문자로 변경한다.

Example

명령>mset key1 "REDISGATE" key2 "Redis Enterprise"
결과>OK
명령>select key,value,upper(value) from string.key*;
결과> 0) key|value|upper(value)
1) key1|REDISGATE|REDISGATE
2) key2|Redis Enterprise|REDIS ENTERPRISE
명령>select key,value,lower(value) from string.key*;
결과> 0) key|value|lower(value)
1) key1|REDISGATE|redisgate
2) key2|Redis Enterprise|redis enterprise

LEFT(), RIGHT(), MID()

LEFT('문자열',숫자)
RIGHT('문자열',숫자)
MID('문자열',시작위치[,개수]) = SUBSTR()

Example

명령>select key,value,left(value,5) from string.key*
결과> 0) key|value|left(value,5)
1) key1|REDISGATE|REDIS
2) key2|Redis Enterprise|Redis
명령>select key,value,right(value,5) from string.key*
결과> 0) key|value|right(value,5)
1) key1|REDISGATE|SGATE
2) key2|Redis Enterprise|prise
명령>select key,value,mid(value,6,5) from string.key*
결과> 0) key|value|mid(value,6,5)
1) key1|REDISGATE|GATE
2) key2|Redis Enterprise| Ente
명령>select key,value,mid(value,6) from string.key*
결과> 0) key|value|mid(value,6)
1) key1|REDISGATE|GATE
2) key2|Redis Enterprise| Enterprise

REPLACE()

문자열 바꾸기: REPLACE('ABC','B','D') -> ADC

Example

명령>select replace(value,'G','K') from string.key1;
결과> 0) replace(value,'G','K')
1) REDISKATE
명령>select replace(value,'GATE','DOOR') from string.key1;
결과> 0) replace(value,'GATE','DOOR')
1) REDISDOOR
명령>select replace(value,'GATE','GREAT') from string.key1;
결과> 0) replace(value,'GATE','GREAT')
1) REDISGREAT

INSTR()

문자열이 포함된 첫 번째 순서: INSTR('ABC','B') -> 2

Example

명령>select value,instr(value,'G') from string.key1;
결과> 0) value|instr(value,'G')
1) REDISGATE|6
명령>select value,instr(value,'Ent') from string.key2;
결과> 0) value|instr(value,'Ent')
1) Redis Enterprise|7

LTRIM(), RTRIM(), TRIM()

LTRIM(값, [문자/문자열])
RTRIM(값, [문자/문자열])
TRIM(값, [문자/문자열])

Example

명령>set key3 "   REDIS   "
결과>OK
명령>select ltrim(value) from string.key3
결과> 0) ltrim(value)
1) REDIS
명령>select char(39)||ltrim(value)||char(39) ltrim LTRIMfrom string.key3
결과> 0) ltrim
1) 'REDIS   '
명령>select char(39)||rtrim(value)||char(39) rtrim from string.key3
결과> 0) rtrim
1) '   REDIS'
명령>select ltrim('ABCABCDDD','ABC')
결과> 0) ltrim('ABCABCDDD','ABC')
1) DDD

기타 함수

CHAR()

CHAR(십진수) -> 문자

Example

명령>select char(65)
결과> 0) char(65)
1) A
명령>select char(65,66)
결과> 0) char(65,66)
1) AB
명령>select value,char(value) from string.myint5;
결과> 0) value|char(value)
1) 40|(

HEX()

HEX(문자) -> 16진수

Example

명령>select hex('A')
결과> 0) hex('A')
1) 41
명령>select hex('AB')
결과> 0) hex('AB')
1) 4142
명령>select value,hex(value) from string.myint1;
결과> 0) value|hex(value)
1) 10|3130
명령>select value,hex(value) from string.key1;
결과> 0) value|hex(value)
1) REDISGATE|524544495347415445

RANDOM()

RANDOM(): -9223372036854775808 ~ +9223372036854775807 사이의 숫자
%(나머지), ABS()와 같이 사용

Example

명령>select random()
결과> 0) random()
1) 7603410276227502532
명령>select random()%10
결과> 0) random()%10
1) -6
명령>select abs(random()%10)
결과> 0) abs(random()%10)
1) 6

RANDOMBLOB()

바이트

Example

명령>select randomblob(1)
결과> 0) randomblob(1)
1) L
명령>select randomblob(2)
결과> 0) randomblob(2)
1) ym
명령>select hex(randomblob(1))
결과> 0) hex(randomblob(1))
1) 0C

ZEROBLOB()

ZEROBLOB(숫자) -> hex 00 (NULL)

Example

명령>select zeroblob(1)
결과> 0) zeroblob(1)
1)
명령>select hex(zeroblob(1))
결과> 0) hex(zeroblob(1))
1) 00
명령>select quote(zeroblob(1))
결과> 0) quote(zeroblob(1))
1) X'00'

QUOTE()

작은 따옴표로 둘러싼 값을 리턴한다.

Example

명령>select value,quote(value) from string.key1;
결과> 0) value|quote(value)
1) REDISGATE|X'524544495347415445'

TYPEOF(), TYPEOF2()

데이터 타입을 반환합니다.
TYPEOF(): integer, real, text, blob, null
TYPEOF2(): numeric, text, null -> 숫자, 문자로만 구분할 경우 유용하게 사용할 수 있습니다.

Example

명령>select typeof(10),typeof(13.4),typeof('A'),typeof(randomblob(1)),typeof(NULL);
결과> 0) typeof(10)|typeof(13.4)|typeof('A')|typeof(randomblob(1))|typeof(NULL)
1) integer|real|text|blob|null
명령>select key,value,typeof(value),typeof2(value) from string.* where key in ('myint1','mynum1','mystr1');
결과> 0) key|value|typeof(value)|typeof2(value)
1) myint1|10|integer|numeric
2) mynum1|12.3|real|numeric
3) mystr1|value10|blob|text

WHERE TYPEOF()

Example

명령>select * from string.* where typeof(value)='integer';
결과> 0) key|value
1) myint1|10
2) myint2|30
3) myint3|50
4) myint4|20
5) myint5|40
명령>select * from string.* where typeof(value)='real';
결과> 0) key|value
1) mynum1|12.3
2) mynum2|35.5
3) mynum3|54.4
4) mynum4|25.6
5) mynum5|49.8
명령>select * from string.* where typeof2(value)='numeric';
결과>   0) key|value
  1) myint1|10
  2) myint2|30
  3) myint3|50
  4) myint4|20
  5) myint5|40
  6) mynum1|12.3
  7) mynum2|35.5
  8) mynum3|54.4
  9) mynum4|25.6
10) mynum5|49.8

LIST TYPEOF()

Example

명령>rpush mylist4 AA 10 BB 20   테스트 데이터 입력  
명령>select * from list.mylist4 where typeof2(value)='numeric';
결과> 0) key|value
1) mylist4|10
2) mylist4|20
명령>select * from list.mylist4 where typeof2(value)='text';
결과> 0) key|value
1) mylist4|AA
2) mylist4|BB
명령>rm mylist4   테스트 데이터 삭제  

NULLIF()

NULLIF(X,Y) 두 값을 비교하여 같으면 NULL을 반환하고 같지 않으면 첫 번째 값을 리턴한다.

Example

명령>select nullif('A','A')
결과> 0) nullif('A','A')
1) (nil)
명령>select nullif('A','B')
결과> 0) nullif('A','B')
1) A

15) ifnull(값1,값2) 값1이 Null 이면 값2를 리턴한다.
> select case when 1=2 then 'T' else 'F' end
0) case when 1=2 then 'T' else 'F' end
1) F
sum() null이 있으면 null을 리턴
total() null을 0.0으로 계산 -> 결과 실수(real)

필드 또는 문자열 합치기 ||

key||'-'||value

Example

명령>select key||'-'||value key_value from string.mystr1;
결과> 0) key_value
1) mystr1-value10


WHERE 조건

비교: =, <, <=, >, >=, !=, <>

키 비교

Example

명령>select * from string.myint* where key <= 'myint3'
결과> 0) key|value
1) myint1|10
2) myint2|30
3) myint3|50
명령>select * from string.myint* where key > 'myint3'
결과> 0) key|value
1) myint4|20
2) myint5|40
3) myint6|-15

값(value) 비교

Example

명령>select * from string.myint* where value = 30;
결과> 0) key|value
1) myint2|30
명령>select * from string.myint* where value >= 30;
결과> 0) key|value
1) myint2|30
2) myint3|50
3) myint5|40
명령>select * from string.myint* where value < 30;
결과> 0) key|value
1) myint1|10
2) myint4|20
3) myint6|-15
명령>select * from string.myint* where value != 30;
결과> 0) key|value
1) myint1|10
2) myint3|50
3) myint4|20
4) myint5|40
5) myint6|-15

AND, OR

Example

명령>select * from string.myint* where value >= 20 and value < 40
결과> 0) key|value
1) myint2|30
2) myint4|20
명령>select * from string.myint* where value <= 20 or value > 40
결과> 0) key|value
1) myint1|10
2) myint3|50
3) myint4|20
4) myint6|-15

BETWEEN

Example

명령>select * from string.myint* where value between 20 and 40
결과> 0) key|value
1) myint2|30
2) myint4|20
3) myint5|40

LIKE

%(퍼센트), _(밑줄)
대소문자를 구분하지 않는다.

Example

명령>select * from string.* where key like '%1'
결과> 0) key|value
1) key1|REDISGATE
2) myint1|10
3) mynum1|12.3
4) mystr1|value10
명령>select * from string.key* where value like 'redis%'
결과> 0) key|value
1) key1|REDISGATE
2) key2|Redis Enterprise

GLOB

*(별표), ?(물음표)
대소문자를 구분한다.

Example

명령>select * from string.* where key glob '*1'
결과> 0) key|value
1) key1|REDISGATE
2) myint1|10
3) mynum1|12.3
4) mystr1|value10
명령>select * from string.key* where value glob 'Redis*'
결과> 0) key|value
1) key2|Redis Enterprise

IN

Example

명령>select * from string.* where key in ('myint3','mystr4','mystr5')
결과> 0) key|value
1) myint3|50
2) mystr4|value20
3) mystr5|value40
명령>select * from string.* where value in ('value10','value50')
결과> 0) key|value
1) mystr1|value10
2) mystr3|value50
명령>select * from string.* where value in (10,50)
결과> 0) key|value
1) myint1|10
2) myint3|50

NOT IN

Example

명령>select * from string.myint* where key in ('myint3','myint5')
결과> 0) key|value
1) myint1|10
2) myint2|30
3) myint4|20
명령>select * from string.myint* where key in (('myint3','myint5','myint4')
결과> 0) key|value --> key는 3개 이상하면 처리안됨.
value가 처리되는 되는 것으로 봐서 key index 처리에 문제가 있은 것으로 보임

1) myint1|10
2) myint2|30
3) myint3|50
4) myint4|20
5) myint5|40
명령>select * from string.* where value not in (10,50)
결과> 0) key|value
1) myint2|30
2) myint4|20
3) myint5|40

GROUP BY

Example

명령>select left(key,5), count(*) from string.my* group by left(key,5);
결과> 0) left(key,5)|count(*)
1) myint|6
2) mynum|5
3) mystr|5
명령>select left(key,5), min(key), max(key) from string.my* group by left(key,5);
결과> 0) left(key,5)|min(key)|max(key)
1) myint|myint1|myint6
2) mynum|mynum1|mynum5
3) mystr|mystr1|mystr5
명령>select left(key,5), min(value), max(value) from string.my* group by left(key,5);
결과> 0) left(key,5)|min(value)|max(value)
1) myint|-15|50
2) mynum|12.3|54.4
3) mystr|value10|value50
명령>select left(key,5), sum(value) from string.my* group by left(key,5);
결과> 0) left(key,5)|sum(value)
1) myint|135
2) mynum|177.6
3) mystr|0.0

GROUP BY HAVING

Example

명령>select left(key,5), sum(value) from string.my* group by left(key,5) having sum(value) > 0;
결과> 0) left(key,5)|sum(value)
1) myint|135
2) mynum|177.6

<< Select Intro Select String Select List >>

조회수 :

Email 返事がかかってなれば、メールでお知らせします。