두 개 이상의 select문을 합친 결과를 출력함
이때, 불러오는 칼럼의 개수는 서로 같아야함 (통합되는 각 2개의 sql 쿼리문 select 절에서 동일한 갯수의 칼럼을 사용해야함)
ex>
mysql>SELECT1,2;
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+
mysql>SELECT'a','b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
mysql>SELECT1,2UNION SELECT'a','b';
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| a | b |
+---+---+
하나의 테이블로 합쳐진 것을 볼 수 있음
cf> union all 도 사용 가능. union all은 union과 달리 중복의 제거 없이 모든 레코드를 반환하기 때문에 더 권장하기도 함.
select * from table1 union select null, null, null, null from table2;
table1과 table2의 조회 결과를 합쳐서 보여주는데, 만약 table1, table2이 칼럼의 개수가 다를 경우, 에러가 발생한다. (union은 두 개의 쿼리문의 칼럼 개수가 동일해야함)
칼럼의 개수를 맞추기 위해, 빈 칼럼인 null 칼럼을 추가하여 칼럼의 개수를 맞출 수 있다. 위의 table1의 칼럼의 개수가 4개이기 때문에, 에러가 출력되지 않았으므로 null의 추가를 통해 칼럼의 개수를 모르는 테이블의 칼럼 개수를 알 수 있다.
칼럼의 개수를 알아낸 후, null 칼럼 대신 서버 정보나 사용자 정보를 조회하는 구문을 대신 삽입하여, 웹 사이트의 주요 정보들을 알아낼 수 있다.
<http://cat.moe:8004/read.php?id=1> and 1=1
url에 입력해보고, 오류 없이 출력되는지 보자.
<http://cat.moe:8004/read.php?id=1> and 1=0