SQL Server 複数の条件を指定してSELECTする

【SQL】複数の条件を指定してSELECTする

SQL Serverでデータを取得するには「SELECT」を使います。

SELECTはWHERE句で複数の条件を指定して様々なデータ検索(取得)ができます。

今回は複数の条件を指定してSELECTするパターンを紹介します。

SELECT

--テーブルのデータを取得する
SELECT {列} FROM {テーブル}
WHERE {条件}
;

サンプルデータ

empテーブル

empno empname address gen_f pos_f
D001 佐藤花子 東京都渋谷区1-1-1 1 1
D002 山田太郎 北海道札幌市1-2-15 0 1
D003 中村玉子 埼玉県さいたま市1-1-1000 1 0
D004 伊藤学 東京都渋谷区100-1-1 0 1

例1. 複数の条件を指定するSELECT(AND)

--テーブルの値を取得する
SELECT * FROM emp
WHERE gen_f = 1
AND pos_f = 1
;
empno empname address gen_f pos_f
D001 佐藤花子 東京都渋谷区1-1-1 1 1

列を複数指定する場合はWHERE句で「AND」でつなげます。

ここでは「gen_f = 1」「pos_f = 1」という2つの条件をSQLで指定し、この2つの条件を満たすレコードをSELECTしました。

例2. 複数の条件を指定するSELECT(OR)

--テーブルの値を取得する
SELECT * FROM emp
WHERE gen_f = 1
OR pos_f = 1
;
empno empname address gen_f pos_f
D001 佐藤花子 東京都渋谷区1-1-1 1 1
D002 山田太郎 北海道札幌市1-2-15 0 1
D003 中村玉子 埼玉県さいたま市1-1-1000 1 0
D004 伊藤学 東京都渋谷区100-1-1 0 1

ここでは「AND」ではなく「OR」を使いました。「A OR B」は、「AもしくはB」という条件になります。

「gen_f = 1」かもしくは「pos_f = 1」という条件を指定し、これを満たすレコードをSELECTしました。

例3. 複数の条件を指定するSELECT(AND OR混在)

--テーブルの値を取得する
SELECT * FROM emp
WHERE empno < 'D003'
AND (gen_f = 1
OR pos_f = 1)
;
empno empname address gen_f pos_f
D001 佐藤花子 東京都渋谷区1-1-1 1 1
D002 山田太郎 北海道札幌市1-2-15 0 1

ここでは「AND」と「OR」を混在してSELECTしました。

「empno < ‘D003’」でかつ「gen_f = 1か pos_f = 1」という条件になります。「OR」を効かせたい条件は必ずカッコ()で括る必要があります。

ORの注意点

「OR」は注意が必要です。「OR」がある時点でSQLが分断されてしまいます。

なので「OR」を効かせたい条件は必ずカッコ()で括る必要があります。

例えば、カッコで括らなかったとしたら?その場合のSQLと結果を見てみます。

--テーブルの値を取得する
SELECT * FROM emp
WHERE empno < 'D003'
AND gen_f = 1
OR pos_f = 1
;
empno empname address gen_f pos_f
D001 佐藤花子 東京都渋谷区1-1-1 1 1
D002 山田太郎 北海道札幌市1-2-15 0 1
D004 伊藤学 東京都渋谷区100-1-1 0 1

「OR」をカッコで括っていないため、条件「empno < ‘D003’」が無視され、「empno=D004」がSELECTされてしまいました。

これは「empno < ‘D003’ かつ gen_f = 1」 もしくは 「pos_f = 1」という条件になります。

よって「pos_f = 1」である「empno=D004」がSELECTされてしまったのです。

このように、「OR」を効かせたい条件は必ずカッコ()で括る必要があるので忘れないように注意が必要ですね。

 

SQLで複数の条件を指定してSELECTするパターンとして3つとりあげました。

以上、SQL Serverで複数の条件を指定してSELECTするパターンでした。

コメント