여러 SQL 테이블의 결과를 결합하는 방법 (힌트 : 세 가지 방법이 있습니다)
관계형 데이터베이스에서 쿼리에 표시하려는 정보가 여러 번 있습니다. 둘 이상의 테이블. 그러면 “두 개 이상의 테이블의 결과를 어떻게 결합합니까?”라는 질문이 생깁니다.
이 강의의 모든 예제는 Microsoft SQL Server Management Studio 및 AdventureWorks2012 데이터베이스를 기반으로합니다. 무료로 사용할 수 있습니다. 가이드를 사용하는 도구 SQL Server 사용 시작하기
두 개 이상의 쿼리에서 결과를 결합 할 수있는 방법은 무엇입니까?
SQL은 그렇게하지 않았다면 그다지 유용한 언어가 아닐 것입니다. 두 개 이상의 쿼리 결과를 결합 할 수있는 쉬운 방법을 제공하지 않습니다. 다행히도 여러 테이블의 데이터를 결합 할 수있는 세 가지 주요 방법이 있습니다. 여기에서 이에 대해 간략하게 살펴보고 더 자세한 기사에 대한 링크를 제공합니다.
데이터를 결합하는 세 가지 주요 방법
관계형 데이터베이스 테이블의 데이터는 행과 열로 구성됩니다. 데이터를 결합하는 방법을 조사 할 때 최종 결과는 다음과 같습니다. 둘 이상의 테이블에서 행 집합을 가져 와서 결과에 더 많은 열을 추가합니다. s.
대부분의 사람들이 데이터를 결합하는 방법을 배우면 다음에 대해 배웁니다.
- JOIN – 조인을 사용하여 하나 이상의 쿼리 열을 하나의 결과로 결합 할 수 있습니다.
li>
- UNION – Union 및 기타 집합 연산자를 사용하여 하나 이상의 쿼리의 행을 하나의 결과로 결합합니다.
- 하위 쿼리 – 중첩 쿼리라고도하며 다음에서 별도의 검색을 수행하는 데 사용할 수 있습니다. 데이터베이스는 결과를 다른 쿼리에 사용할 수 있음을 보여주었습니다.
조인
저는 조인을 데이터베이스를 다시 결합하는 접착제로 생각하고 싶습니다. 관계형 데이터베이스는 일반적으로 데이터를보다 쉽게 유지하고 성능을 향상시키기 위해 정규화되지만 최종 결과는 정보가 여러 테이블로 분리된다는 것입니다. 조인을 사용하여 해당 정보를 사람이 읽을 수있는 형식으로 다시 결합 할 수 있습니다. 데이터는 각 테이블의 열을 일치시켜 재결합됩니다.
모든 경우에 조인에는 두 가지 주요 요소, 즉 두 개의 테이블과 조인 조건이 필요합니다. 테이블은 행과 열을 가져 오는 데 사용할 것이며 조인 조건은 테이블 간의 열을 일치시키는 방법입니다.
예제 JOIN
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
조인에는 두 가지 주요 유형이 있습니다. 내부 조인 및 외부 조인
내부 조인은 조인 조건이 두 테이블에서 일치하는 경우에만 결과 행을 반환합니다. 내부 조인은 주로 한 테이블의 기본 키와 다른 테이블의 외래 키를 일치시키는 데 사용됩니다.
두 번째 유형의 조인은 외부 조인입니다. 외부 조인은 항상 왼쪽 또는 오른쪽 테이블이라고하는 기본 테이블에 대해 하나 이상의 행을 반환하고 일치하지 않는 열의 해당 열에 null 값을 반환합니다. 외부 조인은 일치하지 않는 데이터를 찾는 데 유용합니다.
조인은 결합 된 두 테이블에 존재하는 것보다 더 많은 행을 반환 할 수 있다는 점에 유의해야합니다. 조인은 일치하는 조합을 반환합니다. 두 테이블을 조인하면 하나는 5 개 행을 포함하고 다른 테이블은 10 개 행을 포함 할 수 있습니다. 결과는 조인 조건에 따라 0-50 개의 행을 포함 할 수 있습니다.
Unions
UNION은 다음과 같습니다. 두 개 이상의 쿼리 행을 하나의 결과로 결합하는 데 사용됩니다. Union을 집합 연산자라고합니다.
Union이 작동하려면 몇 가지 특별한 조건이 발생해야합니다. 첫째, 각 쿼리에는 동일한 수의 열이 있어야합니다. 둘째, 이러한 열의 데이터 유형은 호환되어야합니다. 일반적으로 각 쿼리는 동일한 수와 유형의 열을 반환해야합니다.
유합의 실제 예는 두 테이블에 부품 번호가 포함되어 있고 카탈로그에 대한 결합 목록을 만들려는 경우입니다. 최종 결과가 결합 된 쿼리에 대한 고유 목록이되도록 선택하거나 UNION ALL을 사용하는 경우 각 테이블의 모든 행을 반환하도록 선택할 수 있습니다.
예제 UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
유니온 이외에도 몇 가지 편리한 집합 연산자가 있습니다.
- INTERSECT – 두 테이블간에 공통적 인 행만 반환하는 데 사용할 수 있습니다.
- EXCEPT – 한 테이블에 존재하지만 다른 테이블에는없는 행을 반환하는 데 사용할 수 있습니다.
계속해서 찾은 SQL에 대해 자세히 알아보십시오. 조인을 사용하여 Intersect 및 Except에 해당하는 문을 작성할 수 있지만 Union에는 해당하는 문이 없습니다.
서브 쿼리
서브 쿼리를 중첩 쿼리라고도합니다. 다른 쿼리 내에 정의 된 쿼리입니다. 하위 쿼리는 혼란 스러울 수 있습니다. 이 중 많은 부분이 SQL select 문의 여러 위치에서 여러 용도로 사용될 수 있다는 사실에서 비롯된 것 같습니다!
예를 들어 다음은 하위 쿼리를 볼 수있는 몇 가지 영역입니다.
p>
- SELECT 절 – 값을 반환하는 데 사용됩니다. 예를 들어 판매 테이블을 쿼리하는 경우 하위 쿼리 내에서 모든 판매의 합계를 반환하여 총 판매를 포함 할 수 있습니다.
- WHERE 절 – 비교할 때 where 절에서 하위 쿼리를 사용할 수 있습니다. 전체 평균과 매출을 비교하기 위해 비교를 설정할 수 있습니다. 전체 평균은 하위 쿼리에서 반환됩니다. IN과 같은 멤버십 연산자에서 하위 쿼리를 사용할 수도 있습니다. in 절을 하드 코딩하는 대신 하위 쿼리를 사용하여보다 동적으로 만들 수 있습니다.
- HAVING 절 – 하위 쿼리의 단일 값이 HAVING 절 비교에 포함됩니다.
예제 하위 쿼리
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
같음,보다 큼,보다 작음과 같은 선택 절 및 비교 연산자에 사용되는 경우 , 하위 쿼리는 하나의 행만 반환 할 수 있습니다. IN과 같은 멤버쉽 연산자와 함께 사용하면 쿼리가 하나 이상의 행을 반환해도 괜찮습니다.