2009-05-16 3 views
2

두 개 이상의 테이블이 사용자로 채워져 있고 동일한 쿼리의 해당 테이블에서 모든 사용자를 검색하려고한다고 가정합니다.동일한 쿼리의 다른 테이블에서 유사한 행을 검색하는 방법은 무엇입니까?

테이블은 일부 열을 공유하며 같은 이름을 가진 열은 검색하려고하는 열입니다. 같은

뭔가 :

SELECT name, age FROM users1; 
SELECT name, age FROM users2; 
etc. 

참고 :이 그냥 예 아니라 진짜 문제입니다. 나는 그 테이블들을 하나로 결합 할 수 없다.

답변

7

당신은 UNION를 사용할 수 있습니다 UNION은 하나의 결과 집합에 여러 개의 SELECT 문에서 결과를 결합하는 데 사용됩니다

.

첫 번째 SELECT 문의 열 이름이 반환 된 결과의 열 이름으로 사용됩니다. 각 SELECT.의 해당 위치에 나열된 선택된 컬럼은 동일한 데이터 유형을 가져야합니다.

예 :

mysql> SELECT 1 as ColumnA,'a' as ColumnB 
    -> UNION 
    -> SELECT 2, 'b' 
    -> UNION 
    -> SELECT 3, 'c'; 
+---------+---------+ 
| ColumnA | ColumnB | 
+---------+---------+ 
|  1 | a  | 
|  2 | b  | 
|  3 | c  | 
+---------+---------+ 
3 rows in set (0.05 sec) 

이 또한주의 :

UNION의 기본 동작은 중복 행이 결과에서 제거하는 것입니다. 선택적인 DISTINCT 키워드는 중복 행 제거를 지정하기 때문에 디폴트 이외의 다른 효과는 없습니다. 선택적 ALL 키워드를 사용하면 중복 행 제거가 발생하지 않으며 결과에 모든 SELECT 문의 일치하는 모든 행이 포함됩니다.

예 :

select name, age from users1 
union 
select name, age from users2 
union 
select name, age from users3 

또는 :

mysql> SELECT 1 as x 
    -> UNION 
    -> SELECT 1; 
+---+ 
| x | 
+---+ 
| 1 | 
+---+ 
1 row in set (0.00 sec) 

mysql> SELECT 1 as x 
    -> UNION ALL 
    -> SELECT 1; 
+---+ 
| x | 
+---+ 
| 1 | 
| 1 | 
+---+ 
2 rows in set (0.00 sec) 
1

당신이 원하는 행동을 당신은에 따라 union 또는 union all를 사용할 수 있습니다

SELECT name, age FROM users1 
UNION 
SELECT name, age FROM users2 
2

을 시도

select name, age from users1 
union all 
select name, age from users2 
union all 
select name, age from users3 

union은 중복을 제거하지만 union all은 그렇지 않습니다.

중복이 없다는 것을 알고있는 경우 union all을 사용해야 데이터베이스가 중복 된 항목을 찾기 위해 추가 작업을하지 않아도됩니다.

0

또한 '모두 합집합'은 '합집합'보다 훨씬 빠르다는 점에 유의하십시오.

관련 문제