3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IN句って複数カラム指定できるの!?!?

Posted at

こんにちはSQL講習です:robot:

オブジェクティブグループの@Yukidarusanです!
弊社では月に1回、社内講習会を開いておりまして自分はSQL講習を担当しております。
今回は初回でご説明する「in句」について、現場で便利だなと思った内容について記事にさせていただきます!

in句の基本的な使い方

in句は基本的には、1つのカラムに対して複数の条件を指定する際に使用するものです。
例えば…

Table.sql
CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  product_id INT,
  quantity INT
);

テーブルがあるとしたら、基本の書き方はこうなります。

SELECT * FROM orders WHERE order_id IN(1,2);

では、customer_id,product_idを条件にしたいという場合は
どう書けば良いか?

よくやってしまうこと、、、

単純に考えると…こんな感じで書いてしまいがち。

SELECT * FROM orders
WHERE customer_id, product_id IN ((1, 100), (2, 200));

これはエラーになります。
in句は基本的に「1列」に対してしか使えないので、複数列を並べてもエラーとなります。

正しい書き方

じゃあどうやって書くんや?
複数列を使う場合は、カラムをカッコでくくる が正解です。

SELECT * FEOM orders
WHERE (customer_id,product_id) IN ((1,100),(2,200));

こうすると複数カラムを指定して、in句の記載をすることができます!

in句の要素数に制限ってある?

さてここまでくると、in句で指定するのに要素数に制限ってあるの?
というところですが、データベースエンジン毎に違いがありました。

  1. Oracle
    1000個と明確に個数制限あり。1000個以上の場合エラーが発生する。
  2. MySQL/SQL Server/PosgreSQL
    特に明確な制限はなし。

意外とOracleに制限がありましたね…
パフォーマンスに影響が出るなどの理由がありそうですね。

in句やはり便利!

in句はやはり、記載を簡略化することができ大変便利です。
どのように使うかはあなた次第になりますので、
積極的に使っていきましょう🎶


参考:


オブジェクティブグループでは X の投稿も平日毎日行っています!
IT 関連の小ネタや便利技から、日常のアニメ・ゲーム布教なども幅広く投稿してるので、
ご興味のある方は是非フォロー・いいねをお願いします。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?