How to pull extra data with a user Users, by default, do not have middle names. So let's say I create a table with a foreign key linking to the user id, this table will contain middle names. How would I tell craft to join the middle name data? Could I create a plugin with a hook that gets middle name whenever user data is pulled? Where do I begin?
You can add custom fields to users the same way as you do for entries, categories, and all other elements in Craft. Create a custom field for middle name, and go to Settings > Users > Fields and add that field to the field layout.

EDIT:
The field will show in the profile tab, and there is no way to properly add fields to the account tab, even with a plugin. But, although a bit hacky, you could do this by just moving the field with javascript.

First, install the Control Panel JS plugin by Lindsey DiLoreto. Read the docs on how to get the plugin to load your custom js-file.

Each custom field in the form has an id with the naming convention fields-myCustomFieldHandle-field. If you name the field middleName and want to put it before the email field on the account tab, you could do something like this:

$(function () {
    if ($('#userform').length&gt;0) { // just to make sure we're in the user edit page
       $('#email-field').before($('#fields-middleName-field'));
    }
});


Getting it to appear between the first and last name fields, or making them 100% width and putting the middlename in the middle, would also be possible, but requires a bit more DOM manipulation. Let me know if this is important for you.