2012-09-09 2 views
0

여러 테이블간에 데이터를 분할하는 방법을 배우는 중 상식처럼 느껴지면 용서해주십시오.SQL 학습 : UNION 또는 JOIN?

기본적으로, 두 사람은이 : 필드

userID,posts,topics 내가 그들로부터 데이터를 가져 오기하고자하고 결정할 수 없습니다와 필드

  • generaluserID,owner,server,name
  • count 어떻게해야합니까? UNION :

    (210)
    SELECT `userID`, `owner`, `server`, `name` 
    FROM `english`.`general` 
    WHERE `userID` = 54 LIMIT 1 
    UNION 
    SELECT `posts`, `topics` 
    FROM `english`.`count` 
    WHERE `userID` = 54 LIMIT 1 
    

    아니면 가입하기 : 당신이 더 효율적인 방법과 이유 일 것입니다 생각

    SELECT `general`.`userID`, `general`.`owner`, `general`.`server`, 
         `general`.`name`, `count`.`posts`, `count`.`topics` 
    FROM `english`.`general` 
    JOIN `english`.`count` ON 
        `general`.`userID`=`count`.`userID` AND `general`.`userID`=54 
    LIMIT 1 
    

    를? 아니면 둘 다 시작하기에 너무 지저분합니까?

+1

노동 조합 예제가 실제로 작동합니까 ??? 공용체에서는 일반적으로 각 선택 항목에서 동일한 수의 필드와 데이터 유형이 필요합니다. http://dev.mysql.com/doc/refman/5.0/en/union.html에서 유니온을 읽어야합니다. 어쨌든, 나는 당신이 조인하고 싶다고 생각합니다. – goatshepard

+2

작은 조언이 여기 있습니다.질문이 SQL 쿼리에 관한 것이라면 질문과 관련이 없으며 SQL을 읽기 어렵게하기 때문에 주변 PHP를 포함 할 필요가 없습니다. SQL을 게시하십시오. 건배. – Kev

+0

ㅎ 감사합니다. 그것에 대해 생각해 보지 않았습니다. :) –

답변

2

효율성에 관한 것이 아니라 어떻게 작동하는지에 대한 것입니다.

UNION 유니온 2 개의 다른 독립적 인 쿼리입니다. 그래서 당신은 2 개의 결과 세트를 하나씩 얻습니다.

JOIN은 결과 세트의 각 행을 다른 결과 세트의 각 행에 추가합니다. 따라서 총 결과 집합에 "긴"행이 있습니다 (열의 양과 관련하여)

+0

답장을 보내 주셔서 감사합니다. 저는 항상 두 사람의 차이점을 말하면 곤란했습니다. :) –

+1

JOIN은 데이터를 추가하는 것이 아닙니다. 첫 번째 집합의 일부 행을 다른 집합의 일부 행과 일치시킵니다. 내부 조인, 외부 조인 등을 사용하는지 여부에 따라 달라집니다. – Bryan

+0

@Bryan : 일반적인 메커니즘을 설명했습니다. 'UNION'은 또한 2 개의 결과 세트를 결합하지 않습니다. 그렇죠? 나는 일반적인 설명을했고 특별한 경우에 따라 OP가 문서를 읽거나 다른 질문을 할 수있다. – zerkms

0

JOIN을 사용하고 싶습니다. 결합은 관련 데이터의 조합 인 단일 세트를 만드는 데 사용됩니다. 당신의 노동 조합의 예는 의미가 없습니다 (그리고 아마 실행되지 않을 것입니다). UNION은 두 개의 결과 집합을 동일한 열과 연결하여 조합 된 행을 가진 집합을 만듭니다 (열을 '결합하지 않습니다.)

0

사용자 및 가까운 사용자 게시물 및 주제를 가져 오려는 경우. 이 같은 가입하여 쿼리를 작성해야합니다

SELECT general.*,count.posts,count.topics FROM general LEFT JOIN count ON general.userID=count.userID 
+0

기술적으로 두 테이블 모두 'userID = 1,2'로 채워지므로 고유 한 테이블이 아닌 모든 사용자의 데이터를 가져옵니다. 3 ...' –

1

그냥 완성도 나는 그것이 다른 곳에서 언급 생각하지 않는 : 사람들이 UNION을 사용할 때 종종 UNION ALL이 의도 것입니다.

UNION은 중복을 제거하므로 정렬이 필요하므로 상대적으로 비용이 많이 듭니다. 이렇게하면 최종 결과에서 중복이 제거됩니다 (따라서 단일 쿼리에 중복이 있거나 개별 SELECT에서 동일한 데이터가 있는지 여부는 중요하지 않습니다). UNION은 집합 연산입니다.

UNION ALL은 결과를 함께 고정합니다. 정렬 없음, 중복 제거 없음. 이것은 UNION보다 빠르다 (또는 적어도 더 나쁜 것은 아니다).

개별 쿼리가 중복 결과를 반환하지 않으면 UNION ALL을 사용하십시오. (실제로 UNION ALL을 가정하고 그 동작이 필요하면 UNION에 대해 생각하는 것이 가장 좋으며 UNION과 함께 SELECT DISTINCT를 사용하는 것은 불필요합니다).