Joins in ArcGIS Pro
Revised 10 March 2026
A join is a database operation where two tables are connected based on common key values. Joins are very commonly used for processing and analyzing geospatial data.
This tutorial covers basic join techniques that you can use in ArcGIS Pro. Most of the examples will use data from the US Census Bureau.
- Attribute_Joins
- Joining USCB Table Data to Polygons
- Joining Non-USCB Data on FIPS Codes
- Joining Non-USCB Data on County Names
- Spatial Joins
- Joining Dissimilar Areas
- Point Attributes from Polygons
- Proximity Joins
- Aggregate Points
- Aggregate Coverage
- Categorical Percentage
- Joins for Analyzing Change
- Analyzing Change with Attribute Joins
- Analyzing Change with Polygon Joins
- Analyzing Change with Centroid Joins
- Analyzing Gentrification
- Raster and Elevation Data
All videos in this tutorial are silent.
Attribute Joins
In GIS, an attribute join attaches a table of attribute data to a feature class of polygons based on a set of key field values common to both the table and feature class.
Attribute joins can be used to connect data from external tables (such as in a CSV file) to geospatial defined in polygon feature classes.
Joining USCB Table Data to Polygons
The US Census Bureau makes their makes their data available as tables and you will need to join those tables to TIGER/Line polygons for mapping and spatial analysis. USCB data is described more fully in the tutorial on Geospatial Data from the US Census Bureau.
To join USCB table data to USCB polygon feature class, we join on the GEO_ID field in the downloaded table data and the GEOIDFQ field in the polygon feature class.
- Open the Join Features tool.
- Target Layer: Select the polygon layer (Counties).
- Join Layer: Browse to the CSV file (Electric_Heat.csv).
- Output Dataset: Provide a meaningful name (Electric_Heat).
- Join Operation: Join one to many
- Attribute Relationship: GEOIDFQ (target field) to GEO_ID (join field)
- Symbolize the updated layer to verify the new fields have been joined into the data.
Joining Non-USCB Data on FIPS Codes
Geospatial table data from non-USCB sources occasionally includes FIPS codes for areas that can then be joined with TIGER shapefiles or secondary data GEOIDFQ for import into ArcGIS Pro.
There are multiple common challenges to joining with FIPS codes from non-USCB sources:
- FIPS codes often have leading zeros (e.g. 01 for Alabama) that will be removed by spreadsheet software, resulting in name mismatches that cause joins to fail.
- FIPS codes often import as numeric values that cannot be joined with the text codes in TIGER polygon data.
- FIPS codes are sometimes abbreviated, such as using only the three digit county FIPS code in state-provided data without the two-digit state FIPS prefix needed to join with five-digit FIPS codes in TIGER polygon data.
The solution to these problems is to convert your FIPS codes into GEOIDFQ in your spreadsheet program before importing and joining the CSV in ArcGIS Pro.
For example, the downloadable county level data for the US Religion Census from the Association of Statisticians of American Religious Bodies contains a FIPS code numeric FIPS code field.
- In a spreadsheet program, clean up the CSV and add a GEOIDFQ column.
- Use the CONCATENATE function with the county GEOIDFQ prefix (0500000US) to create a GEOIDFQ field.
- If the FIPS code is in a numeric format, use the TEXT(cell, "00000") function to convert the numeric cells into five-digit FIPS codes.
- Remove formatting so numbers do not come in as text.
- Remove extraneous non-data rows.
- Export to a CSV file with a meaningful name (2020_Religion_Census).
- Use the Export Table tool to bring the CSV file in as a table. If used directly in Join Features, some CSV file joins will fail with an Error 120036 field(s) not found in dataset error.
- Input Table: The CSV file (Religion_2020.csv)
- Output Table: Provide a meaningful name (Religion_2020)
- Use the Export Features tool to copy the counties data from the feature service.
- Input Features: Browse ArcGIS Online for the feature service (Minn 2019-2023 ACS) and select the counties layer.
- Output Feature Class: Browse to the project geodatabase and provide a name (Counties).
- Use the Join Features tool to join the CSV table to the polygons.
- Target Layer: Browse to the exported features (Counties).
- Join Layer: Browse to the data table (Religion_2020).
- Output Name: Browse to the project geodatabase and provide a meaningful name (Religion_Counties).
- Join Operation: Join one to many
- Attribute Relationship: Select the GEOIDFQ field in the polygons and the new GEOIDFQ field in the CSV table.
- Symbolize the updated layer to verify the new fields have been joined into the data.
Joining Non-USCB Data on County Names
Attribute joins can be used to join county-level table data to TIGER polygons based on county names for choropleth mapping.
Be aware that attribute joins require that the names in the two data sets match exactly, and using place names for joins can result in mismatches or a complete failure to join any features.
- TIGER/Line shapefiles provide county names in title case and you will need to preprocess your CSV file for county names if they capitalized in any other manner.
- You may also need to make iterative changes to your CSV names for spelling variations like St. (St. Louis vs. St Louis) and De (De Witt vs. DeWitt vs. Dewitt).
- If you are joining county data for multiple states, you will also need to have a common key for the state name or abbreviation because county names are not unique across the 50 US states. For example, in the US there are 31 Washington counties and 26 Jefferson counties.
- If a FIPS code is available, those will generally be more accurate than joining on county names.
This example uses county-level results in Illinois from the 1960 US presidential election from the Illinois Secretary of State via Wikipedia.
- Copy the table into a spreadsheet program.
- Remove all unnecessary columns and rows, leaving one header row.
- Where applicable, remove (find and replace) percent signs to that the software interprets the column as numeric.
- Save the data as a CSV file (IL_1960_Election.csv).
- Use Join Features tool to join the CSV table to the polygons.
- Target Layer: Select the polygon layer (Counties).
- Join Layer: Browse to the table CSV file (IL_1960_Election.csv).
- Output Name: Browse to the project geodatabase and provide a meaningful name (IL_1960_Election).
- Join Operation: Join one to many
- Attribute Relationship: Select the Name field in the features and the county name field (County) in the CSV file.
- If you see missing features (DeWitt = De Witt), fix the CSV and re-run the tool.
Spatial Joins
A spatial join connects two datasets based on a spatial relationship where attribute values are transferred from a set of features in a join layer to a target layer.
Spatial joins can be used to aggregate and summarize values to/from USCB polygons for mapping and analysis.
Joining Dissimilar Areas
Spatial joins can be used to aggregate data from polygons into larger or smaller polygons. This example demonstrates use of a spatial join to join demographic census tract data from the Minn 2015-2019 ACS Tracts feature service to neighborhood boundaries in the City of Chicago.
- Add a layer of demographic data. This example uses tract level data for the US (US_Tracts).
- Add a layer with the areas to which you want to add demographic data (Neighborhoods).
- Run the Summarize Within tool.
- Input Polygons: The destination areas (Neighborhoods)
- Input Summary Features: The source areas (US_Tracts)
- Output Feature Class: Provide a meaningful name (Neighborhood_Demographics)
- Keep all input polygons: Check this
- Summary fields: Provide the name(s) of demographic fields along with the way that the tool should handle multiple tracts that intersect a single destination area. For this example:
- Total Households (sum)
- Median Household Income (mean)
- Median Monthly Rent (mean)
- Median Age (mean)
- Minutes To Work (mean)
- Symbolize by one of the joined variables to verify expected results.
Point Attributes from Polygons
You can get attribute data for points from polygons with a spatial join.
In this example we join hospital locations in Illinois with census tracts to get demographic characteristics of the neighborhoods where the hospitals are located.
- Open the
Export Features tool to import the demographic data.
- Input Features: Browse ArcGIS Online for the feature service (Minn 2019-2023 ACS) and select the tracts layer.
- Output Feature Class: Browse to the project geodatabase and provide a name (Tracts).
- Filter Expression: Add a filter for ST to import only the desired area (IL).
- Open the
Join Features tool to join demographic data to the points.
- Target Layer: Browse to the points.
- Join Layer: Browse to the demographic tracts.
- Output Name: Browse to the project geodatabase and provide a meaningful name.
- Join Operation: Join one to many
- Spatial Relationship: Intersects.
- Visualize or analyze using the joined demographic data.
Proximity Joins
Spatial joins can be used to get counts of join features within a specific distance of the target features.
For this example, we join park boundaries from the Chicago Park District with census tracts in Cook County, IL to get the count of parks within 1/2 mile of each census tract.
- Import the features you are counting for proximity.
- Open the
Export Features tool to import the demographic data.
- Input Features: Browse ArcGIS Online for the feature service (Minn 2019-2023 ACS) and select the tracts layer.
- Output Feature Class: Browse to the project geodatabase and provide a name (Tracts).
- Filter Expression: Add a filter for GEOIDFQ begins with the GEOIDFQ prefix Cook County begin with 1400000US17031. See above for information on how to get a GEOIDFQ prefix for a county.
- Open the Join Features tool.
- Target Layer: Browse to the tracts.
- Join Layer: Browse to the parks.
- Output Name: Browse to the project geodatabase and provide a meaningful name.
- Join Operation: Join one to one
- Spatial Relationship: Planar Near
- Spatial Near Distance: 800 meters (1/2 mile)
- Keep All Target Features: Check this to keep all tracts even if there is no matching table data.
- Summary Fields: Specify the fields you wish to get from the demographic tracts (Acres - sum).
Aggregate Points
Spatial joins can be used to get counts of point within polygons.
This example aggregates Chicago Police Department robbery crime points for 2023 from the Chicago Data Portal
- Acquire the CSV point data.
- Use the XY Table To Point tool to import the points into the project geodatabase.
- Input Table: browse on your local machine to find the CSV of crime points that you downloaded (Crime_2023).
- Output Feature Class: Give a meaningful name with no spaces or punctuation (Crime_2023).
- X Field and Y Field: Make sure these are automatically set to the latitude and longitude columns.
- Use the Export Features tool to copy the tract data from the feature service.
- Input Features: Browse ArcGIS Online for the feature service (Minn 2019-2023 ACS) and select the tracts layer.
- Output Feature Class: Browse to the project geodatabase and provide a name (Tracts).
- Expression: Add a filter for GEOIDFQ begins with the GEOIDFQ prefix for the county tracts for Cook County, this is 1400000US17031.
- Use the
Summarize Within tool to perform a spatial join to get neighborhood
crime counts for 2019.
- Input Polygons: Tracts
- Input Summary Features: Crime_2023
- Output Feature Class: Crime_Tracts
- Keep all input polygons: Leave checked
- Symbolize on the Count of Points field for point counts.
Aggregate Coverage
Spatial joins can be used to calculate the areas of polygon features that are covered by areas in another feature class.
This example estimates the percentage of census tracts in Milwaukee County, WI (Tracts) that are covered with tree canopy based on a feature class of tree canopy polygons (Tree_Canopy) digitized from 2020 lidar data by the Milwaukee County GIS and Land Information Office.
- Use the Tabulate Intersection tool to calculate the area of each tract covered by tree canopy polygons.
- Input Zone Features: The polygons being covered (Tracts)
- Zone Fields: Unique identifier for the Input Zone Features (GEOIDFQ)
- Input Class Features: The covering polygons (Tree_Canopy)
- Output Table: Canopy_Table
- Output Units: Square Meters (same as USCB area unit)
- Use the Join Features tool to join the intersection table with the tracts.
- Target Layer: Tracts
- Join Layer: Canopy_Table
- Output Dataset: Canopy_Tracts
- Keep All Target Features: Check this
- Attribute Relationship: The common key is GEOIDFQ
- Summary Fields
- AREA (Sum)
- PERCENTAGE (Sum)
- Use the Alter Field tool to rename the covered area and percentage to more meaningful values.
- Input Table: Canopy_Tracts
- Field Name: SUM_AREA / SUM_PERCENTAGE
- New Field Name: Canopy_Area / Canopy_Percent
- New Field Alias: Canopy_Area / Canopy_Percent
Categorical Percentage
Spatial joins can be used to calculate percentages of features based on categorical variables.
This example estimates the percentage of waterways by Illinois county that are classified by the US Environmental Protection Agency (EPA) as too polluted or otherwise degraded to support their potential or existing uses (impaired). The original data source is the EPA via the ArcGIS Living Atlas USA Impaired or Threatened Waterbodies lines feature service.
The feature class contains an is_impaired flag (Y/N) to indicate impairment status.
- Use Join Features to sum the total waterway length in each county.
- Target Layer: Counties
- Join Layer: Waterways
- Output Dataset: County_Waterways
- Keep All Target Features: Check this
- Spatial Relationship: Intersects
- Summary Fields: Shape_Length (Sum)
- Use the Select tool to create a Alter Field tool to rename the covered area and percentage to more meaningful values.
- Input Features: Waterways
- Output Feature Class: Waterways_Impaired
- Expression: Is_Impaired is Y
- Use Join Features to sum the total impaired waterway length in each county.
- Target Layer: County_Waterways
- Join Layer: Waterways_Impaired
- Output Dataset: County_Impaired
- Keep All Target Features: Check this
- Spatial Relationship: Intersects
- Summary Fields: Shape_Length (Sum)
- Use the Calculate Field tool to calculate the percentage of total waterway length that is imapired.
Joins for Analyzing Change
You can use joins between data for different vintages (year ranges) to analyze change over time.
The examples below use ACS data downloaded from the Minn 2010-2014 ACS and Minn 2019-2023 ACS feature services in the University of Illinois ArcGIS Online organization. This data is also available as GeoJSON files.
Analyzing Change with Attribute Joins
If you are comparing areas that have not significantly changed spatially over time, attribute joins are preferred to avoid the data ambiguities associated with spatial joins.
For this example, we join 2010-2014 population data to 2019-2023 demographic data to analyze population change by county over that period.
- Use Join Features tool to join the CSV table to the polygons.
- Target Layer: Select the layer for the later period (Counties_2023).
- Join Layer: Select the layer for the earlier period (Counties_2014).
- Output Name: Browse to the project geodatabase and provide a meaningful name (Counties_Change).
- Join Operation: Join one to many
- Attribute Relationship: Select the Name field in the features and the county name field (County) in the CSV file.
- Use the Calculate Field tool to calculate the percentage change (Population_Change).
- View the Attribute Table and sort by the change field to identify the areas with the greatest and least change.
Analyzing Change with Polygon Joins
Areas used for aggregating data often change over time.
- The borders of metropolitan areas (CBSAs) can grow and shrink with population and economic change.
- Census tracts in growing areas are commonly split to keep the tracts reflective of facts on the ground and around the optimal 4,000 resident size.
When analyzing changes across time with between feature classes with dissimilar areas, you will need to use spatial joins.
With spatial joins you will generally want to use the means of derived values (like percentages or means) rather than sums of fundamental values that can result in distorted results when individual join areas overlap multiple target areas.
This example analyzes income and population density change in Cook County, IL census tracts between 2010-2014 and 2019-2023.
- Use Join Features tool to spatially join the two layers.
- Target Layer: Select the polygon layer for the ending period (Tracts_2013).
- Join Layer: Select the polygon layer for the starting period (Tracts 2014).
- Output Name: Browse to the project geodatabase and provide a meaningful name (Tracts_Change).
- Join Operation: Join one to one
- Spatial Relationship: Intersects
- Summary Fields: Select the field(s) of interest (Population_per_sq_Mile) and choose a summary statistic when multiple join areas intersect a single target area (usually mean).
- Use the Calculate Field tool to calculate the amount of change (Density_Change).
Analyzing Change with Centroid Joins
A challenge with polygon joins is that the areas used between different years can have slightly different borders resulting from minor data changes over time. This can result in sliver overlaps where spatial joins average values from adjacent join polygons that are not actually representative of areas covered by target polygons.
- One technique for mitigating that issue is the use of centroids for either the join or target features so that each polygon is only joined to features that are clearly associated.
- If you are dealing with areas like census tracts that are likely to have split or moved between your analysis periods, you can create centroids from the target features that you can then use to get specific values from the join features.
- One disadvantage of this technique is that it will ignore situations where a target feature represents an area that is the combination of two or more join areas.
- A centroid join also produces a point feature classs that you would need to join back to areas if you want to map as a choropleth.
This example analyzes income and population density change in Cook County, IL census tracts between 2010-2014 and 2019-2023.
- Use Feature to Point to convert the target features (Tracts_2023) into centroids (Tracts_2023_Centroids).
- Use Join Features tool to get values from the join polygons in the target centroids.
- Target Layer: Select the polygon layer for the ending period (Tracts_2013).
- Join Layer: Select the polygon layer for the starting period (Tracts 2014).
- Output Name: Browse to the project geodatabase and provide a meaningful name (Tracts_Change).
- Spatial Relationship: Intersects
- Join Operation: Join one to many
- Use the Calculate Field tool to calculate the amount of change (Density_Change).
- If you wish to bring the joined data back into the polygons, use Delete Field to remove unneeded (confusing) fields and Join Features to attribute join the attributes back to the target polygons.
Analyzing Gentrification
The term gentrification in the contemporary context was first used by Ruth Glass (1964) to describe the transformations in London associated with the migration of middle class residents into traditionally poor and working class urban neighborhoods. The concept itself is contested, as are the different techniques for identifying gentrifying areas. In addition, US Census Bureau ACS data data often has wide margins of sampling error and temporal uncertainty introduced by long sampling periods in a highly dynamic areas that are undergoing gentrification.
Daniel Yonto and Claire Schuch (2020), followed David Ley (1986) in analyzing social gentrification on a continuous scale with a tract-level social status index:
- Percentage workforce employed in professional, managerial, and administrative jobs
- Percentage of the population with a university-level education
- Median household income log transformed to compensate for skew
Areas with large changes in the social status index are often gentrifying.
This example demonstrates analysis of gentrification in Cook County, IL between 2010-2014 and 2019-2023. Because this example chains multiple tools together, we use ModelBuilder to facilitate reproducability and debugging.
- Use Calculate Field to calculate the social status index in both the earlier and later time periods (SSI_2014 and SSI_2023).
- Use Join Features tool to spatially join the two layers.
- Target Layer: Select the polygon layer for the ending period (Tracts_2013).
- Join Layer: Select the polygon layer for the starting period (Tracts 2014).
- Output Name: Browse to the project geodatabase and provide a meaningful name (Tracts_Change).
- Join Operation: Join one to one
- Spatial Relationship: Intersects
- Summary Fields: Select the field(s) of interest (Mean_SSI_2014) and choose a summary statistic when multiple join areas intersect a single target area (usually mean).
- Use Calculate Field to create an SSI_Change field used to identify areas with the greates increase in SSI, indicating possible gentrification.
Raster and Elevation Data
While the USCB does not provide raster or elevation data, ArcGIS Pro provides tools that can be used to acquire, clip, and summarize raster data within USCB polygons.
Image Service Download
Image services provide clients with the ability to access raster and image data from a server geodatabase.
- The Living Atlas provides a number of image servers using raster data from US government agencies like the US Geological Survey or NASA.
- Although Living Atlas image services are primarily intended for display, in some cases it is possible to export portions of the image data to rasters in your project geodatabase for further use in ArcGIS Pro.
- When performing rigorous data analysis, such as for hydrological research, you may be better served by accessing GeoTIFF raster files from sites like the USGS EarthExplorer or the National Map downloader.
The National Agricultural Imagery Program (NAIP) is a program begun by the US Department of Agriculture (USDA) in 2002 to collect leaf-on aerial imagery during the agricultural growing season. Aside from research value, the imagery is used to maintain the USDA's Common Land Unit (CLU) database of farm fields across the US (ESRI n.d.).
For this example we demonstrate how to download a portion of the USA NAIP Imagery: Natural Color Living Atlas layer covering Peoria County, Illinois to a raster in the project geodatabase.
- Acquire: Add the desired image service layer to your map.
- Zoom so the extent of your map display covers the desired area for export.
- Store: Right click on the image layer and select Data and Export Raster tool
- Output Raster Dataset: Open the folder, navigate to the project geodatabase, and provide a meaningful name (County_NAIP)
- Coordinate System: Web Mercator (keep the default)
- Make sure the full area you want exported is visible on the map.
- Clipping Geometry: Select Current Display Extent. This will reset the Extent boxes and immediately change to As Specified Below.
- Select Maintain Clipping Extent.
- Raster Properties - Raster Size: Change the Columns and Rows to the maximum of 4000 for highest resolution.
- Click Export.
- Communicate: Remove the ArcGIS Online tile layer and leave only the new raster layer on the map.
Clipped Image Service Download
If you have boundary polygon(s), you can clip the downloaded raster.
- Acquire: Add the desired image service layer to your map.
- Zoom so the extent of your map display covers the desired area for export.
- Store: Right click on the image layer and select Data and Export Raster tool
- Output Raster Dataset: Open the folder, navigate to the project geodatabase, and provide a meaningful name (County_NAIP)
- Coordinate System: Web Mercator (keep the default)
- Clipping Geometry: Select the polygons to which you want to clip.
- Select Use input features for clipping geometry
- Select Maintain Clipping Extent.
- Raster Properties - Raster Size: Change the Columns and Rows to the maximum of 4000 for highest resolution.
- Click Export.
- Communicate: Remove the ArcGIS Online tile layer and leave only the new raster layer on the map.
- You may need to Refresh your Catalog view to see the raster in your project geodatabase.
Point Elevation
If your primary interest is getting elevation values for points and you have fewer than 1,000 features, the Summarize Elevation tool can be used to add an elevation field to a point feature class from ESRI's world elevation service.
This example demonstrates adding elevation values to a point feature class of Chicago Transit Authority "L" Stations.
Area Elevation
As with points, if your primary interest is getting elevation values for areas and you have fewer than 1,000 features, the Summarize Elevation tool can be used to add an elevation field to an area feature class.
This example adds elevation to neighborhood boundaries in the City of Chicago.