sql >> データベース >  >> RDS >> Database

SQL SELECT IN

    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 デリー


    1. データの配列を入力パラメータとしてOracleプロシージャに渡す

    2. T-SQLを使用してSQLServerの列を削除する方法

    3. SQLServerでDMLトリガーを作成する

    4. リストPostgresENUMタイプ