티스토리 뷰

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
댓글
«   2024/12   »
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
링크
공지사항
Total
Today
Yesterday