SQLでデータを比較・抽出(BETWEEN、LIKE、IN)〜便利な句の紹介#1〜

 2022.09.07  株式会社システムインテグレータ

シリーズも回を重ね4回目となります。今回は初心者訓練所#04として、WHERE句でよく使われる便利な句について説明していきます。その中でも、データを比較する句について紹介していきます。

教養としてのプログラミング入門BOOK

BETWEEN句の基本構文(範囲指定ができる句)

「AND」と対で使用し、項目Xが値Yと値Zの範囲内のデータを対象とします。「項目X >= 値Y AND 項目X <= 値Z」と同じ条件になりますが、簡略化して記載できるので便利です。
但し、比較対象の条件の一方でも「>」や「<」の場合は使用できません。

項目X BETWEEN 項目Y AND 項目Z

ビッグデータ時代の必須科目 SQLの教科書
教養としてのプログラミング入門BOOK

BETWEEN句の使用例

準備として、確認用のテーブルを作成してデータを挿入してみましょう。

create table tbl_employees (emp_code integer , emp_name text , kana text , gender text , birthday text , dept_code integer);
insert into tbl_employees values ('1','HoriiTaro','ホリイタロウ','M','1970-12-27','1');
insert into tbl_employees values ('2','IshimuraHana','イシムラハナ','F','1981-09-01','2');
insert into tbl_employees values ('3','KitajimaRuna','キタジマルナ','F','1981-11-30','3');
insert into tbl_employees values ('4','MuroiYuri','ムロイユリ','F','1982-02-12','1');
insert into tbl_employees values ('5','KitazawaAika','キタザワアイカ','F','1980-08-05','1');
insert into tbl_employees values ('6','MitaniKoukiti','ミタニコウキチ','M','1979-03-16','2');

SQLでデータを比較して抽出!〜便利な句の紹介#1〜01

select文で登録内容を確認してみましょう。

select * from tbl_employees;

SQLでデータを比較して抽出!〜便利な句の紹介#1〜02insert文で作成した6件のデータを確認できます。

それでは、BETWEEN句を使用してデータを取得してみましょう。

select emp_name,birthday from tbl_employees
where birthday BETWEEN '1981-09-01' AND '1981-11-30';

SQLでデータを比較して抽出!〜便利な句の紹介#1〜03

「birthday」が、1981年9月1日~1981年11月30日に該当する2件のデータが取得されています。

次に、BETWEEN句を使用しないで実行してみましょう。

select emp_name,birthday from tbl_employees
where birthday >= '1981-09-01' and birthday <='1981-11-30';

SQLでデータを比較して抽出!〜便利な句の紹介#1〜04

BETWEEN句を使用した場合と同じデータが、取得できることが確認できます。
このようにBETWEEN句は範囲指定の条件を簡略化して記載できるので便利です。
しかし、前述したとおり、比較対象の条件の一方でも「=」がない「>」や「<」の場合は利用できませんので注意してください。

BETWEEN句の説明は以上になります。 

