SQL SELECT INは、構造化照会言語の論理演算子です。これは、複数の「OR」演算子の使用を減らすためにSQLクエリで使用されます。 s
SQLのIN演算子を使用すると、条件が値のリスト内の任意の値と一致するかどうかを簡単にテストすることもできます。 SQLクエリのOR演算子の数を減らします。
SQLでのIN演算子の構文:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (VALUE1, VALUE2);
SQLのIN演算子のサブクエリ構文:
SELECT COLUMNNAME FROM TABLENAME WHERE COLUMNNAME IN (SELECT STATEMENT);
上記の構文では、サブクエリでIN演算子を使用することもできます。
例を使用して、SQLSELECTINの概念を理解しましょう。
次のレコードを持つ次のテーブルを検討してください。
表1:従業員
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA | C# | 5 |
1003 | NIKHIL | VANI | 50500 | ジャイプール | FMW | 2 |
2001 | PRACHI | シャルマ | 55500 | チャンディーガル | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | ルチカ | JAIN | 50000 | ムンバイ | C# | 5 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ジャイプール | FMW | 2 |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | ムンバイ | テスト | 4 |
4002 | ASHWINI | バガット | 54500 | NOIDA | JAVA | 3 |
4003 | ルチカ | AGARWAL | 60000 | デリー | ORACLE | 1 |
5001 | ARCHIT | シャルマ | 55500 | デリー | テスト | 4 |
表2:マネージャー
Managerid | manager_name | manager_department |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | アヌパムミシュラ | テスト |
5 | Akash Kadam | C# |
例1: Cityがリストの1つであるムンバイ、プネ、デリーをテーブルに含む従業員のテーブルから、従業員ID、名、姓、およびCityをフェッチするクエリを記述します。
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, CITY FROM EMPLOYEES WHERE CITY IN ('MUMBAI', 'PUNE', 'DELHI');
上記のステートメントでは、従業員のテーブルから従業員ID、姓名、およびCityを取得しました。ここで、Cityには、都市名の1つであるムンバイ、プネ、およびデリーが含まれています。これらの都市名はすべて、IN演算子のパラメーターとして値として渡されます。この表は、従業員の都市がIN演算子パラメータの都市リストと一致するすべてのレコードに対応します。
出力:
EMPLOYEEID | FIRST_NAME | LAST_NAME | CITY |
1001 | VAIBHAVI | MISHRA | PUNE |
2002 | BHAVESH | JAIN | PUNE |
2003 | ルチカ | JAIN | ムンバイ |
3001 | PRANOTI | SHENDE | PUNE |
3003 | DEEPAM | ジャウハリ | ムンバイ |
4001 | RAJESH | GOUD | ムンバイ |
4003 | ルチカ | AGARWAL | デリー |
5001 | ARCHIT | シャルマ | デリー |
都市名がIN演算子式パラメータリストと一致する8人の従業員のみが表示されます。
例2: 従業員のテーブルから従業員ID、名、姓、給与、および部門をフェッチするクエリを記述します。給与には、テーブル内の50500、55500、および65500のいずれかのリストが含まれます。
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT FROM EMPLOYEES WHERE SALARY IN (50500, 55500, 65500);
上記のステートメントでは、従業員のテーブルから従業員ID、姓名、給与、および部門を取得しました。給与には、50500、55500、および65500のいずれかの給与が含まれています。これらの給与はすべて、パラメータとして渡されます。値としてのIN演算子。この表は、従業員の給与がIN演算子パラメーターの給与リストと一致するすべてのレコードに対応します。
出力:
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | 部門 |
1001 | VAIBHAVI | MISHRA | 65500 | ORACLE |
1003 | NIKHIL | VANI | 50500 | FMW |
2001 | PRACHI | シャルマ | 55500 | ORACLE |
2002 | BHAVESH | JAIN | 65500 | FMW |
3001 | PRANOTI | SHENDE | 55500 | JAVA |
3002 | ANUJA | WANRE | 50500 | FMW |
5001 | ARCHIT | シャルマ | 55500 | テスト |
給与がIN演算子式パラメーターリストに一致する7人の従業員のみが表示されます。
例3: 従業員の給与が60000を超える従業員、または従業員の都市に「ムンバイ」、「プネ」、「ジャイプール」のいずれかの都市リストが含まれている従業員から、従業員ID、名、姓、給与、および都市を取得するクエリを記述します。テーブルに。
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY > 60000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
上記のステートメントでは、従業員の給与が60000を超えるか、従業員の都市にこの都市リストの1つが「ムンバイ」、「プネ」、「ジャイプール」。 SELECTステートメントのWHERE句の最初の部分はSALARY>60000 最後の部分はCITYIN('PUNE'、'MUMBAI'、'JAIPUR')、 OR演算子を使用したため、結果は両方の条件から得られます。
出力:
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1003 | NIKHIL | VANI | 50500 | ジャイプール |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | ルチカ | JAIN | 50000 | ムンバイ |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | ジャイプール |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ |
4001 | RAJESH | GOUD | 60500 | ムンバイ |
給与が60000を超えるか、都市名がIN演算子式パラメーターリストと一致するテーブルからの8つのレコードのみが表示されます。
例4: 従業員部門に「Oracle」、「FMW」、Cityに「Delhi」、「Noida」、 「プネ」。
SELECT EMPLOYEEID, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT IN ('ORACLE', 'FMW') AND CITY IN ('PUNE', 'NOIDA', 'DELHI');
上記のステートメントの従業員のテーブルから、従業員ID、給与、市区町村、および部門を取得しました。従業員部門には、INオペレーター・パラメーターに渡される部門リストの1つが含まれています。従業員の都市には、IN演算子パラメーターに渡された都市リストの1つが含まれ、結果には、両方の条件に一致する従業員の詳細のみが含まれます。
出力:
EMPLOYEEID | 給与 | CITY | 部門 |
1001 | 65500 | PUNE | ORACLE |
2002 | 65500 | PUNE | FMW |
4003 | 60000 | デリー | ORACLE |
従業員テーブルには、従業員の都市にプネ、デリー、ノイダが含まれ、部門にOracle、FMWが含まれるレコードは3つしかありません。
例5: 従業員の給与が60000を超え、市がプネ、ジャイプール、ムンバイのリストの1つを含む、または部門がリストはJava、テスト、C#です。
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY, DEPARTMENT FROM EMPLOYEES WHERE SALARY > 60000 AND CITY IN ('PUNE', 'MUMBAI', 'JAIPUR') OR DEPARTMENT IN ('JAVA', 'TESTING', 'C#');
上記のステートメントでは、OR演算子、AND演算子、およびSELECTステートメントで複数のIN演算子を使用して、従業員のテーブルから従業員ID、名、姓、給与、市区町村、および部門をフェッチしました。 SELECTクエリは、最初に、給与> 60000 AND City IN('Pune'、'Mumbai'、Jaipur)の従業員レコードをフェッチし、それらの従業員のみをフェッチします。両方の条件が真であり、Department IN('Java'、'Testing'、'C#')の最後で、このクエリは、最初のフェーズの結果で、Departmentに渡したリストの1つを持つ取得した従業員レコードを検索します。 IN演算子を使用し、IN演算子パラメーターに渡した部門名を持つレコードが見つかった場合は、そのレコードが結果に追加される場合は、テーブル内の残りのレコードも検索します。
出力:
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA | C# |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW |
2003 | ルチカ | JAIN | 50000 | ムンバイ | C# |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ | JAVA |
4001 | RAJESH | GOUD | 60500 | ムンバイ | テスト |
4002 | ASHWINI | バガット | 54500 | NOIDA | JAVA |
5001 | ARCHIT | シャルマ | 55500 | デリー | テスト |
給与が60000を超える従業員のレコードは9つだけです。CityにはCityINオペレーターにパラメーターとして渡したリストのいずれかが含まれるか、DepartmentにはDepartmentINオペレーターに渡したリストの1つが含まれます。
例6: サブクエリを記述して、manageridがmanagerテーブルの2より大きい従業員テーブルから従業員の詳細をフェッチします。
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGERID > 2);
上記のステートメントでは、最初のサブクエリが実行されます SELECT MANAGERID FROM MANAGER WHERE MANAGERID> 2; 出力は、メインクエリのWHERE句のパラメータとして2パスより大きいmanager idになり、最終的な出力は、employees-manageridにサブクエリの出力であるリストの1つが含まれるemployeesテーブルからのものになります。
出力:
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 | MANAGERID |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ | JAVA | 3 |
4002 | ASHWINI | バガット | 54500 | NOIDA | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | ムンバイ | テスト | 4 |
5001 | ARCHIT | シャルマ | 55500 | デリー | テスト | 4 |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA | C# | 5 |
2003 | ルチカ | JAIN | 50000 | ムンバイ | C# | 5 |
マネージャーIDが2より大きい従業員のテーブルからのレコードは7つだけです。
例7: サブクエリを記述して、マネージャー部門にoracle、java、およびFMWのリストの1つが含まれている従業員の詳細を取得します。
SELECT * FROM EMPLOYEES WHERE MANAGERID IN (SELECT MANAGERID FROM MANAGER WHERE MANAGER_DEPARTMENT IN ('ORACLE', 'FMW', 'JAVA'));
上記のステートメントでは、最初にマネージャーテーブルからマネージャーIDをフェッチします。マネージャー部門には、Oracle、FMW、Javaのリストの1つが含まれています。次に、メインクエリは、サブクエリの出力から従業員の詳細を取得します。
出力:
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY | 部門 | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRACHI | シャルマ | 55500 | チャンディーガル | ORACLE | 1 |
4003 | ルチカ | AGARWAL | 60000 | デリー | ORACLE | 1 |
1003 | NIKHIL | VANI | 50500 | ジャイプール | FMW | 2 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
3002 | ANUJA | WANRE | 50500 | ジャイプール | FMW | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ | JAVA | 3 |
4002 | ASHWINI | バガット | 54500 | NOIDA | JAVA | 3 |
例8: 従業員のID、名、姓、給与、市区町村を従業員のテーブルから取得するクエリを記述します。給与は50000〜65000であるか、市区町村にはプネ、ジャイプール、ムンバイのリストの1つが含まれています。
SELECT EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY FROM EMPLOYEES WHERE SALARY BETWEEN 50000 AND 65000 OR CITY IN ('PUNE', 'MUMBAI', 'JAIPUR');
上記のステートメントでは、従業員のID、名、姓、給与、および市を従業員のテーブルから取得しました。従業員の給与は50000〜65000であるか、市にリストの1つが含まれているのはプネ、ムンバイ、ジャイプールです。
出力:
EMPLOYEEID | FIRST_NAME | LAST_NAME | 給与 | CITY |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE |
1002 | VAIBHAV | シャルマ | 60000 | NOIDA |
1003 | NIKHIL | VANI | 50500 | ジャイプール |
2001 | PRACHI | シャルマ | 55500 | チャンディーガル |
2002 | BHAVESH | JAIN | 65500 | PUNE |
2003 | ルチカ | JAIN | 50000 | ムンバイ |
3001 | PRANOTI | SHENDE | 55500 | PUNE |
3002 | ANUJA | WANRE | 50500 | ジャイプール |
3003 | DEEPAM | ジャウハリ | 58500 | ムンバイ |
4001 | RAJESH | GOUD | 60500 | ムンバイ |
4002 | ASHWINI | バガット | 54500 | NOIDA |
4003 | ルチカ | AGARWAL | 60000 | デリー |
5001 | ARCHIT | シャルマ | 55500 | デリー |