SQL WHERE句 IN句を使いこなして複雑な検索を簡単に
SQL WHERE
句の IN
句は、複数の列を条件に検索を行う際に役立ちます。この機能を使用すると、複数の列の値を個別に指定することなく、1 つのステートメントで複数の条件を指定できます。
構文
SELECT column_name(s)
FROM table_name
WHERE (column1, column2) IN ((value1, value2), (value3, value4), ...);
例
プーケットで3月に1週間滞在できるホテルを探す場合、以下のクエリを使用できます。
SELECT hotel_name, price, location
FROM hotels
WHERE (city, month) IN (('Phuket', 'March'), ('Patong', 'March'));
このクエリは、hotels
テーブルから hotel_name
、price
、location
列を抽出し、city
列と month
列の値が ('Phuket', 'March')
または ('Patong', 'March')
のいずれかに一致するレコードを返します。
利点
- 複数の列を簡単に検索できる
- コードの冗長性を削減できる
- 可読性を向上できる
欠点
- 複雑なクエリになる場合がある
- パフォーマンスの問題が発生する可能性がある
代替手段
EXISTS
キーワードJOIN
ステートメント
プーケット旅行の持ち物リスト
3月のプーケット旅行に必要な持ち物は以下の通りです。
必須
- パスポート
- 航空券
- 現金(タイバーツ)
- クレジットカード
- 日焼け止め
- サングラス
- 帽子
- 水着
- ビーチサンダル
- 虫よけ
あると便利
- ガイドブック
- 地図
- 雨具
- 常備薬
- 変換プラグ
- 防水ケース
- カメラ
- スマートフォン
- 季節に合わせた服装
- アクティビティに必要な服装
- お土産
注意事項
- パスポートの有効期限を確認してください。
- 現金は、小額紙幣を用意しておくと便利です。
- クレジットカードは、国際ブランドのものを用意しておくと安心です。
- 日焼け止めは、SPF値の高いものを選びましょう。
- 虫よけは、肌に優しいものを選びましょう。
旅行前に確認しておきたいこと
- 現地の気候
- 交通手段
- 宿泊施設
- 観光スポット
- レストラン
旅行を楽しんでください!
-- テーブル定義
CREATE TABLE hotels (
hotel_id INT,
hotel_name VARCHAR(255),
city VARCHAR(255),
month VARCHAR(255),
price INT
);
-- データ挿入
INSERT INTO hotels (hotel_id, hotel_name, city, month, price)
VALUES
(1, 'The Beach Hotel', 'Phuket', 'March', 1000),
(2, 'The Patong Hotel', 'Patong', 'March', 1500),
(3, 'The Kata Hotel', 'Kata', 'April', 2000),
(4, 'The Karon Hotel', 'Karon', 'April', 2500);
-- 複数列による検索
SELECT hotel_name, price, location
FROM hotels
WHERE (city, month) IN (('Phuket', 'March'), ('Patong', 'March'));
-- 結果
-- The Beach Hotel, 1000, Phuket
-- The Patong Hotel, 1500, Patong
- サンプルコードは、SQL Server 2017 で動作確認しています。
- 他のデータベースを使用する場合は、構文が異なる可能性があります。
他の方法
EXISTS
キーワードを使用すると、サブクエリが存在するかどうかを条件に検索できます。
SELECT hotel_name, price, location
FROM hotels
WHERE EXISTS (
SELECT *
FROM cities
WHERE cities.city = hotels.city
AND cities.month = hotels.month
);
このクエリは、hotels
テーブルから hotel_name
、price
、location
列を抽出し、cities
テーブルに同じ city
と month
の値を持つレコードが存在するレコードを返します。
JOIN
ステートメントを使用すると、複数のテーブルを結合して検索できます。
SELECT hotels.hotel_name, hotels.price, hotels.location
FROM hotels
JOIN cities
ON hotels.city = cities.city
AND hotels.month = cities.month
WHERE cities.city IN ('Phuket', 'Patong')
AND cities.month = 'March';
このクエリは、hotels
テーブルと cities
テーブルを city
と month
列で結合し、city
列の値が Phuket
または Patong
で、month
列の値が March
のレコードを返します。
- 検索条件が単純な場合は、
IN
句を使用するのが最も簡単です。 - 検索条件が複雑な場合は、
EXISTS
キーワードまたはJOIN
ステートメントを使用する必要があります。
WHERE
句の IN
句は、複数列を条件に検索を行う際に役立ちます。他の方法も理解しておくと、状況に応じて使い分けることができます。
sql-server