Join 절(Visual Basic)
업데이트: 2007년 11월
두 개의 컬렉션을 단일 컬렉션으로 결합합니다. 조인 연산은 일치하는 키를 기준으로 하며 Equals 연산자를 사용합니다.
Join element In collection _
[ joinClause _ ]
[ groupJoinClause ... _ ]
On key1 Equals key2 [ And key3 Equals key4 [... ]
구성 요소
element
필수적 요소. 조인된 컬렉션의 제어 변수입니다.collection
필수적 요소. Join 연산자의 왼쪽에서 식별된 컬렉션과 결합할 컬렉션입니다. Join 절은 다른 Join 절이나 Group Join 절에서 중첩될 수 있습니다.joinClause
선택적 요소. 쿼리 조건을 더 구체화하기 위한 하나 이상의 추가 Join 절입니다.groupJoinClause
선택적 요소. 쿼리 조건을 더 구체화하기 위한 하나 이상의 추가 Group Join 절입니다.key1Equalskey2
필수적 요소. 조인된 컬렉션의 키를 식별합니다. 조인된 컬렉션에서 키를 비교하려면 Equals 연산자를 사용해야 합니다. And 연산자로 조인 조건을 결합하여 여러 키를 식별할 수 있습니다. key1은 Join 연산자의 왼쪽에 있는 컬렉션에서 가져와야 합니다. key2는 Join 연산자의 오른쪽에 있는 컬렉션에서 가져와야 합니다.조인 조건에 사용되는 키는 컬렉션에서 두 개 이상의 항목을 포함하는 식일 수 있습니다. 하지만 각 키 식에는 해당 컬렉션의 항목만 포함할 수 있습니다.
설명
Join 절은 조인된 컬렉션의 일치하는 키 값을 기준으로 두 개의 컬렉션을 결합합니다. 결과 컬렉션에는 Join 연산자의 왼쪽에서 식별된 컬렉션과 Join 절에서 식별된 컬렉션에서 가져온 값의 결합이 포함될 수 있습니다. 쿼리는 Equals 연산자에 의해 지정된 조건을 충족하는 결과만 반환합니다. 이는 SQL의 INNER JOIN과 같습니다.
한 쿼리에서 여러 Join 절을 사용하여 두 개 이상의 컬렉션을 단일 컬렉션으로 조인할 수 있습니다.
Join 절을 사용하지 않고 암시적 조인을 수행하여 컬렉션을 결합할 수 있습니다. 이를 수행하려면 여러 In 절을 From 절에 포함시키고 조인에 사용할 키를 식별하는 Where 절을 지정합니다.
Group Join 절을 사용하여 컬렉션을 단일 계층적 컬렉션으로 결합할 수 있습니다. 이는 SQL의 LEFT OUTER JOIN과 유사합니다.
예제
다음 코드 예제에서는 암시적 조인을 수행하여 주문이 있는 고객의 목록을 결합합니다.
Dim customerIDs() = {"ALFKI", "VICTE", "BLAUS", "TRAIH"}
Dim customerList = From cust In customers, custID In customerIDs _
Where cust.CustomerID = custID _
Select cust.CompanyName
For Each companyName In customerList
Console.WriteLine(companyName)
Next
다음 코드 예제에서는 Join 절을 사용하여 두 개의 컬렉션을 조인합니다.
Imports System.Diagnostics
Imports System.Security.Permissions
Public Class JoinSample
<SecurityPermission(SecurityAction.Demand)> _
Public Sub ListProcesses()
Dim processDescriptions As New List(Of ProcessDescription)
processDescriptions.Add(New ProcessDescription _
With {.ProcessName = "explorer", _
.Description = "Windows Explorer"})
processDescriptions.Add(New ProcessDescription _
With {.ProcessName = "winlogon", _
.Description = "Windows Logon"})
processDescriptions.Add(New ProcessDescription _
With {.ProcessName = "cmd", _
.Description = "Command Window"})
processDescriptions.Add(New ProcessDescription _
With {.ProcessName = "iexplore", _
.Description = "Internet Explorer"})
Dim processes = From proc In Process.GetProcesses _
Join desc In processDescriptions _
On proc.ProcessName Equals desc.ProcessName _
Select proc.ProcessName, proc.Id, desc.Description
For Each proc In processes
Console.WriteLine("{0} ({1}), {2}", _
proc.ProcessName, proc.Id, proc.Description)
Next
End Sub
End Class
Public Class ProcessDescription
Public ProcessName As String
Public Description As String
End Class
이 예제는 다음과 유사한 출력을 생성합니다.
winlogon (968), Windows Logon
explorer (2424), Windows Explorer
cmd (5136), Command Window
다음 코드 예제에서는 두 개의 키 열과 함께 Join 절을 사용하여 두 개의 컬렉션을 조인합니다.
Imports System.Diagnostics
Imports System.Security.Permissions
Public Class JoinSample2
<SecurityPermission(SecurityAction.Demand)> _
Public Sub ListProcesses()
Dim processDescriptions As New List(Of ProcessDescription2)
' 8 = Normal priority, 13 = High priority
processDescriptions.Add(New ProcessDescription2 _
With {.ProcessName = "explorer", _
.Description = "Windows Explorer", _
.Priority = 8})
processDescriptions.Add(New ProcessDescription2 _
With {.ProcessName = "winlogon", _
.Description = "Windows Logon", _
.Priority = 13})
processDescriptions.Add(New ProcessDescription2 _
With {.ProcessName = "cmd", _
.Description = "Command Window", _
.Priority = 8})
processDescriptions.Add(New ProcessDescription2 _
With {.ProcessName = "iexplore", _
.Description = "Internet Explorer", _
.Priority = 8})
Dim processes = From proc In Process.GetProcesses _
Join desc In processDescriptions _
On proc.ProcessName Equals desc.ProcessName _
And proc.BasePriority Equals desc.Priority _
Select proc.ProcessName, proc.Id, desc.Description, _
desc.Priority
For Each proc In processes
Console.WriteLine("{0} ({1}), {2}, Priority = {3}", _
proc.ProcessName, _
proc.Id, _
proc.Description, _
proc.Priority)
Next
End Sub
End Class
Public Class ProcessDescription2
Public ProcessName As String
Public Description As String
Public Priority As Integer
End Class
이 예제는 다음과 유사한 출력을 생성합니다.
winlogon (968), Windows Logon, Priority = 13
cmd (700), Command Window, Priority = 8
explorer (2424), Windows Explorer, Priority = 8