【SQL超入門講座】23.IN|複数のOR条件をすっきり記述して抽出する方法

オススメ

以前のレッスンで解説した論理演算子のANDとORを覚えていますでしょうか。
AまたはBというように複数の条件のいずれかに一致することを指定したいときは、OR演算子を使いました。
ではこのOR演算子で指定する条件の数が10個に増えたらどうでしょう?
10個の条件式をを全てOR演算子でつないで書いていくのは、考えただけでも大変ですよね。
なにかよい方法はないでしょうか?
 
実は、今回説明するIN句を使えば、このような複数のOR条件を1つにまとめて記述できます。
条件の記述が楽になるだけでなく、コードの可読性も高くなります。
是非使えるようになりましょう。
 
キノコードでは、この動画の他にも、たくさんのプログラミングのレッスンを配信しています。
チャンネル登録がまだの方は、チャンネルがどこにいったかわからなくならないように、チャンネル登録をお願いします。
それでは、レッスンスタートです。

▼目次
00:00 はじめに
01:11 SQLのIN句とは?IN句の構文
02:23 テーブルでSQLのIN句の使い方を確認
03:20 テーブルでSQLのNOT IN句の使い方を確認
03:50 SQLのIN句にサブクエリを使用する方法
05:57 おわりに

▼書き起こしブログ
https://kino-code.com/sql23/

▼関連動画
【SQL超入門講座】01.コース紹介 ~ SQLとは? ~ 環境構築|初心者向け

【SQL超入門講座】01.コース紹介 ~ SQLとは? ~ 環境構築|初心者向け

【SQL超入門講座】02.データベースのテーブルとは?

【SQL超入門講座】02.データベースのテーブルとは?

【SQL超入門講座】03.SELECT文|SQLの基本中の基本

【SQL超入門講座】03.SELECT文|データベースからデータ抽出する方法

【SQL超入門講座】04.WHERE|特定の条件でデータを抽出する方法

【SQL超入門講座】04.WHERE|特定の条件でデータを抽出する方法

【SQL超入門講座】05.ORDER BY|データの並び替え

【SQL超入門講座】05.ORDER BY|データの並び替える方法

【SQL超入門講座】06.GROUP BY|グルーピング、グループ化

【SQL超入門講座】06.GROUP BY|指定したカラムの値を基準にデータを集計する方法

【SQL超入門講座】07.HAVING|グループ化したデータの中からデータ抽出

【SQL超入門講座】07.HAVING|グループ化したデータの中からデータ抽出

【SQL超入門講座】08.JOIN|テーブルの結合(INNER JOIN/LEFT JOIN)

【SQL超入門講座】08.INNER JOIN/LEFT JOIN|テーブル同士を結合する方法①

【SQL超入門講座】09.PostgreSQLの環境構築|MacとWindowsで解説!

【SQL超入門講座】09.PostgreSQLの環境構築|MacとWindowsで解説!

【SQL超入門講座】10.PythonとPostgreSQLの接続

【SQL超入門講座】10.PythonからPostgreSQLに接続する方法

【SQL超入門講座】11.データベースのバックアップと復元

【SQL超入門講座】11.データベースのバックアップと復元する方法

【SQL超入門講座】12.テーブルの結合(RIGHT JOIN/OUTER JOIN)

【SQL超入門講座】12.RIGHT JOIN/OUTER JOIN|テーブルの結合する方法②

【SQL超入門講座】13.AND, OR|複数条件で抽出する方法

【SQL超入門講座】13.AND, OR|複数条件で抽出する方法

【SQL超入門講座】14.LIKE|部分一致や前方一致、後方一致するレコードを抽出する方法

【SQL超入門講座】14.LIKE|部分一致や前方一致、後方一致するレコードを抽出する方法

【SQL超入門講座】15.BETWEEN|区間を指定して抽出する方法

【SQL超入門講座】15.BETWEEN|区間を指定して抽出する方法

【SQL超入門講座】16.LENGTH関数|文字数を条件にしてデータを抽出する方法

【SQL超入門講座】16.LENGTH関数|文字数を条件にしてデータを抽出する方法

【SQL超入門講座】17.DISTINCT|重複した値を排除して抽出する方法

【SQL超入門講座】17.DISTINCT|重複した値を排除して抽出する方法

【SQL超入門講座】18.SUBSTRING|文字列の一部を切り出す方法

