ブログ記事 Joins versus Subqueries: Which Is Faster?では、結合はサブクエリよりも高速に実行される傾向があることを学びました。そうは言っても、これは普遍的なルールではないため、結合が望ましいと自動的に想定したくない場合があります。その記事で述べたように、クエリに多くの結合を追加する必要がある場合、データベースサーバーはより多くの作業を行う必要があり、データの取得時間が遅くなる可能性があります。この記事では、結合を使用するクエリとサブクエリを含むクエリを比較するために実行できるいくつかの簡単なテストを紹介し、どちらが最適かを選択できるようにします。
2020年に、The NULL Value and its Purpose in Relational Database Systems(リレーショナルデータベースシステムにおけるNULL値とその目的)について学びました。その記事で述べたように、値NULLは、値が存在しないことを意味する特別なマーカーになりました。NULL値は、列が値を持つことができることを示している可能性がありますが、その値がどうあるべきかはまだわかりません。そのような状況では、テーブルフィールドに実際の値を入力するために必要なデータを最終的に収集するまで、それらはプレースホルダーとして機能します。
さらに、全ての主要なデータベースベンダーがデフォルト値としてNULLをサポートしていることを考えると、NULLを使用することだけが理にかなっていますね。どうしても必要な場合を除き、NULLの使用を避けるデータベース設計者がいます。彼らは私たちが知らない何かを知っているのでしょうか?続きを読んで見つけてください!
定期的なデータベースバックアップの実行を信じていないデータベース管理者(DBA)はほとんどいませんが、最善の方法については多くの意見があります。どちらのアプローチを支持する場合でも、データベーススキーマのコピーを保持する理由は十分にあります。データが失われた場合は、スキーマからデータベース構造を復元し、最新のデータバックアップを使用してデータを取り込むことができます。
MySQLなどの一部のデータベースベンダーは、データベース構造を単独でバックアップするための無料のユーティリティ(つまりmysqldump)を提供していますが、それには特定の管理ツールを必要とするベンダーもあります。Navicat ユーザーの場合、外部ツールは必要ありません。データのバックアップはバックアップウィザードを使用して実行できますが、スキーマはデータ転送ツールを使用してコピーできます。このブログでは、その方法を学びます。
先週の記事では、SELECTクエリの外部結合に光を当てました。関連するテーブルから一致した行と一致しない行の両方を返すJOINのタイプです。残念ながら、これはMySQLを含む全てのデータベース(DB)ベンダーでサポートされているわけではありません。しかし、大丈夫です。なぜなら、外部結合は、他の3つのJOINのタイプ、つまり、LEFT JOIN(左結合)、INNER JOIN(内部結合)、およびRIGHT JOIN(右結合)を組み合わせることでエミュレートできるためです。この記事では、JEFT JOINとRIGHT JOINについて詳しく説明し、INNER JOINと組み合わせてOUTER JOINを作成する方法について説明します。
外部結合は、全てのSQL結合タイプの中で最も理解されていないものです。おそらく、外部結合が他の結合タイプよりも必要とされる頻度がやや少ないためです。いずれにせよ、外部結合について本質的に奇妙なことは何もありません。このブログ記事で説明するように、実際の外部結合のいくつかの例は、それらについての誤解や混乱を明確にするのに十分なはずです。
このブログでは、最初にOuter Joinステートメントの構文と目的について説明し、いくつかの実例を次に示します。