ここで回答を貰うより SQL の書き方を学んだ方が良い気がします。
select * from users where name=pass;
これが意味するのは、users テーブルの中から、name に入っている値と pass に入っている値が同じ行を検索するという意味です。
select * from users where name in pass;
これが意味するのは、users テーブルの中から、リスト pass の中に name が含まれる行を検索するという意味です。pass はリストでないので期待通りには動かないでしょう。
select * from users where id=1 in name and id=1 in pass;
これは正直何が書きたいのか分かりません。
ヒントですが、おそらくやられたいのは
画面等から入力されたユーザ名(name)とパスワード(pass)の対が正しいかどうかを判定する SQL を書きたいのだと思います。(こういう「何がしたいか」の質問でないと回答者には伝わりません)
だとすると、name と pass の値は分かっているのですから、SQL に組み込むだけです。
今から悪い例を書きます。
プログラムでユーザ名の入った変数名 aname とパスワードの入った変数名 apass を使って以下の様に SQL を組み立てました。
sql = "SELECT * from USERS WHERE NAME = '" + aname + "' AND PASS = '" + aname + "'"
こうすると、例えば aname が garchomp
で apass が matutani9613
の時に SQL が
sql
1SELECT * from USERS WHERE NAME = 'garchomp' AND PASS = 'matutani9613'
この様になり、結果 ID が 1 のレコードが返ってくる訳です。ユーザとパスワードの対が正しいかを判定するにはこの SQL が1行返ってくるか、それもと返ってこなかったかを調べれば良いのです。
で、ここまで書いてなぜ「悪い例」と書いたのかを説明すると、悪意のある人が画面でパスワードに ' OR '' = '
を入力してしまうと出来上がる SQL が
sql
1SELECT * from USERS WHERE NAME = 'garchomp' AND PASS = '' OR '' = ''
になってしまい、だれでもログイン出来てしまう様になってしまうからです。これは「プリペアドステートメント」や「プレースホルダ」といったキーワードで検索して勉強して下さい。