Help us understand the problem. What is going on with this article?

絞り込み条件:対象レコードをどのように絞り込むか

はじめに

SQLはデータベースを操作するためのプログラムです。
プログラムをどのように分解するかは賛否あると思いますが、
ここでは以下の4つに分類して基本の構文をまとめます。

このページでは絞り込み条件の基本構文をまとめます。
絞り込みの条件には「演算子」「複数指定」「曖昧検索」「条件結合」「条件否定」などがあります。
基本的にWHERE句の中で使います。

例として、こちらに掲載しているテーブルを使って、各条件の動きを解説します。

演算子

演算子を使って条件を指定する方法です。

演算子 意味
= 等しい
<> 等しくない
< 左辺が右辺より小さい
> 左辺が右辺より大きい
<= 左辺が右辺以下
>= 左辺が右辺以上
Operator
SELECT * FROM MEMBER_LIST_2ND
   WHERE STATUS_ID = '2'

STATUS_IDが「2」のものだけ抽出されるので、実行結果は1レコードのみです。
*2をシングルクォーテーションで囲っていますが、仮にSTATUS_IDが数値型なら囲っても囲わなくても同じ結果を得られます。

ID FAMIRY_NAME FIRST_NAME BIRTH_DAY SEX STATUS_ID NOTE
0002 山田 太郎 1981/3/1 M 2

複数指定(IN)

演算子の"="は一致する値を1つしか指定することはできませんが、INを使うことで複数指定することができます。

IN
SELECT * FROM MEMBER_LIST_1ST
   WHERE ID IN ('0001', '0003')

IDが"0001","0003"のデータを抽出することができるので、実行結果は2レコードが抽出されます。

ID FAMIRY_NAME FIRST_NAME BIRTH_DAY SEX STATUS_ID NOTE
0001 鈴木 太郎 1980/10/25 M 1
0003 佐藤 長次郎 1980/4/2 M 1

曖昧検索(LIKE)

特定の語句を含むデータを検索することができます。
LIKEの十件に指定できるのは2つあり、
"%"が0文字以上の任意の文字列でいわゆるワイルドカード、
"_"は1文字の任意の文字となります。

LIKE
SELECT * FROM MEMBER_LIST_2ND
   WHERE FIRST_NAME LIKE '%朗%'

この結果は名前に「朗」を含む3レコード

ID FAMIRY_NAME FIRST_NAME BIRTH_DAY SEX STATUS_ID NOTE
0001 鈴木 太郎 1980/10/25 M 1
0002 山田 太郎 1981/3/1 M 2
0003 佐藤 長次郎 1980/4/2 M 1
LIKE_2
SELECT * FROM MEMBER_LIST_2ND
   WHERE FAMIRY_NAME LIKE '_朗'

この場合は"_"が一文字分しか表さないため、「長次郎」さんは抽出されなくなり、2レコードのみとなります。

ID FAMIRY_NAME FIRST_NAME BIRTH_DAY SEX STATUS_ID NOTE
0001 鈴木 太郎 1980/10/25 M 1
0002 山田 太郎 1981/3/1 M 2

条件結合(AND, OR)

複数の条件を検証する方法になります。

AND
SELECT * FROM MEMBER_LIST_2ND
   WHERE SEX = 'M'
   AND STATUS_ID = '2'

「SEXがM」かつ「STATUS_IDが2」なので1レコードのみ抽出されます。

ID FAMIRY_NAME FIRST_NAME BIRTH_DAY SEX STATUS_ID NOTE
0002 山田 太郎 1981/3/1 M 2
OR
SELECT * FROM MEMBER_LIST_2ND
   WHERE SEX = 'F'
   OR STATUS_ID = '1'

「SEXがF」または「STATUS_IDが1」なので4レコードが抽出されます。

ID FAMIRY_NAME FIRST_NAME BIRTH_DAY SEX STATUS_ID NOTE
0001 鈴木 太郎 1980/10/25 M 1
0003 佐藤 長次郎 1980/4/2 M 1
0004 鈴木 定子 1980/8/2 F 1
0005 鈴本 花子 1980/12/14 F 1

条件否定(NOT)

これまで記載してきた条件を否定の意味に変えるNOT条件です。

NOT
SELECT * FROM MEMBER_LIST_2ND
   WHERE ID NOT IN ('0001', '0004')

IDが"0001","0004"以外のデータになるため、3レコード抽出されます。

ID FAMIRY_NAME FIRST_NAME BIRTH_DAY SEX STATUS_ID NOTE
0002 山田 太郎 1981/3/1 M 2
0003 佐藤 長次郎 1980/4/2 M 1
0005 鈴本 花子 1980/12/14 F 1
NOT_2
SELECT * FROM MEMBER_LIST_2ND
   WHERE STATUS_ID = '1'
   AND NOT( SEX = 'M'
      OR FAMILY_NAME LIKE '_木')

「STATUSが"1"」かつ「SEXがMまたは姓が"?木"」ではないので、1レコードのみ抽出されます。

ID FAMIRY_NAME FIRST_NAME BIRTH_DAY SEX STATUS_ID NOTE
0005 鈴本 花子 1980/12/14 F 1
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした