Webサイト制作コースのお申し込みはこちら

SQLで条件を指定するwhere句。当ページでは、where句のサンプルコードを紹介しています。

以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。SQL実行結果の表示にはphpMyAdminを使用しています。

SQL Where句の基本的な使い方


select文、update文、insert文、delete文などの条件指定に使われます。

SELECT * FROM employees 
WHERE 	emp_no = '10001'

上記のSQLは、employees(社員テーブル)から、emp_no(社員番号)が10001のデータを取得します。

演算子には等号(=)のほか、不等号(<、>)、否定(not、!=)が使用可能です。

実行するとこうなります。


where句に指定する条件は、andとorで接続して、複数の条件を指定することができます。

SQL Where句のサンプルコード集

inで、含む・含まないを指定するサンプルコード

対象のカラムの内容がリストに含まれていたらデータを取得する場合は、in句を使います。

「カラム名 in (リスト内容1,リスト内容2,リスト内容3…)」と指定します。

select * from employees
where emp_no in (10001,10002,10005,10007)

上記のSQLは、employees(社員テーブル)から、emp_no(社員番号)が10001、10002、10005、10007のものを取得します。

実行するとこうなります。


in句の指定には複数カラムの指定が可能。また、リストの代わりにサブクエリを指定することも可能です。

【関連記事】
SQL in句のサンプルコード集 複数カラムの指定方法とは?

また、指定したリストを含まないデータのみ取得する場合は、not inを指定します。

select * from employees
where emp_no not in (10001,10002,10005,10007)

【関連記事】
SQL not in データの除外指定 NULLや複数カラムを扱う方法

likeで、あいまい検索をするサンプルコード

ワイルドカードを指定して、あいまい検索をおこなうにはlikeを使います。

「like ‘X%’」などと指定します。文字列中の「%」「_」(アンダースコア)はワイルドカード文字で、複数指定可能です。

SELECT * 
FROM employees 
WHERE first_name like 'A%'
    and last_name not like 'S%'

上記SQLは、employees(社員テーブル)から、first_name(姓名の名)がAで始まり、last_name(姓名の姓)がSで始まらないデータを取得します。

実行するとこうなります。


likeを多用すると、条件次第でクエリのレスポンスが遅くなる(スロークエリ)ケースがあります。explain(実行計画)をチェックして、スロークエリにならないようチェックしましょう。

【関連記事】
sql likeを使ったサンプル集 likeは本当に遅いのか?

betweenで、範囲指定をするサンプルコード

「カラム名 between A and B」で、指定カラムの内容がA~Bの範囲のデータが取得できます。

SELECT * FROM employees 
where emp_no between 20000 and 20050

上記のSQLは、employees(社員テーブル)から、emp_no(社員番号)が20000~20050のデータを取得します。

実行するとこうなります。


betweenには、日付や文字列も指定可能です。betweenは、以上・以下(境界値を含む)指定になりますが、not inや、!=を組み合わせることで、「未満」「より大きい」を指定することも可能です。

【関連記事】
SQL betweenで範囲指定するサンプルコード 速度アップにもつながる?

日付の条件を指定するサンプルコード

MySQLの場合、日付指定は’YYYY-MM-DD’形式で可能です。

SELECT * FROM employees 
where hire_date between '1990-01-01' and '1991-01-01'

上記SQLは、employees(社員テーブル)から、hire_date(雇用日)が1990年1月1日~1991年1月1日のデータを取得します。

実行結果はこうなります。


「’1990-01-01′ interval 1 year」指定で、日付から1年後を指定することも可能。1 yearの部分を変えることで、秒、分、時、日、週、月指定も可能です。

なお、DBMSによっては、date_formatなどの日付関数を条件に組み合わせると速度が著しく低下する可能性があります。条件指定にdate_formatなどの関数を使う場合は、explain(実行計画)をチェックしておきましょう。

【関連記事】
SQL betweenで範囲指定するサンプルコード 速度アップにもつながる?

条件にサブクエリを使うサンプルコード

条件指定にサブクエリ(副問い合わせ)を使うこともできます。サブクエリとは、条件値を指定する箇所を別のクエリで置き換えたもののことを言います。

下記例では、birth_date=以下の「( select min(birth_date) from employees b)」がサブクエリとなります。

SELECT 	first_name, 
	last_name, 
	birth_date 
FROM 	employees a 
WHERE 	birth_date = (
		select 	min(birth_date) 
		from 	employees b
	)

上記SQLは、employees(社員テーブル)から、birth_date(誕生日)が最も古い(min)データのfirst_name(姓名の名)、last_name(姓名の姓)、birth_date(誕生日)を取得します。

実行するとこうなります。

SQL実行結果

サブクエリを条件に組み込む場合、existsやnot existsを使うことも可能です。

【関連記事】
【使いこなせる?】SQLのEXISTS文の使い方を初心者向けに解説

SQL not exists サンプルコード 2テーブルの片方にしかないデータを抽出

サブクエリは複雑化すると、クエリのレスポンスが落ちるケースがあります。explain(実行計画)でチェックして、データ件数が多いテーブルにフルスキャンが起こるようなら、インデックス利用が可能なSQLに置き換えを検討しましょう。

NULL判定をするサンプルコード

指定カラムがNULLのデータを抽出したい場合、カラム名=NULLという条件指定ではデータ抽出ができません。そこで、IS NULLを使って条件指定します。

select * from salaries where salary IS NULL

上記SQLは、salaries(年収テーブル)から、salary(年収)がNULLのデータを取得します。

NULL以外を指定する場合は、「IS NOT NULL」を指定します。

select * from salaries where salary IS NULL

【関連記事】
SQL isnullの使い方 NULL判定やNULL置換の方法 case式でも対応可能

まとめ

ポテパンダの一言メモ
  • 「含む・含まない」条件はin句を使う
  • ワイルドカードでのあいまい検索はlikeを使う
  • 範囲指定条件はbetweenを使う
  • 日付の条件指定に関数を使うと、速度低下の可能性あり
  • サブクエリを条件に使うときはinやexistsと組み合わせる
  • NULL判定にはIS NULLを使う

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。