Do you want the output all joined together, or are you trying to merge tables?
If you're looking just to combine tables in to a single output, I would suggest taking a look at JOIN clauses. Lasse Karlsen has an awesome visualization of joins posted over here. Specifically, I think you're after a left join, which will sorta of merge Table1, and Table2, and give you one output.
Also, since you have the full name split into two columns in Table2, you will have to throw in a CONCAT. Concat will merge multiple strings into a single string that you can then use for comparisons. E.g. CONCAT("string 1", " ", "string 3") gives you "string 1 string 3" (without the quotes).
Keep in mind too that Mark Smith in Table2 seems to have an extra space before his LastName. To take care of that, add in TRIM. This will remove leading, and trailing, spaces.
Depending on who/what/how the table was put together, the names still might not match exactly. If you do just a straight comparison (Table1.col = Table2.col), then the names would have to match up 100%, including case (FYI, I want to say this is not as important on a Windows hosted database, but I'm pretty sure it is important in Linux). You can toss in a LOWER or UPPER function to force everything to upper or lower case.
Here's my lousy pseudo-code take on it:
SELECT Table1.StudentID, Table1.FullName, Table2.HoursLogged FROM Table1 LEFT JOIN Table2 ON CONCAT(UPPER(Table2.FirstName), " ", UPPER(Table2.LastName)) = UPPER(Table1.FullName)
I've noticed sometimes databases get finicky, so you have to throw some graves in there. I'm honestly not certain why this matters sometimes, but I have had this resolve odd issues that have arisen in the past.
SELECT `Table1`.`StudentID`, `Table1`.`FullName`, `Table2`.`HoursLogged` FROM `Table1` LEFT JOIN `Table2` ON CONCAT(UPPER(`Table2`.`FirstName`), " ", UPPER(`Table2`.`LastName`)) = UPPER(`Table1`.`FullName`)
EDIT
Totally forgot about the null part. Santho has the right idea.
SELECT Table1.StudentID, Table1.FullName, ISNULL(Table2.HoursLogged, 0) AS `HoursLogged` FROM Table1 LEFT JOIN Table2 ON CONCAT(UPPER(Table2.FirstName), " ", UPPER(Table2.LastName)) = UPPER(Table1.FullName)
EDIT2
You know, I looked at it again, and I feel silly now... If the StudentID's match between the two tables, you don't have to mess with all the CONCAT stuff.
SELECT Table1.StudentID, Table1.FullName, ISNULL(Table2.HoursLogged, 0) AS `HoursLogged` FROM Table1 LEFT JOIN Table2 ON Table1.StudentID = Table2.StudentID
EDIT3
Jarlh's right.
I believe the standard to concatenate a string is a double vertical bar
"string 1" || "string 2"
https://msdn.microsoft.com/en-us/library/hh501243(v=sql.105).aspx
Trim leading/trailing spaces
trim(both ' ' from 'string 1')
https://msdn.microsoft.com/en-us/library/hh544564(v=sql.105).aspx
LEFT JOIN's are not standard, but you can add a WHERE clause to a (natural) JOIN
SELECT Table1.StudentID, Table1.FullName, Table2.HoursLogged FROM Table1, Table2 WHERE Table1.StudentID = Table2.StudentID
ISNULL is a function that's not supported by all database management systems, but COALESCE seems to be everywhere.
SELECT Table1.StudentID, Table1.FullName, COALESCE(Table2.HoursLogged, 0) AS HoursLogged FROM Table1, Table2 WHERE Table1.StudentID = Table2.StudentID