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

SQL Select Distinct

    SQL DISTINCTクエリは、SQLのSELECTステートメントを使用してテーブルから一意の値をフェッチするために使用されます。

    テーブルから一意の値をフェッチしたいが、テーブル内に重複した値が存在する場合に発生する可能性があります。このような場合は、SELECT DISTINCTクエリを使用して、重複する値を削除し、テーブルから一意の値をフェッチする必要があります。

    SELECT DISTINCTステートメントの構文:

    SELECT DISTINCT columnname1, columnname2 FROM table_name;

    次のレコードを持つ既存の従業員のテーブルについて考えてみます。

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50500 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    2003 ルチカ JAIN 50000 ムンバイ テスト 4
    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

    例を使用してSELECTDISTINCTを理解しましょう。

    例1: DISTINCTキーワードを使用せずに、従業員の給与が55000を超える従業員の詳細を取得するクエリを記述します。

    SELECT * FROM EMPLOYEES WHERE SALARY > 55000;

    上記のステートメントでは、重複する値を含め、従業員の給与が55000を超える従業員のテーブルから従業員の詳細を取得しています。

    次のステートメントの出力:

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4001 RAJESH GOUD 60500 ムンバイ テスト 4
    4003 ルチカ AGARWAL 60000 デリー ORACLE 1
    5001 ARCHIT シャルマ 55500 デリー テスト 4

    上記の結果は、重複する値を含む従業員の詳細を取得したことを示しています。

    例2: DISTINCTキーワードを使用して、従業員の給与が55000を超えるemployeesテーブルの従業員の給与を表示するクエリを記述します。

    SELECT DISTINCT (SALARY) FROM EMPLOYEES WHERE SALARY > 55000;

    上記のステートメントでは、給与が55000を超える従業員のテーブルから従業員の給与を取得しており、重複する値を削除しています。個別の給与には、従業員のテーブルからの固有の給与が表示されます。

    次のステートメントの出力:

    SALARY
    65000
    60000
    55500
    65500
    58500
    60500

    最初の例では、給与が55000を超える従業員の詳細を取得しました。クエリ結果に重複する値が含まれています。ただし、2番目の例では、同じクエリを実行して、給与が55000を超える従業員の給与を表示します。このクエリは、DISTINCTキーワードの後に​​salary列を使用したため、重複する値を削除した結果を表示します。

    例3: 明確なキーワードを使用せずに、employeesテーブルのemployeecityとsalaryを表示するクエリを記述します。

    SELECT SALARY, CITY FROM EMPLOYEES;

    上記のステートメントでは、重複する値を含め、従業員のテーブルから従業員の給与と都市名を表示しています。

    次のステートメントの出力:

    SALARY CITY
    65500 PUNE
    60000 NOIDA
    50500 ジャイプール
    55500 チャンディーガル
    65500 PUNE
    50000 ムンバイ
    55500 PUNE
    50500 ジャイプール
    58500 ムンバイ
    60500 ムンバイ
    54500 NOIDA
    60000 デリー
    55500 デリー

    例4: 個別のキーワードを使用して、employeesテーブルの従業員の都市と給与を表示するクエリを記述します。

    従業員から異なる給与、都市を選択;

    上記のステートメントの従業員テーブルから従業員の給与と都市を取得しました。ただし、DISTINCTキーワードを使用して、テーブル全体で繰り返されない一意の値をフェッチしました。

    次のステートメントの出力:

    SALARY CITY
    65500 PUNE
    60000 NOIDA
    50500 ジャイプール
    55500 チャンディーガル
    50000 ムンバイ
    55500 PUNE
    58500 ムンバイ
    60500 ムンバイ
    54500 NOIDA
    60000 デリー
    55500 デリー

    例5: DISTINCTキーワードを使用せずに、部門名が「O」で始まる従業員のテーブルから従業員の姓と部門を表示するクエリを記述します。

    SELECT LAST_NAME, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT LIKE 'O%';

    上記のステートメントでは、重複する値を含め、部門名が「O」で始まる従業員の従業員のテーブルから、従業員の姓、部門を取得しました。

    次のステートメントの出力:

    LAST_NAME 部門
    MISHRA ORACLE
    SHARMA ORACLE
    SHARMA ORACLE
    AGARWAL ORACLE

    部門が「O」で始まる従業員のレコードは4つだけ表示されます。

    例6: DISTINCTキーワードを使用して、部門名が「O」で始まる従業員のテーブルから従業員の名前と部門を表示するクエリを記述します。

    SELECT DISTINCT LAST_NAME, DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT LIKE 'O%';

    例5でも同じクエリを使用しましたが、列名の直前にDISTINCTキーワードを追加しました。これにより、部門名が「O」で始まる従業員のテーブルの一意の値が表示されます。

    次のステートメントの出力:

    LAST_NAME 部門
    MISHRA ORACLE
    SHARMA ORACLE
    AGARWAL ORACLE

    上記のクエリで実行したのと同じクエリで、列の直前にDISTINCTキーワードを追加しました。結果の表示には一意の値があるため、取得する出力は上記の例とは異なります。

    例7: 個別のキーワードを使用せずに、employeesテーブルから従業員の給与をカウントするクエリを記述します。

    SELECT COUNT (SALARY) AS TOTAL SALARY FROM EMPLOYEES;

    上記のステートメントでは、重複する値を含む、従業員のテーブルからの給与の総数をカウントしています。

    次のステートメントの出力:

    TOTAL SALARY
    13

    例8: 個別のキーワードを使用して、employeesテーブルから従業員の給与をカウントするクエリを記述します。

    SELECT COUNT(DISTINCT SALARY) AS TOTAL SALARY FROM EMPLOYEES;

    上記のステートメントでは、重複する値を除いて、従業員のテーブルからの給与の総数をカウントしています。

    次のステートメントの出力:

    TOTAL SALARY
    8


    1. SQLite JSON_QUOTE()

    2. oracleより高速なページングクエリ

    3. Group_concatMySQL関数と同等のOracle

    4. n個のグループ化されたカテゴリを取得し、他のカテゴリを1つに合計します