Setting urls from site/author/authorname to site/authorname is not a PHP/MySQL thing. It's a .htaccess/mod_rewrite thing affecting your custom permalinks. The only way I imagine doing this is to add lines to your .htaccess, for example:
RewriteRule ^(admin)/?$ /index.php?author_name=$1 [QSA,L]
You would have to add one for each author you want to link to in this way. This is because pattern matching performed on custom urls take a non-declared top-level directory name (i.e. /admin) to be a Page, and nothing else. Modifying this action (as well as switching to nickname) would require changes to the WP core.
Finally, to create a link on a post for this, you can combine a couple template tags:
<a href="<?php bloginfo('home'); ?>/<?php the_author_login(); ?>"><?php the_author(); ?></a>