ES6 transpiler: https://github.com/google/traceur-compiler/
This screencast will get you 100% comfortable with D3 joins. The tutorial is done in such a way that it introduces the concepts to you one at a time, and it's also beginner friendly.
D3 is built to work on live data: as your data changes, so does the visualization. Not only does this help with rendering speeds, as it only needs to render the deltas, it also allows you to expose the changes in data to the viewer with transitions and styling.
Joins make the visualization code more declarative, allowing you to state what should happen when data is introduced, removed or updated, instead of you keeping track of all this state yourself.