[解決済み] なぜSQLのANSI-92標準はANSI-89より採用されないのですか?
疑問点
私が働いてきたすべての会社で、人々はまだ ANSI-89 標準で SQL クエリを書いていることがわかりました。
select a.id, b.id, b.address_1
from person a, address b
where a.id = b.id
は、ANSI-92 標準よりも
select a.id, b.id, b.address_1
from person a
inner join address b
on a.id = b.id
このような極めて単純なクエリでは、読みやすさに大きな違いはありませんが、大規模なクエリでは、結合条件をグループ化してテーブルをリストアップすることで、結合に問題がありそうな箇所をより簡単に確認でき、すべてのフィルタをWHERE句で維持できることがわかります。 もちろん、Oracle の (+) 構文よりも外部結合のほうが直感的であることは言うまでもありません。
私はANSI-92を人々に広めようとしていますが、ANSI-89に対してANSI-92を使用することで、何か具体的なパフォーマンスの利点があるのでしょうか。 しかし、私たちがここで使用している Oracle セットアップでは、EXPLAIN PLAN を使用することができません - 自分のコードを最適化しようとしている人たちを見たくはないでしょう?
どのように解決するのですか?
Peter Gulutzan と Trudy Pelzer による「quot;SQL Performance Tuning"」によると、彼らがテストした 6 つか 8 つの RDBMS ブランドのうち、SQL-89 と SQL-92 形式の結合の最適化やパフォーマンスには違いがありませんでした。 ほとんどの RDBMS エンジンは、クエリを最適化または実行する前に構文を内部表現に変換するため、人間が読みやすい構文に違いはないと考えることができます。
私はまた、SQL-92構文を伝道しようとしています。 SQL-92 が承認されてから 16 年が経過し、そろそろ人々が使い始める頃です。 そして、すべてのブランドの SQL データベースがこれをサポートするようになったので、非標準の
(+)
Oracle の構文や
*=
Microsoft/Sybase の構文。
開発者コミュニティの SQL-89 習慣を断ち切るのがなぜそんなに難しいかというと、本や雑誌の記事、または別のコードベースから古い例を使用してコピー&ペーストでコーディングするプログラマの大きなピラミッドの底辺があるとしか思えませんし、これらの人々は新しい構文を抽象的に学ぶことはありません。 ある人はパターンマッチを行い、ある人は丸暗記で学びます。
しかし、以前よりも頻繁に SQL-92 構文を使用する人を徐々に見かけるようになりました。 私は 1994 年からオンラインで SQL の質問に答えています。
関連
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
解決策:ユーザー root で localhost:3306 にある MySQL に接続できませんでした。
-
MHAの高可用性構成とフェイルオーバー
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] 最初の行への結合方法
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み] SQLのインデックスとは何ですか?
-
[解決済み] SQL/mysql - Select distinct/UNIQUE but return all column?
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MySQLのON句の不明なカラム
-
解決策:java.sql.SQLException: ユーザー ''@'localhost'' (パスワード: YES を使用) のアクセスが拒否されました。
-
[解決済み] 1つのPostgreSQLクエリで複数のWITHステートメントを使用するには?
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] 各グループの上位1行を取得
-
[解決済み] 既存のカラムにIDを追加する
-
[解決済み] SQLクエリは、複数のテーブルからデータを返す
-
[解決済み] SQLサーバーで行を列に効率的に変換する
-
[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?