【SQL超入門講座】18.SUBSTRING|文字列の一部を切り出す方法

【SQL超入門講座】19.正規表現|複雑なパターンマッチングを条件に抽出する方法

【SQL超入門講座】19.正規表現|複雑なパターンマッチングを条件に抽出する方法

【SQL超入門講座】20.ROUND|四捨五入を思いのままにできますか?

【SQL超入門講座】20.ROUND|四捨五入を思いのままにできますか?

【SQL超入門講座】21.CASE|条件に合わせて処理を分ける方法

【SQL超入門講座】21.CASE|条件に合わせて処理を分ける方法

【SQL超入門講座】22.サブクエリ|SQLの中にSQLを書いて二段階抽出する方法

【SQL超入門講座】22.サブクエリ|SQLの中にSQLを書いて二段階抽出する方法

▼自己紹介
ブログに自己紹介を書いております。

▼SNS
Twitter : https://twitter.com/kino_code/likes
Facebook : https://www.facebook.com/キノコード -105693727500005/
Website : https://kino-code.com/

▼書き起こし
## IN句とは
IN句を使用することで、「カラムの値が指定した値のリストのいずれかに一致する」という条件を作ることができます。

IN句を追加したSELECT文は次の通りです。
“`SQL
SELECT * FROM テーブル
WHERE カラム IN (値1,値2,値3…)
“`
WHERE句で条件を適用するカラムを書き、続いてIN句を書きます。
IN句ではカッコの中に値をカンマ区切りで書いていきます。
このように書くことで、カラムの値がカッコ内の値のいずれかに一致するという条件式が成立します。

この条件式をOR演算子を使って表現すると SQLは次のようになります。
“`
SELECT * FROM テーブル
WHERE カラム = 値1 OR カラム = 値2 OR カラム = 値3…
“`
ご覧の通り何度もカラム名を書かなければならず、条件式が長くなってしまいました。
IN句を使うことで、このような記述の手間を省き、判読しやすいSQLを書くことができます。
そのため複数の値のいずれかに一致することを条件として書きたい場合は、OR演算子ではなくIN句を使うとよいでしょう。

## NOT IN句とは
またIN句の前にNOTを書くことでIN句の否定となり、続くカッコ内の値のいずれにも一致しないという条件になります。
“`
SELECT * FROM テーブル
WHERE カラム NOT IN (値1,値2,値3…)
“`

それではテーブルを用意して、IN句とNOT IN句の使い方を実際に確認していきましょう。

## IN句、NOT IN句の使い方
今回はデモテーブルとしてtest01を作成します。
test01は氏名、出席番号、数学の3つのカラムを持ったテーブルです。

|氏名|出席番号|数学|
|:-:|:-:|:-:|
|高橋|a001|1|
|伊藤|a002|2|
|鈴木|a003|3|
|佐藤|a004|4|

まず氏名が高橋、伊藤、山田のいずれかであるレコードを抽出してみましょう。
SQLは次のように書くことができます。
“`
SELECT * FROM test01
WHERE 氏名 IN (‘高橋’, ‘伊藤’, ‘山田’)
“`
まずWHERE句で氏名のカラムを記述します。
そして続くIN句のカッコの中に高橋、伊藤、山田をカンマ区切りで書いていきます。

IN句で指定した値のうち、test01に存在する氏名は高橋、伊藤の2名です。
条件式が正しく書けていれば、この2名のレコードが抽出されるはずです。

それではSQLを実行してみましょう。
|氏名|出席番号|数学|
|:-:|:-:|:-:|
|高橋|a001|1|
|伊藤|a002|2|

正しく抽出を行うことができました。

今度は反対に、氏名が高橋、伊藤、山田のいずれにも当てはまらないレコードだけを抽出してみましょう。
IN句の否定はNOTをIN句の前に付ければよいので、先ほどの抽出で使用したSQLを使って、次のように書くことができます。
“`
SELECT * FROM test_table02
WHERE 氏名 NOT IN (‘高橋’, ‘伊藤’, ‘山田’)
“`
SQLを実行します。

|氏名|出席番号|数学|
|:-:|:-:|:-:|
|鈴木|a003|3|
|佐藤|a004|4|

IN句で指定した氏名のいずれにも当てはまらない、鈴木、佐藤のレコードだけを正しく抽出することができました。
(続く)

#SQL #条件#抽出 #IN #PostgreSQL

コメント

タイトルとURLをコピーしました