What is the use of @db_query? I have used db_query to retrieve table rows from database. Recently I noticed, some people use @db_query instead of db_query. 

I dont see any difference with the two. Is it doing any special functionality that normal db_query doesn't?
@ is the error control operator, what it does is suppress notices/warnings and even script halting errors. You see it most commonly used with variable comparisons where the person coding didn't bother to check if a variable is set first.

if (@$unsetVar != $var) {
  @$unsetVar .= $non_existent_variable';
}


Suppresses the warning that $unsetVar is not initialised.

The proper way of doing this though would be using isset($unsetVar) to check that this variable is in fact initialized first, if not don't do anything with it, or assign it a default of some kind. Then neither the comparison or the concatenate will throw errors. Keeping this in mind can prevent some show stopping bugs later down the line as your applications become more complicated. 

I'd personally advise against using @ wherever possible, if there's a notice/warning/error it's usually for a reason, using @ is a lazy fix and can make debugging a pain if something does go wrong.

Tl;dr, I'd avoid using @ where possible.