ホームページ >データベース >mysql チュートリアル >mysqlのマルチテーブルクエリの詳しい説明
まず、問題の説明をわかりやすくするために、emp (従業員情報) と dept (従業員の部門情報) という 2 つのテーブルを作成します。データは次のとおりです。では、単一のテーブル クエリ メソッドを共有しましたが、実際のアプリケーションでは、クエリするデータが同じテーブル内にあるのではなく、異なるテーブルから取得される可能性があります。複数テーブルのクエリに条件が追加されていない場合、得られる結果はデカルト積と呼ばれます。たとえば、従業員名、従業員の給与、部門名を検索します。
結果は次のようになることがわかります。最初のテーブルから最初のレコードを選択し、それを 2 番目のテーブルのすべてのレコードと結合してから、次のようにします。最初のテーブルの 2 番目のレコードを取得し、2 番目のテーブルのすべてのレコードと結合しますが、この結果には意味がありません。必要なのは、emp.deptno = dept.deptno フィールドを持つレコードです。
自己結合
自己結合とは、同じテーブル内でクエリを結合することを指します
表示従業員の上司 FORD リーダーの名前サブクエリ
サブクエリとは、他の SQL ステートメントに埋め込まれた選択ステートメントを指し、ネストされた Inquire とも呼ばれます。 。
単一行サブクエリ: サブクエリのクエリ結果は 1 行のみです。
SMITH と同じ部門の従業員を表示します
複数行のサブクエリ (in、all、any)
: 複数のレコードを返すサブクエリ同じ職に就いている役人の名前、仕事、給与、部門をクエリします。 10の最高の部門番号としてのジョブですが、No。10の情報は含まれていません
#給与が給与よりも高い名前、給与、部門数を表示します部門番号 30 のすべての従業員部門番号 30 の従業員の給与よりも高い給与を持つ従業員の名前、給与、部門番号を表示します
#
複数列サブクエリ: クエリは、複数列のデータのサブクエリ ステートメントを返します。
SMITH 自身を除く、SMITH と同じ部門および役職を持つ従業員をクエリします
from 句でサブクエリを使用する
#所属部門の平均給与よりも高い従業員情報を表示する
各部門で最も給与が高い人の名前、役職、給与を検索
#各部門の情報(部門名、番号、住所)と従業員数を表示
#ここで使用できる方法は 2 つありますが、データが多い場合、マルチテーブルよりも from サブクエリの効率が高いことが確認されています。クエリ。
テーブル内の重複レコードを削除しますテーブル tt に重複データがあることがわかっています
空のテーブル tmp_tt を作成します。空のテーブルの構造はテーブル tt と同じです; テーブル tmp_tt を tt のように作成します;
tt テーブルを区別して空のテーブルにデータをインポートします; tmp_tt に挿入 select unique * from tt ;
元のテーブル ttdrop table tt を削除します;
tmp_tt の名前を ttalter テーブル tmp_tt に変更します tt の名前を変更します;
クエリをマージします実際のアプリケーションでは、複数の選択をマージするために、結果を実行するには、union および Union all set 演算子
1 を使用できます。union 演算子は、2 つの結果の和集合を取得し、重複を自動的に削除するために使用されます。
2. Union all は Union と似ていますが、重複を自動的に削除しません。例: or に類似
外部キー
外部キーは、マスター テーブルとスレーブ テーブル間の関係を定義します。制約は主にスレーブ テーブルに定義され、マスター テーブルには主キーまたは一意のキーが必要です。外部キーが定義されている場合、外部キー列のデータはメイン テーブルの列に存在するか、NULL である必要があります。 例: メイン テーブル クラス、スレーブ テーブル stu を作成します。
上記の図から、プライマリ クラスがkey を null にすることはできませんが、外部キーは null にすることができ、外部キー内のデータはメイン テーブルに存在しない限り存在できません。
その他の関連する質問については、PHP 中国語 Web サイトを参照してください:mysql ビデオ チュートリアル
以上がmysqlのマルチテーブルクエリの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。