LIKE句の基本構文(あいまい検索ができる句

項目Xに値Yで指定したパターンが含まれているデータを対象とします。比較する場合、大文字、小文字の区別はしません。
値Yのワイルドカードとして、以下の文字があります。
 「 % 」 : 任意の0文字以上の文字列
 「 _ 」(半角ハイフン) : 任意の1文字

項目X LIKE 値Y

LIKE句の使用例

先ほど使用したテーブル「tbl_employees」を使用して確認してみましょう。
「kana」の先頭が、「イ」で始まるデータを取得する前方一致検索をしてみましょう。

select emp_name,kana from tbl_employees
where kana LIKE 'イ%';
 SQLでデータを比較して抽出!〜便利な句の紹介#1〜05

ワイルドカードの「%」を使用して、先頭文字が「イ」でそれ以降の文字は任意の文字列のデータを取得しています。

次に、「kana」の2文字目が、「ロ」で始まるデータを取得してみましょう。

select emp_name,kana from tbl_employees
where kana LIKE '_ロ%';

sql-04-06

ワイルドカードの「_」を使用して、先頭は任意の1文字で2文字目が「ロ」、そしてそれ以降はワイルドカードの「%」を使用して任意の文字列のデータを取得しています。

最後に、「kana」に「ウ」が含まれる部分一致検索をしてみましょう。

select emp_name,kana from tbl_employees
where kana LIKE '%ウ%';

SQLでデータを比較して抽出!〜便利な句の紹介#1〜06

ワイルドカードの「%」で文字「ウ」を挟み込んで、「ウ」の前方、後方が任意の文字列のデータを取得しています。
このようにLIKE句は、あいまい検索に便利な句なのでワイルドカードと合わせて覚えておきましょう。

LIKE句の説明は以上になります。

IN句の基本構文(複数の値による検索がしやすい句)

項目Xの値が指定した複数の値に含まれている場合、対象となります。
また、副問合せを使用して他のテーブルから取得した値と比較することも出来ます。(副問合せについては、別の訓練所で詳しく説明させていただきます。)

WHERE 項目X IN ( 値Y , 値Z・・・)
WHERE 項目X IN ( SELECT 項目Y FROM テーブルZ )

IN句の使用例

今迄と同様にテーブル「tbl_employees」を使用して確認してみましょう。
select文で再度、データを確認してみます。

select * from tbl_employees;

SQLでデータを比較して抽出!〜便利な句の紹介#1〜07

それでは、値を直接指定してIN句を実行してみましょう。
「dept_code」の値が、「2」か「3」のデータを取得してみましょう。

select emp_name,dept_code from tbl_employees
where dept_code IN ( 2 , 3 );

SQLでデータを比較して抽出!〜便利な句の紹介#1〜08「dept_code」が「2」または「3」のデータが3件取得されます。

次にIN句に「NOT」を追加して試してみましょう。

select emp_name,dept_code from tbl_employees
where dept_code NOT IN ( 2 , 3 );

SQLでデータを比較して抽出!〜便利な句の紹介#1〜09

「NOT IN」として実行すると、指定した値(2、3)以外のデータが3件取得されます。

続いて、他のテーブルから取得した値と比較するパターンを確認してみましょう。
確認用に、追加でテーブル「tbl_dept」を作成して、データを挿入してみましょう。

create table tbl_dept (dept_code integer,dept_name text,valid_flg integer);
insert into tbl_dept values ('1','技術部','1');
insert into tbl_dept values ('2','人事部','0');
insert into tbl_dept values ('3','総務部','1');
insert into tbl_dept values ('4','経理部','0');

SQLでデータを比較して抽出!〜便利な句の紹介#1〜10

select文で登録内容を確認してみましょう。

select * from tbl_dept;

SQLでデータを比較して抽出!〜便利な句の紹介#1〜11

insert文で作成した4件のデータを確認できます。

それでは、テーブル「tbl_employees」から、「dept_code」がテーブル「tbl_dept」で「valid_flg = 1」の「dept_code」と同じデータを取得してみましょう。

select emp_name,dept_code from tbl_employees
where dept_code IN ( select dept_code from tbl_dept where valid_flg =1 );

SQLでデータを比較して抽出!〜便利な句の紹介#1〜12

IN句の後に記述された副問合せで、テーブル「tbl_dept」から取得した「dept_code」=1,3に一致するデータが取得されています。(副問合せの詳細については、別の訓練所で説明します)

IN句の説明は以上になります。

おすすめの学習コンテンツ

本記事を読み終わって、さらに学びたい方、次は問題にチャレンジしてみたい方には、以下の無料コンテンツをご用意しておりますので、ぜひ活用してみてください!

SQLiteについて
・本記事で使用したデータベース「SQLite」について解説する資料です。
 SQLiteとは?他のデータベースとの違いも解説

SQLの教科書
・一般的な解説から、実際にSQLを動かす操作イメージまで幅広く解説する資料です。
 「SQLの教科書」ビックデータ時代の必須科目

SQL無料トライアルテスト
・TOPSIC-SQLの無料トライアルテストをご受験していただけます。
 TOPSIC-SQL無料トライアルテスト

SQLコンテスト
・簡単な会員登録をするだけでSQLのオンラインコンテストに無料で参加できます。
    過去に開催されたコンテストの問題にもチャレンジできます。
 TTOPSIC SQL CONTEST

SQL基礎解説YouTube
・「TOPSIC-SQL」を元にしたオンラインウェビナーです。
 SQL-BOOT CAMP #1 
 ビッグデータ時代の必須科目SQLを学ぶ「実戦で通用する武器を身につけよう!」

まとめ

本記事では、初心者訓練所の第4弾として、データの比較に便利な句について一部を紹介しました。データの絞り込みや検索等には欠かせない句になりますので、是非、使い方をマスターして活用してください。
それでは、次の初心者訓練所で更なるスキルアップを目指しましょう!

(株)システムインテグレータ 製品企画室 元鬼軍曹 久保 司

ビッグデータ時代の必須科目 SQLの教科書(初級編)

RELATED POST関連記事


RECENT POST「SQL‐BOOTCAMP」の最新記事


SQL‐BOOTCAMP

SQLのウィンドウ関数(SUM関数とOVER句)を使ってみよう!

SQL‐BOOTCAMP

「TOPSIC SQL CONTEST」にチャレンジⅡ

SQL‐BOOTCAMP

「TOPSIC SQL CONTEST」の練習コンテストにチャレンジ!

SQL‐BOOTCAMP

SQLのサブクエリを覚えよう!(FROM句、WHERE句での使い方)

SQLでデータを比較・抽出(BETWEEN、LIKE、IN)〜便利な句の紹介#1〜

TOPSIC TOPへ

新規CTA

TOPSIC-SQL4コマ漫画

RANKING人気資料ランキング

RANKING人気記事ランキング

RECENT POST 最新記事