It's fine. Though you ideally shouldn't have a bunch of spaces everywhere like you do. Just put a space between attributes, not around the =.
Using <input type="button"> creates a simple button that effectively does nothing. It will NOT submit your form. This type of button is mostly used in combination with javascript.
Using <input type="submit"> creates a simple button that will submit the form and is a standard practice for submitting forms.
Using <input type="reset"> creates a simple button that just resets the form's fields to their default values, it does NOT submit the form.
Using <button> allows you to create nicer button because it allows more than just text. For example, you can combine text and an image.
<button type="submit">
<img src="/images/search.png" alt="">
Search
</button>
With <button> you also have type="button", type="submit", and type="reset" which have the same semantics as on <input>.
It doesn't really matter, though I personally find double-quotes on attribute values to be more correct and causes fewer issues. Use which ever one you want, but be consistent and use the same one everywhere.
This is an artifact of the days when XHTML was popular and the thing to use. It's called a self-closing tag and is necessary in XHTML as everything must have an open and close tag to be XML compatible.
These days it's best to stick to plain HTML which does not use XHTML specific things like self-closing tags.
First of all, it is <label for="">, there's no underscore in there anywhere.
Second, no you do not provide labels for each option in a select. The label is to describe the input as a whole, your options are labeled by their text content.
They are both correct. It's mostly a matter of preference, or sometimes dictated by your layout.
<label> can be be associated with an input either with the for attribute, or by having the input enclosed within it. Enclosing the input is convenient, but it may not always be possible when considering layout requirements.