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

関係代数のGroupByおよびHaving句と同等

    Tutorial D で、給与の合計を取得したいことに注意してください。 :

    SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )
    

    集約は関係演算子ではないため、関係代数の一部を形成しないことに注意してください。

    HAVINGについて 、それは歴史的な異常ですか。 SQL-92標準以前は、SELECTを記述できませんでした。 FROMの式 句(別名派生テーブル)、つまり、すべての作業を1つのSELECTで実行する必要がありました 表現。 SQLの厳密な評価順序のため、WHEREの後に集計値は存在しません。 条項が評価されました。つまり、集計値に基づいて制限を適用することはできませんでした。 HAVING この問題に対処するために導入されました。

    しかし、HAVINGでも 、SQLは、派生テーブルが導入されるまで、コッドに関しては関係的に不完全なままでした。 HAVINGでレンダリングされた派生テーブル 冗長ですが、HAVINGを使用しています まだ人気があります(Stackoverflowが通過するものである場合):人々はまだ単一のSELECTを使用することを好むようです 可能な場合は、評価順序に関するSQLの前述の厳密性(投影はSELECTで最後に実行されます) 式)HAVINGと比較すると、派生テーブルの使用法が非常に冗長になります 。



    1. mysql2つの列を使用していない場合

    2. 配列と多くの更新がある大きなテーブルでPostgreSQLが遅くなる

    3. mysqlの正規表現パターンを無効にします

    4. 配列引数を使用して集合を返す関数を複数回呼び出す