티스토리 뷰
TABLE: temp
실험에 사용한 임시테이블
mysql> SELECT * FROM temp; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | 1 | fox | 1111 | | -1 | goat | 0000 | +------+----------+------+ 7 rows in set (0.00 sec) | cs |
- WHERE 조건 뒤 숫자 1(참이 될 수 있는 값, true, 0x01, 0b01)을 주면 모든 값을 출력
mysql> SELECT * FROM temp WHERE 1; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | 1 | fox | 1111 | | -1 | goat | 0000 | +------+----------+------+ 7 rows in set (0.00 sec) | cs |
- WHERE 조건 뒤 숫자 0(거짓이 될 수 있는 값, false, 0x00, 0b00)을 주면 출력되는 값이 없음
mysql> SELECT * FROM temp WHERE 0; Empty set (0.00 sec) | cs |
- WHERE 조건 뒤 0을 제외한 숫자 값(-1, 0x02, 0b0101 등)을 주면 참인 결과가 출력
mysql> SELECT * FROM temp WHERE -1; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | 1 | fox | 1111 | | -1 | goat | 0000 | +------+----------+------+ 7 rows in set (0.01 sec) | cs |
- 10진수는 '(single-quote)로도 감싸더라도 동일한 결과를 출력 (의미없는 문자 앞에 숫자(0은 제외)가 있을 경우도 모든 결과가 출력, '01ABCD', '001ABCD'와 같이 0 다음에 다른 숫자가 있는 경우에도 모든 결과 출력, '00ABCD', '00A1BCD'은 출력되는 값이 없음)
mysql> SELECT * FROM temp WHERE '1234567890'; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | 1 | fox | 1111 | | -1 | goat | 0000 | +------+----------+------+ 7 rows in set (0.01 sec) | cs |
- 문자는 warning이 발생하고 true, false, 0x01, 0b00과 같은 값들도 '(single-quote)로 감싸면 아래와 같은 결과가 출력
mysql> SELECT * FROM temp WHERE 'true'; Empty set, 1 warning (0.00 sec) mysql> SELECT * FROM temp WHERE 'string'; Empty set, 1 warning (0.00 sec) mysql> SELECT * FROM temp WHERE '0x01'; Empty set, 1 warning (0.01 sec) | cs |
- OR 연산자(||)를 이용하여 아래와 같이 SQL Injection에서 우회하는 데 사용할 수 있다.
mysql> SELECT * FROM temp WHERE id='bear' || 1; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | 1 | fox | 1111 | | -1 | goat | 0000 | +------+----------+------+ 7 rows in set (0.00 sec) | cs |
- OR 연산자(||) 외에도 XOR 연산자(^) 등을 사용하여 (사용하는 위치, 비교 값에 따라서) 다양한 결과를 출력할 수 있다.
=, != 를 이용하는 방법
- = true, != false 를 이용해서 no = 1인 조건에 해당하는 값만 출력
mysql> SELECT * FROM temp WHERE no = 1 = 1; +------+------+------+ | no | id | pw | +------+------+------+ | 1 | fox | 1111 | +------+------+------+ 1 row in set (0.00 sec) | cs |
mysql> SELECT * FROM temp WHERE no = 1 != 0; +------+------+------+ | no | id | pw | +------+------+------+ | 1 | fox | 1111 | +------+------+------+ 1 row in set (0.00 sec) | cs |
- = false, != true 를 이용해서 no = 1가 아닌 조건에 해당하는 값만 출력
mysql> SELECT * FROM temp WHERE no = 1 = 0; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | -1 | goat | 0000 | +------+----------+------+ 6 rows in set (0.00 sec) | cs |
mysql> SELECT * FROM temp WHERE no = 1 != 1; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | -1 | goat | 0000 | +------+----------+------+ 6 rows in set (0.00 sec) | cs |
true = 1, 0x01, 0b01
false = 0, 0x00, 0b00
으로 대체 가능
- 문자 사용 시 false로 사용 가능
mysql> SELECT * FROM temp WHERE no = 1 = 'string'; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | -1 | goat | 0000 | +------+----------+------+ 6 rows in set, 1 warning (0.00 sec) | cs |
mysql> SELECT * FROM temp WHERE no = 1 != 'string'; +------+------+------+ | no | id | pw | +------+------+------+ | 1 | fox | 1111 | +------+------+------+ 1 row in set, 1 warning (0.00 sec) | cs |
- 0, 1을 제외한 숫자 값은 (0x02, 0b10 등 다른 표현들도 포함) 값에 상관 없이 '=' 일 경우에는 출력을 하지 않고 '!=' 일 경우에는 모든 값을 출력
mysql> SELECT * FROM temp WHERE no = 1 = -1; Empty set (0.00 sec) | cs |
mysql> SELECT * FROM temp WHERE no = 1 != -1; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | 1 | fox | 1111 | | -1 | goat | 0000 | +------+----------+------+ 7 rows in set (0.00 sec) | cs |
< 를 이용하는 방법
- < true 를 이용해서 해당 값을 제외하고 출력
mysql> SELECT * FROM temp WHERE no = 1 < 1; +------+----------+------+ | no | id | pw | +------+----------+------+ | 2 | ant | 6666 | | -2 | bear | 5555 | | 3 | cat | 4444 | | 0 | dog | 3333 | | -3 | elephant | 2222 | | -1 | goat | 0000 | +------+----------+------+ 6 rows in set (0.00 sec) | cs |
>, >=, <=와 같은 연산자와 다양한 값들을 통해 다양한 결과를 출력할 수 있음
'Programming > SQL' 카테고리의 다른 글
[Oracle] 에러 코드 (0) | 2016.03.20 |
---|---|
[MySQL] Database 백업 및 복원 (0) | 2016.01.20 |
[Oracle] Catalog (0) | 2015.11.14 |
[MySQL] ORDER BY 절을 이용한 다양한 방법 (0) | 2015.08.11 |
[MySQL] PADSPACE - trailing spaces (0) | 2015.07.03 |
[MySQL] Specific Code (0) | 2015.07.03 |
[MySQL] User 생성 및 삭제 (권한 관리) (0) | 2015.05.12 |