OracleのSELECT文で検索条件を指定する方法です。
SELECT文で検索条件を指定する
SELECT文でデータを取得する際に、「カラムAという値がxxxという行だけ取得したい」という場合があると思います。その際に使用するのがWHERE句です。基本的な構文は以下です。
SELECT 列名のリスト FROM テーブル名 WHERE 条件式;
具体的には以下の様に記述します。
SELECT 列1 ,列2 ,列3 … FROM テーブル名; WHERE 列1 = 'aaa' … ;
上記のように記述することで、「列1」の値が「aaa」のものを取得するという条件を指定して検索できます。
複数の検索条件を指定したい場合
条件は1つだけでなく、複数指定することが可能です。複数の検索条件を指定する場合は、2つめ以降の条件を AND もしくは OR で指定します。
--AND条件 SELECT 列1 ,列2 ,列3 … FROM テーブル名; WHERE 列1 = 'aaa' AND 列2 = 111 … ; --OR条件 SELECT 列1 ,列2 ,列3 … FROM テーブル名; WHERE 列1 = 'aaa' OR 列2 = 111 … ;
AND条件とOR条件の違いは以下です。
- AND条件:全ての条件式を満たす
- OR条件:いずれかの条件式を満たす
なので、ANDの場合は、「列1の値が aaa」かつ「列2の値が111」の行を取得し、ORの場合は、「列1の値が aaa」もしくは「列2の値が111」の行を取得します。ORの場合は同じカラムに対して複数の条件の指定も可能です。例えば、こんな感じですね。
--OR条件 SELECT 列1 ,列2 ,列3 … FROM テーブル名; WHERE 列1 = 'aaa' OR 列1 = 'bbb' … ;
上記のSQLは「列1の値がaaa」もしくは「列1の値がbbb」を満たす行を取得する条件です。これはOR条件のみ可能で、AND条件の場合は、同じ列に複数の条件を指定することは出来ません。
使用例
では、実際に使用してみましょう。SQL確認用のテーブルを用意しました。山手線の駅番号(STATION_NO)、駅名称(STATION_NAME)、駅名カナ(STATION_KANA)、駅住所(ADDRESS)の情報を持つテーブル(山手線テーブル)です。
このテーブルに対して検索条件を指定してSELECTを実行してみます。
例1:検索条件が1つ
山手線テーブルから住所が「千代田区」の駅名を検索してみます。SQLは以下。
SELECT STATION_NAME FROM TAB_YAMANOTE_STATION WHERE ADDRESS = '千代田区';
これを実行してみましょう。結果は以下です。
4行が取得できましたね。山手線の駅は30駅存在し、そのうち、千代田区に位置する駅は4駅存在するのでOKです。
例2:検索条件が複数(AND)
複数の条件で検索してみます。AND条件を使用します。住所が「台東区」で、かつ駅番号が「JY04」の駅名を取得します。
SELECT STATION_NAME FROM TAB_YAMANOTE_STATION WHERE ADDRESS = '台東区' AND STATION_NO = 'JY04';
これも実行してみます。結果はこちら。
取得できましたね。ただ、厳密に言えば、「STATION_NO」が「JY04」のレコードは1行しかないので、必ず1行が返ってきます。
例3:検索条件が複数(OR、別カラム)
今度は複数条件のORを使用します。住所が「豊島区」、もしくは駅番号が「JY01」の行を取得します。
SELECT STATION_NAME FROM TAB_YAMANOTE_STATION WHERE ADDRESS = '豊島区' OR STATION_NO = 'JY01';
では実行してみましょう。
豊島区に位置する駅は5駅、そして駅番号「JY01」は東京駅なので、合計5行が取得できました。
例4:検索条件が複数(OR、同カラム)
最後に、同カラムでOR条件を使用してみます。住所が「渋谷区」もしくは「港区」の駅名を取得してみます。
SELECT STATION_NAME FROM TAB_YAMANOTE_STATION WHERE ADDRESS = '渋谷区' OR ADDRESS = '港区';
ではこれも実行します。
渋谷区に位置する山手線の駅は4駅、港区に位置する山手線の駅は5駅なので合計9駅が取得できました。
編集後記
WHERE条件は必須中の必須なので、まずは基本形を押さえておきましょう。同カラムに対してAND条件は使用出来ないので注意して下さい。
関連記事
.