$this->db->select() just builds a part of the query; it belongs the the Active Record class, in fact, and using it alone doesn't make sense because it just creates the
"SELECT field,field1,field3" part, nothing else.
You need all the other parts to build a full query, and the call the
->get() method and, on that, retrieve the results.
$this->db->query() is just a function helper that make you run the query you pass it as an argument.
Important difference: Active Record automatically escapes queries, while
$this->db->query() doesn't, so you should call
$this->db->escape() on individual variables or run it using placeholders:
$sql = "INSERT INTO table (field1,field2) VALUES (?,?)";
$query = $this->db->query($sql,array('asd','lol'));